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()