You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
swarms/examples/tools/base_tool_examples/example_usage.py

105 lines
3.5 KiB

#!/usr/bin/env python3
"""
Example usage of the modified execute_function_calls_from_api_response method
with the exact response structure from tool_schema.py
"""
from swarms.tools.base_tool import BaseTool
def get_current_weather(location: str, unit: str = "celsius") -> dict:
"""Get the current weather in a given location"""
return {
"location": location,
"temperature": "22" if unit == "celsius" else "72",
"unit": unit,
"condition": "sunny",
"description": f"The weather in {location} is sunny with a temperature of {'22°C' if unit == 'celsius' else '72°F'}",
}
def main():
"""
Example of using the modified BaseTool with a LiteLLM response
that contains Anthropic function calls as BaseModel objects
"""
# Set up the BaseTool with your functions
tool = BaseTool(tools=[get_current_weather], verbose=True)
# Simulate the response you get from LiteLLM (from your tool_schema.py output)
# In real usage, this would be: response = completion(...)
# For this example, let's simulate the exact response structure
# The response.choices[0].message.tool_calls contains BaseModel objects
print("=== Simulating LiteLLM Response Processing ===")
# Option 1: Process the entire response object
# (This would be the actual ModelResponse object from LiteLLM)
mock_response = {
"choices": [
{
"message": {
"tool_calls": [
# This would actually be a ChatCompletionMessageToolCall BaseModel object
# but we'll simulate the structure here
{
"index": 1,
"function": {
"arguments": '{"location": "Boston", "unit": "fahrenheit"}',
"name": "get_current_weather",
},
"id": "toolu_019vcXLipoYHzd1e1HUYSSaa",
"type": "function",
}
]
}
}
]
}
print("Processing mock response:")
try:
results = tool.execute_function_calls_from_api_response(
mock_response
)
print("Results:")
for i, result in enumerate(results):
print(f" Function call {i+1}:")
print(f" {result}")
except Exception as e:
print(f"Error processing response: {e}")
print("\n" + "=" * 50)
# Option 2: Process just the tool_calls list
# (If you extract tool_calls from response.choices[0].message.tool_calls)
print("Processing just tool_calls:")
tool_calls = mock_response["choices"][0]["message"]["tool_calls"]
try:
results = tool.execute_function_calls_from_api_response(
tool_calls
)
print("Results from tool_calls:")
for i, result in enumerate(results):
print(f" Function call {i+1}:")
print(f" {result}")
except Exception as e:
print(f"Error processing tool_calls: {e}")
print("\n" + "=" * 50)
# Option 3: Show format detection
print("Format detection:")
format_type = tool.detect_api_response_format(mock_response)
print(f" Full response format: {format_type}")
format_type_tools = tool.detect_api_response_format(tool_calls)
print(f" Tool calls format: {format_type_tools}")
if __name__ == "__main__":
main()