jade_port / app.py
Madras1's picture
Update app.py
5744fd4 verified
raw
history blame
2.63 kB
# app.py - VERSÃO COMPLETA COM VOZ (BASE64) E VISÃO
import os
import base64
import io
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from pydantic import BaseModel
from PIL import Image
from jade.core import JadeAgent
print("Iniciando a J.A.D.E. com FastAPI...")
agent = JadeAgent()
print("J.A.D.E. pronta para receber requisições.")
app = FastAPI(title="J.A.D.E. API")
app.add_middleware(
CORSMiddleware,
allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"],
)
class UserRequest(BaseModel):
user_input: str
image_base64: str | None = None
@app.post("/chat")
def handle_chat(request: UserRequest):
try:
vision_context = None
if request.image_base64:
try:
header, encoded_data = request.image_base64.split(",", 1)
image_bytes = base64.b64decode(encoded_data)
pil_image = Image.open(io.BytesIO(image_bytes))
vision_context = agent.image_handler.process_pil_image(pil_image)
except Exception as img_e:
print(f"Erro ao processar imagem Base64: {img_e}")
vision_context = "Houve um erro ao analisar a imagem."
final_user_input = request.user_input if request.user_input else "Descreva a imagem em detalhes."
bot_response_text, audio_path = agent.respond(
user_input=final_user_input,
vision_context=vision_context
)
# LÓGICA DO ÁUDIO: Converte o arquivo MP3 gerado para Base64
audio_base64 = None
if audio_path and os.path.exists(audio_path):
print(f"Codificando arquivo de áudio: {audio_path}")
with open(audio_path, "rb") as audio_file:
audio_bytes = audio_file.read()
audio_base64 = base64.b64encode(audio_bytes).decode('utf-8')
os.remove(audio_path) # Importante: Limpa o arquivo temporário do servidor
return {
"success": True,
"bot_response": bot_response_text,
"audio_base64": audio_base64 # Envia o áudio como texto para o front-end
}
except Exception as e:
print(f"Erro crítico no endpoint /chat: {e}")
return {"success": False, "error": str(e)}
@app.get("/")
def root():
return {"message": "Servidor J.A.D.E. com FastAPI está online."}
if __name__ == "__main__":
import uvicorn
port = int(os.environ.get("PORT", 7860))
print(f"Iniciando o servidor Uvicorn em http://0.0.0.0:{port}")
uvicorn.run(app, host="0.0.0.0", port=port)