"""Application-owned events emitted by the recommendation pipeline.""" from dataclasses import dataclass, field from typing import Literal from app.domain.models import Track @dataclass(frozen=True) class PipelineMetadataEvent: """Describe the interpreted request before track results.""" request_id: str intent_summary: str candidate_count: int type: Literal["metadata"] = field(default="metadata", init=False) @dataclass(frozen=True) class PipelineTrackEvent: """Carry one ranked, grounded recommendation.""" rank: int track: Track justification: str type: Literal["track"] = field(default="track", init=False) @dataclass(frozen=True) class PipelineWarningEvent: """Report a non-terminal degradation.""" code: str message: str type: Literal["warning"] = field(default="warning", init=False) @dataclass(frozen=True) class PipelineErrorEvent: """Report a terminal recommendation failure.""" code: str message: str type: Literal["error"] = field(default="error", init=False) @dataclass(frozen=True) class PipelineDoneEvent: """Report final track count and elapsed time.""" track_count: int total_ms: int type: Literal["done"] = field(default="done", init=False) type PipelineEvent = ( PipelineMetadataEvent | PipelineTrackEvent | PipelineWarningEvent | PipelineErrorEvent | PipelineDoneEvent )