Spaces:
Sleeping
Sleeping
| #!/usr/bin/env python3 | |
| """Basic tool calling example with Esperanto. | |
| This example demonstrates the simplest form of tool calling: | |
| 1. Define a single tool | |
| 2. Send a message that triggers tool use | |
| 3. Process the tool call response | |
| Environment variables required: | |
| - OPENAI_API_KEY: Your OpenAI API key | |
| Run with: | |
| python examples/tool_calling/basic_tool.py | |
| """ | |
| import json | |
| import os | |
| from esperanto import AIFactory | |
| from esperanto.common_types import Tool, ToolFunction | |
| def main(): | |
| # Check for API key | |
| if not os.getenv("OPENAI_API_KEY"): | |
| print("Please set OPENAI_API_KEY environment variable") | |
| print("Export it with: export OPENAI_API_KEY='your-key-here'") | |
| return | |
| # Define a simple weather tool | |
| weather_tool = Tool( | |
| type="function", | |
| function=ToolFunction( | |
| name="get_weather", | |
| description="Get the current weather for a location. " | |
| "Returns temperature, conditions, and humidity.", | |
| parameters={ | |
| "type": "object", | |
| "properties": { | |
| "location": { | |
| "type": "string", | |
| "description": "City and state/country, e.g., 'San Francisco, CA' or 'London, UK'", | |
| }, | |
| "unit": { | |
| "type": "string", | |
| "enum": ["celsius", "fahrenheit"], | |
| "description": "Temperature unit preference", | |
| }, | |
| }, | |
| "required": ["location"], | |
| }, | |
| ), | |
| ) | |
| # Create a model with the tool | |
| model = AIFactory.create_language( | |
| provider="openai", | |
| model_name="gpt-4o-mini", | |
| config={"tools": [weather_tool]}, | |
| ) | |
| print("=== Basic Tool Calling Example ===\n") | |
| # Send a message that should trigger tool use | |
| messages = [{"role": "user", "content": "What's the weather like in Tokyo, Japan?"}] | |
| print(f"User: {messages[0]['content']}\n") | |
| # Make the API call | |
| response = model.chat_complete(messages) | |
| message = response.choices[0].message | |
| # Check if the model wants to call a tool | |
| if message.tool_calls: | |
| print("Model requested tool call(s):") | |
| for tool_call in message.tool_calls: | |
| print(f" Tool: {tool_call.function.name}") | |
| print(f" ID: {tool_call.id}") | |
| # Parse and display arguments | |
| args = json.loads(tool_call.function.arguments) | |
| print(f" Arguments: {json.dumps(args, indent=4)}") | |
| print() | |
| # In a real application, you would execute the tool here | |
| # For this example, we'll just show what was requested | |
| print(" (In a real app, you would now call your weather API)") | |
| print(f" (with location='{args.get('location')}')") | |
| else: | |
| # Model responded with text instead | |
| print(f"Assistant: {message.content}") | |
| print("\n=== Example Complete ===") | |
| if __name__ == "__main__": | |
| main() | |