|
|
|
|
|
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 |
|
|
) |
|
|
|
|
|
|
|
|
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) |
|
|
|
|
|
return { |
|
|
"success": True, |
|
|
"bot_response": bot_response_text, |
|
|
"audio_base64": audio_base64 |
|
|
} |
|
|
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) |