Team Ai
Datasetpublic

Brunobkr/llama.cpp_AlgMor24_github

ΩFFFΣLLIa • llama.cpp • AlgMor24 ██████╗ ███████╗███████╗███████╗██╗ ██╗ ██╗ █████╗ ██╔═══██╗██╔════╝██╔════╝██╔════╝██║ ██║ ██║██╔══██╗ ██║ ██║█████╗ █████╗ █████╗ ██║ ██║ ██║███████║ ██║ ██║██╔══╝ ██╔══╝ ██╔══╝ ██║ ██║ ██║██╔══██║ ╚██████╔╝██║ ██║ ███████╗███████╗███████╗██║██║ ██║ ╚═════╝ ╚═╝ ╚═╝ ╚══════╝╚══════╝╚══════╝╚═╝╚═╝ ╚═╝ High-Performance LLM / VLM Inference & Autonomous Agentic Ecosystem… See the full description on the dataset page: https://huggingface.co/datasets/Brunobkr/llama.cpp_AlgMor24_github.

sourceHugging Faceupdated 2mo agoView on Hugging Face
0likes3.1kdownloads
index.js749 linesDownload Raw Back to router
1/*!2 * router3 * Copyright(c) 2013 Roman Shtylman4 * Copyright(c) 2014-2022 Douglas Christopher Wilson5 * MIT Licensed6 */7 8'use strict'9 10/**11 * Module dependencies.12 * @private13 */14 15const isPromise = require('is-promise')16const Layer = require('./lib/layer')17const { METHODS } = require('node:http')18const parseUrl = require('parseurl')19const Route = require('./lib/route')20const debug = require('debug')('router')21const deprecate = require('depd')('router')22 23/**24 * Module variables.25 * @private26 */27 28const slice = Array.prototype.slice29const flatten = Array.prototype.flat30const methods = METHODS.map((method) => method.toLowerCase())31 32/**33 * Expose `Router`.34 */35 36module.exports = Router37 38/**39 * Expose `Route`.40 */41 42module.exports.Route = Route43 44/**45 * Initialize a new `Router` with the given `options`.46 *47 * @param {object} [options]48 * @return {Router} which is a callable function49 * @public50 */51 52function Router (options) {53  if (!(this instanceof Router)) {54    return new Router(options)55  }56 57  const opts = options || {}58 59  function router (req, res, next) {60    router.handle(req, res, next)61  }62 63  // inherit from the correct prototype64  Object.setPrototypeOf(router, this)65 66  router.caseSensitive = opts.caseSensitive67  router.mergeParams = opts.mergeParams68  router.params = {}69  router.strict = opts.strict70  router.stack = []71 72  return router73}74 75/**76 * Router prototype inherits from a Function.77 */78 79/* istanbul ignore next */80Router.prototype = function () {}81 82/**83 * Map the given param placeholder `name`(s) to the given callback.84 *85 * Parameter mapping is used to provide pre-conditions to routes86 * which use normalized placeholders. For example a _:user_id_ parameter87 * could automatically load a user's information from the database without88 * any additional code.89 *90 * The callback uses the same signature as middleware, the only difference91 * being that the value of the placeholder is passed, in this case the _id_92 * of the user. Once the `next()` function is invoked, just like middleware93 * it will continue on to execute the route, or subsequent parameter functions.94 *95 * Just like in middleware, you must either respond to the request or call next96 * to avoid stalling the request.97 *98 *  router.param('user_id', function(req, res, next, id){99 *    User.find(id, function(err, user){100 *      if (err) {101 *        return next(err)102 *      } else if (!user) {103 *        return next(new Error('failed to load user'))104 *      }105 *      req.user = user106 *      next()107 *    })108 *  })109 *110 * @param {string} name111 * @param {function} fn112 * @public113 */114 115Router.prototype.param = function param (name, fn) {116  if (!name) {117    throw new TypeError('argument name is required')118  }119 120  if (typeof name !== 'string') {121    throw new TypeError('argument name must be a string')122  }123 124  if (!fn) {125    throw new TypeError('argument fn is required')126  }127 128  if (typeof fn !== 'function') {129    throw new TypeError('argument fn must be a function')130  }131 132  let params = this.params[name]133 134  if (!params) {135    params = this.params[name] = []136  }137 138  params.push(fn)139 140  return this141}142 143/**144 * Dispatch a req, res into the router.145 *146 * @private147 */148 149Router.prototype.handle = function handle (req, res, callback) {150  if (!callback) {151    throw new TypeError('argument callback is required')152  }153 154  debug('dispatching %s %s', req.method, req.url)155 156  let idx = 0157  let methods158  const protohost = getProtohost(req.url) || ''159  let removed = ''160  const self = this161  let slashAdded = false162  let sync = 0163  const paramcalled = {}164 165  // middleware and routes166  const stack = this.stack167 168  // manage inter-router variables169  const parentParams = req.params170  const parentUrl = req.baseUrl || ''171  let done = restore(callback, req, 'baseUrl', 'next', 'params')172 173  // setup next layer174  req.next = next175 176  // for options requests, respond with a default if nothing else responds177  if (req.method === 'OPTIONS') {178    methods = []179    done = wrap(done, generateOptionsResponder(res, methods))180  }181 182  // setup basic req values183  req.baseUrl = parentUrl184  req.originalUrl = req.originalUrl || req.url185 186  next()187 188  function next (err) {189    let layerError = err === 'route'190      ? null191      : err192 193    // remove added slash194    if (slashAdded) {195      req.url = req.url.slice(1)196      slashAdded = false197    }198 199    // restore altered req.url200    if (removed.length !== 0) {201      req.baseUrl = parentUrl202      req.url = protohost + removed + req.url.slice(protohost.length)203      removed = ''204    }205 206    // signal to exit router207    if (layerError === 'router') {208      setImmediate(done, null)209      return210    }211 212    // no more matching layers213    if (idx >= stack.length) {214      setImmediate(done, layerError)215      return216    }217 218    // max sync stack219    if (++sync > 100) {220      return setImmediate(next, err)221    }222 223    // get pathname of request224    const path = getPathname(req)225 226    if (path == null) {227      return done(layerError)228    }229 230    // find next matching layer231    let layer232    let match233    let route234 235    while (match !== true && idx < stack.length) {236      layer = stack[idx++]237      match = matchLayer(layer, path)238      route = layer.route239 240      if (typeof match !== 'boolean') {241        // hold on to layerError242        layerError = layerError || match243      }244 245      if (match !== true) {246        continue247      }248 249      if (!route) {250        // process non-route handlers normally251        continue252      }253 254      if (layerError) {255        // routes do not match with a pending error256        match = false257        continue258      }259 260      const method = req.method261      const hasMethod = route._handlesMethod(method)262 263      // build up automatic options response264      if (!hasMethod && method === 'OPTIONS' && methods) {265        methods.push.apply(methods, route._methods())266      }267 268      // don't even bother matching route269      if (!hasMethod && method !== 'HEAD') {270        match = false271      }272    }273 274    // no match275    if (match !== true) {276      return done(layerError)277    }278 279    // store route for dispatch on change280    if (route) {281      req.route = route282    }283 284    // Capture one-time layer values285    req.params = self.mergeParams286      ? mergeParams(layer.params, parentParams)287      : layer.params288    const layerPath = layer.path289 290    // this should be done for the layer291    processParams(self.params, layer, paramcalled, req, res, function (err) {292      if (err) {293        next(layerError || err)294      } else if (route) {295        layer.handleRequest(req, res, next)296      } else {297        trimPrefix(layer, layerError, layerPath, path)298      }299 300      sync = 0301    })302  }303 304  function trimPrefix (layer, layerError, layerPath, path) {305    if (layerPath.length !== 0) {306      // Validate path is a prefix match307      if (layerPath !== path.substring(0, layerPath.length)) {308        next(layerError)309        return310      }311 312      // Validate path breaks on a path separator313      const c = path[layerPath.length]314      if (c && c !== '/') {315        next(layerError)316        return317      }318 319      // Trim off the part of the url that matches the route320      // middleware (.use stuff) needs to have the path stripped321      debug('trim prefix (%s) from url %s', layerPath, req.url)322      removed = layerPath323      req.url = protohost + req.url.slice(protohost.length + removed.length)324 325      // Ensure leading slash326      if (!protohost && req.url[0] !== '/') {327        req.url = '/' + req.url328        slashAdded = true329      }330 331      // Setup base URL (no trailing slash)332      req.baseUrl = parentUrl + (removed[removed.length - 1] === '/'333        ? removed.substring(0, removed.length - 1)334        : removed)335    }336 337    debug('%s %s : %s', layer.name, layerPath, req.originalUrl)338 339    if (layerError) {340      layer.handleError(layerError, req, res, next)341    } else {342      layer.handleRequest(req, res, next)343    }344  }345}346 347/**348 * Use the given middleware function, with optional path, defaulting to "/".349 *350 * Use (like `.all`) will run for any http METHOD, but it will not add351 * handlers for those methods so OPTIONS requests will not consider `.use`352 * functions even if they could respond.353 *354 * The other difference is that _route_ path is stripped and not visible355 * to the handler function. The main effect of this feature is that mounted356 * handlers can operate without any code changes regardless of the "prefix"357 * pathname.358 *359 * @public360 */361 362Router.prototype.use = function use (handler) {363  let offset = 0364  let path = '/'365 366  // default path to '/'367  // disambiguate router.use([handler])368  if (typeof handler !== 'function') {369    let arg = handler370 371    while (Array.isArray(arg) && arg.length !== 0) {372      arg = arg[0]373    }374 375    // first arg is the path376    if (typeof arg !== 'function') {377      offset = 1378      path = handler379    }380  }381 382  const callbacks = flatten.call(slice.call(arguments, offset), Infinity)383 384  if (callbacks.length === 0) {385    throw new TypeError('argument handler is required')386  }387 388  for (let i = 0; i < callbacks.length; i++) {389    const fn = callbacks[i]390 391    if (typeof fn !== 'function') {392      throw new TypeError('argument handler must be a function')393    }394 395    // add the middleware396    debug('use %o %s', path, fn.name || '<anonymous>')397 398    const layer = new Layer(path, {399      sensitive: this.caseSensitive,400      strict: false,401      end: false402    }, fn)403 404    layer.route = undefined405 406    this.stack.push(layer)407  }408 409  return this410}411 412/**413 * Create a new Route for the given path.414 *415 * Each route contains a separate middleware stack and VERB handlers.416 *417 * See the Route api documentation for details on adding handlers418 * and middleware to routes.419 *420 * @param {string} path421 * @return {Route}422 * @public423 */424 425Router.prototype.route = function route (path) {426  const route = new Route(path)427 428  const layer = new Layer(path, {429    sensitive: this.caseSensitive,430    strict: this.strict,431    end: true432  }, handle)433 434  function handle (req, res, next) {435    route.dispatch(req, res, next)436  }437 438  layer.route = route439 440  this.stack.push(layer)441  return route442}443 444// create Router#VERB functions445methods.concat('all').forEach(function (method) {446  Router.prototype[method] = function (path) {447    const route = this.route(path)448    route[method].apply(route, slice.call(arguments, 1))449    return this450  }451})452 453/**454 * Generate a callback that will make an OPTIONS response.455 *456 * @param {OutgoingMessage} res457 * @param {array} methods458 * @private459 */460 461function generateOptionsResponder (res, methods) {462  return function onDone (fn, err) {463    if (err || methods.length === 0) {464      return fn(err)465    }466 467    trySendOptionsResponse(res, methods, fn)468  }469}470 471/**472 * Get pathname of request.473 *474 * @param {IncomingMessage} req475 * @private476 */477 478function getPathname (req) {479  try {480    return parseUrl(req).pathname481  } catch (err) {482    return undefined483  }484}485 486/**487 * Get get protocol + host for a URL.488 *489 * @param {string} url490 * @private491 */492 493function getProtohost (url) {494  if (typeof url !== 'string' || url.length === 0 || url[0] === '/') {495    return undefined496  }497 498  const searchIndex = url.indexOf('?')499  const pathLength = searchIndex !== -1500    ? searchIndex501    : url.length502  const fqdnIndex = url.substring(0, pathLength).indexOf('://')503 504  return fqdnIndex !== -1505    ? url.substring(0, url.indexOf('/', 3 + fqdnIndex))506    : undefined507}508 509/**510 * Match path to a layer.511 *512 * @param {Layer} layer513 * @param {string} path514 * @private515 */516 517function matchLayer (layer, path) {518  try {519    return layer.match(path)520  } catch (err) {521    return err522  }523}524 525/**526 * Merge params with parent params527 *528 * @private529 */530 531function mergeParams (params, parent) {532  if (typeof parent !== 'object' || !parent) {533    return params534  }535 536  // make copy of parent for base537  const obj = Object.assign({}, parent)538 539  // simple non-numeric merging540  if (!(0 in params) || !(0 in parent)) {541    return Object.assign(obj, params)542  }543 544  let i = 0545  let o = 0546 547  // determine numeric gap in params548  while (i in params) {549    i++550  }551 552  // determine numeric gap in parent553  while (o in parent) {554    o++555  }556 557  // offset numeric indices in params before merge558  for (i--; i >= 0; i--) {559    params[i + o] = params[i]560 561    // create holes for the merge when necessary562    if (i < o) {563      delete params[i]564    }565  }566 567  return Object.assign(obj, params)568}569 570/**571 * Process any parameters for the layer.572 *573 * @private574 */575 576function processParams (params, layer, called, req, res, done) {577  // captured parameters from the layer, keys and values578  const keys = layer.keys579 580  // fast track581  if (!keys || keys.length === 0) {582    return done()583  }584 585  let i = 0586  let paramIndex = 0587  let key588  let paramVal589  let paramCallbacks590  let paramCalled591 592  // process params in order593  // param callbacks can be async594  function param (err) {595    if (err) {596      return done(err)597    }598 599    if (i >= keys.length) {600      return done()601    }602 603    paramIndex = 0604    key = keys[i++]605    paramVal = req.params[key]606    paramCallbacks = params[key]607    paramCalled = called[key]608 609    if (paramVal === undefined || !paramCallbacks) {610      return param()611    }612 613    // param previously called with same value or error occurred614    if (paramCalled && (paramCalled.match === paramVal ||615      (paramCalled.error && paramCalled.error !== 'route'))) {616      // restore value617      req.params[key] = paramCalled.value618 619      // next param620      return param(paramCalled.error)621    }622 623    called[key] = paramCalled = {624      error: null,625      match: paramVal,626      value: paramVal627    }628 629    paramCallback()630  }631 632  // single param callbacks633  function paramCallback (err) {634    const fn = paramCallbacks[paramIndex++]635 636    // store updated value637    paramCalled.value = req.params[key]638 639    if (err) {640      // store error641      paramCalled.error = err642      param(err)643      return644    }645 646    if (!fn) return param()647 648    try {649      const ret = fn(req, res, paramCallback, paramVal, key)650      if (isPromise(ret)) {651        if (!(ret instanceof Promise)) {652          deprecate('parameters that are Promise-like are deprecated, use a native Promise instead')653        }654 655        ret.then(null, function (error) {656          paramCallback(error || new Error('Rejected promise'))657        })658      }659    } catch (e) {660      paramCallback(e)661    }662  }663 664  param()665}666 667/**668 * Restore obj props after function669 *670 * @private671 */672 673function restore (fn, obj) {674  const props = new Array(arguments.length - 2)675  const vals = new Array(arguments.length - 2)676 677  for (let i = 0; i < props.length; i++) {678    props[i] = arguments[i + 2]679    vals[i] = obj[props[i]]680  }681 682  return function () {683    // restore vals684    for (let i = 0; i < props.length; i++) {685      obj[props[i]] = vals[i]686    }687 688    return fn.apply(this, arguments)689  }690}691 692/**693 * Send an OPTIONS response.694 *695 * @private696 */697 698function sendOptionsResponse (res, methods) {699  const options = Object.create(null)700 701  // build unique method map702  for (let i = 0; i < methods.length; i++) {703    options[methods[i]] = true704  }705 706  // construct the allow list707  const allow = Object.keys(options).sort().join(', ')708 709  // send response710  res.setHeader('Allow', allow)711  res.setHeader('Content-Length', Buffer.byteLength(allow))712  res.setHeader('Content-Type', 'text/plain')713  res.setHeader('X-Content-Type-Options', 'nosniff')714  res.end(allow)715}716 717/**718 * Try to send an OPTIONS response.719 *720 * @private721 */722 723function trySendOptionsResponse (res, methods, next) {724  try {725    sendOptionsResponse(res, methods)726  } catch (err) {727    next(err)728  }729}730 731/**732 * Wrap a function733 *734 * @private735 */736 737function wrap (old, fn) {738  return function proxy () {739    const args = new Array(arguments.length + 1)740 741    args[0] = old742    for (let i = 0, len = arguments.length; i < len; i++) {743      args[i + 1] = arguments[i]744    }745 746    fn.apply(this, args)747  }748}749 
Brunobkr/llama.cpp_AlgMor24_github · Team Ai