Add local MarianMT translation service
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
const axios = require("axios");
|
||||
|
||||
const DEFAULT_MODEL = process.env.OPENAI_TRANSLATION_MODEL || process.env.OPENAI_MODEL || "gpt-4o-mini";
|
||||
const TRANSLATION_PROVIDER = (process.env.TRANSLATION_PROVIDER || "openai").trim().toLowerCase();
|
||||
const MARIAN_TRANSLATION_URL = (process.env.MARIAN_TRANSLATION_URL || "http://127.0.0.1:8000").replace(/\/$/, "");
|
||||
|
||||
const normalizeLanguageCode = (rawLanguage) => {
|
||||
if (!rawLanguage || typeof rawLanguage !== "string") return "en";
|
||||
@@ -40,6 +42,31 @@ const translateText = async ({ text, sourceLang, targetLang }) => {
|
||||
};
|
||||
}
|
||||
|
||||
if (TRANSLATION_PROVIDER === "marian") {
|
||||
try {
|
||||
const response = await axios.post(
|
||||
`${MARIAN_TRANSLATION_URL}/translate`,
|
||||
{ text, sourceLang: sourceLang || "auto", targetLang: normalizedTarget },
|
||||
{ timeout: 30000, headers: { "Content-Type": "application/json" } }
|
||||
);
|
||||
const translatedText = response?.data?.translatedText?.trim();
|
||||
if (!translatedText) return null;
|
||||
return {
|
||||
translatedText,
|
||||
provider: response.data.provider || "marianmt",
|
||||
model: response.data.model || "unknown",
|
||||
};
|
||||
} catch (error) {
|
||||
console.error("Error translating with MarianMT", error?.response?.data || error?.message || error);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
if (TRANSLATION_PROVIDER !== "openai") {
|
||||
console.error(`Unsupported translation provider: ${TRANSLATION_PROVIDER}`);
|
||||
return null;
|
||||
}
|
||||
|
||||
const apiKey = process.env.OPENAI_API_KEY;
|
||||
if (!apiKey) return null;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user