| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 | from fastapi import FastAPI, HTTPException from fastapi.responses import FileResponsefrom pydantic import BaseModelfrom typing import Optionalfrom service import text_to_speech, get_llm_response, handle_image_message,handle_audio_message,send_audio_messagefrom enum import Enumapp = FastAPI()class TextToSpeechRequest(BaseModel):    text: str    output_path: Optional[str] = "reply.mp3"class TextToSpeechResponse(BaseModel):    file_path: Optional[str]    error: Optional[str] = Noneclass KindEnum(str, Enum):    audio = "audio"    image = "image"class LLMRequest(BaseModel):    user_input: str    media_id: Optional[str] = None    kind: Optional[KindEnum] = Noneclass LLMResponse(BaseModel):    response: Optional[str]    error: Optional[str] = None@app.post("/llm-response", response_model=LLMResponse)async def api_llm_response(req: LLMRequest):    text_message = req.user_input    image_base64 = None    if req.kind == KindEnum.image:        image_base64 = await handle_image_message(req.media_id)        result = get_llm_response(text_message, image_input=image_base64)        # print(result)    elif req.kind == KindEnum.audio:        text_message = await handle_audio_message(req.media_id)        result = get_llm_response(text_message)        audio_path = text_to_speech(text=result, output_path="reply.mp3")        return FileResponse(audio_path, media_type="audio/mpeg", filename="reply.mp3")    else:        result = get_llm_response(text_message)        if result is None:        return LLMResponse(response=None, error="LLM response generation failed.")    return LLMResponse(response=result)
 |