import json from fastapi import APIRouter, Query from sse_starlette.sse import EventSourceResponse from app.services.dialogue_service import DialogueService router = APIRouter(prefix="/api/v1/dialogue", tags=["dialogue"]) dialogue_service = DialogueService() @router.get("/stream") async def stream_dialogue( dialogue_id: str | None = Query(default=None), user_text: str | None = Query(default=None), scene_prompt: str | None = Query(default=None), difficulty: str = Query(default="A2"), ) -> EventSourceResponse: resolved_id = dialogue_id or dialogue_service.create_dialogue_id() async def event_generator(): async for chunk in dialogue_service.stream_dialogue( dialogue_id=resolved_id, user_text=user_text, scene_prompt=scene_prompt, difficulty=difficulty, ): yield {"event": "message", "data": json.dumps(chunk, ensure_ascii=False)} yield {"event": "done", "data": json.dumps({"dialogue_id": resolved_id})} return EventSourceResponse(event_generator())