mirror of
https://github.com/microsoft/agent-framework.git
synced 2026-06-16 21:04:09 +08:00
* Refactor Anthropic model option and provider clients Rename the Anthropic client model option from model_id to model, add provider-specific Anthropic wrappers for Foundry, Bedrock, and Vertex, and expose them through the Anthropic, Foundry, Amazon, and Google namespaces. Update core option handling, docs, samples, and tests accordingly. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix Anthropic skills sample typing Cast the Anthropic beta client to Any in the skills sample so the pre-commit sample pyright check no longer fails on beta skills and files endpoints that are not exposed by the current SDK stubs. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * undo sample mypy * Retry CI after transient external failures Retrigger PR validation after an unrelated Copilot review workflow SAML failure and a transient external tau2 git fetch failure in the Windows Python test setup. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Address review feedback on model option merging Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Address Anthropic compatibility review feedback Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * moved all to `model` * fixes for azure ai search * Python: standardize remaining sample env var names Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Python: fix foundry-local pyright compatibility Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * updated env vars in cicd --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
101 lines
3.4 KiB
Python
101 lines
3.4 KiB
Python
# Copyright (c) Microsoft. All rights reserved.
|
|
# ruff: noqa: T201
|
|
|
|
import asyncio
|
|
import os
|
|
|
|
from agent_framework.foundry import FoundryChatClient
|
|
from azure.identity.aio import AzureCliCredential
|
|
from dotenv import load_dotenv
|
|
|
|
from agent_framework_azure_cosmos import CosmosHistoryProvider
|
|
|
|
# Load environment variables from .env file.
|
|
load_dotenv()
|
|
|
|
"""
|
|
This sample demonstrates CosmosHistoryProvider as an agent context provider.
|
|
|
|
Key components:
|
|
- FoundryChatClient configured with an Azure AI project endpoint
|
|
- CosmosHistoryProvider configured for Cosmos DB-backed message history
|
|
- Provider-configured container name with session_id as partition key
|
|
|
|
Environment variables:
|
|
FOUNDRY_PROJECT_ENDPOINT
|
|
FOUNDRY_MODEL
|
|
AZURE_COSMOS_ENDPOINT
|
|
AZURE_COSMOS_DATABASE_NAME
|
|
AZURE_COSMOS_CONTAINER_NAME
|
|
Optional:
|
|
AZURE_COSMOS_KEY
|
|
"""
|
|
|
|
|
|
async def main() -> None:
|
|
"""Run the Cosmos history provider sample with an Agent."""
|
|
project_endpoint = os.getenv("FOUNDRY_PROJECT_ENDPOINT")
|
|
model = os.getenv("FOUNDRY_MODEL")
|
|
cosmos_endpoint = os.getenv("AZURE_COSMOS_ENDPOINT")
|
|
cosmos_database_name = os.getenv("AZURE_COSMOS_DATABASE_NAME")
|
|
cosmos_container_name = os.getenv("AZURE_COSMOS_CONTAINER_NAME")
|
|
cosmos_key = os.getenv("AZURE_COSMOS_KEY")
|
|
|
|
if (
|
|
not project_endpoint
|
|
or not model
|
|
or not cosmos_endpoint
|
|
or not cosmos_database_name
|
|
or not cosmos_container_name
|
|
):
|
|
print(
|
|
"Please set FOUNDRY_PROJECT_ENDPOINT, FOUNDRY_MODEL, "
|
|
"AZURE_COSMOS_ENDPOINT, AZURE_COSMOS_DATABASE_NAME, and AZURE_COSMOS_CONTAINER_NAME."
|
|
)
|
|
return
|
|
|
|
# 1. Create an Azure credential and Foundry chat client using project endpoint auth.
|
|
async with AzureCliCredential() as credential:
|
|
client = FoundryChatClient(
|
|
project_endpoint=project_endpoint,
|
|
model=model,
|
|
credential=credential,
|
|
)
|
|
|
|
# 2. Create an agent that uses the history provider as a context provider.
|
|
async with (
|
|
CosmosHistoryProvider(
|
|
endpoint=cosmos_endpoint,
|
|
database_name=cosmos_database_name,
|
|
container_name=cosmos_container_name,
|
|
credential=cosmos_key or credential,
|
|
) as history_provider,
|
|
client.as_agent(
|
|
name="CosmosHistoryAgent",
|
|
instructions="You are a helpful assistant that remembers prior turns.",
|
|
context_providers=[history_provider],
|
|
default_options={"store": False},
|
|
) as agent,
|
|
):
|
|
# 3. Create a session (session_id is used as the partition key).
|
|
session = agent.create_session()
|
|
|
|
# 4. Run a multi-turn conversation; history is persisted by CosmosHistoryProvider.
|
|
response1 = await agent.run("My name is Ada and I enjoy distributed systems.", session=session)
|
|
print(f"Assistant: {response1.text}")
|
|
|
|
response2 = await agent.run("What do you remember about me?", session=session)
|
|
print(f"Assistant: {response2.text}")
|
|
print(f"Container: {history_provider.container_name}")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
asyncio.run(main())
|
|
|
|
"""
|
|
Sample output:
|
|
Assistant: Nice to meet you, Ada! Distributed systems are a fascinating area.
|
|
Assistant: You told me your name is Ada and that you enjoy distributed systems.
|
|
Container: <AZURE_COSMOS_CONTAINER_NAME>
|
|
"""
|