Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
sachin
commited on
Commit
·
5bdad58
1
Parent(s):
3e92136
update-llogs for debug
Browse files- requirements.txt +2 -1
- src/server/main.py +15 -16
requirements.txt
CHANGED
@@ -8,4 +8,5 @@ pillow
|
|
8 |
pyjwt
|
9 |
sqlalchemy
|
10 |
passlib[bcrypt]
|
11 |
-
|
|
|
|
8 |
pyjwt
|
9 |
sqlalchemy
|
10 |
passlib[bcrypt]
|
11 |
+
|
12 |
+
dwani
|
src/server/main.py
CHANGED
@@ -30,10 +30,9 @@ from config.logging_config import logger
|
|
30 |
|
31 |
settings = Settings()
|
32 |
|
33 |
-
|
34 |
dwani.api_key = os.getenv("DWANI_API_KEY")
|
35 |
-
|
36 |
dwani.api_base = os.getenv("DWANI_API_BASE_URL")
|
|
|
37 |
# FastAPI app setup with enhanced docs
|
38 |
app = FastAPI(
|
39 |
title="Dhwani API",
|
@@ -257,7 +256,7 @@ async def app_register_user(
|
|
257 |
register_request: RegisterRequest,
|
258 |
x_session_key: str = Header(..., alias="X-Session-Key")
|
259 |
):
|
260 |
-
logger.
|
261 |
return await app_register(register_request, x_session_key)
|
262 |
|
263 |
|
@@ -302,7 +301,7 @@ async def generate_audio(
|
|
302 |
if len(decrypted_input) > 1000:
|
303 |
raise HTTPException(status_code=400, detail="Decrypted input cannot exceed 1000 characters")
|
304 |
|
305 |
-
logger.
|
306 |
"endpoint": "/v1/audio/speech",
|
307 |
"input_length": len(decrypted_input),
|
308 |
"client_ip": get_remote_address(request),
|
@@ -381,14 +380,14 @@ async def chat(
|
|
381 |
if len(decrypted_prompt) > 1000:
|
382 |
raise HTTPException(status_code=400, detail="Decrypted prompt cannot exceed 1000 characters")
|
383 |
|
384 |
-
logger.
|
385 |
|
386 |
try:
|
387 |
|
388 |
response = dwani.Chat.create(prompt=decrypted_prompt, src_lang=decrypted_src_lang, tgt_lang=decrypted_tgt_lang)
|
389 |
#response_data = response.json()
|
390 |
response_text = response.get("response", "")
|
391 |
-
logger.
|
392 |
return ChatResponse(response=response_text)
|
393 |
|
394 |
except requests.Timeout:
|
@@ -451,7 +450,7 @@ async def transcribe_audio(
|
|
451 |
|
452 |
transcription = response.get("text","")
|
453 |
|
454 |
-
logger.
|
455 |
return TranscriptionResponse(text=transcription)
|
456 |
|
457 |
except HTTPException:
|
@@ -530,7 +529,7 @@ async def translate(
|
|
530 |
logger.error(f"Unsupported language codes: src={decrypted_src_lang}, tgt={decrypted_tgt_lang}")
|
531 |
raise HTTPException(status_code=400, detail=f"Unsupported language codes: src={decrypted_src_lang}, tgt={decrypted_tgt_lang}")
|
532 |
|
533 |
-
logger.
|
534 |
|
535 |
|
536 |
|
@@ -543,7 +542,7 @@ async def translate(
|
|
543 |
logger.warning(f"Unexpected response format: {response}")
|
544 |
raise HTTPException(status_code=500, detail="Invalid response from translation service")
|
545 |
|
546 |
-
logger.
|
547 |
return TranslationResponse(translations=translations)
|
548 |
|
549 |
except requests.Timeout:
|
@@ -602,7 +601,7 @@ async def extract_text(
|
|
602 |
logger.error(f"PDF decryption failed: {str(e)}")
|
603 |
raise HTTPException(status_code=400, detail="Invalid encrypted PDF")
|
604 |
|
605 |
-
logger.
|
606 |
"endpoint": "/v1/extract-text",
|
607 |
"file_name": file.filename,
|
608 |
"page_number": page_number,
|
@@ -630,7 +629,7 @@ async def extract_text(
|
|
630 |
logger.warning("No page_content found in external API response")
|
631 |
extracted_text = ""
|
632 |
|
633 |
-
logger.
|
634 |
return PDFTextExtractionResponse(page_content=extracted_text.strip())
|
635 |
|
636 |
except requests.Timeout:
|
@@ -672,7 +671,7 @@ async def visual_query(
|
|
672 |
try:
|
673 |
import json
|
674 |
visual_query_request = VisualQueryRequest.parse_raw(data)
|
675 |
-
logger.
|
676 |
except Exception as e:
|
677 |
logger.error(f"Failed to parse JSON data: {str(e)}")
|
678 |
raise HTTPException(status_code=422, detail=f"Invalid JSON data: {str(e)}")
|
@@ -714,7 +713,7 @@ async def visual_query(
|
|
714 |
logger.error(f"Image decryption failed: {str(e)}")
|
715 |
raise HTTPException(status_code=400, detail="Invalid encrypted image")
|
716 |
|
717 |
-
logger.
|
718 |
"endpoint": "/v1/visual_query",
|
719 |
"query_length": len(decrypted_query),
|
720 |
"file_name": file.filename,
|
@@ -745,7 +744,7 @@ async def visual_query(
|
|
745 |
logger.warning(f"Empty answer received from external API: {response}")
|
746 |
raise HTTPException(status_code=500, detail="No answer provided by visual query service")
|
747 |
|
748 |
-
logger.
|
749 |
return VisualQueryResponse(answer=answer)
|
750 |
|
751 |
except requests.Timeout:
|
@@ -804,7 +803,7 @@ async def speech_to_speech(
|
|
804 |
if decrypted_language not in allowed_languages:
|
805 |
raise HTTPException(status_code=400, detail=f"Language must be one of {allowed_languages}")
|
806 |
|
807 |
-
logger.
|
808 |
"endpoint": "/v1/speech_to_speech",
|
809 |
"audio_filename": file.filename,
|
810 |
"language": decrypted_language,
|
@@ -828,7 +827,7 @@ async def speech_to_speech(
|
|
828 |
raise HTTPException(status_code=400, detail="Transcription failed or returned empty text")
|
829 |
|
830 |
# Debug inputs
|
831 |
-
logger.
|
832 |
|
833 |
# Chat processing
|
834 |
try:
|
|
|
30 |
|
31 |
settings = Settings()
|
32 |
|
|
|
33 |
dwani.api_key = os.getenv("DWANI_API_KEY")
|
|
|
34 |
dwani.api_base = os.getenv("DWANI_API_BASE_URL")
|
35 |
+
|
36 |
# FastAPI app setup with enhanced docs
|
37 |
app = FastAPI(
|
38 |
title="Dhwani API",
|
|
|
256 |
register_request: RegisterRequest,
|
257 |
x_session_key: str = Header(..., alias="X-Session-Key")
|
258 |
):
|
259 |
+
logger.info(f"App registration attempt")
|
260 |
return await app_register(register_request, x_session_key)
|
261 |
|
262 |
|
|
|
301 |
if len(decrypted_input) > 1000:
|
302 |
raise HTTPException(status_code=400, detail="Decrypted input cannot exceed 1000 characters")
|
303 |
|
304 |
+
logger.info("Processing speech request", extra={
|
305 |
"endpoint": "/v1/audio/speech",
|
306 |
"input_length": len(decrypted_input),
|
307 |
"client_ip": get_remote_address(request),
|
|
|
380 |
if len(decrypted_prompt) > 1000:
|
381 |
raise HTTPException(status_code=400, detail="Decrypted prompt cannot exceed 1000 characters")
|
382 |
|
383 |
+
logger.info(f"Received prompt: {decrypted_prompt}, src_lang: {decrypted_src_lang}, user_id: {user_id}")
|
384 |
|
385 |
try:
|
386 |
|
387 |
response = dwani.Chat.create(prompt=decrypted_prompt, src_lang=decrypted_src_lang, tgt_lang=decrypted_tgt_lang)
|
388 |
#response_data = response.json()
|
389 |
response_text = response.get("response", "")
|
390 |
+
logger.info(f"Generated Chat response from external API: {response_text}")
|
391 |
return ChatResponse(response=response_text)
|
392 |
|
393 |
except requests.Timeout:
|
|
|
450 |
|
451 |
transcription = response.get("text","")
|
452 |
|
453 |
+
logger.info(f"Transcription completed in {time() - start_time:.2f} seconds")
|
454 |
return TranscriptionResponse(text=transcription)
|
455 |
|
456 |
except HTTPException:
|
|
|
529 |
logger.error(f"Unsupported language codes: src={decrypted_src_lang}, tgt={decrypted_tgt_lang}")
|
530 |
raise HTTPException(status_code=400, detail=f"Unsupported language codes: src={decrypted_src_lang}, tgt={decrypted_tgt_lang}")
|
531 |
|
532 |
+
logger.info(f"Received translation request: {len(decrypted_sentences)} sentences, src_lang: {decrypted_src_lang}, tgt_lang: {decrypted_tgt_lang}, user_id: {user_id}")
|
533 |
|
534 |
|
535 |
|
|
|
542 |
logger.warning(f"Unexpected response format: {response}")
|
543 |
raise HTTPException(status_code=500, detail="Invalid response from translation service")
|
544 |
|
545 |
+
logger.info(f"Translation successful: {translations}")
|
546 |
return TranslationResponse(translations=translations)
|
547 |
|
548 |
except requests.Timeout:
|
|
|
601 |
logger.error(f"PDF decryption failed: {str(e)}")
|
602 |
raise HTTPException(status_code=400, detail="Invalid encrypted PDF")
|
603 |
|
604 |
+
logger.info("Processing PDF text extraction request", extra={
|
605 |
"endpoint": "/v1/extract-text",
|
606 |
"file_name": file.filename,
|
607 |
"page_number": page_number,
|
|
|
629 |
logger.warning("No page_content found in external API response")
|
630 |
extracted_text = ""
|
631 |
|
632 |
+
logger.info(f"PDF text extraction completed in {time() - start_time:.2f} seconds")
|
633 |
return PDFTextExtractionResponse(page_content=extracted_text.strip())
|
634 |
|
635 |
except requests.Timeout:
|
|
|
671 |
try:
|
672 |
import json
|
673 |
visual_query_request = VisualQueryRequest.parse_raw(data)
|
674 |
+
logger.info(f"Received visual query JSON: {data}")
|
675 |
except Exception as e:
|
676 |
logger.error(f"Failed to parse JSON data: {str(e)}")
|
677 |
raise HTTPException(status_code=422, detail=f"Invalid JSON data: {str(e)}")
|
|
|
713 |
logger.error(f"Image decryption failed: {str(e)}")
|
714 |
raise HTTPException(status_code=400, detail="Invalid encrypted image")
|
715 |
|
716 |
+
logger.info("Processing visual query request", extra={
|
717 |
"endpoint": "/v1/visual_query",
|
718 |
"query_length": len(decrypted_query),
|
719 |
"file_name": file.filename,
|
|
|
744 |
logger.warning(f"Empty answer received from external API: {response}")
|
745 |
raise HTTPException(status_code=500, detail="No answer provided by visual query service")
|
746 |
|
747 |
+
logger.info(f"Visual query successful: {answer}")
|
748 |
return VisualQueryResponse(answer=answer)
|
749 |
|
750 |
except requests.Timeout:
|
|
|
803 |
if decrypted_language not in allowed_languages:
|
804 |
raise HTTPException(status_code=400, detail=f"Language must be one of {allowed_languages}")
|
805 |
|
806 |
+
logger.info("Processing speech-to-speech request", extra={
|
807 |
"endpoint": "/v1/speech_to_speech",
|
808 |
"audio_filename": file.filename,
|
809 |
"language": decrypted_language,
|
|
|
827 |
raise HTTPException(status_code=400, detail="Transcription failed or returned empty text")
|
828 |
|
829 |
# Debug inputs
|
830 |
+
logger.info(f"Transcription: {transcription}, Language: {decrypted_language}")
|
831 |
|
832 |
# Chat processing
|
833 |
try:
|