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.
105 lines
3.5 KiB
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()
|