import uuid from datetime import datetime from typing import List from pgvector.sqlalchemy import Vector from sqlalchemy import Column from sqlmodel import Field, Relationship, SQLModel, ForeignKey from sqlalchemy.dialects.postgresql import UUID class KnowledgeBase(SQLModel, table=True): __tablename__ = "knowledge_base" id: uuid.UUID = Field(default_factory=uuid.uuid4, primary_key=True) name: str = Field(nullable=False) description: str | None = None created_at: datetime = Field(default_factory=datetime.now) knowledge_chunk: List["KnowledgeChunk"] = Relationship( back_populates="knowledge_base" ) class KnowledgeChunk(SQLModel, table=True): __tablename__ = "knowledge_chunk" id: uuid.UUID = Field(default_factory=uuid.uuid4, primary_key=True) kb_id: uuid.UUID = Field( sa_column=Column(UUID(as_uuid=True), ForeignKey("knowledge_base.id", ondelete="CASCADE"), nullable=False ) ) chunk_index: int chunk_text: str image_url: str | None = Field(default=None) embedding: List[float] = Field(sa_column=Column(Vector(768))) knowledge_base: "KnowledgeBase" = Relationship(back_populates="knowledge_chunk")