From b90a796172bb36e60656a50e9df3400533b8c1b2 Mon Sep 17 00:00:00 2001 From: Wenjie Zhang Date: Mon, 6 Oct 2025 21:34:22 +0800 Subject: [PATCH] =?UTF-8?q?fix(models):=20=E7=A7=BB=E9=99=A4=E8=BF=87?= =?UTF-8?q?=E6=97=B6=E7=9A=84=E7=9F=A5=E8=AF=86=E5=BA=93=E6=A8=A1=E5=9E=8B?= =?UTF-8?q?=EF=BC=8C=E7=AE=80=E5=8C=96=E6=95=B0=E6=8D=AE=E5=BA=93=E7=BB=93?= =?UTF-8?q?=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/storage/db/__init__.py | 6 --- src/storage/db/models.py | 105 +------------------------------------ 2 files changed, 1 insertion(+), 110 deletions(-) diff --git a/src/storage/db/__init__.py b/src/storage/db/__init__.py index 9809b21b..05c4dc58 100644 --- a/src/storage/db/__init__.py +++ b/src/storage/db/__init__.py @@ -6,9 +6,6 @@ Base = declarative_base() # 导入数据库管理器 from src.storage.db.manager import db_manager # noqa: E402 from src.storage.db.models import ( # noqa: E402, F401 - KnowledgeDatabase, - KnowledgeFile, - KnowledgeNode, OperationLog, User, ) # noqa: E402 @@ -17,8 +14,5 @@ __all__ = [ "Base", "User", "OperationLog", - "KnowledgeDatabase", - "KnowledgeFile", - "KnowledgeNode", "db_manager", ] diff --git a/src/storage/db/models.py b/src/storage/db/models.py index 4ef1852d..15f413e3 100644 --- a/src/storage/db/models.py +++ b/src/storage/db/models.py @@ -1,5 +1,4 @@ import datetime as dt -import time from sqlalchemy import JSON, Column, DateTime, ForeignKey, Integer, String, Text from sqlalchemy.ext.declarative import declarative_base @@ -8,109 +7,7 @@ from sqlalchemy.orm import relationship Base = declarative_base() -class KnowledgeDatabase(Base): - """知识库模型""" - - __tablename__ = "knowledge_databases" - - id = Column(Integer, primary_key=True, autoincrement=True) - db_id = Column(String, nullable=False, unique=True, index=True) # 数据库ID - name = Column(String, nullable=False) # 数据库名称 - description = Column(Text, nullable=True) # 描述 - embed_model = Column(String, nullable=True) # 嵌入模型名称 - dimension = Column(Integer, nullable=True) # 向量维度 - meta_info = Column(JSON, nullable=True) # 元数据 - created_at = Column(DateTime, default=lambda: dt.datetime.now(dt.UTC)) # 创建时间 - - # 关系 - files = relationship("KnowledgeFile", back_populates="database", cascade="all, delete-orphan") - - def to_dict(self, with_nodes=True): - """转换为字典格式,确保meta_info映射为metadata""" - result = { - "id": self.id, - "db_id": self.db_id, - "name": self.name, - "description": self.description, - "embed_model": self.embed_model, - "dimension": self.dimension, - "metadata": self.meta_info or {}, - "created_at": self.created_at.isoformat() if self.created_at else None, - } - # 添加文件信息 - if self.files: - result["files"] = {file.file_id: file.to_dict(with_nodes=with_nodes) for file in self.files} - else: - result["files"] = {} - return result - - -class KnowledgeFile(Base): - """知识库文件模型""" - - __tablename__ = "knowledge_files" - - id = Column(Integer, primary_key=True, autoincrement=True) - file_id = Column(String, nullable=False, index=True) # 文件ID - database_id = Column(String, ForeignKey("knowledge_databases.db_id"), nullable=False) # 所属数据库ID - filename = Column(String, nullable=False) # 文件名 - path = Column(String, nullable=False) # 文件路径 - file_type = Column(String, nullable=False) # 文件类型 - status = Column(String, nullable=False) # 处理状态 - created_at = Column(DateTime, default=lambda: dt.datetime.now(dt.UTC)) # 创建时间 - - # 关系 - database = relationship("KnowledgeDatabase", back_populates="files") - nodes = relationship("KnowledgeNode", back_populates="file", cascade="all, delete-orphan") - - @property - def computed_node_count(self): - """动态计算节点数量""" - return len(self.nodes) if self.nodes is not None else 0 - - def to_dict(self, with_nodes=True): - """转换为字典格式""" - result = { - "file_id": self.file_id, - "filename": self.filename, - "path": self.path, - "type": self.file_type, - "status": self.status, - "node_count": self.computed_node_count, - "created_at": self.created_at.timestamp() if self.created_at else time.time(), - } - if with_nodes: - result["nodes"] = [node.to_dict() for node in self.nodes] if self.nodes else [] - return result - - -class KnowledgeNode(Base): - """知识块模型""" - - __tablename__ = "knowledge_nodes" - - id = Column(Integer, primary_key=True, autoincrement=True) - file_id = Column(String, ForeignKey("knowledge_files.file_id"), nullable=False) # 所属文件ID - text = Column(Text, nullable=False) # 文本内容 - hash = Column(String, nullable=True) # 文本哈希值 - start_char_idx = Column(Integer, nullable=True) # 开始字符索引 - end_char_idx = Column(Integer, nullable=True) # 结束字符索引 - meta_info = Column(JSON, nullable=True) # 元数据 - - # 关系 - file = relationship("KnowledgeFile", back_populates="nodes") - - def to_dict(self): - """转换为字典格式,确保meta_info映射为metadata""" - return { - "id": self.id, - "file_id": self.file_id, - "text": self.text, - "hash": self.hash, - "start_char_idx": self.start_char_idx, - "end_char_idx": self.end_char_idx, - "metadata": self.meta_info or {}, # 确保映射正确 - } +## Removed legacy RDBMS knowledge models (KnowledgeDatabase/KnowledgeFile/KnowledgeNode) class Conversation(Base):