from datetime import date from langchain_core.messages import HumanMessage, AIMessage, BaseMessage, SystemMessage from typing import List, Sequence from src.graph_builder import graph_app from src.graph_state import GraphState from src.database import conn_pool def run_chatbot(): try: if conn_pool is None: print("\nLỗi: Không thể kết nối Database. Chatbot không thể hoạt động.") return from src.tools import fetch_locations_tool initial_locations = fetch_locations_tool() if initial_locations is None: print("\nLỗi: Không thể truy vấn dữ liệu từ Database. Chatbot không thể hoạt động.") return print(f"\nChatbot đã sẵn sàng! Các địa điểm hỗ trợ: {', '.join(initial_locations[:10])}{'...' if len(initial_locations) > 10 else ''}") except Exception as e: print(f"\nLỗi khởi tạo: {e}") return conversation_history: List[BaseMessage] = [] print("\n--- Bắt đầu trò chuyện (gõ 'quit' để thoát) ---") while True: try: user_input = input("Bạn: ") if user_input.lower() == 'quit': print("Chatbot: Tạm biệt!") break if not user_input.strip(): continue conversation_history.append(HumanMessage(content=user_input)) graph_input: GraphState = { "messages": conversation_history, "user_query": None, "current_date": None, "available_locations": None, "extracted_entities": None, "search_results": None, "final_response": None, "error": None, "routing_decision": None, } final_state = graph_app.invoke(graph_input) conversation_history = list(final_state.get("messages", conversation_history)) response = final_state.get("final_response", "Xin lỗi, tôi không thể xử lý yêu cầu này.") print(f"Chatbot: {response}") except KeyboardInterrupt: print("\nChatbot: Tạm biệt!") break except Exception as e: print(f"Chatbot: Đã xảy ra lỗi: {e}. Vui lòng thử lại.") if __name__ == "__main__": run_chatbot()