mirror of
https://github.com/danny-avila/LibreChat.git
synced 2025-12-17 17:00:15 +01:00
50 lines
1.5 KiB
TypeScript
50 lines
1.5 KiB
TypeScript
import fs from 'fs';
|
|
import path from 'path';
|
|
import { storeEmbeddings, loadEmbeddings } from './embeddings';
|
|
import { translateKeyPhrase } from './anthropic';
|
|
|
|
const missingKeyMap = {};
|
|
const vectorStoreMap = {};
|
|
|
|
export async function processLanguageModule(moduleName: string, modulePath: string) {
|
|
const filename = path.basename(moduleName, path.extname(moduleName));
|
|
const promptFilePath = path.join(path.dirname(modulePath), '../prompts', `${filename}.md`);
|
|
console.log(promptFilePath);
|
|
|
|
if (!fs.existsSync(promptFilePath)) {
|
|
console.error(`Prompt file not found for module: ${moduleName}`);
|
|
return undefined;
|
|
}
|
|
|
|
const prompt = fs.readFileSync(promptFilePath, 'utf-8');
|
|
await storeEmbeddings(modulePath);
|
|
vectorStoreMap[moduleName] = await loadEmbeddings(modulePath);
|
|
const baseKeys = Object.keys((await import(modulePath)).default);
|
|
console.log(`Keys in module: ${moduleName}:`, baseKeys.length);
|
|
missingKeyMap[moduleName] = 0;
|
|
return prompt;
|
|
}
|
|
|
|
export async function processMissingKey({
|
|
key,
|
|
baselineTranslation,
|
|
moduleName,
|
|
translationPrompt,
|
|
}: {
|
|
key: string;
|
|
baselineTranslation: string;
|
|
moduleName: string;
|
|
translationPrompt: string;
|
|
}) {
|
|
missingKeyMap[moduleName]++;
|
|
const vectorStore = vectorStoreMap[moduleName];
|
|
const context = await vectorStore.similaritySearch(key, 5);
|
|
const translation = await translateKeyPhrase({
|
|
key,
|
|
baselineTranslation,
|
|
translationPrompt,
|
|
context,
|
|
});
|
|
console.log(`"${key}": "${translation}",\n`);
|
|
return translation;
|
|
}
|