64 lines
2.1 KiB
Python
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]]
|