dograh/api/schemas/workflow_recording.py

74 lines
2.3 KiB
Python
Raw Normal View History

"""Pydantic schemas for workflow recording operations."""
from datetime import datetime
from typing import Any, Dict, List, Optional
from pydantic import BaseModel, Field
class RecordingUploadRequestSchema(BaseModel):
"""Request schema for getting a presigned upload URL."""
workflow_id: int = Field(..., description="Workflow ID this recording belongs to")
filename: str = Field(..., description="Original filename of the audio file")
mime_type: str = Field(
default="audio/wav", description="MIME type of the audio file"
)
file_size: int = Field(
...,
gt=0,
le=5_242_880,
description="File size in bytes (max 5MB)",
)
class RecordingUploadResponseSchema(BaseModel):
"""Response schema with presigned upload URL."""
upload_url: str = Field(..., description="Presigned URL for uploading the audio")
recording_id: str = Field(..., description="Short unique recording ID")
storage_key: str = Field(..., description="Storage key where file will be uploaded")
class RecordingCreateRequestSchema(BaseModel):
"""Request schema for creating a recording record after upload."""
recording_id: str = Field(..., description="Short recording ID from upload step")
workflow_id: int = Field(..., description="Workflow ID")
tts_provider: str = Field(..., description="TTS provider (e.g. elevenlabs)")
tts_model: str = Field(..., description="TTS model name")
tts_voice_id: str = Field(..., description="TTS voice identifier")
transcript: str = Field(
..., description="User-provided transcript of the recording"
)
storage_key: str = Field(..., description="Storage key from upload step")
metadata: Optional[Dict[str, Any]] = Field(
default=None, description="Optional metadata (file_size, duration, etc.)"
)
class RecordingResponseSchema(BaseModel):
"""Response schema for a single recording."""
id: int
recording_id: str
workflow_id: int
organization_id: int
tts_provider: str
tts_model: str
tts_voice_id: str
transcript: str
storage_key: str
storage_backend: str
metadata: Dict[str, Any]
created_by: int
created_at: datetime
is_active: bool
class RecordingListResponseSchema(BaseModel):
"""Response schema for list of recordings."""
recordings: List[RecordingResponseSchema]
total: int