json-translated-ai
Version:
AI-powered translation tool supporting OpenAI GPT, Anthropic Claude, and Google Gemini models
383 lines (368 loc) • 10.3 kB
JavaScript
// AI model configuration
export const SUPPORTED_MODELS = {
// OpenAI Models
'openai/gpt-4o': {
provider: 'openai',
name: 'GPT-4o',
description: 'Fast and efficient GPT-4 model',
cost: 'medium',
recommended: false,
},
'openai/gpt-4o-mini': {
provider: 'openai',
name: 'GPT-4o Mini',
description: 'Cost-effective GPT-4 model',
cost: 'low',
recommended: true,
},
'openai/gpt-4.1': {
provider: 'openai',
name: 'GPT-4.1',
description: 'Latest GPT-4 model with improved performance',
cost: 'medium',
recommended: true,
},
// Anthropic Models
'anthropic/claude-3.5-sonnet': {
provider: 'anthropic',
name: 'Claude 3.5 Sonnet',
description: 'Latest Claude model with excellent performance',
cost: 'medium',
recommended: true,
},
'anthropic/claude-3-haiku': {
provider: 'anthropic',
name: 'Claude 3 Haiku',
description: 'Fast and cost-effective Claude model',
cost: 'low',
recommended: true,
},
// Google Models
'google/gemini-2.5-flash': {
provider: 'google',
name: 'Gemini 2.5 Flash',
description: 'Fast and efficient Gemini model',
cost: 'low',
recommended: true,
},
};
// Default model configuration
const DEFAULT_MODEL = 'openai/gpt-4o-mini';
export const DEFAULT_MODEL_NAME = DEFAULT_MODEL;
// Provider configuration
export const PROVIDER_CONFIG = {
openai: {
envKey: 'PROVIDER_KEY',
envUrl: 'PROVIDER_PROXY_URL',
defaultUrl: 'https://api.openai.com/v1',
clientClass: 'OpenAI',
},
anthropic: {
envKey: 'PROVIDER_KEY',
envUrl: 'PROVIDER_PROXY_URL',
defaultUrl: 'https://api.anthropic.com',
clientClass: 'Anthropic',
},
google: {
envKey: 'PROVIDER_KEY',
envUrl: 'PROVIDER_PROXY_URL',
defaultUrl: 'https://generativelanguage.googleapis.com',
clientClass: 'GoogleGenerativeAI',
},
};
export const OPTIMIZATION_CONFIG = {
// 🚀 Batch Processing - Optimized for throughput
BATCH_SIZE: 15, // Increased from 10 for better efficiency
MAX_CONCURRENT_LANGUAGES: 5, // Increased from 3 for better parallelization
MAX_CONCURRENT_BATCHES: 4, // Increased from 2 for better batch processing
MAX_CONCURRENT_FILES: 3, // Maximum concurrent files per language
// ⚡ Rate Limiting - Optimized for speed while respecting limits
MIN_DELAY_BETWEEN_BATCHES: 200, // Reduced from 500 for faster processing
MAX_DELAY_BETWEEN_BATCHES: 1000, // Reduced from 2000 for better throughput
// 🔧 Fallback Settings
ENABLE_INDIVIDUAL_FALLBACK: true,
ENABLE_PARALLEL_FALLBACK: true,
// 📊 Performance Monitoring
ENABLE_PERFORMANCE_LOGGING: true,
LOG_TOKEN_USAGE: true,
// 🎯 API Optimization
MAX_TOKENS_PER_BATCH: 3000, // Increased for better batch efficiency
BATCH_TIMEOUT: 45000, // Reduced from 60000 for faster failure detection
INDIVIDUAL_TIMEOUT: 25000, // Reduced from 30000 for faster processing
};
export const CACHE_CONFIG = {
SAVE_INTERVAL: 10,
DEFAULT_CACHE_FILE: 'translation-cache.json',
};
// Template language configuration
export const TEMPLATE_CONFIG = {
DEFAULT_TEMPLATE_LANGUAGE: 'en', // Default template language
SUPPORTED_TEMPLATE_LANGUAGES: [
'en',
'en-US',
'en-GB',
'es',
'es-ES',
'fr',
'fr-FR',
'de',
'de-DE',
], // Supported template languages
};
export const API_CONFIG = {
TIMEOUT: 30000,
BATCH_TIMEOUT: 60000,
MAX_RETRIES: 3,
BACKOFF_MULTIPLIER: 2,
};
export const LANGUAGE_NAMES = {
// 2-letter language codes (backward compatibility)
es: 'Spanish',
de: 'German',
fr: 'French',
it: 'Italian',
pt: 'Portuguese',
nl: 'Dutch',
pl: 'Polish',
ru: 'Russian',
ja: 'Japanese',
ko: 'Korean',
zh: 'Chinese',
ar: 'Arabic',
tr: 'Turkish',
sv: 'Swedish',
no: 'Norwegian',
da: 'Danish',
fi: 'Finnish',
cs: 'Czech',
sk: 'Slovak',
hu: 'Hungarian',
ro: 'Romanian',
bg: 'Bulgarian',
hr: 'Croatian',
sl: 'Slovenian',
et: 'Estonian',
lv: 'Latvian',
lt: 'Lithuanian',
uk: 'Ukrainian',
sr: 'Serbian',
el: 'Greek',
he: 'Hebrew',
th: 'Thai',
vi: 'Vietnamese',
id: 'Indonesian',
ms: 'Malay',
hi: 'Hindi',
bn: 'Bengali',
ur: 'Urdu',
fa: 'Persian',
ta: 'Tamil',
te: 'Telugu',
kn: 'Kannada',
ml: 'Malayalam',
gu: 'Gujarati',
pa: 'Punjabi',
mr: 'Marathi',
ne: 'Nepali',
si: 'Sinhala',
my: 'Burmese',
km: 'Khmer',
lo: 'Lao',
mn: 'Mongolian',
ka: 'Georgian',
am: 'Amharic',
sw: 'Swahili',
yo: 'Yoruba',
ig: 'Igbo',
ha: 'Hausa',
zu: 'Zulu',
af: 'Afrikaans',
is: 'Icelandic',
mt: 'Maltese',
cy: 'Welsh',
ga: 'Irish',
sq: 'Albanian',
mk: 'Macedonian',
bs: 'Bosnian',
me: 'Montenegrin',
ky: 'Kyrgyz',
kk: 'Kazakh',
uz: 'Uzbek',
tg: 'Tajik',
tk: 'Turkmen',
az: 'Azerbaijani',
hy: 'Armenian',
bo: 'Tibetan',
dz: 'Dzongkha',
tl: 'Tagalog',
ceb: 'Cebuano',
jv: 'Javanese',
su: 'Sundanese',
ps: 'Pashto',
sd: 'Sindhi',
// 4-letter language codes (locale-specific variants)
'en-US': 'American English',
'en-GB': 'British English',
'en-AU': 'Australian English',
'en-CA': 'Canadian English',
'en-NZ': 'New Zealand English',
'en-IE': 'Irish English',
'en-ZA': 'South African English',
'en-IN': 'Indian English',
'es-ES': 'European Spanish',
'es-MX': 'Mexican Spanish',
'es-AR': 'Argentine Spanish',
'es-CO': 'Colombian Spanish',
'es-CL': 'Chilean Spanish',
'es-PE': 'Peruvian Spanish',
'es-VE': 'Venezuelan Spanish',
'es-UY': 'Uruguayan Spanish',
'es-PY': 'Paraguayan Spanish',
'es-BO': 'Bolivian Spanish',
'es-EC': 'Ecuadorian Spanish',
'es-CR': 'Costa Rican Spanish',
'es-PA': 'Panamanian Spanish',
'es-HN': 'Honduran Spanish',
'es-NI': 'Nicaraguan Spanish',
'es-SV': 'Salvadoran Spanish',
'es-GT': 'Guatemalan Spanish',
'es-CU': 'Cuban Spanish',
'es-DO': 'Dominican Spanish',
'es-PR': 'Puerto Rican Spanish',
'fr-FR': 'French (France)',
'fr-CA': 'Canadian French',
'fr-BE': 'Belgian French',
'fr-CH': 'Swiss French',
'fr-LU': 'Luxembourg French',
'de-DE': 'German (Germany)',
'de-AT': 'Austrian German',
'de-CH': 'Swiss German',
'de-LI': 'Liechtenstein German',
'pt-PT': 'European Portuguese',
'pt-BR': 'Brazilian Portuguese',
'pt-AO': 'Angolan Portuguese',
'pt-MZ': 'Mozambican Portuguese',
'it-IT': 'Italian (Italy)',
'it-CH': 'Swiss Italian',
'it-SM': 'San Marino Italian',
'nl-NL': 'Dutch (Netherlands)',
'nl-BE': 'Belgian Dutch (Flemish)',
'nl-SR': 'Surinamese Dutch',
'zh-CN': 'Simplified Chinese',
'zh-TW': 'Traditional Chinese (Taiwan)',
'zh-HK': 'Traditional Chinese (Hong Kong)',
'zh-MO': 'Traditional Chinese (Macau)',
'zh-SG': 'Simplified Chinese (Singapore)',
'ja-JP': 'Japanese (Japan)',
'ko-KR': 'Korean (South Korea)',
'ko-KP': 'Korean (North Korea)',
'ar-SA': 'Arabic (Saudi Arabia)',
'ar-EG': 'Arabic (Egypt)',
'ar-AE': 'Arabic (UAE)',
'ar-JO': 'Arabic (Jordan)',
'ar-LB': 'Arabic (Lebanon)',
'ar-SY': 'Arabic (Syria)',
'ar-IQ': 'Arabic (Iraq)',
'ar-MA': 'Arabic (Morocco)',
'ar-TN': 'Arabic (Tunisia)',
'ar-DZ': 'Arabic (Algeria)',
'ar-LY': 'Arabic (Libya)',
'ar-SD': 'Arabic (Sudan)',
'ar-YE': 'Arabic (Yemen)',
'ar-OM': 'Arabic (Oman)',
'ar-KW': 'Arabic (Kuwait)',
'ar-BH': 'Arabic (Bahrain)',
'ar-QA': 'Arabic (Qatar)',
'ru-RU': 'Russian (Russia)',
'ru-BY': 'Belarusian Russian',
'ru-KZ': 'Kazakh Russian',
'ru-KG': 'Kyrgyz Russian',
'ru-TJ': 'Tajik Russian',
'ru-TM': 'Turkmen Russian',
'ru-UZ': 'Uzbek Russian',
'ru-MD': 'Moldovan Russian',
'ru-UA': 'Ukrainian Russian',
'hi-IN': 'Hindi (India)',
'bn-BD': 'Bengali (Bangladesh)',
'bn-IN': 'Bengali (India)',
'ur-PK': 'Urdu (Pakistan)',
'ur-IN': 'Urdu (India)',
'ta-IN': 'Tamil (India)',
'ta-LK': 'Tamil (Sri Lanka)',
'te-IN': 'Telugu (India)',
'kn-IN': 'Kannada (India)',
'ml-IN': 'Malayalam (India)',
'gu-IN': 'Gujarati (India)',
'pa-IN': 'Punjabi (India)',
'pa-PK': 'Punjabi (Pakistan)',
'mr-IN': 'Marathi (India)',
'ne-NP': 'Nepali (Nepal)',
'ne-IN': 'Nepali (India)',
'si-LK': 'Sinhala (Sri Lanka)',
'my-MM': 'Burmese (Myanmar)',
'km-KH': 'Khmer (Cambodia)',
'lo-LA': 'Lao (Laos)',
'th-TH': 'Thai (Thailand)',
'vi-VN': 'Vietnamese (Vietnam)',
'id-ID': 'Indonesian (Indonesia)',
'ms-MY': 'Malay (Malaysia)',
'ms-BN': 'Malay (Brunei)',
'ms-SG': 'Malay (Singapore)',
'tl-PH': 'Tagalog (Philippines)',
'ceb-PH': 'Cebuano (Philippines)',
'jv-ID': 'Javanese (Indonesia)',
'su-ID': 'Sundanese (Indonesia)',
'ps-AF': 'Pashto (Afghanistan)',
'ps-PK': 'Pashto (Pakistan)',
'sd-PK': 'Sindhi (Pakistan)',
'sd-IN': 'Sindhi (India)',
'fa-IR': 'Persian (Iran)',
'fa-AF': 'Persian (Afghanistan)',
'fa-TJ': 'Persian (Tajikistan)',
'tr-TR': 'Turkish (Turkey)',
'tr-CY': 'Turkish (Cyprus)',
'sv-SE': 'Swedish (Sweden)',
'sv-FI': 'Swedish (Finland)',
'no-NO': 'Norwegian (Norway)',
'no-SJ': 'Norwegian (Svalbard)',
'da-DK': 'Danish (Denmark)',
'da-GL': 'Danish (Greenland)',
'fi-FI': 'Finnish (Finland)',
'is-IS': 'Icelandic (Iceland)',
'mt-MT': 'Maltese (Malta)',
'cy-GB': 'Welsh (United Kingdom)',
'ga-IE': 'Irish (Ireland)',
'ga-GB': 'Irish (United Kingdom)',
'sq-AL': 'Albanian (Albania)',
'sq-MK': 'Albanian (North Macedonia)',
'sq-XK': 'Albanian (Kosovo)',
'mk-MK': 'Macedonian (North Macedonia)',
'bs-BA': 'Bosnian (Bosnia and Herzegovina)',
'me-ME': 'Montenegrin (Montenegro)',
'ky-KG': 'Kyrgyz (Kyrgyzstan)',
'kk-KZ': 'Kazakh (Kazakhstan)',
'uz-UZ': 'Uzbek (Uzbekistan)',
'tg-TJ': 'Tajik (Tajikistan)',
'tk-TM': 'Turkmen (Turkmenistan)',
'az-AZ': 'Azerbaijani (Azerbaijan)',
'hy-AM': 'Armenian (Armenia)',
'ka-GE': 'Georgian (Georgia)',
'bo-CN': 'Tibetan (China)',
'bo-IN': 'Tibetan (India)',
'bo-NP': 'Tibetan (Nepal)',
'bo-BT': 'Tibetan (Bhutan)',
'dz-BT': 'Dzongkha (Bhutan)',
'mn-MN': 'Mongolian (Mongolia)',
'mn-CN': 'Mongolian (China)',
'am-ET': 'Amharic (Ethiopia)',
'sw-KE': 'Swahili (Kenya)',
'sw-TZ': 'Swahili (Tanzania)',
'sw-UG': 'Swahili (Uganda)',
'yo-NG': 'Yoruba (Nigeria)',
'ig-NG': 'Igbo (Nigeria)',
'ha-NG': 'Hausa (Nigeria)',
'ha-GH': 'Hausa (Ghana)',
'zu-ZA': 'Zulu (South Africa)',
'af-ZA': 'Afrikaans (South Africa)',
'af-NA': 'Afrikaans (Namibia)',
};