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())
|