Spaces:
Running
on
T4
Running
on
T4
| """ | |
| Pydantic models untuk request/response | |
| """ | |
| from pydantic import BaseModel, Field | |
| from typing import Optional, Dict, Any, List | |
| from enum import Enum | |
| class TaskStatus(str, Enum): | |
| """Task status enum""" | |
| QUEUED = "queued" | |
| PROCESSING = "processing" | |
| COMPLETED = "completed" | |
| FAILED = "failed" | |
| class AnalysisRequest(BaseModel): | |
| """Request untuk analisis audio""" | |
| reference_text: Optional[str] = Field(None, description="Teks referensi untuk perbandingan") | |
| topic_id: Optional[str] = Field(None, description="ID topik untuk analisis kata kunci") | |
| analyze_tempo: bool = Field(True, description="Analisis tempo dan jeda") | |
| analyze_articulation: bool = Field(True, description="Analisis artikulasi/pronunciation") | |
| analyze_structure: bool = Field(True, description="Analisis struktur berbicara") | |
| analyze_keywords: bool = Field(False, description="Analisis kata kunci (perlu topic_id)") | |
| class TaskResponse(BaseModel): | |
| """Response untuk submit task""" | |
| task_id: str | |
| status: TaskStatus | |
| message: str | |
| class TaskStatusResponse(BaseModel): | |
| """Response untuk check status task""" | |
| task_id: str | |
| status: TaskStatus | |
| progress: Optional[float] = None | |
| result: Optional[Dict[str, Any]] = None | |
| error: Optional[str] = None | |
| created_at: Optional[str] = None | |
| updated_at: Optional[str] = None | |
| class AnalysisResult(BaseModel): | |
| """Full analysis result""" | |
| task_id: str | |
| status: str | |
| transcript: str | |
| # Results dari masing-masing analisis | |
| tempo: Optional[Dict[str, Any]] = None | |
| articulation: Optional[Dict[str, Any]] = None | |
| structure: Optional[Dict[str, Any]] = None | |
| keywords: Optional[Dict[str, Any]] = None | |
| # Summary | |
| overall_score: Optional[float] = None | |
| processing_time: Optional[float] = None | |