from pydantic import BaseModel from datetime import datetime class TranscriptOut(BaseModel): id: str filename: str file_path: str line_count: int file_size: int status: str error_message: str uploaded_at: datetime class Config: from_attributes = True class PersonOut(BaseModel): id: str name: str nickname: str filename: str file_path: str photo_path: str info: str uploaded_at: datetime class Config: from_attributes = True class StoryOut(BaseModel): id: str title: str summary: str content: str raw_material: str speaker_nickname: str source_transcript_id: str source_lines: str duration_minutes: float confidence: float confidence_level: str person_id: str | None match_status: str created_at: datetime class Config: from_attributes = True class StoryEdit(BaseModel): title: str | None = None summary: str | None = None content: str | None = None class MatchCreate(BaseModel): story_id: str person_id: str class MatchOut(BaseModel): story_id: str person_id: str person_name: str story_title: str class Config: from_attributes = True class ExportItemOut(BaseModel): person_id: str person_name: str story_count: int has_photo: bool class SettingsOut(BaseModel): llm_provider: str llm_model: str llm_base_url: str llm_api_key: str segment_max_lines: int story_min_lines: int confidence_threshold: float temperature: float class SettingsUpdate(BaseModel): llm_provider: str | None = None llm_model: str | None = None llm_base_url: str | None = None llm_api_key: str | None = None segment_max_lines: int | None = None story_min_lines: int | None = None confidence_threshold: float | None = None temperature: float | None = None