Spaces:
Build error
Build error
File size: 2,024 Bytes
8c3e275 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | 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
|