#!/usr/bin/env python3 """ Test script for improved Ollama function calling """ import sys import os from pathlib import Path # Add the atles directory to the Python path sys.path.insert(0, str(Path(__file__).parent / 'atles')) def test_function_calling(): """Test the improved function calling capabilities.""" print("๐Ÿงช Testing Improved Ollama Function Calling...") print("=" * 60) try: from atles.ollama_client_enhanced import OllamaFunctionCaller # Create the enhanced client print("๐Ÿ“ฑ Creating Enhanced Ollama Client...") client = OllamaFunctionCaller() # Check availability print("๐Ÿ” Checking Ollama availability...") if not client.is_available(): print("โŒ Ollama is not running. Please start Ollama with: ollama serve") return print("โœ… Ollama is available!") # Show available functions print("\n๐Ÿ”ง Available Functions:") schema = client.get_function_schema() for func in schema["functions"]: print(f" โ€ข {func['name']}: {func['description']}") # Test function execution directly print("\n๐Ÿงช Testing Direct Function Execution...") # Test search_code function print("๐Ÿ” Testing search_code function...") try: result = client.search_code_datasets("python flask", "python", "github_code") print(f" โœ… Found {len(result)} code examples") if result: first_result = result[0] print(f" - Example: {first_result.get('title', 'No title')}") except Exception as e: print(f" โŒ search_code failed: {e}") # Test system info function print("\n๐Ÿ’ป Testing get_system_info function...") try: info = client.get_system_info() print(f" โœ… Platform: {info.get('platform', 'Unknown')}") print(f" โœ… Python: {info.get('python_version', 'Unknown')}") except Exception as e: print(f" โŒ get_system_info failed: {e}") # Test file listing function print("\n๐Ÿ“ Testing list_files function...") try: result = client.list_files(".", "*.py") print(f" โœ… Found {len(result)} Python files") for file in result[:3]: # Show first 3 print(f" - {file}") except Exception as e: print(f" โŒ list_files failed: {e}") # Test function call handling with different formats print("\n๐Ÿ”„ Testing Function Call Handling...") # Test 1: Standard FUNCTION_CALL format test_response1 = "FUNCTION_CALL:get_system_info:{}" print(f" Testing format 1: {test_response1}") result1 = client.handle_function_call(test_response1) print(f" Result: {result1[:100]}...") # Test 2: Alternative format test_response2 = "get_system_info:{}" print(f" Testing format 2: {test_response2}") result2 = client.handle_function_call(test_response2) print(f" Result: {result2[:100]}...") # Test 3: Search code format test_response3 = 'search_code:{"query": "python flask", "language": "python"}' print(f" Testing format 3: {test_response3}") result3 = client.handle_function_call(test_response3) print(f" Result: {result3[:100]}...") # Close client client.close() print("\nโœ… Function calling test completed!") except Exception as e: print(f"โŒ Test failed: {e}") import traceback traceback.print_exc() if __name__ == "__main__": test_function_calling()