Spaces:
Sleeping
Sleeping
| from sqlalchemy import Column, Integer, String, JSON, DateTime, Text, Enum, ForeignKey | |
| from sqlalchemy.orm import relationship | |
| from lpm_kernel.common.repository.database_session import Base | |
| from datetime import datetime | |
| from typing import List, Dict, Optional | |
| from lpm_kernel.L1.bio import Bio, Cluster, ShadeInfo | |
| class L1ClusterModel(Base): | |
| """L1 layer clustering result model""" | |
| __tablename__ = "l1_clusters" | |
| id = Column(Integer, primary_key=True) | |
| name = Column(String(255)) | |
| center_embedding = Column(JSON) # Cluster center vector | |
| memory_ids = Column(JSON) # List of document IDs belonging to this cluster | |
| create_time = Column(DateTime, default=datetime.utcnow) | |
| update_time = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) | |
| # Relationships | |
| shades = relationship("L1ShadeModel", back_populates="cluster") | |
| def to_domain(self) -> Cluster: | |
| """Convert to domain object""" | |
| return Cluster( | |
| id=self.id, | |
| name=self.name, | |
| clusterCenter=self.center_embedding, | |
| memoryList=[{"memoryId": mid} for mid in self.memory_ids], | |
| ) | |
| def from_domain(cls, cluster: Dict) -> "L1ClusterModel": | |
| """Create model from domain object""" | |
| return cls( | |
| name=cluster.get("name", ""), | |
| center_embedding=cluster.get("clusterCenter", []), | |
| memory_ids=[m["memoryId"] for m in cluster.get("memoryList", [])], | |
| ) | |
| class L1ShadeModel(Base): | |
| """L1 layer feature information model""" | |
| __tablename__ = "l1_shades" | |
| id = Column(Integer, primary_key=True) | |
| cluster_id = Column(Integer, ForeignKey("l1_clusters.id")) | |
| name = Column(String(255)) | |
| aspect = Column(String(50)) | |
| icon = Column(String(50)) | |
| desc_third_view = Column(Text) | |
| content_third_view = Column(Text) | |
| desc_second_view = Column(Text) | |
| content_second_view = Column(Text) | |
| confidence_level = Column(String(20)) | |
| create_time = Column(DateTime, default=datetime.utcnow) | |
| update_time = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) | |
| # Relationships | |
| cluster = relationship("L1ClusterModel", back_populates="shades") | |
| def to_domain(self) -> ShadeInfo: | |
| """Convert to domain object""" | |
| return ShadeInfo( | |
| id=self.id, | |
| name=self.name, | |
| aspect=self.aspect, | |
| icon=self.icon, | |
| descThirdView=self.desc_third_view, | |
| contentThirdView=self.content_third_view, | |
| descSecondView=self.desc_second_view, | |
| contentSecondView=self.content_second_view, | |
| confidenceLevel=self.confidence_level, | |
| ) | |
| def from_domain(cls, shade: ShadeInfo) -> "L1ShadeModel": | |
| """Create model from domain object""" | |
| return cls( | |
| name=shade.name, | |
| aspect=shade.aspect, | |
| icon=shade.icon, | |
| desc_third_view=shade.desc_third_view, | |
| content_third_view=shade.content_third_view, | |
| desc_second_view=shade.desc_second_view, | |
| content_second_view=shade.content_second_view, | |
| confidence_level=shade.confidence_level.value | |
| if shade.confidence_level | |
| else None, | |
| ) | |
| class L1BiographyModel(Base): | |
| """L1 layer biography model""" | |
| __tablename__ = "l1_biographies" | |
| id = Column(Integer, primary_key=True) | |
| content_third_view = Column(Text) | |
| content_second_view = Column(Text) | |
| summary_third_view = Column(Text) | |
| summary_second_view = Column(Text) | |
| attributes = Column(JSON) # Store attribute list | |
| create_time = Column(DateTime, default=datetime.utcnow) | |
| update_time = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) | |
| def to_domain(self) -> Bio: | |
| """Convert to domain object""" | |
| return Bio( | |
| contentThirdView=self.content_third_view, | |
| content=self.content_second_view, | |
| summaryThirdView=self.summary_third_view, | |
| summary=self.summary_second_view, | |
| attributeList=self.attributes, | |
| shadesList=[], # shades are retrieved through relationship query | |
| ) | |
| def from_domain(cls, bio: Bio) -> "L1BiographyModel": | |
| """Create model from domain object""" | |
| return cls( | |
| content_third_view=bio.content_third_view, | |
| content_second_view=bio.content_second_view, | |
| summary_third_view=bio.summary_third_view, | |
| summary_second_view=bio.summary_second_view, | |
| attributes=bio.attribute_list, | |
| ) | |