knowledge.py 2.0 KB

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