Spaces:
Sleeping
Sleeping
| from sqlalchemy import Column, Integer, String, DateTime, JSON, ForeignKey | |
| from sqlalchemy.orm import relationship | |
| from lpm_kernel.common.repository.database_session import Base | |
| from datetime import datetime | |
| from dataclasses import dataclass | |
| from typing import Dict, List, Optional | |
| from lpm_kernel.L1.bio import Bio | |
| class L1Version(Base): | |
| __tablename__ = "l1_versions" | |
| version = Column(Integer, primary_key=True) | |
| create_time = Column(DateTime, nullable=False, default=datetime.now) | |
| status = Column(String(50), nullable=False) | |
| description = Column(String(500)) | |
| # add relationship | |
| bios = relationship("L1Bio", back_populates="version_info") | |
| shades = relationship("L1Shade", back_populates="version_info") | |
| clusters = relationship("L1Cluster", back_populates="version_info") | |
| chunk_topics = relationship("L1ChunkTopic", back_populates="version_info") | |
| class L1Bio(Base): | |
| __tablename__ = "l1_bios" | |
| id = Column(Integer, primary_key=True) | |
| version = Column(Integer, ForeignKey("l1_versions.version"), nullable=False) | |
| content = Column(String(10000)) | |
| content_third_view = Column(String(10000)) | |
| summary = Column(String(2000)) | |
| summary_third_view = Column(String(2000)) | |
| create_time = Column(DateTime, nullable=False, default=datetime.now) | |
| # add relationship | |
| version_info = relationship("L1Version", back_populates="bios") | |
| class L1Shade(Base): | |
| __tablename__ = "l1_shades" | |
| id = Column(Integer, primary_key=True) | |
| version = Column(Integer, ForeignKey("l1_versions.version"), nullable=False) | |
| name = Column(String(200)) | |
| aspect = Column(String(200)) | |
| icon = Column(String(100)) | |
| desc_third_view = Column(String(1000)) | |
| content_third_view = Column(String(2000)) | |
| desc_second_view = Column(String(1000)) | |
| content_second_view = Column(String(2000)) | |
| create_time = Column(DateTime, nullable=False, default=datetime.now) | |
| # add relationship | |
| version_info = relationship("L1Version", back_populates="shades") | |
| class L1Cluster(Base): | |
| __tablename__ = "l1_clusters" | |
| id = Column(Integer, primary_key=True) | |
| version = Column(Integer, ForeignKey("l1_versions.version"), nullable=False) | |
| cluster_id = Column(String(100)) | |
| memory_ids = Column(JSON) | |
| cluster_center = Column(JSON) | |
| create_time = Column(DateTime, nullable=False, default=datetime.now) | |
| # add relationship | |
| version_info = relationship("L1Version", back_populates="clusters") | |
| class L1ChunkTopic(Base): | |
| __tablename__ = "l1_chunk_topics" | |
| id = Column(Integer, primary_key=True) | |
| version = Column(Integer, ForeignKey("l1_versions.version"), nullable=False) | |
| chunk_id = Column(String(100)) | |
| topic = Column(String(500)) | |
| tags = Column(JSON) | |
| create_time = Column(DateTime, nullable=False, default=datetime.now) | |
| # add relationship | |
| version_info = relationship("L1Version", back_populates="chunk_topics") | |
| class L1VersionDTO: | |
| def __init__( | |
| self, version: int, status: str, description: str, create_time: datetime | |
| ): | |
| self.version = version | |
| self.status = status | |
| self.description = description | |
| self.create_time = create_time | |
| def from_model(cls, model: "L1Version") -> "L1VersionDTO": | |
| return cls( | |
| version=model.version, | |
| status=model.status, | |
| description=model.description, | |
| create_time=model.create_time, | |
| ) | |
| class L1GenerationResult: | |
| """L1 generation result data class""" | |
| bio: Bio | |
| clusters: Dict[str, List] # {"clusterList": [...]} | |
| chunk_topics: Dict[str, Dict] # {cluster_id: {"indices": [], "docIds": [], ...}} | |
| generate_time: datetime = datetime.now() | |
| def to_dict(self) -> dict: | |
| """Convert to dictionary format""" | |
| return { | |
| "bio": self.bio, | |
| "clusters": self.clusters, | |
| "chunk_topics": self.chunk_topics, | |
| "generate_time": self.generate_time.isoformat(), | |
| } | |
| def from_dict(cls, data: dict) -> "L1GenerationResult": | |
| """Create instance from dictionary""" | |
| return cls( | |
| bio=data.get("bio"), | |
| clusters=data.get("clusters", {"clusterList": []}), | |
| chunk_topics=data.get("chunk_topics", {}), | |
| generate_time=datetime.fromisoformat(data["generate_time"]) | |
| if "generate_time" in data | |
| else datetime.now(), | |
| ) | |
| class GlobalBioDTO: | |
| """Global biography data transfer object""" | |
| content: str | |
| content_third_view: str | |
| summary: str | |
| summary_third_view: str | |
| create_time: datetime | |
| shades: List[Dict] = None # add shades field | |
| def from_model(cls, model: "L1Bio") -> "GlobalBioDTO": | |
| """ | |
| Create DTO from database model | |
| Args: | |
| model (L1Bio): database model object | |
| Returns: | |
| GlobalBioDTO: data transfer object | |
| """ | |
| return cls( | |
| content=model.content, | |
| content_third_view=model.content_third_view, | |
| summary=model.summary, | |
| summary_third_view=model.summary_third_view, | |
| create_time=model.create_time, | |
| shades=[], # initialize as empty list | |
| ) | |
| def to_dict(self) -> dict: | |
| """ | |
| Convert to dictionary format | |
| Returns: | |
| dict: dictionary format data | |
| """ | |
| return { | |
| "content": self.content, | |
| "content_third_view": self.content_third_view, | |
| "summary": self.summary, | |
| "summary_third_view": self.summary_third_view, | |
| "create_time": self.create_time.strftime("%Y-%m-%d %H:%M:%S"), | |
| "shades": self.shades or [], # ensure return list | |
| } | |
| class StatusBioDTO: | |
| """Status biography data transfer object""" | |
| content: str | |
| content_third_view: str | |
| summary: str | |
| summary_third_view: str | |
| create_time: datetime | |
| update_time: datetime | |
| def from_model(cls, model: "StatusBiography") -> "StatusBioDTO": | |
| """Create DTO from database model | |
| Args: | |
| model (StatusBiography): database model object | |
| Returns: | |
| StatusBioDTO: data transfer object | |
| """ | |
| return cls( | |
| content=model.content, | |
| content_third_view=model.content_third_view, | |
| summary=model.summary, | |
| summary_third_view=model.summary_third_view, | |
| create_time=model.create_time, | |
| update_time=model.update_time, | |
| ) | |
| def to_dict(self) -> dict: | |
| """Convert to dictionary format | |
| Returns: | |
| dict: dictionary format data | |
| """ | |
| return { | |
| "content": self.content, | |
| "content_third_view": self.content_third_view, | |
| "summary": self.summary, | |
| "summary_third_view": self.summary_third_view, | |
| "create_time": self.create_time.strftime("%Y-%m-%d %H:%M:%S"), | |
| "update_time": self.update_time.strftime("%Y-%m-%d %H:%M:%S"), | |
| } | |