import json from fastapi import APIRouter from fastapi.responses import StreamingResponse from backend.app.models.schemas import ( ChatRequest, ChatResponse, IncidentClassificationRequest, IncidentClassificationResponse, RiskAssessmentRequest, RiskAssessmentResponse, ) from backend.app.services.inference_service import classify_incident, generate_response, stream_response from backend.app.services.risk_engine import compute_risk router = APIRouter(prefix="/v1", tags=["worlddisasterlm"]) @router.post("/chat", response_model=ChatResponse) def chat(request: ChatRequest) -> ChatResponse: return generate_response(request.messages, language=request.language, region=request.region) @router.post("/chat/stream") async def chat_stream(request: ChatRequest) -> StreamingResponse: async def event_stream(): async for chunk in stream_response(request.messages, language=request.language, region=request.region): yield f"data: {json.dumps({'token': chunk})}\n\n" yield "data: [DONE]\n\n" return StreamingResponse(event_stream(), media_type="text/event-stream") @router.post("/risk/score", response_model=RiskAssessmentResponse) def risk_score(request: RiskAssessmentRequest) -> RiskAssessmentResponse: return compute_risk( hazard_type=request.hazard_type, vulnerability_index=request.vulnerability_index, exposure_index=request.exposure_index, ) @router.post("/incidents/classify", response_model=IncidentClassificationResponse) def classify(request: IncidentClassificationRequest) -> IncidentClassificationResponse: return classify_incident(request.text)