LibreChat/config/translations/process.ts

51 lines
1.5 KiB
TypeScript
Raw Normal View History

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;
}