feat: complete voice session safety and confirmation flow
This commit is contained in:
@@ -42,6 +42,12 @@ class VoiceSessionFinalizeRequest(BaseModel):
|
||||
generate_final_audio: bool = False
|
||||
|
||||
|
||||
class VoiceTurnConfirmRequest(BaseModel):
|
||||
"""Resolve one pending confirmation before the story continues."""
|
||||
|
||||
action: Literal["accept", "retry_recording", "switch_to_text"]
|
||||
|
||||
|
||||
class VoiceSessionAbandonRequest(BaseModel):
|
||||
"""Explicitly abandon one in-progress session."""
|
||||
|
||||
@@ -75,8 +81,12 @@ class VoiceTurnSummaryResponse(BaseModel):
|
||||
intent_confidence: float | None = None
|
||||
understanding_summary: str | None = None
|
||||
requires_confirmation: bool = False
|
||||
confirmation_state: str = "not_needed"
|
||||
confirmation_reason: str | None = None
|
||||
confirmation_message: str | None = None
|
||||
safety_flags: list[str] = Field(default_factory=list)
|
||||
safety_blocked: bool = False
|
||||
safety_message: str | None = None
|
||||
assistant_text: str | None = None
|
||||
assistant_audio_ready: bool = False
|
||||
assistant_audio_url: str | None = None
|
||||
@@ -105,7 +115,10 @@ class VoiceSessionSummaryResponse(BaseModel):
|
||||
latest_detected_intent: str | None = None
|
||||
latest_understanding_summary: str | None = None
|
||||
latest_requires_confirmation: bool = False
|
||||
latest_confirmation_state: str | None = None
|
||||
latest_confirmation_message: str | None = None
|
||||
latest_safety_flags: list[str] = Field(default_factory=list)
|
||||
latest_safety_message: str | None = None
|
||||
latest_assistant_audio_ready: bool = False
|
||||
last_turn_status: str | None = None
|
||||
transcription_mode_hint: str | None = None
|
||||
@@ -131,6 +144,25 @@ class VoiceTurnAcceptedResponse(BaseModel):
|
||||
status: str
|
||||
|
||||
|
||||
class VoiceSessionAnalyticsResponse(BaseModel):
|
||||
"""Aggregated voice co-creation analytics for one user."""
|
||||
|
||||
window_days: int | None = None
|
||||
total_sessions: int = 0
|
||||
active_sessions: int = 0
|
||||
finalized_sessions: int = 0
|
||||
abandoned_sessions: int = 0
|
||||
total_turns: int = 0
|
||||
successful_turns: int = 0
|
||||
failed_turns: int = 0
|
||||
asr_failures: int = 0
|
||||
tts_failures: int = 0
|
||||
low_confidence_turns: int = 0
|
||||
safety_interventions: int = 0
|
||||
turn_success_rate: float = 0.0
|
||||
finalize_conversion_rate: float = 0.0
|
||||
|
||||
|
||||
class VoiceSessionFinalizeResponse(BaseModel):
|
||||
"""Finalize response after a session is converted into a story."""
|
||||
|
||||
|
||||
Reference in New Issue
Block a user