bskrishna2006
Fix syntax error in config.py
034b462
raw
history blame
7.25 kB
"""
Configuration module for multilingual YouTube summarizer.
Contains model names, language mappings, and settings.
All models used are FREE and run LOCALLY - no API costs!
"""
import os
# =============================================================================
# MODEL CONFIGURATION
# =============================================================================
# Whisper model for speech-to-text (runs locally)
# Options: "openai/whisper-tiny", "openai/whisper-small", "openai/whisper-medium"
# Smaller = faster but less accurate, larger = slower but more accurate
WHISPER_MODEL = "openai/whisper-small"
# NLLB-200 model for translation (runs locally)
# Using distilled version for lower RAM usage (~2.4GB)
NLLB_MODEL = "facebook/nllb-200-distilled-600M"
# Groq model for summarization (free API)
GROQ_MODEL = "llama-3.1-8b-instant"
# =============================================================================
# LANGUAGE CONFIGURATION
# =============================================================================
# Mapping from simple language codes to NLLB-200 language codes
# NLLB uses format: language_Script (e.g., hin_Deva for Hindi in Devanagari)
LANGUAGE_MAP = {
# English (including regional variants)
"eng": {"nllb": "eng_Latn", "name": "English", "script": "Latin"},
"en": {"nllb": "eng_Latn", "name": "English", "script": "Latin"},
"en-in": {"nllb": "eng_Latn", "name": "English", "script": "Latin"},
"en-us": {"nllb": "eng_Latn", "name": "English", "script": "Latin"},
"en-gb": {"nllb": "eng_Latn", "name": "English", "script": "Latin"},
"en-au": {"nllb": "eng_Latn", "name": "English", "script": "Latin"},
"english": {"nllb": "eng_Latn", "name": "English", "script": "Latin"},
# Hindi (including regional variants)
"hin": {"nllb": "hin_Deva", "name": "Hindi", "script": "Devanagari"},
"hi": {"nllb": "hin_Deva", "name": "Hindi", "script": "Devanagari"},
"hi-in": {"nllb": "hin_Deva", "name": "Hindi", "script": "Devanagari"},
# Tamil
"tam": {"nllb": "tam_Taml", "name": "Tamil", "script": "Tamil"},
"ta": {"nllb": "tam_Taml", "name": "Tamil", "script": "Tamil"},
"ta-in": {"nllb": "tam_Taml", "name": "Tamil", "script": "Tamil"},
# Telugu
"tel": {"nllb": "tel_Telu", "name": "Telugu", "script": "Telugu"},
"te": {"nllb": "tel_Telu", "name": "Telugu", "script": "Telugu"},
"te-in": {"nllb": "tel_Telu", "name": "Telugu", "script": "Telugu"},
# Kannada
"kan": {"nllb": "kan_Knda", "name": "Kannada", "script": "Kannada"},
"kn": {"nllb": "kan_Knda", "name": "Kannada", "script": "Kannada"},
"kn-in": {"nllb": "kan_Knda", "name": "Kannada", "script": "Kannada"},
# Malayalam
"mal": {"nllb": "mal_Mlym", "name": "Malayalam", "script": "Malayalam"},
"ml": {"nllb": "mal_Mlym", "name": "Malayalam", "script": "Malayalam"},
"ml-in": {"nllb": "mal_Mlym", "name": "Malayalam", "script": "Malayalam"},
# Gujarati
"guj": {"nllb": "guj_Gujr", "name": "Gujarati", "script": "Gujarati"},
"gu": {"nllb": "guj_Gujr", "name": "Gujarati", "script": "Gujarati"},
"gu-in": {"nllb": "guj_Gujr", "name": "Gujarati", "script": "Gujarati"},
# Bengali
"ben": {"nllb": "ben_Beng", "name": "Bengali", "script": "Bengali"},
"bn": {"nllb": "ben_Beng", "name": "Bengali", "script": "Bengali"},
"bn-in": {"nllb": "ben_Beng", "name": "Bengali", "script": "Bengali"},
"bn-bd": {"nllb": "ben_Beng", "name": "Bengali", "script": "Bengali"},
# Marathi
"mar": {"nllb": "mar_Deva", "name": "Marathi", "script": "Devanagari"},
"mr": {"nllb": "mar_Deva", "name": "Marathi", "script": "Devanagari"},
"mr-in": {"nllb": "mar_Deva", "name": "Marathi", "script": "Devanagari"},
# Punjabi
"pan": {"nllb": "pan_Guru", "name": "Punjabi", "script": "Gurmukhi"},
"pa": {"nllb": "pan_Guru", "name": "Punjabi", "script": "Gurmukhi"},
"pa-in": {"nllb": "pan_Guru", "name": "Punjabi", "script": "Gurmukhi"},
# Urdu
"urd": {"nllb": "urd_Arab", "name": "Urdu", "script": "Arabic"},
"ur": {"nllb": "urd_Arab", "name": "Urdu", "script": "Arabic"},
"ur-pk": {"nllb": "urd_Arab", "name": "Urdu", "script": "Arabic"},
"ur-in": {"nllb": "urd_Arab", "name": "Urdu", "script": "Arabic"},
}
# List of supported languages for API responses
SUPPORTED_LANGUAGES = [
{"code": "eng", "name": "English", "nllb_code": "eng_Latn"},
{"code": "hin", "name": "Hindi", "nllb_code": "hin_Deva"},
{"code": "tam", "name": "Tamil", "nllb_code": "tam_Taml"},
{"code": "tel", "name": "Telugu", "nllb_code": "tel_Telu"},
{"code": "kan", "name": "Kannada", "nllb_code": "kan_Knda"},
{"code": "mal", "name": "Malayalam", "nllb_code": "mal_Mlym"},
{"code": "guj", "name": "Gujarati", "nllb_code": "guj_Gujr"},
{"code": "ben", "name": "Bengali", "nllb_code": "ben_Beng"},
{"code": "mar", "name": "Marathi", "nllb_code": "mar_Deva"},
{"code": "pan", "name": "Punjabi", "nllb_code": "pan_Guru"},
{"code": "urd", "name": "Urdu", "nllb_code": "urd_Arab"},
]
# Whisper language code to our language code mapping
# Whisper returns ISO 639-1 codes, we normalize to our codes
WHISPER_LANG_MAP = {
"en": "eng",
"hi": "hin",
"ta": "tam",
"te": "tel",
"kn": "kan",
"ml": "mal",
"gu": "guj",
"bn": "ben",
"mr": "mar",
"pa": "pan",
"ur": "urd",
}
# =============================================================================
# RUNTIME SETTINGS
# =============================================================================
# Model loading settings
# Set to True to load models on startup (slower startup, faster first request)
# Set to False for lazy loading (faster startup, slower first request)
PRELOAD_MODELS = False
# Maximum text length for translation (to avoid OOM errors)
MAX_TRANSLATION_LENGTH = 5000 # characters
# Audio extraction settings
AUDIO_FORMAT = "wav"
AUDIO_SAMPLE_RATE = 16000 # Whisper expects 16kHz
# Temporary file settings
TEMP_DIR = os.path.join(os.path.dirname(__file__), "temp")
# =============================================================================
# HELPER FUNCTIONS
# =============================================================================
def get_nllb_code(lang_code: str) -> str:
"""Convert a language code to NLLB-200 format."""
lang_code = lang_code.lower().strip()
if lang_code in LANGUAGE_MAP:
return LANGUAGE_MAP[lang_code]["nllb"]
raise ValueError(f"Unsupported language code: {lang_code}")
def get_language_name(lang_code: str) -> str:
"""Get the full name of a language from its code."""
lang_code = lang_code.lower().strip()
if lang_code in LANGUAGE_MAP:
return LANGUAGE_MAP[lang_code]["name"]
return lang_code
def normalize_whisper_lang(whisper_code: str) -> str:
"""Convert Whisper's language code to our format."""
whisper_code = whisper_code.lower().strip()
return WHISPER_LANG_MAP.get(whisper_code, whisper_code)
def is_english(lang_code: str) -> bool:
"""Check if a language code represents English."""
lang_code = lang_code.lower().strip()
return lang_code in ["en", "eng", "english", "en-in", "en-us", "en-gb", "en-au"]