Files
voidea/app/schemas/pipeline.py
T

64 lines
2.1 KiB
Python

"""Pipeline config and stats schemas for VoIdea."""
from datetime import datetime
from typing import Any, Optional
from pydantic import BaseModel, Field
class PipelineStageConfig(BaseModel):
enabled: bool = True
noise_threshold: float | None = None
silence_timeout_ms: int | None = None
min_audio_duration_ms: int | None = None
word: str | None = None
timeout_minutes: int | None = None
sensitivity: float | None = None
mode: str | None = None
timeout_ms: int | None = None
verified_threshold: int | None = None
warning_threshold: int | None = None
max_agents_per_dialog: int | None = None
min_samples: int | None = None
learning_rate: float | None = None
class PipelineConfigResponse(BaseModel):
vad: PipelineStageConfig = Field(default_factory=PipelineStageConfig)
wake_word: PipelineStageConfig = Field(default_factory=PipelineStageConfig)
semantic_validation: PipelineStageConfig = Field(default_factory=PipelineStageConfig)
confidence: PipelineStageConfig = Field(default_factory=PipelineStageConfig)
agent_chaining: PipelineStageConfig = Field(default_factory=PipelineStageConfig)
auto_tuning: PipelineStageConfig = Field(default_factory=PipelineStageConfig)
stages_order: list[str] = [
"vad", "wake_word", "semantic_validation", "routing", "verification"
]
class PipelineConfigUpdate(BaseModel):
vad: Optional[dict[str, Any]] = None
wake_word: Optional[dict[str, Any]] = None
semantic_validation: Optional[dict[str, Any]] = None
confidence: Optional[dict[str, Any]] = None
agent_chaining: Optional[dict[str, Any]] = None
auto_tuning: Optional[dict[str, Any]] = None
stages_order: Optional[list[str]] = None
class PipelineStatsEntry(BaseModel):
id: str
user_id: str | None
stage: str
passed: bool
reason: str | None
duration_ms: int | None
created_at: datetime
class PipelineStatsSummary(BaseModel):
total_entries: int
stages: dict[str, int]
passed_ratio: float
avg_duration_ms: float | None
fail_reasons: list[tuple[str, int]]