| 31 | } |
| 32 | |
| 33 | void test_openai_tools() { |
| 34 | std::cout << "\n=== Testing OpenAI Tool Integration ===\n"; |
| 35 | |
| 36 | auto client = ai::openai::create_client(); |
| 37 | |
| 38 | // Create a simple tool |
| 39 | ai::ToolSet tools = { |
| 40 | {"test_tool", ai::create_simple_tool( |
| 41 | "test_tool", "A simple test tool that echoes input", |
| 42 | {{"input", "string"}}, simple_test_tool)}}; |
| 43 | |
| 44 | ai::GenerateOptions options; |
| 45 | options.model = ai::openai::models::kGpt54; |
| 46 | options.prompt = "Please use the test_tool with input 'hello world'"; |
| 47 | options.tools = tools; |
| 48 | options.tool_choice = |
| 49 | ai::ToolChoice::specific("test_tool"); // Force tool usage |
| 50 | options.max_tokens = 100; |
| 51 | |
| 52 | std::cout << "Making request to OpenAI with forced tool usage...\n"; |
| 53 | |
| 54 | auto result = client.generate_text(options); |
| 55 | |
| 56 | if (result) { |
| 57 | std::cout << "✅ Request successful!\n"; |
| 58 | std::cout << "Response: " << result.text << "\n"; |
| 59 | std::cout << "Tool calls: " << result.tool_calls.size() << "\n"; |
| 60 | std::cout << "Tool results: " << result.tool_results.size() << "\n"; |
| 61 | |
| 62 | if (!result.tool_calls.empty()) { |
| 63 | const auto& call = result.tool_calls[0]; |
| 64 | std::cout << "First tool call: " << call.tool_name << "\n"; |
| 65 | std::cout << "Arguments: " << call.arguments.dump() << "\n"; |
| 66 | } |
| 67 | |
| 68 | if (!result.tool_results.empty()) { |
| 69 | const auto& tool_result = result.tool_results[0]; |
| 70 | std::cout << "First tool result: " << tool_result.result.dump() << "\n"; |
| 71 | } |
| 72 | } else { |
| 73 | std::cout << "❌ Request failed: " << result.error_message() << "\n"; |
| 74 | } |
| 75 | } |
| 76 | |
| 77 | void test_anthropic_tools() { |
| 78 | std::cout << "\n=== Testing Anthropic Tool Integration ===\n"; |
no test coverage detected