response.py 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. """
  2. 响应模型定义
  3. """
  4. from pydantic import BaseModel, Field
  5. from typing import Optional, List
  6. from .request import EntityInfo, PositionInfo
  7. class RelationInfo(BaseModel):
  8. """关系信息"""
  9. from_entity: str = Field(..., alias="fromEntity", description="源实体名称")
  10. from_entity_id: Optional[str] = Field(None, alias="fromEntityId", description="源实体临时ID")
  11. to_entity: str = Field(..., alias="toEntity", description="目标实体名称")
  12. to_entity_id: Optional[str] = Field(None, alias="toEntityId", description="目标实体临时ID")
  13. relation_type: str = Field(..., alias="relationType", description="关系类型")
  14. confidence: Optional[float] = Field(None, description="置信度")
  15. class Config:
  16. populate_by_name = True
  17. class NerResponse(BaseModel):
  18. """NER 响应"""
  19. document_id: Optional[str] = Field(None, alias="documentId", description="文档ID")
  20. entities: List[EntityInfo] = Field(default_factory=list, description="提取的实体列表")
  21. relations: List[RelationInfo] = Field(default_factory=list, description="提取的关系列表")
  22. processing_time: Optional[int] = Field(None, alias="processingTime", description="处理耗时(毫秒)")
  23. entity_count: int = Field(0, alias="entityCount", description="实体数量")
  24. relation_count: int = Field(0, alias="relationCount", description="关系数量")
  25. success: bool = Field(True, description="是否成功")
  26. error_message: Optional[str] = Field(None, alias="errorMessage", description="错误信息")
  27. class Config:
  28. populate_by_name = True
  29. @classmethod
  30. def success_response(cls, document_id: str, entities: List[EntityInfo],
  31. relations: List[RelationInfo], processing_time: int):
  32. return cls(
  33. document_id=document_id,
  34. entities=entities,
  35. relations=relations,
  36. processing_time=processing_time,
  37. entity_count=len(entities),
  38. relation_count=len(relations),
  39. success=True
  40. )
  41. @classmethod
  42. def error_response(cls, document_id: str, error_message: str):
  43. return cls(
  44. document_id=document_id,
  45. success=False,
  46. error_message=error_message
  47. )
  48. class RelationResponse(BaseModel):
  49. """关系抽取响应"""
  50. document_id: Optional[str] = Field(None, alias="documentId", description="文档ID")
  51. relations: List[RelationInfo] = Field(default_factory=list, description="提取的关系列表")
  52. processing_time: Optional[int] = Field(None, alias="processingTime", description="处理耗时(毫秒)")
  53. relation_count: int = Field(0, alias="relationCount", description="关系数量")
  54. success: bool = Field(True, description="是否成功")
  55. error_message: Optional[str] = Field(None, alias="errorMessage", description="错误信息")
  56. class Config:
  57. populate_by_name = True
  58. @classmethod
  59. def success_response(cls, document_id: str, relations: List[RelationInfo], processing_time: int):
  60. return cls(
  61. document_id=document_id,
  62. relations=relations,
  63. processing_time=processing_time,
  64. relation_count=len(relations),
  65. success=True
  66. )
  67. @classmethod
  68. def error_response(cls, document_id: str, error_message: str):
  69. return cls(
  70. document_id=document_id,
  71. success=False,
  72. error_message=error_message
  73. )
  74. class HealthResponse(BaseModel):
  75. """健康检查响应"""
  76. status: str = "ok"
  77. version: str
  78. ner_model: str