2026-08-13 16:56:32 +08:00
|
|
|
from enum import Enum
|
|
|
|
|
from typing import Any
|
|
|
|
|
|
2026-08-21 16:19:35 +08:00
|
|
|
from pydantic import BaseModel, Field, HttpUrl, model_validator
|
2026-08-13 16:56:32 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
class AnalysisType(str, Enum):
|
|
|
|
|
AUDIO_CLASSIFICATION = "AUDIO_CLASSIFICATION"
|
|
|
|
|
VIDEO_ANALYSIS = "VIDEO_ANALYSIS"
|
2026-08-21 16:19:35 +08:00
|
|
|
IMAGE_ANALYSIS = "IMAGE_ANALYSIS"
|
2026-08-13 16:56:32 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
class AnalysisRequest(BaseModel):
|
|
|
|
|
requestId: str = Field(min_length=1, max_length=200)
|
|
|
|
|
analysisType: AnalysisType
|
|
|
|
|
profileCode: str = Field(min_length=1, max_length=200)
|
2026-08-21 16:19:35 +08:00
|
|
|
mediaUrl: HttpUrl | None = None
|
|
|
|
|
mediaUrls: list[HttpUrl] = Field(default_factory=list, max_length=12)
|
2026-08-13 16:56:32 +08:00
|
|
|
options: dict[str, Any] = Field(default_factory=dict)
|
|
|
|
|
context: dict[str, Any] = Field(default_factory=dict)
|
|
|
|
|
|
2026-08-21 16:19:35 +08:00
|
|
|
@model_validator(mode="after")
|
|
|
|
|
def require_media(self):
|
|
|
|
|
if self.mediaUrl is None and not self.mediaUrls:
|
|
|
|
|
raise ValueError("mediaUrl or mediaUrls is required")
|
|
|
|
|
return self
|
|
|
|
|
|
2026-08-13 16:56:32 +08:00
|
|
|
|
|
|
|
|
class AnalysisResponse(BaseModel):
|
|
|
|
|
requestId: str
|
|
|
|
|
analysisType: AnalysisType
|
|
|
|
|
profileCode: str
|
|
|
|
|
status: str
|
|
|
|
|
result: dict[str, Any] = Field(default_factory=dict)
|
|
|
|
|
model: dict[str, Any] = Field(default_factory=dict)
|
|
|
|
|
timingMs: int
|