Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
517 changes: 517 additions & 0 deletions docs/decisions/00XX-python-client-constructors.md

Large diffs are not rendered by default.

29 changes: 27 additions & 2 deletions python/.env.example
Original file line number Diff line number Diff line change
Expand Up @@ -19,16 +19,41 @@ OPENAI_RESPONSES_MODEL_ID=""
AZURE_OPENAI_ENDPOINT=""
AZURE_OPENAI_CHAT_DEPLOYMENT_NAME=""
AZURE_OPENAI_RESPONSES_DEPLOYMENT_NAME=""
# Use API key authentication (alternative to Azure CLI/DefaultAzureCredential)
# AZURE_OPENAI_API_KEY=""
# Optional: Explicit backend selection (openai, azure)
# OPENAI_CHAT_CLIENT_BACKEND=
# Mem0
MEM0_API_KEY=""
# Copilot Studio
COPILOTSTUDIOAGENT__ENVIRONMENTID=""
COPILOTSTUDIOAGENT__SCHEMANAME=""
COPILOTSTUDIOAGENT__TENANTID=""
COPILOTSTUDIOAGENT__AGENTAPPID=""
# Anthropic
# Anthropic (common)
ANTHROPIC_CHAT_MODEL_ID=""
# Optional: Explicit backend selection (anthropic, foundry, vertex, bedrock)
# ANTHROPIC_CHAT_CLIENT_BACKEND=

# Anthropic API (Direct)
ANTHROPIC_API_KEY=""
ANTHROPIC_MODEL=""
# ANTHROPIC_BASE_URL=

# Anthropic via Azure AI Foundry
# ANTHROPIC_FOUNDRY_API_KEY=
# ANTHROPIC_FOUNDRY_RESOURCE=
# ANTHROPIC_FOUNDRY_BASE_URL=

# Anthropic via Google Vertex AI
# ANTHROPIC_VERTEX_ACCESS_TOKEN=
# ANTHROPIC_VERTEX_PROJECT_ID=
# CLOUD_ML_REGION=

# Anthropic via AWS Bedrock
# ANTHROPIC_AWS_ACCESS_KEY_ID=
# ANTHROPIC_AWS_SECRET_ACCESS_KEY=
# ANTHROPIC_AWS_PROFILE=
# ANTHROPIC_AWS_REGION=
# Ollama
OLLAMA_ENDPOINT=""
OLLAMA_MODEL=""
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"""Backend tool rendering endpoint."""

from agent_framework.ag_ui import add_agent_framework_fastapi_endpoint
from agent_framework.azure import AzureOpenAIChatClient
from agent_framework.openai import OpenAIChatClient
from fastapi import FastAPI

