DonConfia_Dev/agents/app/chat.py
2025-03-24 20:33:04 -05:00

70 lines
2.1 KiB
Python

from dotenv import load_dotenv
from langgraph_tools.nodes import ChatBotState
from langgraph_tools.graph import create_chat_graph
from langchain_core.messages import HumanMessage
import re
def validate_phone(phone: str) -> bool:
"""Valida que el número de teléfono tenga el formato correcto"""
phone_pattern = re.compile(r"^\d{10}$") # Formato: 10 dígitos
return bool(phone_pattern.match(phone))
def get_valid_phone() -> str:
"""Solicita y valida el número de teléfono del usuario"""
while True:
phone = input("Por favor, ingresa tu número de teléfono (10 dígitos): ").strip()
if validate_phone(phone):
return phone
print("Número inválido. Debe contener exactamente 10 dígitos.")
def run_simple_chat():
# Cargar variables de entorno y crear el grafo
load_dotenv()
graph = create_chat_graph()
print("\nBienvenido a DonConfiao - Asistente Virtual")
# Solicitar número de teléfono al inicio
phone = get_valid_phone()
print("\nGracias! Ya puedes empezar a chatear.")
print("Escribe 'salir' para terminar\n")
# Inicializar el estado con el teléfono
current_state = ChatBotState(
messages=[], query="", category="", response="", phone=phone
)
while True:
user_input = input("Tú: ").strip()
if user_input.lower() == "salir":
print("\n¡Hasta pronto!")
break
try:
# Actualizar el estado con la nueva query
current_state["query"] = user_input
# Invocar el grafo con el estado actualizado
result = graph.invoke(current_state)
# Actualizar el estado actual (manteniendo el teléfono)
current_state = result
if "phone" not in current_state:
current_state["phone"] = phone
# Mostrar la respuesta
print(f"Categoría: {result['category']}")
print(f"\nDonConfiao: {result['response']}\n")
except Exception as e:
print(f"\nError: {str(e)}")
print("Por favor, intenta de nuevo.\n")
if __name__ == "__main__":
run_simple_chat()