6851b26923
FastAPI + Celery + Svelte app for English→Danish video translation with voice cloning. Includes diarization, STT, translation, TTS, and audio mixing pipeline.
61 lines
1.2 KiB
Python
61 lines
1.2 KiB
Python
import logging
|
|
from ..config import settings
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
_llm = None
|
|
|
|
|
|
def _load_model():
|
|
global _llm
|
|
if _llm is not None:
|
|
return
|
|
|
|
from llama_cpp import Llama
|
|
|
|
logger.info("Loading TranslateGemma 12B from %s", settings.translate_model_path)
|
|
_llm = Llama(
|
|
model_path=settings.translate_model_path,
|
|
n_gpu_layers=settings.translate_n_gpu_layers,
|
|
n_ctx=2048,
|
|
verbose=False,
|
|
)
|
|
|
|
|
|
def translate(text: str) -> str:
|
|
_load_model()
|
|
|
|
if not text.strip():
|
|
return ""
|
|
|
|
lines = [
|
|
"Translate the following English text to Danish.",
|
|
"Preserve the original meaning, tone, and style.",
|
|
"Output only the Danish translation, nothing else.",
|
|
"",
|
|
f"English: {text}",
|
|
"",
|
|
"Danish:",
|
|
]
|
|
prompt = "\n".join(lines)
|
|
|
|
stop_tokens = ["\n\n", "English:", "User:"]
|
|
output = _llm(
|
|
prompt,
|
|
max_tokens=1024,
|
|
temperature=0.1,
|
|
stop=stop_tokens,
|
|
echo=False,
|
|
)
|
|
|
|
result = output["choices"][0]["text"].strip()
|
|
return result
|
|
|
|
|
|
def unload_model():
|
|
global _llm
|
|
_llm = None
|
|
import torch
|
|
|
|
torch.cuda.empty_cache()
|