Perplexica/src/routes/config.ts

91 lines
2.4 KiB
TypeScript
Raw Normal View History

2024-04-23 16:46:14 +05:30
import express from 'express';
import {
getAvailableChatModelProviders,
getAvailableEmbeddingModelProviders,
} from '../lib/providers';
2024-04-23 16:46:14 +05:30
import {
2024-05-01 19:43:06 +05:30
getGroqApiKey,
2024-04-23 16:46:14 +05:30
getOllamaApiEndpoint,
2024-07-15 21:20:16 +05:30
getAnthropicApiKey,
2024-11-28 20:47:18 +05:30
getGeminiApiKey,
2024-04-23 16:46:14 +05:30
getOpenaiApiKey,
getOllamaChatOptions,
getOllamaEmbeddingsParams,
2024-04-23 16:46:14 +05:30
updateConfig,
} from '../config';
import logger from '../utils/logger';
2024-04-23 16:46:14 +05:30
const router = express.Router();
router.get('/', async (_, res) => {
try {
const config = {};
2024-04-23 16:46:14 +05:30
const [chatModelProviders, embeddingModelProviders] = await Promise.all([
getAvailableChatModelProviders(),
getAvailableEmbeddingModelProviders(),
]);
2024-04-23 16:46:14 +05:30
config['chatModelProviders'] = {};
config['embeddingModelProviders'] = {};
2024-04-23 16:46:14 +05:30
for (const provider in chatModelProviders) {
config['chatModelProviders'][provider] = Object.keys(
chatModelProviders[provider],
).map((model) => {
return {
name: model,
displayName: chatModelProviders[provider][model].displayName,
};
});
}
2024-04-23 16:46:14 +05:30
for (const provider in embeddingModelProviders) {
config['embeddingModelProviders'][provider] = Object.keys(
embeddingModelProviders[provider],
).map((model) => {
return {
name: model,
displayName: embeddingModelProviders[provider][model].displayName,
};
});
}
2024-04-23 16:46:14 +05:30
config['openaiApiKey'] = getOpenaiApiKey();
config['ollamaApiUrl'] = getOllamaApiEndpoint();
config['anthropicApiKey'] = getAnthropicApiKey();
config['groqApiKey'] = getGroqApiKey();
2024-11-28 20:47:18 +05:30
config['geminiApiKey'] = getGeminiApiKey();
config['ollamaChatOptions'] = getOllamaChatOptions();
config['ollamaEmbeddingsParams'] = getOllamaEmbeddingsParams();
2024-12-05 20:19:52 +05:30
res.status(200).json(config);
} catch (err: any) {
res.status(500).json({ message: 'An error has occurred.' });
logger.error(`Error getting config: ${err.message}`);
}
2024-04-23 16:46:14 +05:30
});
router.post('/', async (req, res) => {
const config = req.body;
const updatedConfig = {
API_KEYS: {
2024-05-02 15:04:33 +05:30
OPENAI: config.openaiApiKey,
2024-05-01 19:43:06 +05:30
GROQ: config.groqApiKey,
2024-07-15 21:20:16 +05:30
ANTHROPIC: config.anthropicApiKey,
2024-11-28 20:47:18 +05:30
GEMINI: config.geminiApiKey,
2024-04-23 16:46:14 +05:30
},
API_ENDPOINTS: {
OLLAMA: config.ollamaApiUrl,
},
OLLAMA_OPTIONS: config.ollamaOptions,
2024-04-23 16:46:14 +05:30
};
updateConfig(updatedConfig);
res.status(200).json({ message: 'Config updated' });
});
export default router;