response.py 3.7 KB

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