sachin
commited on
Commit
·
381b034
1
Parent(s):
12d0077
add-lanugae
Browse files- src/server/main.py +4 -75
src/server/main.py
CHANGED
@@ -635,6 +635,7 @@ async def extract_text(
|
|
635 |
request: Request,
|
636 |
file: UploadFile = File(..., description="Encrypted PDF file to extract text from"),
|
637 |
page_number: int = Query(1, description="Page number to extract text from (1-based indexing)"),
|
|
|
638 |
credentials: HTTPAuthorizationCredentials = Depends(bearer_scheme),
|
639 |
x_session_key: str = Header(..., alias="X-Session-Key")
|
640 |
):
|
@@ -649,6 +650,7 @@ async def extract_text(
|
|
649 |
try:
|
650 |
encrypted_content = await file.read()
|
651 |
decrypted_content = decrypt_data(encrypted_content, session_key)
|
|
|
652 |
except Exception as e:
|
653 |
logger.error(f"PDF decryption failed: {str(e)}")
|
654 |
raise HTTPException(status_code=400, detail="Invalid encrypted PDF")
|
@@ -657,6 +659,7 @@ async def extract_text(
|
|
657 |
"endpoint": "/v1/extract-text",
|
658 |
"file_name": file.filename,
|
659 |
"page_number": page_number,
|
|
|
660 |
"client_ip": get_remote_address(request),
|
661 |
"user_id": user_id
|
662 |
})
|
@@ -664,7 +667,7 @@ async def extract_text(
|
|
664 |
start_time = time()
|
665 |
try:
|
666 |
# Call external API
|
667 |
-
external_url = f"{settings.external_pdf_api_base_url}/extract-text/?page_number={page_number}"
|
668 |
files = {"file": (file.filename, decrypted_content, file.content_type)}
|
669 |
|
670 |
response = requests.post(
|
@@ -894,80 +897,6 @@ async def speech_to_speech(
|
|
894 |
logger.error(f"External speech-to-speech API error: {str(e)}", extra={"user_id": user_id})
|
895 |
raise HTTPException(status_code=500, detail=f"External API error: {str(e)}")
|
896 |
|
897 |
-
'''
|
898 |
-
@app.post("/v1/speech_to_speech_v2",
|
899 |
-
summary="Speech-to-Speech Conversion",
|
900 |
-
description="Convert input encrypted speech to processed speech in the specified encrypted language by calling an external speech-to-speech API. Rate limited to 5 requests per minute per user. Requires authentication and X-Session-Key header.",
|
901 |
-
tags=["Audio"],
|
902 |
-
responses={
|
903 |
-
200: {"description": "Audio stream", "content": {"audio/mp3": {"example": "Binary audio data"}}},
|
904 |
-
400: {"description": "Invalid input, encrypted audio, or language"},
|
905 |
-
401: {"description": "Unauthorized - Token required"},
|
906 |
-
429: {"description": "Rate limit exceeded"},
|
907 |
-
504: {"description": "External API timeout"},
|
908 |
-
500: {"description": "External API error"}
|
909 |
-
})
|
910 |
-
async def speech_to_speech_v2(
|
911 |
-
request: Request,
|
912 |
-
file: UploadFile = File(..., description="Encrypted audio file to process"),
|
913 |
-
language: str = Query(..., description="Base64-encoded encrypted language of the audio (kannada, hindi, tamil after decryption)"),
|
914 |
-
) -> StreamingResponse:
|
915 |
-
|
916 |
-
# Decrypt the language
|
917 |
-
try:
|
918 |
-
encrypted_language = language
|
919 |
-
decrypted_language = encrypted_language
|
920 |
-
except Exception as e:
|
921 |
-
logger.error(f"Language decryption failed: {str(e)}")
|
922 |
-
raise HTTPException(status_code=400, detail="Invalid encrypted language")
|
923 |
-
|
924 |
-
# Validate language
|
925 |
-
allowed_languages = [lang.value for lang in SupportedLanguage]
|
926 |
-
if decrypted_language not in allowed_languages:
|
927 |
-
raise HTTPException(status_code=400, detail=f"Language must be one of {allowed_languages}")
|
928 |
-
|
929 |
-
logger.info("Processing speech-to-speech request", extra={
|
930 |
-
"endpoint": "/v1/speech_to_speech",
|
931 |
-
"audio_filename": file.filename,
|
932 |
-
"language": decrypted_language,
|
933 |
-
"client_ip": get_remote_address(request),
|
934 |
-
})
|
935 |
-
|
936 |
-
try:
|
937 |
-
encrypted_content = await file.read()
|
938 |
-
file_content = encrypted_content
|
939 |
-
files = {"file": (file.filename, file_content, file.content_type)}
|
940 |
-
external_url = f"{settings.external_api_base_url}/v1/speech_to_speech?language={decrypted_language}"
|
941 |
-
|
942 |
-
response = requests.post(
|
943 |
-
external_url,
|
944 |
-
files=files,
|
945 |
-
headers={"accept": "application/json"},
|
946 |
-
stream=True,
|
947 |
-
timeout=60
|
948 |
-
)
|
949 |
-
response.raise_for_status()
|
950 |
-
|
951 |
-
headers = {
|
952 |
-
"Content-Disposition": f"inline; filename=\"speech.mp3\"",
|
953 |
-
"Cache-Control": "no-cache",
|
954 |
-
"Content-Type": "audio/mp3"
|
955 |
-
}
|
956 |
-
|
957 |
-
return StreamingResponse(
|
958 |
-
response.iter_content(chunk_size=8192),
|
959 |
-
media_type="audio/mp3",
|
960 |
-
headers=headers
|
961 |
-
)
|
962 |
-
|
963 |
-
except requests.Timeout:
|
964 |
-
logger.error("External speech-to-speech API timed out")
|
965 |
-
raise HTTPException(status_code=504, detail="External API timeout")
|
966 |
-
except requests.RequestException as e:
|
967 |
-
logger.error(f"External speech-to-speech API error: {str(e)}")
|
968 |
-
raise HTTPException(status_code=500, detail=f"External API error: {str(e)}")
|
969 |
-
|
970 |
-
'''
|
971 |
if __name__ == "__main__":
|
972 |
parser = argparse.ArgumentParser(description="Run the FastAPI server.")
|
973 |
parser.add_argument("--port", type=int, default=settings.port, help="Port to run the server on.")
|
|
|
635 |
request: Request,
|
636 |
file: UploadFile = File(..., description="Encrypted PDF file to extract text from"),
|
637 |
page_number: int = Query(1, description="Page number to extract text from (1-based indexing)"),
|
638 |
+
encrypted_language: str = Query(..., description="Base64-encoded encrypted language of the audio (kannada, hindi, tamil after decryption)"),
|
639 |
credentials: HTTPAuthorizationCredentials = Depends(bearer_scheme),
|
640 |
x_session_key: str = Header(..., alias="X-Session-Key")
|
641 |
):
|
|
|
650 |
try:
|
651 |
encrypted_content = await file.read()
|
652 |
decrypted_content = decrypt_data(encrypted_content, session_key)
|
653 |
+
decrpyted_language = decrypt_data(encrypted_language, session_key)
|
654 |
except Exception as e:
|
655 |
logger.error(f"PDF decryption failed: {str(e)}")
|
656 |
raise HTTPException(status_code=400, detail="Invalid encrypted PDF")
|
|
|
659 |
"endpoint": "/v1/extract-text",
|
660 |
"file_name": file.filename,
|
661 |
"page_number": page_number,
|
662 |
+
"decrpyted_language" : decrpyted_language,
|
663 |
"client_ip": get_remote_address(request),
|
664 |
"user_id": user_id
|
665 |
})
|
|
|
667 |
start_time = time()
|
668 |
try:
|
669 |
# Call external API
|
670 |
+
external_url = f"{settings.external_pdf_api_base_url}/extract-text/?page_number={page_number}&language={decrpyted_language}"
|
671 |
files = {"file": (file.filename, decrypted_content, file.content_type)}
|
672 |
|
673 |
response = requests.post(
|
|
|
897 |
logger.error(f"External speech-to-speech API error: {str(e)}", extra={"user_id": user_id})
|
898 |
raise HTTPException(status_code=500, detail=f"External API error: {str(e)}")
|
899 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
900 |
if __name__ == "__main__":
|
901 |
parser = argparse.ArgumentParser(description="Run the FastAPI server.")
|
902 |
parser.add_argument("--port", type=int, default=settings.port, help="Port to run the server on.")
|