- 移除Ollama相关配置和回退机制,统一使用SGLang作为视觉模型提供商 - 添加IMAGE_ANALYSIS类型支持,允许对多张图片进行分析 - 实现视频分析的详细输出模式,支持紧凑和详细两种结果格式 - 更新环境变量配置,添加VIDEO_MODEL_FRAME_LIMIT和MAX_IMAGE_BYTES - 修改compose配置文件中的上下文长度和内存分配参数 - 重构视频采样逻辑,限制单次请求帧数以优化显存使用 - 更新API接口文档,添加mediaUrls参数和详细输出选项说明 - 添加图像分析相关的依赖库opencv-python-headless - 实现结构化JSON响应格式验证和重试机制
37 lines
1.1 KiB
Python
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
|