refactor: Speed up Config fetching and Setup Config Groundwork 👷🚧 (#1297)

* refactor: move endpoint services to own directory

* refactor: make endpointconfig handling more concise, separate logic, and cache result for subsequent serving

* refactor: ModelController gets same treatment as EndpointController, draft OverrideController

* wip: flesh out override controller more to return real value

* refactor: client/api changes in anticipation of override
This commit is contained in:
Danny Avila 2023-12-06 19:36:57 -05:00 committed by GitHub
parent 9b2359fc27
commit 0bae503a0a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
27 changed files with 405 additions and 138 deletions

View file

@ -1,95 +1,17 @@
const { EModelEndpoint } = require('~/server/routes/endpoints/schemas');
const { availableTools } = require('~/app/clients/tools');
const { addOpenAPISpecs } = require('~/app/clients/tools/util/addOpenAPISpecs');
const {
openAIApiKey,
azureOpenAIApiKey,
useAzurePlugins,
userProvidedOpenAI,
palmKey,
openAI,
// assistant,
azureOpenAI,
bingAI,
chatGPTBrowser,
anthropic,
} = require('~/server/services/EndpointService').config;
const { getLogStores } = require('~/cache');
const { CacheKeys } = require('~/common/enums');
const { loadDefaultEndpointsConfig } = require('~/server/services/Config');
let i = 0;
async function endpointController(req, res) {
let key, palmUser;
try {
key = require('~/data/auth.json');
} catch (e) {
if (i === 0) {
i++;
}
const cache = getLogStores(CacheKeys.CONFIG);
const config = await cache.get(CacheKeys.DEFAULT_CONFIG);
if (config) {
res.send(config);
return;
}
if (palmKey === 'user_provided') {
palmUser = true;
if (i <= 1) {
i++;
}
}
const tools = await addOpenAPISpecs(availableTools);
function transformToolsToMap(tools) {
return tools.reduce((map, obj) => {
map[obj.pluginKey] = obj.name;
return map;
}, {});
}
const plugins = transformToolsToMap(tools);
const google = key || palmUser ? { userProvide: palmUser } : false;
const gptPlugins =
openAIApiKey || azureOpenAIApiKey
? {
plugins,
availableAgents: ['classic', 'functions'],
userProvide: userProvidedOpenAI,
azure: useAzurePlugins,
}
: false;
let enabledEndpoints = [
EModelEndpoint.openAI,
EModelEndpoint.azureOpenAI,
EModelEndpoint.google,
EModelEndpoint.bingAI,
EModelEndpoint.chatGPTBrowser,
EModelEndpoint.gptPlugins,
EModelEndpoint.anthropic,
];
const endpointsEnv = process.env.ENDPOINTS || '';
if (endpointsEnv) {
enabledEndpoints = endpointsEnv
.split(',')
.filter((endpoint) => endpoint?.trim())
.map((endpoint) => endpoint.trim());
}
const endpointConfig = {
[EModelEndpoint.openAI]: openAI,
[EModelEndpoint.azureOpenAI]: azureOpenAI,
[EModelEndpoint.google]: google,
[EModelEndpoint.bingAI]: bingAI,
[EModelEndpoint.chatGPTBrowser]: chatGPTBrowser,
[EModelEndpoint.gptPlugins]: gptPlugins,
[EModelEndpoint.anthropic]: anthropic,
};
const orderedAndFilteredEndpoints = enabledEndpoints.reduce((config, key, index) => {
if (endpointConfig[key]) {
config[key] = { ...(endpointConfig[key] ?? {}), order: index };
}
return config;
}, {});
res.send(JSON.stringify(orderedAndFilteredEndpoints));
const defaultConfig = await loadDefaultEndpointsConfig();
await cache.set(CacheKeys.DEFAULT_CONFIG, defaultConfig);
res.send(JSON.stringify(defaultConfig));
}
module.exports = endpointController;