This commit is contained in:
2026-02-19 21:36:58 +00:00
committed by Anibal Angulo
parent 41ba38495b
commit 085e4b8610
37 changed files with 625 additions and 2200 deletions

View File

@@ -1,31 +1,8 @@
"""
Copyright 2025 Google. This software is provided as-is, without warranty or
representation for any use or purpose. Your use of it is subject to your
agreement with Google.
Conversation-related data models.
"""
from datetime import datetime
from enum import Enum
from typing import Any
from typing import Any, Literal
from pydantic import BaseModel, Field, field_validator
class MessageType(str, Enum):
"""Message type enumeration."""
USER = "USER"
AGENT = "AGENT"
class ConversationEntryType(str, Enum):
"""Conversation entry type enumeration."""
INICIO = "INICIO"
CONVERSACION = "CONVERSACION"
LLM = "LLM"
class UsuarioDTO(BaseModel):
"""User information."""
@@ -102,7 +79,6 @@ class ExternalConvRequestDTO(BaseModel):
mensaje: str = Field(..., alias="mensaje")
usuario: UsuarioDTO = Field(..., alias="usuario")
canal: str = Field(..., alias="canal")
tipo: ConversationEntryType = Field(..., alias="tipo")
pantalla_contexto: str | None = Field(None, alias="pantallaContexto")
model_config = {"populate_by_name": True}
@@ -123,7 +99,7 @@ class ConversationMessageDTO(BaseModel):
class ConversationEntryDTO(BaseModel):
"""Single conversation entry."""
entity: str = Field(..., alias="entity") # "USUARIO", "AGENTE", "SISTEMA", "LLM"
entity: Literal['user', 'assistant']
type: str = Field(..., alias="type") # "INICIO", "CONVERSACION", "LLM"
timestamp: datetime = Field(default_factory=datetime.now, alias="timestamp")
text: str = Field(..., alias="text")
@@ -148,7 +124,12 @@ class ConversationSessionDTO(BaseModel):
@classmethod
def create(
cls, session_id: str, user_id: str, telefono: str
cls,
session_id: str,
user_id: str,
telefono: str,
pantalla_contexto: str | None = None,
last_message: str | None = None,
) -> "ConversationSessionDTO":
"""Create a new conversation session."""
now = datetime.now()
@@ -158,6 +139,8 @@ class ConversationSessionDTO(BaseModel):
telefono=telefono,
createdAt=now,
lastModified=now,
pantallaContexto=pantalla_contexto,
lastMessage=last_message,
)
def with_last_message(self, last_message: str) -> "ConversationSessionDTO":