UNPKG

json-translated-ai

Version:

AI-powered translation tool supporting OpenAI GPT, Anthropic Claude, and Google Gemini models

383 lines (368 loc) 10.3 kB
// 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)', };