## Summary This replaces the default model provider with a `MultiProvider`, which has the logic: - if the model name starts with `openai/` or doesn't contain "/", use OpenAI - if the model name starts with `litellm/`, use LiteLLM to use the appropriate model provider. It's also extensible, so users can create their own mappings. I also imagine that if we natively supported Anthropic/Gemini etc, we can add it to MultiProvider to make it work. The goal is that it should be really easy to use any model provider. Today if you pass `model="gpt-4.1"`, it works great. But `model="claude-sonnet-3.7"` doesn't. If we can make it that easy, it's a win for devx. I'm not entirely sure if this is a good idea - is it too magical? Is the API too reliant on litellm? Comments welcome. ## Test plan For now, the example. Will add unit tests if we agree its worth mergin. --------- Co-authored-by: Steven Heidel <steven@heidel.ca>
41 lines
1.1 KiB
Python
41 lines
1.1 KiB
Python
from __future__ import annotations
|
|
|
|
import asyncio
|
|
|
|
from agents import Agent, Runner, function_tool, set_tracing_disabled
|
|
|
|
"""This example uses the built-in support for LiteLLM. To use this, ensure you have the
|
|
ANTHROPIC_API_KEY environment variable set.
|
|
"""
|
|
|
|
set_tracing_disabled(disabled=True)
|
|
|
|
|
|
@function_tool
|
|
def get_weather(city: str):
|
|
print(f"[debug] getting weather for {city}")
|
|
return f"The weather in {city} is sunny."
|
|
|
|
|
|
async def main():
|
|
agent = Agent(
|
|
name="Assistant",
|
|
instructions="You only respond in haikus.",
|
|
# We prefix with litellm/ to tell the Runner to use the LitellmModel
|
|
model="litellm/anthropic/claude-3-5-sonnet-20240620",
|
|
tools=[get_weather],
|
|
)
|
|
|
|
result = await Runner.run(agent, "What's the weather in Tokyo?")
|
|
print(result.final_output)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
import os
|
|
|
|
if os.getenv("ANTHROPIC_API_KEY") is None:
|
|
raise ValueError(
|
|
"ANTHROPIC_API_KEY is not set. Please set it the environment variable and try again."
|
|
)
|
|
|
|
asyncio.run(main())
|