from __future__ import annotations from app.core.exceptions import AppError from app.modules.api.infrastructure.streaming.sse_encoder import SseEncoder from app.modules.api.infrastructure.streaming.sse_event_channel import SseEventChannel from app.schemas.common import ModuleName class StreamService: def __init__(self, channel: SseEventChannel, request_exists, encoder: SseEncoder | None = None) -> None: self._channel = channel self._request_exists = request_exists self._encoder = encoder or SseEncoder() async def subscribe(self, request_id: str): if not self._request_exists(request_id): raise AppError("request_not_found", f"Agent request not found: {request_id}", ModuleName.BACKEND) return await self._channel.subscribe(request_id, replay=True) async def unsubscribe(self, request_id: str, queue) -> None: await self._channel.unsubscribe(request_id, queue) def encode(self, event) -> str: return self._encoder.encode(event)