|
|
""" |
|
|
Configuration Module |
|
|
Contains all configuration constants for the Universal Translator application. |
|
|
""" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ModelConfig: |
|
|
"""Configuration for translation models.""" |
|
|
|
|
|
|
|
|
MODEL_NAME = "swiss-ai/Apertus-70B-Instruct-2509" |
|
|
TITLE = "Universal Translator" |
|
|
|
|
|
|
|
|
DEFAULT_MAX_TOKENS = 1024 |
|
|
DEFAULT_TEMPERATURE = 0.3 |
|
|
MIN_TEMPERATURE = 0.0 |
|
|
MAX_TEMPERATURE = 1.0 |
|
|
|
|
|
|
|
|
TEMP_LITERAL = 0.1 |
|
|
TEMP_BALANCED = 0.3 |
|
|
TEMP_CREATIVE = 0.7 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class LanguageConfig: |
|
|
"""Configuration for supported languages.""" |
|
|
|
|
|
|
|
|
|
|
|
POPULAR_LANGUAGES = { |
|
|
"Afrikaans": "af", |
|
|
"Albanian": "sq", |
|
|
"Arabic": "ar", |
|
|
"Bengali": "bn", |
|
|
"Bulgarian": "bg", |
|
|
"Catalan": "ca", |
|
|
"Chinese (Simplified)": "zh-cn", |
|
|
"Chinese (Traditional)": "zh-tw", |
|
|
"Croatian": "hr", |
|
|
"Czech": "cs", |
|
|
"Danish": "da", |
|
|
"Dutch": "nl", |
|
|
"English": "en", |
|
|
"Estonian": "et", |
|
|
"Finnish": "fi", |
|
|
"French": "fr", |
|
|
"German": "de", |
|
|
"German (Swiss - Aargau)": "de-CH-AG", |
|
|
"German (Swiss - Basel)": "de-CH-BS", |
|
|
"German (Swiss - Bern)": "de-CH-BE", |
|
|
"German (Swiss - Graubünden)": "de-CH-GR", |
|
|
"German (Swiss - Lucerne)": "de-CH-LU", |
|
|
"German (Swiss - St. Gallen)": "de-CH-SG", |
|
|
"German (Swiss - Valais)": "de-CH-VS", |
|
|
"German (Swiss - Zürich)": "de-CH-ZH", |
|
|
"Greek": "el", |
|
|
"Gujarati": "gu", |
|
|
"Hebrew": "he", |
|
|
"Hindi": "hi", |
|
|
"Hungarian": "hu", |
|
|
"Indonesian": "id", |
|
|
"Italian": "it", |
|
|
"Japanese": "ja", |
|
|
"Kannada": "kn", |
|
|
"Korean": "ko", |
|
|
"Latvian": "lv", |
|
|
"Lithuanian": "lt", |
|
|
"Macedonian": "mk", |
|
|
"Malayalam": "ml", |
|
|
"Marathi": "mr", |
|
|
"Nepali": "ne", |
|
|
"Norwegian": "no", |
|
|
"Persian": "fa", |
|
|
"Polish": "pl", |
|
|
"Portuguese": "pt", |
|
|
"Punjabi": "pa", |
|
|
"Romanian": "ro", |
|
|
"Russian": "ru", |
|
|
"Slovak": "sk", |
|
|
"Slovenian": "sl", |
|
|
"Somali": "so", |
|
|
"Spanish": "es", |
|
|
"Swahili": "sw", |
|
|
"Swedish": "sv", |
|
|
"Tagalog": "tl", |
|
|
"Tamil": "ta", |
|
|
"Telugu": "te", |
|
|
"Thai": "th", |
|
|
"Turkish": "tr", |
|
|
"Ukrainian": "uk", |
|
|
"Urdu": "ur", |
|
|
"Vietnamese": "vi", |
|
|
"Welsh": "cy" |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
LANGUAGE_NAMES = { |
|
|
"af": "Afrikaans", |
|
|
"ar": "Arabic", |
|
|
"bg": "Bulgarian", |
|
|
"bn": "Bengali", |
|
|
"ca": "Catalan", |
|
|
"cs": "Czech", |
|
|
"cy": "Welsh", |
|
|
"da": "Danish", |
|
|
"de": "German", |
|
|
"de-CH-AG": "German (Swiss - Aargau)", |
|
|
"de-CH-BE": "German (Swiss - Bern)", |
|
|
"de-CH-BS": "German (Swiss - Basel)", |
|
|
"de-CH-GR": "German (Swiss - Graubünden)", |
|
|
"de-CH-LU": "German (Swiss - Lucerne)", |
|
|
"de-CH-SG": "German (Swiss - St. Gallen)", |
|
|
"de-CH-VS": "German (Swiss - Valais)", |
|
|
"de-CH-ZH": "German (Swiss - Zürich)", |
|
|
"el": "Greek", |
|
|
"en": "English", |
|
|
"es": "Spanish", |
|
|
"et": "Estonian", |
|
|
"fa": "Persian", |
|
|
"fi": "Finnish", |
|
|
"fr": "French", |
|
|
"gu": "Gujarati", |
|
|
"he": "Hebrew", |
|
|
"hi": "Hindi", |
|
|
"hr": "Croatian", |
|
|
"hu": "Hungarian", |
|
|
"id": "Indonesian", |
|
|
"it": "Italian", |
|
|
"ja": "Japanese", |
|
|
"kn": "Kannada", |
|
|
"ko": "Korean", |
|
|
"lt": "Lithuanian", |
|
|
"lv": "Latvian", |
|
|
"mk": "Macedonian", |
|
|
"ml": "Malayalam", |
|
|
"mr": "Marathi", |
|
|
"ne": "Nepali", |
|
|
"nl": "Dutch", |
|
|
"no": "Norwegian", |
|
|
"pa": "Punjabi", |
|
|
"pl": "Polish", |
|
|
"pt": "Portuguese", |
|
|
"ro": "Romanian", |
|
|
"ru": "Russian", |
|
|
"sk": "Slovak", |
|
|
"sl": "Slovenian", |
|
|
"so": "Somali", |
|
|
"sq": "Albanian", |
|
|
"sv": "Swedish", |
|
|
"sw": "Swahili", |
|
|
"ta": "Tamil", |
|
|
"te": "Telugu", |
|
|
"th": "Thai", |
|
|
"tl": "Tagalog", |
|
|
"tr": "Turkish", |
|
|
"uk": "Ukrainian", |
|
|
"ur": "Urdu", |
|
|
"vi": "Vietnamese", |
|
|
"zh-cn": "Chinese (Simplified)", |
|
|
"zh-tw": "Chinese (Traditional)" |
|
|
} |
|
|
|
|
|
|
|
|
DEFAULT_TARGET_LANGUAGE = "Spanish" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class VoiceConfig: |
|
|
"""Configuration for speech-to-text and text-to-speech.""" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DEFAULT_STT_PROVIDER = "OpenAI Whisper API" |
|
|
DEFAULT_TTS_PROVIDER = "OpenAI TTS" |
|
|
DEFAULT_TTS_VOICE = "nova" |
|
|
|
|
|
|
|
|
DEFAULT_VOICE_OUTPUT_ENABLED = True |
|
|
|
|
|
|
|
|
|
|
|
FAST_MODE = False |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
OPENAI_TTS_VOICES = ["alloy", "echo", "fable", "onyx", "nova", "shimmer"] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class UIConfig: |
|
|
"""Configuration for the Gradio UI.""" |
|
|
|
|
|
|
|
|
APP_TITLE = "Universal Translator" |
|
|
APP_DESCRIPTION = "Translate text or speech to any language with automatic source language detection" |
|
|
|
|
|
|
|
|
THEME_PRIMARY_HUE = "indigo" |
|
|
THEME_SECONDARY_HUE = "cyan" |
|
|
THEME_NEUTRAL_HUE = "slate" |
|
|
THEME_FONT = "Inter, system-ui, sans-serif" |
|
|
|
|
|
|
|
|
CUSTOM_CSS = """ |
|
|
.gradio-container { |
|
|
font-family: 'Inter', system-ui, sans-serif; |
|
|
} |
|
|
""" |
|
|
|
|
|
|
|
|
INPUT_TEXT_LINES = 4 |
|
|
OUTPUT_TEXT_LINES = 4 |
|
|
|
|
|
|
|
|
MAX_TOKENS_MIN = 128 |
|
|
MAX_TOKENS_MAX = 2048 |
|
|
MAX_TOKENS_STEP = 128 |
|
|
|
|
|
TEMPERATURE_MIN = 0.0 |
|
|
TEMPERATURE_MAX = 1.0 |
|
|
TEMPERATURE_STEP = 0.1 |
|
|
|
|
|
|
|
|
SHARE_LINK = False |
|
|
OPEN_IN_BROWSER = True |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class PromptConfig: |
|
|
"""Configuration for translation prompts.""" |
|
|
|
|
|
SYSTEM_PROMPT_TEMPLATE = """You are a professional translator. Your task is to translate the given text to {target_language}. |
|
|
Provide ONLY the translation, without any explanations, notes, or additional text. |
|
|
Maintain the tone, style, and meaning of the original text.""" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ErrorMessages: |
|
|
"""Standard error messages.""" |
|
|
|
|
|
NO_INPUT = "No input provided" |
|
|
NO_AUDIO_INPUT = "No audio input" |
|
|
TRANSCRIPTION_FAILED = "Transcription failed" |
|
|
TRANSLATION_ERROR = "Translation Error: {error}" |
|
|
TRANSCRIPTION_ERROR = "[Transcription Error: {error}]" |
|
|
LANGUAGE_DETECTION_FAILED = "Unknown" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def get_language_name(lang_code: str) -> str: |
|
|
""" |
|
|
Get the full language name from a language code. |
|
|
|
|
|
Args: |
|
|
lang_code: Language code (e.g., 'en', 'es') |
|
|
|
|
|
Returns: |
|
|
Full language name or uppercase code if not found |
|
|
""" |
|
|
return LanguageConfig.LANGUAGE_NAMES.get(lang_code, lang_code.upper()) |
|
|
|
|
|
|
|
|
def get_popular_languages_list() -> list[str]: |
|
|
""" |
|
|
Get a list of popular language names for dropdowns. |
|
|
|
|
|
Returns: |
|
|
List of language display names |
|
|
""" |
|
|
return list(LanguageConfig.POPULAR_LANGUAGES.keys()) |
|
|
|
|
|
|
|
|
def get_language_code(language_name: str) -> str: |
|
|
""" |
|
|
Get the language code from a display name. |
|
|
|
|
|
Args: |
|
|
language_name: Display name (e.g., 'Spanish', 'French') |
|
|
|
|
|
Returns: |
|
|
Language code or the original name if not found |
|
|
""" |
|
|
return LanguageConfig.POPULAR_LANGUAGES.get(language_name, language_name.lower()) |
|
|
|