knowledge.py 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  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 | None = None
  32. content_base64: str | None = None
  33. source_type: str = "text"
  34. source_uri: str | None = None
  35. metadata_json: dict[str, JSONValue] = Field(default_factory=dict)
  36. chunk_size: int | None = Field(default=None, gt=0)
  37. chunk_overlap: int | None = Field(default=None, ge=0)
  38. class KnowledgeDocumentResponse(KnowledgeDocumentContract):
  39. @classmethod
  40. def from_entity(cls, entity: "KnowledgeDocument") -> "KnowledgeDocumentResponse":
  41. return cls.model_validate(entity, from_attributes=True)
  42. class KnowledgeChunkResponse(KnowledgeChunkContract):
  43. @classmethod
  44. def from_entity(cls, entity: "KnowledgeChunk") -> "KnowledgeChunkResponse":
  45. return cls.model_validate(entity, from_attributes=True)
  46. class KnowledgeDocumentIngestResponse(BaseModel):
  47. document: KnowledgeDocumentResponse
  48. chunks: list[KnowledgeChunkResponse]
  49. class KnowledgeDocumentParseRequest(BaseModel):
  50. source_type: str = "auto"
  51. source_uri: str | None = None
  52. content_text: str | None = None
  53. content_base64: str | None = None
  54. class KnowledgeDocumentParseResponse(BaseModel):
  55. content_text: str
  56. source_type: str
  57. metadata_json: dict[str, JSONValue] = Field(default_factory=dict)
  58. class KnowledgeSearchRequest(KnowledgeSearchRequestContract):
  59. pass
  60. class KnowledgeSearchResultResponse(KnowledgeSearchResultContract):
  61. pass