from pydantic import BaseModel from typing import Optional, List, Dict class ChatRequest(BaseModel): message: str thread_id: str = "default" username: str = "default" backend_url: str = "" token: str = "" include_thoughts: bool = False include_tool_calls: bool = False class MessageModel(BaseModel): type: str content: str tool_calls: Optional[List[Dict]] = None tool_call_id: Optional[str] = None name: Optional[str] = None class ChatResponse(BaseModel): final_answer: str all_ai_messages: List[MessageModel] all_messages: List[MessageModel] tool_calls: List[Dict] thread_id: str user_identifier: str backend_config: Dict success: bool error: Optional[str] = None class OCRRequest(BaseModel): """图片处理请求""" image: str type: str class MessageCreateBill(BaseModel): """创建单据请求""" message: str document_type: str = None class ImageVectorItem(BaseModel): """图片向量项""" image_id: str # 图片ID vector: List[float] # 图片特征向量 image_name: Optional[str] = None # 图片名称,可选 image_path: Optional[str] = None # 图片路径,可选 class ImageVectorRequest(BaseModel): """计算图片特征向量请求""" image: str # Base64编码的图片数据 image_id: Optional[str] = None # 图片ID,可选 class ImageVectorResponse(BaseModel): """计算图片特征向量响应""" success: bool image_id: Optional[str] = None vector: Optional[List[float]] = None error: Optional[str] = None class BuildIndexRequest(BaseModel): """构建索引请求""" image_vectors: List[ImageVectorItem] # 图片向量列表 class BuildIndexResponse(BaseModel): """构建索引响应""" success: bool indexed_count: int # 索引的图片数量 error: Optional[str] = None class SearchResultItem(BaseModel): """搜索结果项""" image_id: str # 图片ID similarity: float # 相似度 image_name: Optional[str] = None # 图片名称 image_path: Optional[str] = None # 图片路径 class SearchRequest(BaseModel): """搜索请求(支持以图搜图和以文搜图)""" image: Optional[str] = None # Base64编码的图片数据,可选 text: Optional[str] = None # 文字描述,可选 top_k: int = 10 # 返回结果数量 class SearchResponse(BaseModel): """搜索响应""" success: bool results: List[SearchResultItem] # 搜索结果列表 total_count: int # 总结果数量 processing_time: float # 处理时间(秒) error: Optional[str] = None class SearchHistoryRequest(BaseModel): """记录搜索历史请求""" empid: int # 员工ID search_type: int # 搜索类型:1-以图搜图,2-以文搜图,3-图文混合搜索 search_content: str # 搜索内容 result_count: int # 搜索结果数量 result_content: str # 搜索结果内容(JSON格式) class SearchHistoryResponse(BaseModel): """记录搜索历史响应""" success: bool history_id: Optional[int] = None error: Optional[str] = None