""" Test file để kiểm tra toàn bộ utils system """ import os import sys sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) from utils import ( process_question_with_tools, get_agent_state, reset_agent_state, analyze_question_type, reverse_text_if_needed, get_system_prompt ) def test_text_processing(): """Test text processing tool""" print("=== Testing Text Processing ===") # Test reverse text reversed_question = ".rewsna eht sa \"tfel\" drow eht fo etisoppo eht etirw ,ecnetnes siht dnatsrednu uoy fI" processed = reverse_text_if_needed(reversed_question) print(f"Original: {reversed_question}") print(f"Processed: {processed}") print() def test_question_analysis(): """Test question type analysis""" print("=== Testing Question Analysis ===") test_questions = [ "Who was Marie Curie?", "What is in this YouTube video? https://www.youtube.com/watch?v=dQw4w9WgXcQ", "Can you read this image for me?", "What does this audio file say?", "Calculate 2+2*3", ".rewsna eht sa \"tfel\" drow eht fo etisoppo eht etirw" ] for question in test_questions: q_type = analyze_question_type(question) print(f"Question: {question[:50]}...") print(f"Type: {q_type}") print() def test_state_management(): """Test state management""" print("=== Testing State Management ===") # Reset state reset_agent_state() state = get_agent_state() # Start task task = state.start_new_task("test_001", "Who is Einstein?") print(f"Task created: {task.task_id}") print(f"Question: {task.question}") # Update context state.update_task_context(question_type="wiki", processed_question="Who is Einstein?") print(f"Updated type: {task.question_type}") # Generate summary summary = state.generate_context_summary() print(f"Context summary:\n{summary}") print() def test_prompts(): """Test prompt system""" print("=== Testing Prompts ===") # System prompt system_prompt = get_system_prompt("main_agent") print(f"System prompt length: {len(system_prompt)} characters") print(f"First 100 chars: {system_prompt[:100]}...") print() def test_orchestration(): """Test tool orchestration""" print("=== Testing Tool Orchestration ===") # Test with Wikipedia question (no external dependencies) question = "Who was Albert Einstein?" print(f"Processing question: {question}") try: result = process_question_with_tools(question) print(f"Question type detected: {result['question_type']}") print(f"Tools used: {result['tools_used']}") print(f"Successful tools: {result['successful_tools']}") print(f"Failed tools: {result['failed_tools']}") # Print tool results summary if result['tool_results']: print("\nTool Results Summary:") for tool_result in result['tool_results']: status = "✅" if tool_result.success else "❌" print(f" {status} {tool_result.tool_name}: {tool_result.execution_time:.2f}s") if not tool_result.success and tool_result.error_message: print(f" Error: {tool_result.error_message}") print("\nCached data keys:", list(result['cached_data'].keys())) except Exception as e: print(f"Error in orchestration: {e}") import traceback traceback.print_exc() print() def test_youtube_detection(): """Test YouTube URL detection""" print("=== Testing YouTube Detection ===") youtube_question = "What is this video about? https://www.youtube.com/watch?v=dQw4w9WgXcQ" print(f"Processing YouTube question: {youtube_question}") try: result = process_question_with_tools(youtube_question) print(f"Question type: {result['question_type']}") print(f"Tools to run: {result['tools_used']}") # Check if YouTube tool was attempted youtube_results = [r for r in result['tool_results'] if r.tool_name == "youtube_tool"] if youtube_results: youtube_result = youtube_results[0] print(f"YouTube tool status: {'Success' if youtube_result.success else 'Failed'}") if youtube_result.success: print(f"YouTube content available: {bool(youtube_result.result)}") else: print(f"YouTube error: {youtube_result.error_message}") except Exception as e: print(f"Error testing YouTube: {e}") print() def run_all_tests(): """Run all tests""" print("🧪 Starting Utils System Tests\n") test_text_processing() test_question_analysis() test_state_management() test_prompts() test_orchestration() test_youtube_detection() print("✅ All tests completed!") if __name__ == "__main__": # Set environment variables if needed os.environ.setdefault("GROQ_API_KEY", "your_groq_key_here") os.environ.setdefault("HF_TOKEN", "your_hf_token_here") run_all_tests()