from ...agents.weather_agent import weather_agent
Expand All @@ -16,7 +16,7 @@ def register_backend_tool_rendering(app: FastAPI) -> None:
app: The FastAPI application.
"""
# Create a chat client and call the factory function
chat_client = AzureOpenAIChatClient()
chat_client = OpenAIChatClient(backend="azure")

add_agent_framework_fastapi_endpoint(
app,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
from agent_framework._clients import BaseChatClient
from agent_framework.ag_ui import add_agent_framework_fastapi_endpoint
from agent_framework.anthropic import AnthropicClient
from agent_framework.azure import AzureOpenAIChatClient
from agent_framework.openai import OpenAIChatClient
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware

Expand Down Expand Up @@ -65,7 +65,7 @@
# You can use different chat clients for different agents if needed
# Set CHAT_CLIENT=anthropic to use Anthropic, defaults to Azure OpenAI
chat_client: BaseChatClient[ChatOptions] = (
AnthropicClient() if os.getenv("CHAT_CLIENT", "").lower() == "anthropic" else AzureOpenAIChatClient()
AnthropicClient() if os.getenv("CHAT_CLIENT", "").lower() == "anthropic" else OpenAIChatClient(backend="azure")
)

# Agentic Chat - basic chat agent
Expand Down
7 changes: 4 additions & 3 deletions python/packages/ag-ui/getting_started/server.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

from agent_framework import ChatAgent, tool
from agent_framework.ag_ui import add_agent_framework_fastapi_endpoint
from agent_framework.azure import AzureOpenAIChatClient
from agent_framework.openai import OpenAIChatClient
from dotenv import load_dotenv
from fastapi import Depends, FastAPI, HTTPException, Security
from fastapi.security import APIKeyHeader
Expand Down Expand Up @@ -117,9 +117,10 @@ def get_time_zone(location: str) -> str:
agent = ChatAgent(
name="AGUIAssistant",
instructions="You are a helpful assistant. Use get_weather for weather and get_time_zone for time zones.",
chat_client=AzureOpenAIChatClient(
chat_client=OpenAIChatClient(
backend="azure",
endpoint=endpoint,
deployment_name=deployment_name,
model_id=deployment_name,
),
tools=[get_time_zone], # ONLY server-side tools
)
Expand Down
80 changes: 78 additions & 2 deletions python/packages/anthropic/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,87 @@ pip install agent-framework-anthropic --pre

## Anthropic Integration

The Anthropic integration enables communication with the Anthropic API, allowing your Agent Framework applications to leverage Anthropic's capabilities.
The Anthropic integration enables communication with Anthropic's Claude models through multiple backends:

- **Anthropic API** (direct) - Default, highest precedence
- **Azure AI Foundry** - Claude models via Azure
- **Google Vertex AI** - Claude models via Google Cloud
- **AWS Bedrock** - Claude models via AWS

### Basic Usage Example

```python
from agent_framework_anthropic import AnthropicClient

# Using environment variables (ANTHROPIC_API_KEY, ANTHROPIC_CHAT_MODEL_ID)
client = AnthropicClient()

# Or with explicit parameters
client = AnthropicClient(
api_key="sk-...",
model_id="claude-sonnet-4-5-20250929",
)
```

### Multi-Backend Support

The client automatically detects which backend to use based on available credentials, or you can explicitly specify the backend:

```python
# Explicit backend selection
client = AnthropicClient(backend="anthropic") # Direct Anthropic API
client = AnthropicClient(backend="foundry") # Azure AI Foundry
client = AnthropicClient(backend="vertex") # Google Vertex AI
client = AnthropicClient(backend="bedrock") # AWS Bedrock
```

### Environment Variables

#### Anthropic API (Direct)
| Variable | Description |
|----------|-------------|
| `ANTHROPIC_API_KEY` | Anthropic API key |
| `ANTHROPIC_CHAT_MODEL_ID` | Model ID (e.g., `claude-sonnet-4-5-20250929`) |
| `ANTHROPIC_BASE_URL` | Optional custom base URL |

#### Azure AI Foundry
| Variable | Description |
|----------|-------------|
| `ANTHROPIC_FOUNDRY_API_KEY` | Foundry API key (or use `ad_token_provider`) |
| `ANTHROPIC_FOUNDRY_RESOURCE` | Azure resource name |
| `ANTHROPIC_FOUNDRY_BASE_URL` | Optional custom endpoint URL |
| `ANTHROPIC_CHAT_MODEL_ID` | Model ID |

#### Google Vertex AI
| Variable | Description |
|----------|-------------|
| `ANTHROPIC_VERTEX_ACCESS_TOKEN` | Google access token (or use `google_credentials`) |
| `ANTHROPIC_VERTEX_PROJECT_ID` | GCP project ID |
| `CLOUD_ML_REGION` | GCP region (e.g., `us-central1`) |
| `ANTHROPIC_VERTEX_BASE_URL` | Optional custom endpoint URL |
| `ANTHROPIC_CHAT_MODEL_ID` | Model ID |

#### AWS Bedrock
| Variable | Description |
|----------|-------------|
| `ANTHROPIC_AWS_ACCESS_KEY_ID` | AWS access key |
| `ANTHROPIC_AWS_SECRET_ACCESS_KEY` | AWS secret key |
| `ANTHROPIC_AWS_SESSION_TOKEN` | Optional session token |
| `ANTHROPIC_AWS_PROFILE` | AWS profile name (alternative to access keys) |
| `ANTHROPIC_AWS_REGION` | AWS region |
| `ANTHROPIC_BEDROCK_BASE_URL` | Optional custom endpoint URL |
| `ANTHROPIC_CHAT_MODEL_ID` | Model ID |

#### Backend Selection
| Variable | Description |
|----------|-------------|
| `ANTHROPIC_CHAT_CLIENT_BACKEND` | Explicit backend: `anthropic`, `foundry`, `vertex`, or `bedrock` |

### Examples

See the [Anthropic agent examples](https://github.com/microsoft/agent-framework/tree/main/python/samples/getting_started/agents/anthropic/) which demonstrate:

- Connecting to a Anthropic endpoint with an agent
- Connecting to Anthropic with an agent
- Streaming and non-streaming responses
- Using different backends (Foundry, Vertex, Bedrock)
- Advanced features like hosted tools and thinking
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,17 @@
import importlib.metadata

from ._chat_client import AnthropicChatOptions, AnthropicClient
from ._shared import AnthropicBackend, AnthropicSettings

try:
__version__ = importlib.metadata.version(__name__)
except importlib.metadata.PackageNotFoundError:
__version__ = "0.0.0" # Fallback for development mode

__all__ = [
"AnthropicBackend",
"AnthropicChatOptions",
"AnthropicClient",
"AnthropicSettings",
"__version__",
]
Loading
Loading