CLMARRARA's picture
adicionado LLM_MODE na API
d5a7e20
import app.bootstrap
from fastapi import FastAPI, UploadFile, File, Form, Request
from fastapi.middleware.cors import CORSMiddleware
import shutil
import os
import json
from app.config import LLM_MODE, VIDEO_TEMP_PATH, LOG_FILE
from app.pipeline import run_pipeline
from app.decision import classify
from app.llm import ensure_deepface_model, ensure_model_ollama, generate_alert
from app.logger import get_logger, log
app = FastAPI()
# LIBERAR CORS (para testes)
app.add_middleware(
CORSMiddleware,
allow_origins=["*"], # ou depois restringe
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
#allow_origins=[
# "https://seu-space.hf.space"
#]
def get_logger_from_request(request: Request):
return request.app.state.logger
@app.on_event("startup")
def startup_event():
app.state.logger = get_logger("API")
app.state.logger.info("Aplicação iniciada.")
ensure_deepface_model(app.state.logger)
@app.get("/")
def health(request: Request):
logger = get_logger_from_request(request)
log("Iniciando health check.", logger=logger)
return {"status": "ok"}
@app.get("/logs")
def read_logs(request: Request):
logger = get_logger_from_request(request)
log("Lendo logs.", logger=logger)
try:
if not os.path.exists(LOG_FILE):
return {"status": "error", "message": "Arquivo de log não encontrado"}
with open(LOG_FILE, "r") as f:
content = f.read()
return {
"status": "success",
"log": content.splitlines()
}
except Exception as e:
return {
"status": "error",
"message": str(e)
}
@app.post("/analyze")
async def analyze(request: Request, video: UploadFile = File(...), medical_text: str = Form(None)):
logger = get_logger_from_request(request)
log("Iniciando análise.", logger=logger)
log("Salvando vídeo.", logger=logger)
with open(VIDEO_TEMP_PATH, "wb") as buffer:
shutil.copyfileobj(video.file, buffer)
log("Vídeo salvo com sucesso!", logger=logger)
log("Iniciando Pipeline", logger=logger)
data = run_pipeline(VIDEO_TEMP_PATH, logger)
log("Pipeline concluído.", logger=logger)
log("Iniciando classificação", logger=logger)
estado = classify(data)
log("Classificação concluída com sucesso!", logger=logger)
if LLM_MODE == "ollama":
log("Iniciando LLM.", logger=logger)
ensure_model_ollama(logger=logger)
log("LLM iniciada com sucesso!", logger=logger)
log("Iniciando geração de alertas.", logger=logger)
alerta = generate_alert(data, medical_text, logger=logger)
log("Geração de alertas concluída com sucesso!", logger=logger)
log(f"Excluindo arquivo de video: {VIDEO_TEMP_PATH}")
if os.path.exists(VIDEO_TEMP_PATH):
os.remove(VIDEO_TEMP_PATH)
log(f"Arquivo de video '{VIDEO_TEMP_PATH}' excluído com sucesso!", logger=logger)
log("retornando resultados...", logger=logger)
return {
"estado": estado,
"alerta": alerta,
"data": data
}