"""Pipeline data types for the multi-agent diagnose pipeline.""" from __future__ import annotations from dataclasses import dataclass from typing import Literal SeverityLabel = Literal["CRITICAL", "ERROR", "WARN", "INFO", "DEBUG", "UNKNOWN"] @dataclass(frozen=True) class EventCluster: """A time-correlated group of log entries within the timeline.""" cluster_id: str entries: tuple[str, ...] # entry_id refs start_iso: str | None end_iso: str | None duration_seconds: float source_ids: tuple[str, ...] pattern_tags: tuple[str, ...] severity: SeverityLabel burst: bool gap_before_seconds: float representative_text: str @dataclass(frozen=True) class TimelineResult: """Structured timeline of event clusters built from log entries.""" clusters: tuple[EventCluster, ...] total_entries: int window_start: str | None window_end: str | None gap_count: int burst_count: int dominant_sources: tuple[str, ...] @dataclass(frozen=True) class ClassifiedTimeline: """Timeline annotated with ML-assigned severity per cluster.""" timeline: TimelineResult cluster_severities: dict[str, SeverityLabel] classifier_used: Literal["ml", "pattern_tags", "regex"] model_id: str | None @dataclass(frozen=True) class Hypothesis: """A root-cause hypothesis generated by Stage 3.""" hypothesis_id: str title: str description: str confidence: float supporting_cluster_ids: tuple[str, ...] runbook_refs: tuple[str, ...] severity: SeverityLabel @dataclass(frozen=True) class RankedHypothesis: """A hypothesis enriched by Stage 4 false-positive suppression.""" hypothesis: Hypothesis novelty_score: float similarity_to_known: float suppress: bool suppression_reason: str | None