From 08f792e511352b9098df76c8499c43ba12037367 Mon Sep 17 00:00:00 2001 From: Dmytro Struk <13853051+dmytrostruk@users.noreply.github.com> Date: Sun, 21 Sep 2025 21:04:07 -0700 Subject: [PATCH] Python: Added Anthropic agent example (#850) * Added Anthropic example * Small fix --- python/.env.example | 3 + .../anthropic_with_openai_chat_client.py | 85 +++++++++++++++++++ 2 files changed, 88 insertions(+) create mode 100644 python/samples/getting_started/agents/anthropic/anthropic_with_openai_chat_client.py diff --git a/python/.env.example b/python/.env.example index 045b3f540e..933fe24212 100644 --- a/python/.env.example +++ b/python/.env.example @@ -22,3 +22,6 @@ COPILOTSTUDIOAGENT__ENVIRONMENTID="" COPILOTSTUDIOAGENT__SCHEMANAME="" COPILOTSTUDIOAGENT__TENANTID="" COPILOTSTUDIOAGENT__AGENTAPPID="" +# Anthropic +ANTHROPIC_API_KEY="" +ANTHROPIC_MODEL="" diff --git a/python/samples/getting_started/agents/anthropic/anthropic_with_openai_chat_client.py b/python/samples/getting_started/agents/anthropic/anthropic_with_openai_chat_client.py new file mode 100644 index 0000000000..8c1b55faec --- /dev/null +++ b/python/samples/getting_started/agents/anthropic/anthropic_with_openai_chat_client.py @@ -0,0 +1,85 @@ +# Copyright (c) Microsoft. All rights reserved. + +import asyncio +import os +from random import randint +from typing import Annotated + +from agent_framework.openai import OpenAIChatClient + +""" +Anthropic with OpenAI Chat Client Example + +This sample demonstrates how to use Anthropic models through the OpenAI Chat Client by +configuring the base URL to point to Anthropic's API. The example includes: + +- Setting up OpenAI Chat Client with Anthropic API configuration +- Creating an agent with tool calling capabilities (weather function) +- Non-streaming response example to get complete results at once +- Streaming response example to receive results as they are generated + +This approach allows you to leverage Anthropic's Claude models while using the familiar +OpenAI client interface, making it easy to switch between different model providers. +""" + + +def get_weather( + location: Annotated[str, "The location to get the weather for."], +) -> str: + """Get the weather for a given location.""" + conditions = ["sunny", "cloudy", "rainy", "stormy"] + return f"The weather in {location} is {conditions[randint(0, 3)]} with a high of {randint(10, 30)}°C." + + +async def non_streaming_example() -> None: + """Example of non-streaming response (get the complete result at once).""" + print("=== Non-streaming Response Example ===") + + agent = OpenAIChatClient( + api_key=os.getenv("ANTHROPIC_API_KEY"), + base_url="https://api.anthropic.com/v1/", + ai_model_id=os.getenv("ANTHROPIC_MODEL"), + ).create_agent( + name="WeatherAgent", + instructions="You are a helpful weather agent.", + tools=get_weather, + ) + + query = "What's the weather like in Seattle?" + print(f"User: {query}") + result = await agent.run(query) + print(f"Result: {result}\n") + + +async def streaming_example() -> None: + """Example of streaming response (get results as they are generated).""" + print("=== Streaming Response Example ===") + + agent = OpenAIChatClient( + api_key=os.getenv("ANTHROPIC_API_KEY"), + base_url="https://api.anthropic.com/v1/", + ai_model_id=os.getenv("ANTHROPIC_MODEL"), + ).create_agent( + name="WeatherAgent", + instructions="You are a helpful weather agent.", + tools=get_weather, + ) + + query = "What's the weather like in Portland?" + print(f"User: {query}") + print("Agent: ", end="", flush=True) + async for chunk in agent.run_stream(query): + if chunk.text: + print(chunk.text, end="", flush=True) + print("\n") + + +async def main() -> None: + print("=== Anthropic with OpenAI Chat Client Agent Example ===") + + await non_streaming_example() + await streaming_example() + + +if __name__ == "__main__": + asyncio.run(main())