Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
sachin
commited on
Commit
·
f73c392
1
Parent(s):
d7ce853
test
Browse files- src/server/main.py +39 -18
src/server/main.py
CHANGED
@@ -619,67 +619,88 @@ async def translate(
|
|
619 |
x_session_key: str = Header(..., alias="X-Session-Key")
|
620 |
):
|
621 |
user_id = await get_current_user(credentials)
|
622 |
-
|
623 |
-
|
|
|
|
|
|
|
|
|
624 |
# Decrypt sentences
|
625 |
decrypted_sentences = []
|
626 |
for sentence in request.sentences:
|
627 |
try:
|
628 |
encrypted_sentence = base64.b64decode(sentence)
|
629 |
decrypted_sentence = decrypt_data(encrypted_sentence, session_key).decode("utf-8")
|
|
|
|
|
630 |
decrypted_sentences.append(decrypted_sentence)
|
631 |
except Exception as e:
|
632 |
logger.error(f"Sentence decryption failed: {str(e)}")
|
633 |
-
raise HTTPException(status_code=400, detail="Invalid encrypted sentence")
|
634 |
-
|
635 |
# Decrypt source language
|
636 |
try:
|
637 |
encrypted_src_lang = base64.b64decode(request.src_lang)
|
638 |
decrypted_src_lang = decrypt_data(encrypted_src_lang, session_key).decode("utf-8")
|
|
|
|
|
639 |
except Exception as e:
|
640 |
logger.error(f"Source language decryption failed: {str(e)}")
|
641 |
-
raise HTTPException(status_code=400, detail="Invalid encrypted source language")
|
642 |
-
|
643 |
# Decrypt target language
|
644 |
try:
|
645 |
encrypted_tgt_lang = base64.b64decode(request.tgt_lang)
|
646 |
decrypted_tgt_lang = decrypt_data(encrypted_tgt_lang, session_key).decode("utf-8")
|
|
|
|
|
647 |
except Exception as e:
|
648 |
logger.error(f"Target language decryption failed: {str(e)}")
|
649 |
-
raise HTTPException(status_code=400, detail="Invalid encrypted target language")
|
650 |
-
|
651 |
-
|
652 |
-
|
653 |
-
|
654 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
655 |
payload = {
|
656 |
"sentences": decrypted_sentences,
|
657 |
"src_lang": decrypted_src_lang,
|
658 |
"tgt_lang": decrypted_tgt_lang
|
659 |
}
|
660 |
-
|
661 |
try:
|
662 |
response = requests.post(
|
663 |
external_url,
|
664 |
json=payload,
|
665 |
headers={
|
666 |
"accept": "application/json",
|
667 |
-
"Content-Type": "application/json"
|
|
|
668 |
},
|
669 |
timeout=60
|
670 |
)
|
671 |
response.raise_for_status()
|
672 |
-
|
673 |
response_data = response.json()
|
674 |
translations = response_data.get("translations", [])
|
675 |
-
|
676 |
if not translations or len(translations) != len(decrypted_sentences):
|
677 |
logger.warning(f"Unexpected response format: {response_data}")
|
678 |
raise HTTPException(status_code=500, detail="Invalid response from translation service")
|
679 |
-
|
680 |
logger.info(f"Translation successful: {translations}")
|
681 |
return TranslationResponse(translations=translations)
|
682 |
-
|
683 |
except requests.Timeout:
|
684 |
logger.error("Translation request timed out")
|
685 |
raise HTTPException(status_code=504, detail="Translation service timeout")
|
|
|
619 |
x_session_key: str = Header(..., alias="X-Session-Key")
|
620 |
):
|
621 |
user_id = await get_current_user(credentials)
|
622 |
+
try:
|
623 |
+
session_key = base64.b64decode(x_session_key)
|
624 |
+
except Exception as e:
|
625 |
+
logger.error(f"Invalid X-Session-Key: {str(e)}")
|
626 |
+
raise HTTPException(status_code=400, detail="Invalid session key")
|
627 |
+
|
628 |
# Decrypt sentences
|
629 |
decrypted_sentences = []
|
630 |
for sentence in request.sentences:
|
631 |
try:
|
632 |
encrypted_sentence = base64.b64decode(sentence)
|
633 |
decrypted_sentence = decrypt_data(encrypted_sentence, session_key).decode("utf-8")
|
634 |
+
if not decrypted_sentence.strip():
|
635 |
+
raise ValueError("Decrypted sentence is empty")
|
636 |
decrypted_sentences.append(decrypted_sentence)
|
637 |
except Exception as e:
|
638 |
logger.error(f"Sentence decryption failed: {str(e)}")
|
639 |
+
raise HTTPException(status_code=400, detail=f"Invalid encrypted sentence: {str(e)}")
|
640 |
+
|
641 |
# Decrypt source language
|
642 |
try:
|
643 |
encrypted_src_lang = base64.b64decode(request.src_lang)
|
644 |
decrypted_src_lang = decrypt_data(encrypted_src_lang, session_key).decode("utf-8")
|
645 |
+
if not decrypted_src_lang.strip():
|
646 |
+
raise ValueError("Decrypted source language is empty")
|
647 |
except Exception as e:
|
648 |
logger.error(f"Source language decryption failed: {str(e)}")
|
649 |
+
raise HTTPException(status_code=400, detail=f"Invalid encrypted source language: {str(e)}")
|
650 |
+
|
651 |
# Decrypt target language
|
652 |
try:
|
653 |
encrypted_tgt_lang = base64.b64decode(request.tgt_lang)
|
654 |
decrypted_tgt_lang = decrypt_data(encrypted_tgt_lang, session_key).decode("utf-8")
|
655 |
+
if not decrypted_tgt_lang.strip():
|
656 |
+
raise ValueError("Decrypted target language is empty")
|
657 |
except Exception as e:
|
658 |
logger.error(f"Target language decryption failed: {str(e)}")
|
659 |
+
raise HTTPException(status_code=400, detail=f"Invalid encrypted target language: {str(e)}")
|
660 |
+
|
661 |
+
# Validate language codes
|
662 |
+
supported_languages = [
|
663 |
+
"eng_Latn", "hin_Deva", "kan_Knda", "tam_Taml", "mal_Mlym", "tel_Telu",
|
664 |
+
"deu_Latn", "fra_Latn", "nld_Latn", "spa_Latn", "ita_Latn", "por_Latn",
|
665 |
+
"rus_Cyrl", "pol_Latn"
|
666 |
+
]
|
667 |
+
if decrypted_src_lang not in supported_languages or decrypted_tgt_lang not in supported_languages:
|
668 |
+
logger.error(f"Unsupported language codes: src={decrypted_src_lang}, tgt={decrypted_tgt_lang}")
|
669 |
+
raise HTTPException(status_code=400, detail=f"Unsupported language codes: src={decrypted_src_lang}, tgt={decrypted_tgt_lang}")
|
670 |
+
|
671 |
+
logger.info(f"Received translation request: {len(decrypted_sentences)} sentences, src_lang: {decrypted_src_lang}, tgt_lang: {decrypted_tgt_lang}, user_id: {user_id}")
|
672 |
+
|
673 |
+
external_url = "https://slabstech-dhwani-internal-api-server.hf.space/translate"
|
674 |
+
|
675 |
payload = {
|
676 |
"sentences": decrypted_sentences,
|
677 |
"src_lang": decrypted_src_lang,
|
678 |
"tgt_lang": decrypted_tgt_lang
|
679 |
}
|
680 |
+
|
681 |
try:
|
682 |
response = requests.post(
|
683 |
external_url,
|
684 |
json=payload,
|
685 |
headers={
|
686 |
"accept": "application/json",
|
687 |
+
"Content-Type": "application/json",
|
688 |
+
"Authorization": f"Bearer {settings.external_api_token}" # Add external API token if required
|
689 |
},
|
690 |
timeout=60
|
691 |
)
|
692 |
response.raise_for_status()
|
693 |
+
|
694 |
response_data = response.json()
|
695 |
translations = response_data.get("translations", [])
|
696 |
+
|
697 |
if not translations or len(translations) != len(decrypted_sentences):
|
698 |
logger.warning(f"Unexpected response format: {response_data}")
|
699 |
raise HTTPException(status_code=500, detail="Invalid response from translation service")
|
700 |
+
|
701 |
logger.info(f"Translation successful: {translations}")
|
702 |
return TranslationResponse(translations=translations)
|
703 |
+
|
704 |
except requests.Timeout:
|
705 |
logger.error("Translation request timed out")
|
706 |
raise HTTPException(status_code=504, detail="Translation service timeout")
|