sachin
commited on
Commit
·
4d4186f
1
Parent(s):
79ebe50
fix-tts
Browse files- src/server/main.py +30 -29
src/server/main.py
CHANGED
@@ -476,60 +476,61 @@ async def extract_text(
|
|
476 |
logger.error(f"Invalid JSON response from external API: {str(e)}")
|
477 |
raise HTTPException(status_code=500, detail="Invalid response format from external API")
|
478 |
|
479 |
-
from fastapi import FastAPI, File, HTTPException, Request, UploadFile, Form
|
480 |
-
from pydantic import
|
481 |
-
|
|
|
|
|
|
|
|
|
|
|
482 |
|
483 |
@app.post("/v1/visual_query",
|
484 |
response_model=VisualQueryResponse,
|
485 |
summary="Visual Query with Image",
|
486 |
-
description="Process a visual query with a text query, image, and language codes
|
487 |
tags=["Chat"],
|
488 |
responses={
|
489 |
200: {"description": "Query response", "model": VisualQueryResponse},
|
490 |
400: {"description": "Invalid query or language codes"},
|
491 |
-
422: {"description": "Validation error in request body
|
492 |
504: {"description": "Visual query service timeout"}
|
493 |
})
|
494 |
async def visual_query(
|
495 |
request: Request,
|
496 |
-
|
497 |
-
file: UploadFile = File(..., description="Image file to analyze")
|
|
|
|
|
498 |
):
|
499 |
-
#
|
500 |
-
|
501 |
-
visual_query_request = VisualQueryRequest.model_validate_json(data)
|
502 |
-
logger.info(f"Received visual query JSON: {data}")
|
503 |
-
except json.JSONDecodeError as e:
|
504 |
-
logger.error(f"Invalid JSON format: {str(e)}")
|
505 |
-
raise HTTPException(status_code=422, detail=f"Invalid JSON format: {str(e)}")
|
506 |
-
except ValidationError as e:
|
507 |
-
logger.error(f"Validation error in JSON data: {str(e)}")
|
508 |
-
raise HTTPException(status_code=422, detail=f"Invalid data: {str(e)}")
|
509 |
-
except Exception as e:
|
510 |
-
logger.error(f"Unexpected error parsing JSON data: {str(e)}")
|
511 |
-
raise HTTPException(status_code=422, detail=f"Failed to parse JSON data: {str(e)}")
|
512 |
-
|
513 |
-
if not visual_query_request.query.strip():
|
514 |
raise HTTPException(status_code=400, detail="Query cannot be empty")
|
515 |
-
if len(
|
516 |
raise HTTPException(status_code=400, detail="Query cannot exceed 1000 characters")
|
517 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
518 |
logger.info("Processing visual query request", extra={
|
519 |
"endpoint": "/v1/visual_query",
|
520 |
-
"query_length": len(
|
521 |
"file_name": file.filename,
|
522 |
"client_ip": request.client.host,
|
523 |
-
"src_lang":
|
524 |
-
"tgt_lang":
|
525 |
})
|
526 |
|
527 |
-
external_url = f"{os.getenv('EXTERNAL_API_BASE_URL')}/v1/visual_query/?src_lang={
|
528 |
|
529 |
try:
|
530 |
file_content = await file.read()
|
531 |
files = {"file": (file.filename, file_content, file.content_type)}
|
532 |
-
data = {"query":
|
533 |
|
534 |
response = requests.post(
|
535 |
external_url,
|
@@ -559,7 +560,7 @@ async def visual_query(
|
|
559 |
except ValueError as e:
|
560 |
logger.error(f"Invalid JSON response: {str(e)}")
|
561 |
raise HTTPException(status_code=500, detail="Invalid response format from visual query service")
|
562 |
-
|
563 |
from enum import Enum
|
564 |
|
565 |
class SupportedLanguage(str, Enum):
|
|
|
476 |
logger.error(f"Invalid JSON response from external API: {str(e)}")
|
477 |
raise HTTPException(status_code=500, detail="Invalid response format from external API")
|
478 |
|
479 |
+
from fastapi import FastAPI, File, HTTPException, Request, UploadFile, Form, Query
|
480 |
+
from pydantic import BaseModel, Field
|
481 |
+
|
482 |
+
class VisualQueryResponse(BaseModel):
|
483 |
+
answer: str
|
484 |
+
|
485 |
+
class Config:
|
486 |
+
schema_extra = {"example": {"answer": "The image shows a screenshot of a webpage."}}
|
487 |
|
488 |
@app.post("/v1/visual_query",
|
489 |
response_model=VisualQueryResponse,
|
490 |
summary="Visual Query with Image",
|
491 |
+
description="Process a visual query with a text query, image, and language codes. Provide the query and image as form data, and source/target languages as query parameters.",
|
492 |
tags=["Chat"],
|
493 |
responses={
|
494 |
200: {"description": "Query response", "model": VisualQueryResponse},
|
495 |
400: {"description": "Invalid query or language codes"},
|
496 |
+
422: {"description": "Validation error in request body"},
|
497 |
504: {"description": "Visual query service timeout"}
|
498 |
})
|
499 |
async def visual_query(
|
500 |
request: Request,
|
501 |
+
query: str = Form(..., description="Text query to describe or analyze the image (e.g., 'describe the image')"),
|
502 |
+
file: UploadFile = File(..., description="Image file to analyze (e.g., PNG, JPEG)"),
|
503 |
+
src_lang: str = Query(..., description="Source language code (e.g., kan_Knda, en)"),
|
504 |
+
tgt_lang: str = Query(..., description="Target language code (e.g., kan_Knda, en)")
|
505 |
):
|
506 |
+
# Validate query
|
507 |
+
if not query.strip():
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
508 |
raise HTTPException(status_code=400, detail="Query cannot be empty")
|
509 |
+
if len(query) > 1000:
|
510 |
raise HTTPException(status_code=400, detail="Query cannot exceed 1000 characters")
|
511 |
|
512 |
+
# Validate language codes
|
513 |
+
supported_languages = ["kan_Knda", "hin_Deva", "tam_Taml", "en"] # Add more as needed
|
514 |
+
if src_lang not in supported_languages:
|
515 |
+
raise HTTPException(status_code=400, detail=f"Unsupported source language: {src_lang}. Must be one of {supported_languages}")
|
516 |
+
if tgt_lang not in supported_languages:
|
517 |
+
raise HTTPException(status_code=400, detail=f"Unsupported target language: {tgt_lang}. Must be one of {supported_languages}")
|
518 |
+
|
519 |
logger.info("Processing visual query request", extra={
|
520 |
"endpoint": "/v1/visual_query",
|
521 |
+
"query_length": len(query),
|
522 |
"file_name": file.filename,
|
523 |
"client_ip": request.client.host,
|
524 |
+
"src_lang": src_lang,
|
525 |
+
"tgt_lang": tgt_lang
|
526 |
})
|
527 |
|
528 |
+
external_url = f"{os.getenv('EXTERNAL_API_BASE_URL')}/v1/visual_query/?src_lang={src_lang}&tgt_lang={tgt_lang}"
|
529 |
|
530 |
try:
|
531 |
file_content = await file.read()
|
532 |
files = {"file": (file.filename, file_content, file.content_type)}
|
533 |
+
data = {"query": query}
|
534 |
|
535 |
response = requests.post(
|
536 |
external_url,
|
|
|
560 |
except ValueError as e:
|
561 |
logger.error(f"Invalid JSON response: {str(e)}")
|
562 |
raise HTTPException(status_code=500, detail="Invalid response format from visual query service")
|
563 |
+
|
564 |
from enum import Enum
|
565 |
|
566 |
class SupportedLanguage(str, Enum):
|