70 lines
2.1 KiB
Python
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()
|