CMVR-AI-ANALYSIS/app/schemas.py
lixiaolong 873a82b0f5 feat(service): 升级AI分析服务支持图像分析和视频详细输出
- 移除Ollama相关配置和回退机制,统一使用SGLang作为视觉模型提供商
- 添加IMAGE_ANALYSIS类型支持,允许对多张图片进行分析
- 实现视频分析的详细输出模式,支持紧凑和详细两种结果格式
- 更新环境变量配置,添加VIDEO_MODEL_FRAME_LIMIT和MAX_IMAGE_BYTES
- 修改compose配置文件中的上下文长度和内存分配参数
- 重构视频采样逻辑,限制单次请求帧数以优化显存使用
- 更新API接口文档,添加mediaUrls参数和详细输出选项说明
- 添加图像分析相关的依赖库opencv-python-headless
- 实现结构化JSON响应格式验证和重试机制
2026-08-21 16:19:35 +08:00

37 lines
1.1 KiB
Python

from enum import Enum
from typing import Any
from pydantic import BaseModel, Field, HttpUrl, model_validator
class AnalysisType(str, Enum):
AUDIO_CLASSIFICATION = "AUDIO_CLASSIFICATION"
VIDEO_ANALYSIS = "VIDEO_ANALYSIS"
IMAGE_ANALYSIS = "IMAGE_ANALYSIS"
class AnalysisRequest(BaseModel):
requestId: str = Field(min_length=1, max_length=200)
analysisType: AnalysisType
profileCode: str = Field(min_length=1, max_length=200)
mediaUrl: HttpUrl | None = None
mediaUrls: list[HttpUrl] = Field(default_factory=list, max_length=12)
options: dict[str, Any] = Field(default_factory=dict)
context: dict[str, Any] = Field(default_factory=dict)
@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
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