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