from pydantic import BaseModel from typing import Optional from typing import List class ReqeustBase(BaseModel): action: str class TextData(BaseModel): text: str class EmbeddingRequest(ReqeustBase): data: List[TextData] class SearchRequest(ReqeustBase): query: str top_k: int = 20 meta_only: Optional[bool] = False class GetDocumentRequest(ReqeustBase): title: str class GraphFilterRequest(ReqeustBase): node_types: Optional[List[str]] = None min_degree: Optional[int] = None min_community_size: Optional[int] = None attributes: Optional[dict] = None class GraphSearchRequest(ReqeustBase): """图谱语义搜索请求参数""" query: str node_types: Optional[List[str]] = None relationship_types: Optional[List[str]] = None min_weight: Optional[float] = None max_depth: int = 3 limit: int = 20 similarity_threshold: float = 0.6 class PathAnalysisRequest(ReqeustBase): """节点路径分析请求参数""" source: str target: str max_path_length: int = 3 algorithm: str = "bidirectional" class NodeFilterRequest(ReqeustBase): """复杂节点过滤请求参数""" must: List[dict] = [] should: List[dict] = [] must_not: List[dict] = [] min_score: Optional[float] = None