# -*- coding: utf-8 -*-
|
from typing import List, Optional
|
|
from pydantic import BaseModel, ConfigDict, Field
|
|
|
class KeywordConfig(BaseModel):
|
model_config = ConfigDict(populate_by_name=True)
|
storefront: List[str] = Field(default_factory=lambda: ["到店", "到达", "门头"])
|
handover: List[str] = Field(default_factory=lambda: ["交付", "交货", "签收"])
|
|
|
class AnalyzeRequest(BaseModel):
|
model_config = ConfigDict(populate_by_name=True)
|
media_id: int = Field(alias="mediaId")
|
video_url: Optional[str] = Field(default=None, alias="videoUrl")
|
sample_fps: float = Field(default=0.5, alias="sampleFps")
|
enable_asr: bool = Field(default=True, alias="enableAsr")
|
keywords: Optional[KeywordConfig] = None
|
duration_sec: Optional[float] = Field(default=None, alias="durationSec")
|
|
|
class SnapshotHit(BaseModel):
|
model_config = ConfigDict(populate_by_name=True)
|
time_sec: float = Field(alias="timeSec")
|
confidence: float
|
source: str
|
|
|
class AsrHit(BaseModel):
|
model_config = ConfigDict(populate_by_name=True)
|
keyword: str
|
time_sec: float = Field(alias="timeSec")
|
|
|
class AnalyzeResponse(BaseModel):
|
model_config = ConfigDict(populate_by_name=True)
|
success: bool = True
|
model_version: str = Field(default="1.0.0", alias="modelVersion")
|
duration_sec: float = Field(default=0.0, alias="durationSec")
|
storefront: Optional[SnapshotHit] = None
|
handover: Optional[SnapshotHit] = None
|
asr_hits: List[AsrHit] = Field(default_factory=list, alias="asrHits")
|
message: Optional[str] = None
|
|
|
class HealthResponse(BaseModel):
|
model_config = ConfigDict(populate_by_name=True)
|
status: str
|
model_version: str = Field(alias="modelVersion")
|
onnx_storefront_loaded: bool = Field(default=False, alias="onnxStorefrontLoaded")
|
onnx_handover_loaded: bool = Field(default=False, alias="onnxHandoverLoaded")
|
asr_available: bool = Field(default=False, alias="asrAvailable")
|