Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
Upload folder using huggingface_hub
Browse files- config.py +1 -1
- modules/languages/constants.py +68 -0
- modules/languages/get_v2.py +30 -0
- modules/languages/transliterator.py +26 -0
- server.py +8 -1
config.py
CHANGED
|
@@ -2,7 +2,7 @@ from metadata import MetadataWhereClause
|
|
| 2 |
from typing import List, Dict
|
| 3 |
|
| 4 |
from modules.config import scripture_configurations
|
| 5 |
-
from modules.transliterator import fn_transliterate
|
| 6 |
|
| 7 |
|
| 8 |
class SanatanConfig:
|
|
|
|
| 2 |
from typing import List, Dict
|
| 3 |
|
| 4 |
from modules.config import scripture_configurations
|
| 5 |
+
from modules.languages.transliterator import fn_transliterate
|
| 6 |
|
| 7 |
|
| 8 |
class SanatanConfig:
|
modules/languages/constants.py
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
LANGUAGES = [
|
| 2 |
+
{
|
| 3 |
+
"code": "en",
|
| 4 |
+
"name": "English",
|
| 5 |
+
"native_name": "English",
|
| 6 |
+
"aksharamukha_name": "ISO",
|
| 7 |
+
},
|
| 8 |
+
{
|
| 9 |
+
"code": "hi",
|
| 10 |
+
"name": "Hindi",
|
| 11 |
+
"native_name": "हिन्दी",
|
| 12 |
+
"aksharamukha_name": "Devanagari",
|
| 13 |
+
},
|
| 14 |
+
{
|
| 15 |
+
"code": "bn",
|
| 16 |
+
"name": "Bengali",
|
| 17 |
+
"native_name": "বাংলা",
|
| 18 |
+
"aksharamukha_name": "Bengali",
|
| 19 |
+
},
|
| 20 |
+
{
|
| 21 |
+
"code": "ta",
|
| 22 |
+
"name": "Tamil",
|
| 23 |
+
"native_name": "தமிழ்",
|
| 24 |
+
"aksharamukha_name": "Tamil",
|
| 25 |
+
},
|
| 26 |
+
{
|
| 27 |
+
"code": "te",
|
| 28 |
+
"name": "Telugu",
|
| 29 |
+
"native_name": "తెలుగు",
|
| 30 |
+
"aksharamukha_name": "Telugu",
|
| 31 |
+
},
|
| 32 |
+
{
|
| 33 |
+
"code": "kn",
|
| 34 |
+
"name": "Kannada",
|
| 35 |
+
"native_name": "ಕನ್ನಡ",
|
| 36 |
+
"aksharamukha_name": "Kannada",
|
| 37 |
+
},
|
| 38 |
+
{
|
| 39 |
+
"code": "ml",
|
| 40 |
+
"name": "Malayalam",
|
| 41 |
+
"native_name": "മലയാളം",
|
| 42 |
+
"aksharamukha_name": "Malayalam",
|
| 43 |
+
},
|
| 44 |
+
{
|
| 45 |
+
"code": "gu",
|
| 46 |
+
"name": "Gujarati",
|
| 47 |
+
"native_name": "ગુજરાતી",
|
| 48 |
+
"aksharamukha_name": "Gujarati",
|
| 49 |
+
},
|
| 50 |
+
{
|
| 51 |
+
"code": "gr",
|
| 52 |
+
"name": "Grantha",
|
| 53 |
+
"native_name": "𑌗𑍍𑌰𑌨𑍍𑌥",
|
| 54 |
+
"aksharamukha_name": "Grantha",
|
| 55 |
+
},
|
| 56 |
+
{
|
| 57 |
+
"code": "pa",
|
| 58 |
+
"name": "Punjabi",
|
| 59 |
+
"native_name": "ਪੰਜਾਬੀ",
|
| 60 |
+
"aksharamukha_name": "Gurmukhi",
|
| 61 |
+
},
|
| 62 |
+
{
|
| 63 |
+
"code": "as",
|
| 64 |
+
"name": "Assamese",
|
| 65 |
+
"native_name": "অসমীয়া",
|
| 66 |
+
"aksharamukha_name": "Bengali",
|
| 67 |
+
},
|
| 68 |
+
]
|
modules/languages/get_v2.py
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import pycountry
|
| 2 |
+
|
| 3 |
+
from modules.languages.constants import LANGUAGES
|
| 4 |
+
|
| 5 |
+
async def handle_fetch_languages_v2():
|
| 6 |
+
"""
|
| 7 |
+
Returns a single list of language objects.
|
| 8 |
+
display_name = aksharamukha_name if requested, else native_name
|
| 9 |
+
"""
|
| 10 |
+
languages = []
|
| 11 |
+
|
| 12 |
+
for lang_info in LANGUAGES:
|
| 13 |
+
# Attempt to fetch English name from pycountry if available
|
| 14 |
+
code = lang_info["code"]
|
| 15 |
+
# py_lang = pycountry.languages.get(alpha_2=code) or pycountry.languages.get(alpha_3=code)
|
| 16 |
+
# english_name = py_lang.name if py_lang else lang_info.get("native_name", code)
|
| 17 |
+
|
| 18 |
+
languages.append(
|
| 19 |
+
{
|
| 20 |
+
"code": code,
|
| 21 |
+
"name": lang_info.get("name"),
|
| 22 |
+
"native_name": lang_info.get("native_name"),
|
| 23 |
+
"aksharamukha_name": lang_info.get("aksharamukha_name"),
|
| 24 |
+
}
|
| 25 |
+
)
|
| 26 |
+
|
| 27 |
+
# Sort alphabetically by English name
|
| 28 |
+
languages.sort(key=lambda x: x["name"])
|
| 29 |
+
|
| 30 |
+
return languages
|
modules/languages/transliterator.py
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from modules.languages.constants import LANGUAGES
|
| 2 |
+
|
| 3 |
+
|
| 4 |
+
def fn_transliterate(input_text: str, input_language: str = 'autodetect') -> dict:
|
| 5 |
+
"""
|
| 6 |
+
Transliterate `input_text` from `input_language` into all target scripts
|
| 7 |
+
defined in LANGUAGES array. Returns a dict mapping language code to
|
| 8 |
+
transliterated text.
|
| 9 |
+
"""
|
| 10 |
+
try:
|
| 11 |
+
from aksharamukha import transliterate
|
| 12 |
+
|
| 13 |
+
# Dynamically build target scripts from LANGUAGES
|
| 14 |
+
target_scripts = {lang["code"]: lang["aksharamukha_name"] for lang in LANGUAGES}
|
| 15 |
+
|
| 16 |
+
output = {}
|
| 17 |
+
for code, script_name in target_scripts.items():
|
| 18 |
+
transliterated_text = transliterate.process(input_language, script_name, input_text)
|
| 19 |
+
output[code] = transliterated_text
|
| 20 |
+
|
| 21 |
+
return output
|
| 22 |
+
|
| 23 |
+
except Exception as e:
|
| 24 |
+
print(f"Error transliterating '{input_text[:30]}...': {e}")
|
| 25 |
+
# Fallback: return input text for all languages
|
| 26 |
+
return {lang["code"]: input_text for lang in LANGUAGES}
|
server.py
CHANGED
|
@@ -15,6 +15,7 @@ from metadata import MetadataWhereClause
|
|
| 15 |
from modules.audio.model import AudioRequest, AudioType
|
| 16 |
from modules.audio.service import svc_get_audio_urls, svc_get_indices_with_audio
|
| 17 |
from modules.config.categories import get_scripture_categories
|
|
|
|
| 18 |
from modules.quiz.answer_validator import validate_answer
|
| 19 |
from modules.quiz.models import Question
|
| 20 |
from modules.quiz.quiz_helper import generate_question
|
|
@@ -118,6 +119,12 @@ async def handle_fetch_languages():
|
|
| 118 |
languages.sort(key=lambda x: x["name"])
|
| 119 |
return languages
|
| 120 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 121 |
|
| 122 |
@router.post("/greet")
|
| 123 |
async def handle_greet(msg: Message):
|
|
@@ -538,7 +545,7 @@ def route_get_scripture_categories():
|
|
| 538 |
|
| 539 |
|
| 540 |
@router.get("/donation/products")
|
| 541 |
-
def route_get_donation_product_ids(include_tests: bool =
|
| 542 |
products = [
|
| 543 |
{"id": "donation_unit_0100"},
|
| 544 |
{"id": "donation_unit_0500"},
|
|
|
|
| 15 |
from modules.audio.model import AudioRequest, AudioType
|
| 16 |
from modules.audio.service import svc_get_audio_urls, svc_get_indices_with_audio
|
| 17 |
from modules.config.categories import get_scripture_categories
|
| 18 |
+
from modules.languages.get_v2 import handle_fetch_languages_v2
|
| 19 |
from modules.quiz.answer_validator import validate_answer
|
| 20 |
from modules.quiz.models import Question
|
| 21 |
from modules.quiz.quiz_helper import generate_question
|
|
|
|
| 119 |
languages.sort(key=lambda x: x["name"])
|
| 120 |
return languages
|
| 121 |
|
| 122 |
+
@router.get("/languages_v2")
|
| 123 |
+
async def fn_handle_fetch_languages_v2():
|
| 124 |
+
val = await handle_fetch_languages_v2()
|
| 125 |
+
return val
|
| 126 |
+
|
| 127 |
+
|
| 128 |
|
| 129 |
@router.post("/greet")
|
| 130 |
async def handle_greet(msg: Message):
|
|
|
|
| 545 |
|
| 546 |
|
| 547 |
@router.get("/donation/products")
|
| 548 |
+
def route_get_donation_product_ids(include_tests: bool = False):
|
| 549 |
products = [
|
| 550 |
{"id": "donation_unit_0100"},
|
| 551 |
{"id": "donation_unit_0500"},
|