"""ConversationMessage -> Redis conversation history 的纯映射(无 I/O)。""" from __future__ import annotations from typing import Any, Dict, List from app.features.conversation.models import ConversationMessage def conversation_messages_to_redis_history( rows: List[ConversationMessage], ) -> List[Dict[str, Any]]: """ConversationMessage 行 -> Redis conversation history 项。""" history: List[Dict[str, Any]] = [] for row in rows: item: Dict[str, Any] = { "role": row.role, "content": row.content, "messageType": row.message_type, "timestamp": row.created_at.isoformat() if row.created_at else None, "durableMessageId": row.id, } if row.voice_session_id: item["voiceSessionId"] = row.voice_session_id if row.duration_seconds: item["durationSeconds"] = row.duration_seconds if row.tts_audio_urls: item["ttsAudioUrls"] = row.tts_audio_urls history.append(item) return history