mirror of
https://github.com/pewdiepie-archdaemon/odysseus.git
synced 2026-06-17 10:15:27 -04:00
Fix chat message history timestamps
This commit is contained in:
+17
-3
@@ -20,6 +20,15 @@ from .models import Session, ChatMessage
|
|||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
def _message_timestamp_iso(value: Optional[datetime]) -> Optional[str]:
|
||||||
|
"""Return a stable ISO timestamp for chat message metadata."""
|
||||||
|
if not value:
|
||||||
|
return None
|
||||||
|
if value.tzinfo is None:
|
||||||
|
value = value.replace(tzinfo=timezone.utc)
|
||||||
|
return value.isoformat().replace("+00:00", "Z")
|
||||||
|
|
||||||
|
|
||||||
class SessionManager:
|
class SessionManager:
|
||||||
"""
|
"""
|
||||||
Manages chat sessions with database persistence.
|
Manages chat sessions with database persistence.
|
||||||
@@ -107,6 +116,7 @@ class SessionManager:
|
|||||||
meta = json.loads(db_msg.meta_data) if db_msg.meta_data else {}
|
meta = json.loads(db_msg.meta_data) if db_msg.meta_data else {}
|
||||||
if meta is None: meta = {}
|
if meta is None: meta = {}
|
||||||
meta['_db_id'] = db_msg.id
|
meta['_db_id'] = db_msg.id
|
||||||
|
meta.setdefault('timestamp', _message_timestamp_iso(db_msg.timestamp))
|
||||||
history.append(ChatMessage(
|
history.append(ChatMessage(
|
||||||
role=db_msg.role,
|
role=db_msg.role,
|
||||||
content=db_msg.content,
|
content=db_msg.content,
|
||||||
@@ -121,6 +131,7 @@ class SessionManager:
|
|||||||
meta = json.loads(db_msg.meta_data) if db_msg.meta_data else {}
|
meta = json.loads(db_msg.meta_data) if db_msg.meta_data else {}
|
||||||
if meta is None: meta = {}
|
if meta is None: meta = {}
|
||||||
meta['_db_id'] = db_msg.id
|
meta['_db_id'] = db_msg.id
|
||||||
|
meta.setdefault('timestamp', _message_timestamp_iso(db_msg.timestamp))
|
||||||
history.append(ChatMessage(
|
history.append(ChatMessage(
|
||||||
role=db_msg.role,
|
role=db_msg.role,
|
||||||
content=db_msg.content,
|
content=db_msg.content,
|
||||||
@@ -177,12 +188,17 @@ class SessionManager:
|
|||||||
db = SessionLocal()
|
db = SessionLocal()
|
||||||
try:
|
try:
|
||||||
msg_id = str(uuid.uuid4())
|
msg_id = str(uuid.uuid4())
|
||||||
|
msg_time = datetime.utcnow()
|
||||||
|
if message.metadata is None:
|
||||||
|
message.metadata = {}
|
||||||
|
message.metadata.setdefault('timestamp', _message_timestamp_iso(msg_time))
|
||||||
db_message = DbChatMessage(
|
db_message = DbChatMessage(
|
||||||
id=msg_id,
|
id=msg_id,
|
||||||
session_id=session_id,
|
session_id=session_id,
|
||||||
role=message.role,
|
role=message.role,
|
||||||
content=message.content,
|
content=message.content,
|
||||||
meta_data=json.dumps(message.metadata) if message.metadata else None
|
meta_data=json.dumps(message.metadata) if message.metadata else None,
|
||||||
|
timestamp=msg_time,
|
||||||
)
|
)
|
||||||
db.add(db_message)
|
db.add(db_message)
|
||||||
|
|
||||||
@@ -199,8 +215,6 @@ class SessionManager:
|
|||||||
db.commit()
|
db.commit()
|
||||||
|
|
||||||
# Store DB ID on the in-memory message for edit/delete by ID
|
# Store DB ID on the in-memory message for edit/delete by ID
|
||||||
if message.metadata is None:
|
|
||||||
message.metadata = {}
|
|
||||||
message.metadata['_db_id'] = msg_id
|
message.metadata['_db_id'] = msg_id
|
||||||
|
|
||||||
logger.debug(f"Persisted message to session {session_id}")
|
logger.debug(f"Persisted message to session {session_id}")
|
||||||
|
|||||||
Reference in New Issue
Block a user