pageparse.ai / src /pageparse /translation.py
Varun2007's picture
initial clean deployment commit with compilers
8c3e275
Raw
History Blame Contribute Delete
2.02 kB
import json
import urllib.request
from pageparse.config import settings
INDIAN_LANGUAGES = {
"English": "en",
"Assamese": "as",
"Bengali": "bn",
"Bodo": "brx",
"Dogri": "doi",
"Gujarati": "gu",
"Hindi": "hi",
"Kannada": "kn",
"Kashmiri": "ks",
"Konkani": "kok",
"Maithili": "mai",
"Malayalam": "ml",
"Manipuri": "mni",
"Marathi": "mr",
"Nepali": "ne",
"Odia": "or",
"Punjabi": "pa",
"Sanskrit": "sa",
"Santali": "sat",
"Sindhi": "sd",
"Tamil": "ta",
"Telugu": "te",
"Urdu": "ur",
}
def translate_via_ollama(text: str, target_lang: str) -> str:
prompt = (
f"Translate the following text into {target_lang}. "
"Return ONLY the direct translation. Do NOT add any notes, explanations, introductory text, "
"or surrounding conversational text.\n\n"
f"Text:\n{text}\n\n"
"Translation:"
)
payload = {
"model": settings.slm_model,
"prompt": prompt,
"stream": False,
"options": {"temperature": 0.1},
}
url = f"{settings.ollama_url}/api/generate"
data = json.dumps(payload).encode("utf-8")
req = urllib.request.Request(url, data=data, headers={"Content-Type": "application/json"})
with urllib.request.urlopen(req, timeout=30) as response:
res = json.loads(response.read().decode("utf-8"))
return res.get("response", "").strip()
def translate_text(text: str, target_lang: str, source_lang: str = "auto") -> str:
if not text or not text.strip():
return text
if not all(ord(c) < 128 for c in text):
return text
target_lang_code = INDIAN_LANGUAGES.get(target_lang, "en")
if target_lang.lower() == "english":
return text
try:
return translate_via_ollama(text, target_lang)
except Exception as e:
print(f"Ollama translation failed: {e}")
if target_lang_code != "en":
return f"[Offline Translation to {target_lang}]: {text}"
return text