| |
| """ |
| Test script to debug the 'list' object has no attribute 'lower' error |
| """ |
|
|
| import os |
| import sys |
|
|
| |
| sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) |
|
|
| |
| os.environ["ANTHROPIC_API_KEY"]= "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" |
|
|
| |
| from unittest.mock import patch, MagicMock |
|
|
| def test_agent_with_various_inputs(): |
| """Test the agent with different input types that might cause errors""" |
|
|
| print("Testing agent with various input types...") |
|
|
| |
| test_cases = [ |
| |
| "What is 2 + 2?", |
|
|
| |
| "Look at the image and tell me what you see", |
|
|
| |
| "Calculate the sum of [1, 2, 3, 4, 5]", |
|
|
| |
| "What is the output of this code:\n```python\nprint([1, 2, 3])\n```", |
|
|
| |
| ".rewsna eht sa 'tfel' drow eht fo etisoppo eht etirw", |
|
|
| |
| "What is the final numeric output from the attached Python code?", |
| ] |
|
|
| |
| try: |
| from app import LangGraphAgent, _clean_answer |
|
|
| |
| print("\n1. Testing _clean_answer function:") |
| print("-" * 50) |
|
|
| test_answers = [ |
| "42", |
| ["The", "answer", "is", "42"], |
| {"answer": "42"}, |
| 42, |
| None, |
| ["list", "with", "numbers", 1, 2, 3], |
| ] |
|
|
| |
| class MockAgent: |
| def _clean_answer(self, answer): |
| |
| answer = answer.strip() |
|
|
| lower_answer = answer.lower() |
| return answer |
|
|
| mock_agent = MockAgent() |
|
|
| for test_answer in test_answers: |
| print(f"\nTesting with: {test_answer} (type: {type(test_answer)})") |
| try: |
| result = mock_agent._clean_answer(test_answer) |
| print(f"β
Success: {result}") |
| except AttributeError as e: |
| print(f"β AttributeError: {e}") |
| except Exception as e: |
| print(f"β Other error: {type(e).__name__}: {e}") |
|
|
| |
| print("\n\n2. Testing with tool responses that might return lists:") |
| print("-" * 50) |
|
|
| |
| tool_responses = [ |
| |
| {"tool": "calculator", "output": "42"}, |
|
|
| |
| {"tool": "python_executor", "output": ["Result:", "42"]}, |
|
|
| |
| {"tool": "web_search", "output": {"results": ["item1", "item2"]}}, |
| ] |
|
|
| for response in tool_responses: |
| print(f"\nTool response: {response}") |
| output = response.get("output", "") |
| print(f"Output type: {type(output)}") |
| if isinstance(output, list): |
| print("β οΈ This is a LIST - might cause 'lower' error!") |
|
|
| except ImportError as e: |
| print(f"Import error: {e}") |
| except Exception as e: |
| print(f"Unexpected error: {type(e).__name__}: {e}") |
|
|
| def test_message_content_types(): |
| """Test what types of content messages might contain""" |
| print("\n\n3. Testing message content types:") |
| print("-" * 50) |
|
|
| from langchain_core.messages import HumanMessage, AIMessage |
|
|
| |
| test_contents = [ |
| "Normal string message", |
| ["List", "as", "content"], |
| {"type": "image", "data": "base64..."}, |
| None, |
| ] |
|
|
| for content in test_contents: |
| print(f"\nTesting message with content: {content} (type: {type(content)})") |
| try: |
| msg = AIMessage(content=content) |
| print(f"Message created successfully") |
| print(f"Message.content type: {type(msg.content)}") |
| except Exception as e: |
| print(f"Error creating message: {e}") |
|
|
| if __name__ == "__main__": |
| print("=" * 60) |
| print("GAIA Agent Error Debugging Test") |
| print("=" * 60) |
|
|
| test_agent_with_various_inputs() |
| test_message_content_types() |
|
|
| print("\n\nConclusion:") |
| print("-" * 50) |
| print("The error likely occurs when:") |
| print("1. A tool returns a list instead of a string") |
| print("2. The message content is a list (multimodal)") |
| print("3. The _clean_answer method tries to call .strip() or .lower() on a list") |
| print("\nFix: Add type checking in _clean_answer method!") |
|
|