request.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. from pydantic import BaseModel
  2. from typing import Optional
  3. from typing import List,Union
  4. class ReqeustBase(BaseModel):
  5. action: str
  6. class TextData(BaseModel):
  7. text: str
  8. class EmbeddingRequest(ReqeustBase):
  9. data: List[TextData]
  10. class SearchRequest(ReqeustBase):
  11. query: str
  12. top_k: int = 20
  13. meta_only: Optional[bool] = False
  14. class GetDocumentRequest(ReqeustBase):
  15. title: str
  16. class GraphFilterRequest(ReqeustBase):
  17. node_types: Optional[List[str]] = None
  18. min_degree: Optional[int] = None
  19. min_community_size: Optional[int] = None
  20. attributes: Optional[dict] = None
  21. class GraphSearchRequest(ReqeustBase):
  22. """图谱语义搜索请求参数"""
  23. query: str
  24. node_types: Optional[List[str]] = None
  25. relationship_types: Optional[List[str]] = None
  26. min_weight: Optional[float] = None
  27. max_depth: int = 3
  28. limit: int = 20
  29. similarity_threshold: float = 0.6
  30. class PathAnalysisRequest(ReqeustBase):
  31. """节点路径分析请求参数"""
  32. source: str
  33. target: str
  34. max_path_length: int = 3
  35. algorithm: str = "bidirectional"
  36. class NodeFilterRequest(ReqeustBase):
  37. """复杂节点过滤请求参数"""
  38. must: List[dict] = []
  39. should: List[dict] = []
  40. must_not: List[dict] = []
  41. min_score: Optional[float] = None
  42. class BasicRequestParameter(BaseModel):
  43. name: str
  44. value: Union[str, int, float, bool, List[str], List[int], List[float], List[bool]]
  45. class BasicRequest(BaseModel):
  46. action: str
  47. id: str
  48. params: List[BasicRequestParameter]
  49. def get_param(self, name=None, default=None):
  50. for param in self.params:
  51. if param.name == name:
  52. return param.value
  53. return default