Spaces:
Paused
Paused
| const { TEXTGEN_TYPES, OPENROUTER_HEADERS, FEATHERLESS_HEADERS } = require('./constants'); | |
| const { SECRET_KEYS, readSecret } = require('./endpoints/secrets'); | |
| const { getConfigValue } = require('./util'); | |
| /** | |
| * Gets the headers for the Mancer API. | |
| * @param {import('./users').UserDirectoryList} directories User directories | |
| * @returns {object} Headers for the request | |
| */ | |
| function getMancerHeaders(directories) { | |
| const apiKey = readSecret(directories, SECRET_KEYS.MANCER); | |
| return apiKey ? ({ | |
| 'X-API-KEY': apiKey, | |
| 'Authorization': `Bearer ${apiKey}`, | |
| }) : {}; | |
| } | |
| /** | |
| * Gets the headers for the TogetherAI API. | |
| * @param {import('./users').UserDirectoryList} directories User directories | |
| * @returns {object} Headers for the request | |
| */ | |
| function getTogetherAIHeaders(directories) { | |
| const apiKey = readSecret(directories, SECRET_KEYS.TOGETHERAI); | |
| return apiKey ? ({ | |
| 'Authorization': `Bearer ${apiKey}`, | |
| }) : {}; | |
| } | |
| /** | |
| * Gets the headers for the InfermaticAI API. | |
| * @param {import('./users').UserDirectoryList} directories User directories | |
| * @returns {object} Headers for the request | |
| */ | |
| function getInfermaticAIHeaders(directories) { | |
| const apiKey = readSecret(directories, SECRET_KEYS.INFERMATICAI); | |
| return apiKey ? ({ | |
| 'Authorization': `Bearer ${apiKey}`, | |
| }) : {}; | |
| } | |
| /** | |
| * Gets the headers for the DreamGen API. | |
| * @param {import('./users').UserDirectoryList} directories User directories | |
| * @returns {object} Headers for the request | |
| */ | |
| function getDreamGenHeaders(directories) { | |
| const apiKey = readSecret(directories, SECRET_KEYS.DREAMGEN); | |
| return apiKey ? ({ | |
| 'Authorization': `Bearer ${apiKey}`, | |
| }) : {}; | |
| } | |
| /** | |
| * Gets the headers for the OpenRouter API. | |
| * @param {import('./users').UserDirectoryList} directories User directories | |
| * @returns {object} Headers for the request | |
| */ | |
| function getOpenRouterHeaders(directories) { | |
| const apiKey = readSecret(directories, SECRET_KEYS.OPENROUTER); | |
| const baseHeaders = { ...OPENROUTER_HEADERS }; | |
| return apiKey ? Object.assign(baseHeaders, { 'Authorization': `Bearer ${apiKey}` }) : baseHeaders; | |
| } | |
| /** | |
| * Gets the headers for the vLLM API. | |
| * @param {import('./users').UserDirectoryList} directories User directories | |
| * @returns {object} Headers for the request | |
| */ | |
| function getVllmHeaders(directories) { | |
| const apiKey = readSecret(directories, SECRET_KEYS.VLLM); | |
| return apiKey ? ({ | |
| 'Authorization': `Bearer ${apiKey}`, | |
| }) : {}; | |
| } | |
| /** | |
| * Gets the headers for the Aphrodite API. | |
| * @param {import('./users').UserDirectoryList} directories User directories | |
| * @returns {object} Headers for the request | |
| */ | |
| function getAphroditeHeaders(directories) { | |
| const apiKey = readSecret(directories, SECRET_KEYS.APHRODITE); | |
| return apiKey ? ({ | |
| 'X-API-KEY': apiKey, | |
| 'Authorization': `Bearer ${apiKey}`, | |
| }) : {}; | |
| } | |
| /** | |
| * Gets the headers for the Tabby API. | |
| * @param {import('./users').UserDirectoryList} directories User directories | |
| * @returns {object} Headers for the request | |
| */ | |
| function getTabbyHeaders(directories) { | |
| const apiKey = readSecret(directories, SECRET_KEYS.TABBY); | |
| return apiKey ? ({ | |
| 'x-api-key': apiKey, | |
| 'Authorization': `Bearer ${apiKey}`, | |
| }) : {}; | |
| } | |
| /** | |
| * Gets the headers for the LlamaCPP API. | |
| * @param {import('./users').UserDirectoryList} directories User directories | |
| * @returns {object} Headers for the request | |
| */ | |
| function getLlamaCppHeaders(directories) { | |
| const apiKey = readSecret(directories, SECRET_KEYS.LLAMACPP); | |
| return apiKey ? ({ | |
| 'Authorization': `Bearer ${apiKey}`, | |
| }) : {}; | |
| } | |
| /** | |
| * Gets the headers for the Ooba API. | |
| * @param {import('./users').UserDirectoryList} directories | |
| * @returns {object} Headers for the request | |
| */ | |
| function getOobaHeaders(directories) { | |
| const apiKey = readSecret(directories, SECRET_KEYS.OOBA); | |
| return apiKey ? ({ | |
| 'Authorization': `Bearer ${apiKey}`, | |
| }) : {}; | |
| } | |
| /** | |
| * Gets the headers for the KoboldCpp API. | |
| * @param {import('./users').UserDirectoryList} directories | |
| * @returns {object} Headers for the request | |
| */ | |
| function getKoboldCppHeaders(directories) { | |
| const apiKey = readSecret(directories, SECRET_KEYS.KOBOLDCPP); | |
| return apiKey ? ({ | |
| 'Authorization': `Bearer ${apiKey}`, | |
| }) : {}; | |
| } | |
| /** | |
| * Gets the headers for the Featherless API. | |
| * @param {import('./users').UserDirectoryList} directories | |
| * @returns {object} Headers for the request | |
| */ | |
| function getFeatherlessHeaders(directories) { | |
| const apiKey = readSecret(directories, SECRET_KEYS.FEATHERLESS); | |
| const baseHeaders = { ...FEATHERLESS_HEADERS }; | |
| return apiKey ? Object.assign(baseHeaders, { 'Authorization': `Bearer ${apiKey}` }) : baseHeaders; | |
| } | |
| /** | |
| * Gets the headers for the HuggingFace API. | |
| * @param {import('./users').UserDirectoryList} directories | |
| * @returns {object} Headers for the request | |
| */ | |
| function getHuggingFaceHeaders(directories) { | |
| const apiKey = readSecret(directories, SECRET_KEYS.HUGGINGFACE); | |
| return apiKey ? ({ | |
| 'Authorization': `Bearer ${apiKey}`, | |
| }) : {}; | |
| } | |
| function getOverrideHeaders(urlHost) { | |
| const requestOverrides = getConfigValue('requestOverrides', []); | |
| const overrideHeaders = requestOverrides?.find((e) => e.hosts?.includes(urlHost))?.headers; | |
| if (overrideHeaders && urlHost) { | |
| return overrideHeaders; | |
| } else { | |
| return {}; | |
| } | |
| } | |
| /** | |
| * Sets additional headers for the request. | |
| * @param {import('express').Request} request Original request body | |
| * @param {object} args New request arguments | |
| * @param {string|null} server API server for new request | |
| */ | |
| function setAdditionalHeaders(request, args, server) { | |
| setAdditionalHeadersByType(args.headers, request.body.api_type, server, request.user.directories); | |
| } | |
| /** | |
| * | |
| * @param {object} requestHeaders Request headers | |
| * @param {string} type API type | |
| * @param {string|null} server API server for new request | |
| * @param {import('./users').UserDirectoryList} directories User directories | |
| */ | |
| function setAdditionalHeadersByType(requestHeaders, type, server, directories) { | |
| const headerGetters = { | |
| [TEXTGEN_TYPES.MANCER]: getMancerHeaders, | |
| [TEXTGEN_TYPES.VLLM]: getVllmHeaders, | |
| [TEXTGEN_TYPES.APHRODITE]: getAphroditeHeaders, | |
| [TEXTGEN_TYPES.TABBY]: getTabbyHeaders, | |
| [TEXTGEN_TYPES.TOGETHERAI]: getTogetherAIHeaders, | |
| [TEXTGEN_TYPES.OOBA]: getOobaHeaders, | |
| [TEXTGEN_TYPES.INFERMATICAI]: getInfermaticAIHeaders, | |
| [TEXTGEN_TYPES.DREAMGEN]: getDreamGenHeaders, | |
| [TEXTGEN_TYPES.OPENROUTER]: getOpenRouterHeaders, | |
| [TEXTGEN_TYPES.KOBOLDCPP]: getKoboldCppHeaders, | |
| [TEXTGEN_TYPES.LLAMACPP]: getLlamaCppHeaders, | |
| [TEXTGEN_TYPES.FEATHERLESS]: getFeatherlessHeaders, | |
| [TEXTGEN_TYPES.HUGGINGFACE]: getHuggingFaceHeaders, | |
| }; | |
| const getHeaders = headerGetters[type]; | |
| const headers = getHeaders ? getHeaders(directories) : {}; | |
| if (typeof server === 'string' && server.length > 0) { | |
| try { | |
| const url = new URL(server); | |
| const overrideHeaders = getOverrideHeaders(url.host); | |
| if (overrideHeaders && Object.keys(overrideHeaders).length > 0) { | |
| Object.assign(headers, overrideHeaders); | |
| } | |
| } catch { | |
| // Do nothing | |
| } | |
| } | |
| Object.assign(requestHeaders, headers); | |
| } | |
| module.exports = { | |
| getOverrideHeaders, | |
| setAdditionalHeaders, | |
| setAdditionalHeadersByType, | |
| }; | |