Files
mitus/cht/agent/base.py
2026-04-02 22:57:21 -03:00

65 lines
1.6 KiB
Python

"""
Abstract base for agent providers.
Each provider takes a user message + session context and yields response
text chunks for streaming into the UI.
"""
from abc import ABC, abstractmethod
from dataclasses import dataclass, field
from pathlib import Path
from typing import Iterator
@dataclass
class FrameRef:
id: str # "F0001"
path: Path # absolute path to JPEG
timestamp: float # seconds into recording
@dataclass
class TranscriptRef:
id: str # "T0001"
start: float # seconds into recording
end: float # seconds into recording
text: str
@dataclass
class SessionContext:
session_dir: Path
frames: list[FrameRef] # all captured frames so far
duration: float # current recording duration (seconds)
mentioned_frames: list[FrameRef] = field(default_factory=list)
transcript_segments: list[TranscriptRef] = field(default_factory=list)
mentioned_transcripts: list[TranscriptRef] = field(default_factory=list)
class AgentProvider(ABC):
@abstractmethod
def stream(self, message: str, context: SessionContext) -> Iterator[str]:
"""Yield response text chunks."""
...
@property
@abstractmethod
def name(self) -> str:
...
@property
@abstractmethod
def available_models(self) -> list[str]:
"""Return list of model IDs this provider supports."""
...
@property
@abstractmethod
def model(self) -> str:
...
@model.setter
@abstractmethod
def model(self, value: str):
...