Gemini
feat: add detailed logging
01d5a5d
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
@classmethod
def from_model(cls, model: "L1Version") -> "L1VersionDTO":
return cls(
version=model.version,
status=model.status,
description=model.description,
create_time=model.create_time,
)
@dataclass
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(),
}
@classmethod
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(),
)
@dataclass
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
@classmethod
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
}
@dataclass
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
@classmethod
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"),
}