knowledge.py 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. from typing import TYPE_CHECKING
  2. from core_domain import (
  3. KnowledgeBaseContract,
  4. KnowledgeBaseStatus,
  5. KnowledgeChunkContract,
  6. KnowledgeDocumentContract,
  7. KnowledgeSearchRequestContract,
  8. KnowledgeSearchResultContract,
  9. )
  10. from core_shared import JSONValue
  11. from pydantic import BaseModel, Field
  12. if TYPE_CHECKING:
  13. from app.db.models import KnowledgeBase, KnowledgeChunk, KnowledgeDocument
  14. class KnowledgeBaseCreateRequest(BaseModel):
  15. code: str
  16. name: str
  17. description: str | None = None
  18. metadata_json: dict[str, JSONValue] = Field(default_factory=dict)
  19. class KnowledgeBaseStatusUpdateRequest(BaseModel):
  20. status: KnowledgeBaseStatus
  21. class KnowledgeBaseResponse(KnowledgeBaseContract):
  22. @classmethod
  23. def from_entity(cls, entity: "KnowledgeBase") -> "KnowledgeBaseResponse":
  24. return cls.model_validate(entity, from_attributes=True)
  25. class KnowledgeDocumentCreateRequest(BaseModel):
  26. knowledge_base_id: str
  27. title: str
  28. content_text: str | None = None
  29. content_base64: str | None = None
  30. source_type: str = "text"
  31. source_uri: str | None = None
  32. metadata_json: dict[str, JSONValue] = Field(default_factory=dict)
  33. chunk_size: int | None = Field(default=None, gt=0)
  34. chunk_overlap: int | None = Field(default=None, ge=0)
  35. class KnowledgeDocumentResponse(KnowledgeDocumentContract):
  36. @classmethod
  37. def from_entity(cls, entity: "KnowledgeDocument") -> "KnowledgeDocumentResponse":
  38. return cls.model_validate(entity, from_attributes=True)
  39. class KnowledgeChunkResponse(KnowledgeChunkContract):
  40. @classmethod
  41. def from_entity(cls, entity: "KnowledgeChunk") -> "KnowledgeChunkResponse":
  42. return cls.model_validate(entity, from_attributes=True)
  43. class KnowledgeDocumentIngestResponse(BaseModel):
  44. document: KnowledgeDocumentResponse
  45. chunks: list[KnowledgeChunkResponse]
  46. class KnowledgeDocumentParseRequest(BaseModel):
  47. source_type: str = "auto"
  48. source_uri: str | None = None
  49. content_text: str | None = None
  50. content_base64: str | None = None
  51. class KnowledgeDocumentParseResponse(BaseModel):
  52. content_text: str
  53. source_type: str
  54. metadata_json: dict[str, JSONValue] = Field(default_factory=dict)
  55. class KnowledgeSearchRequest(KnowledgeSearchRequestContract):
  56. pass
  57. class KnowledgeSearchResultResponse(KnowledgeSearchResultContract):
  58. pass