Skip to content

Commit 95fd5ec

Browse files
Python: [BREAKING] Python: move Azure AI embeddings to Foundry (#5056)
* renamed AzureAIINferenceEmbeddings and lazy load azure-cosmos and env var rename * updated coverage * fix readme
1 parent 47d8291 commit 95fd5ec

74 files changed

Lines changed: 403 additions & 902 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/ISSUE_TEMPLATE/python-issue.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ body:
4747
attributes:
4848
label: Package Versions
4949
description: List the agent-framework-* packages and versions you are using
50-
placeholder: "e.g., agent-framework-core: 1.0.0, agent-framework-azure-ai: 1.0.0"
50+
placeholder: "e.g., agent-framework-core: 1.0.0, agent-framework-foundry: 1.0.0"
5151
validations:
5252
required: true
5353

.github/workflows/python-check-coverage.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@
3737
# Packages (sorted alphabetically)
3838
"packages.anthropic.agent_framework_anthropic",
3939
"packages.azure-ai-search.agent_framework_azure_ai_search",
40-
"packages.azure-ai.agent_framework_azure_ai",
4140
"packages.core.agent_framework",
4241
"packages.core.agent_framework._workflows",
4342
"packages.foundry.agent_framework_foundry",

.github/workflows/python-integration-tests.yml

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,8 @@ jobs:
6060
environment: integration
6161
timeout-minutes: 60
6262
env:
63-
OPENAI_CHAT_MODEL: ${{ vars.OPENAI__CHATMODELID }}
64-
OPENAI_RESPONSES_MODEL: ${{ vars.OPENAI__RESPONSESMODELID }}
63+
OPENAI_CHAT_COMPLETION_MODEL: ${{ vars.OPENAI__CHATMODELID }}
64+
OPENAI_CHAT_MODEL: ${{ vars.OPENAI__RESPONSESMODELID }}
6565
OPENAI_MODEL: ${{ vars.OPENAI__RESPONSESMODELID }}
6666
OPENAI_EMBEDDING_MODEL: ${{ vars.OPENAI_EMBEDDING_MODEL_ID }}
6767
OPENAI_API_KEY: ${{ secrets.OPENAI__APIKEY }}
@@ -95,8 +95,8 @@ jobs:
9595
environment: integration
9696
timeout-minutes: 60
9797
env:
98-
AZURE_OPENAI_CHAT_MODEL: ${{ vars.AZUREOPENAI__CHATDEPLOYMENTNAME }}
99-
AZURE_OPENAI_RESPONSES_MODEL: ${{ vars.AZUREOPENAI__RESPONSESDEPLOYMENTNAME }}
98+
AZURE_OPENAI_CHAT_COMPLETION_MODEL: ${{ vars.AZUREOPENAI__CHATDEPLOYMENTNAME }}
99+
AZURE_OPENAI_CHAT_MODEL: ${{ vars.AZUREOPENAI__RESPONSESDEPLOYMENTNAME }}
100100
AZURE_OPENAI_MODEL: ${{ vars.AZUREOPENAI__RESPONSESDEPLOYMENTNAME }}
101101
AZURE_OPENAI_EMBEDDING_MODEL: ${{ vars.AZURE_OPENAI_EMBEDDING_DEPLOYMENT_NAME }}
102102
AZURE_OPENAI_ENDPOINT: ${{ vars.AZUREOPENAI__ENDPOINT }}
@@ -201,14 +201,15 @@ jobs:
201201
timeout-minutes: 60
202202
env:
203203
UV_PYTHON: "3.11"
204-
OPENAI_CHAT_MODEL: ${{ vars.OPENAI__CHATMODELID }}
205-
OPENAI_RESPONSES_MODEL: ${{ vars.OPENAI__RESPONSESMODELID }}
204+
OPENAI_CHAT_COMPLETION_MODEL: ${{ vars.OPENAI__CHATMODELID }}
205+
OPENAI_CHAT_MODEL: ${{ vars.OPENAI__RESPONSESMODELID }}
206206
OPENAI_MODEL: ${{ vars.OPENAI__RESPONSESMODELID }}
207207
OPENAI_EMBEDDING_MODEL: ${{ vars.OPENAI_EMBEDDING_MODEL_ID }}
208208
OPENAI_API_KEY: ${{ secrets.OPENAI__APIKEY }}
209209
AZURE_OPENAI_ENDPOINT: ${{ vars.AZUREOPENAI__ENDPOINT }}
210210
AZURE_OPENAI_MODEL: ${{ vars.AZUREOPENAI__RESPONSESDEPLOYMENTNAME }}
211-
AZURE_OPENAI_CHAT_MODEL: ${{ vars.AZUREOPENAI__CHATDEPLOYMENTNAME }}
211+
AZURE_OPENAI_CHAT_MODEL: ${{ vars.AZUREOPENAI__RESPONSESDEPLOYMENTNAME }}
212+
AZURE_OPENAI_CHAT_COMPLETION_MODEL: ${{ vars.AZUREOPENAI__CHATDEPLOYMENTNAME }}
212213
FOUNDRY_PROJECT_ENDPOINT: ${{ vars.FOUNDRY_PROJECT_ENDPOINT }}
213214
FOUNDRY_MODEL: ${{ vars.FOUNDRY_MODEL }}
214215
FUNCTIONS_WORKER_RUNTIME: "python"
@@ -255,12 +256,14 @@ jobs:
255256
environment: integration
256257
timeout-minutes: 60
257258
env:
258-
AZURE_AI_PROJECT_ENDPOINT: ${{ secrets.AZUREAI__ENDPOINT }}
259-
AZURE_AI_MODEL: ${{ vars.AZUREAI__DEPLOYMENTNAME }}
260259
FOUNDRY_PROJECT_ENDPOINT: ${{ vars.FOUNDRY_PROJECT_ENDPOINT }}
261260
FOUNDRY_MODEL: ${{ vars.FOUNDRY_MODEL }}
262261
FOUNDRY_AGENT_NAME: ${{ vars.FOUNDRY_AGENT_NAME }}
263262
FOUNDRY_AGENT_VERSION: ${{ vars.FOUNDRY_AGENT_VERSION }}
263+
FOUNDRY_MODELS_ENDPOINT: ${{ vars.FOUNDRY_MODELS_ENDPOINT || '' }}
264+
FOUNDRY_MODELS_API_KEY: ${{ secrets.FOUNDRY_MODELS_API_KEY || '' }}
265+
FOUNDRY_EMBEDDING_MODEL: ${{ vars.FOUNDRY_EMBEDDING_MODEL || '' }}
266+
FOUNDRY_IMAGE_EMBEDDING_MODEL: ${{ vars.FOUNDRY_IMAGE_EMBEDDING_MODEL || '' }}
264267
LOCAL_MCP_URL: ${{ vars.LOCAL_MCP__URL }}
265268
defaults:
266269
run:

.github/workflows/python-merge-tests.yml

Lines changed: 12 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ jobs:
3737
azureChanged: ${{ steps.filter.outputs.azure }}
3838
miscChanged: ${{ steps.filter.outputs.misc }}
3939
functionsChanged: ${{ steps.filter.outputs.functions }}
40-
azureAiChanged: ${{ steps.filter.outputs.azure-ai }}
40+
foundryChanged: ${{ steps.filter.outputs.foundry }}
4141
cosmosChanged: ${{ steps.filter.outputs.cosmos }}
4242
steps:
4343
- uses: actions/checkout@v6
@@ -75,10 +75,10 @@ jobs:
7575
functions:
7676
- 'python/packages/azurefunctions/**'
7777
- 'python/packages/durabletask/**'
78-
azure-ai:
79-
- 'python/packages/azure-ai/**'
78+
foundry:
8079
- 'python/packages/foundry/**'
8180
- 'python/samples/**/providers/foundry/**'
81+
- 'python/samples/02-agents/embeddings/foundry_embeddings.py'
8282
cosmos:
8383
- 'python/packages/azure-cosmos/**'
8484
# run only if 'python' files were changed
@@ -139,8 +139,8 @@ jobs:
139139
runs-on: ubuntu-latest
140140
environment: integration
141141
env:
142-
OPENAI_CHAT_MODEL: ${{ vars.OPENAI__CHATMODELID }}
143-
OPENAI_RESPONSES_MODEL: ${{ vars.OPENAI__RESPONSESMODELID }}
142+
OPENAI_CHAT_COMPLETION_MODEL: ${{ vars.OPENAI__CHATMODELID }}
143+
OPENAI_CHAT_MODEL: ${{ vars.OPENAI__RESPONSESMODELID }}
144144
OPENAI_MODEL: ${{ vars.OPENAI__RESPONSESMODELID }}
145145
OPENAI_EMBEDDING_MODEL: ${{ vars.OPENAI_EMBEDDING_MODEL_ID }}
146146
OPENAI_API_KEY: ${{ secrets.OPENAI__APIKEY }}
@@ -192,8 +192,8 @@ jobs:
192192
runs-on: ubuntu-latest
193193
environment: integration
194194
env:
195-
AZURE_OPENAI_CHAT_MODEL: ${{ vars.AZUREOPENAI__CHATDEPLOYMENTNAME }}
196-
AZURE_OPENAI_RESPONSES_MODEL: ${{ vars.AZUREOPENAI__RESPONSESDEPLOYMENTNAME }}
195+
AZURE_OPENAI_CHAT_COMPLETION_MODEL: ${{ vars.AZUREOPENAI__CHATDEPLOYMENTNAME }}
196+
AZURE_OPENAI_CHAT_MODEL: ${{ vars.AZUREOPENAI__RESPONSESDEPLOYMENTNAME }}
197197
AZURE_OPENAI_MODEL: ${{ vars.AZUREOPENAI__RESPONSESDEPLOYMENTNAME }}
198198
AZURE_OPENAI_EMBEDDING_MODEL: ${{ vars.AZURE_OPENAI_EMBEDDING_DEPLOYMENT_NAME }}
199199
AZURE_OPENAI_ENDPOINT: ${{ vars.AZUREOPENAI__ENDPOINT }}
@@ -330,14 +330,15 @@ jobs:
330330
environment: integration
331331
env:
332332
UV_PYTHON: "3.11"
333-
OPENAI_CHAT_MODEL: ${{ vars.OPENAI__CHATMODELID }}
334-
OPENAI_RESPONSES_MODEL: ${{ vars.OPENAI__RESPONSESMODELID }}
333+
OPENAI_CHAT_COMPLETION_MODEL: ${{ vars.OPENAI__CHATMODELID }}
334+
OPENAI_CHAT_MODEL: ${{ vars.OPENAI__RESPONSESMODELID }}
335335
OPENAI_MODEL: ${{ vars.OPENAI__RESPONSESMODELID }}
336336
OPENAI_EMBEDDING_MODEL: ${{ vars.OPENAI_EMBEDDING_MODEL_ID }}
337337
OPENAI_API_KEY: ${{ secrets.OPENAI__APIKEY }}
338338
AZURE_OPENAI_ENDPOINT: ${{ vars.AZUREOPENAI__ENDPOINT }}
339339
AZURE_OPENAI_MODEL: ${{ vars.AZUREOPENAI__RESPONSESDEPLOYMENTNAME }}
340-
AZURE_OPENAI_CHAT_MODEL: ${{ vars.AZUREOPENAI__CHATDEPLOYMENTNAME }}
340+
AZURE_OPENAI_CHAT_MODEL: ${{ vars.AZUREOPENAI__RESPONSESDEPLOYMENTNAME }}
341+
AZURE_OPENAI_CHAT_COMPLETION_MODEL: ${{ vars.AZUREOPENAI__CHATDEPLOYMENTNAME }}
341342
FOUNDRY_PROJECT_ENDPOINT: ${{ vars.FOUNDRY_PROJECT_ENDPOINT }}
342343
FOUNDRY_MODEL: ${{ vars.FOUNDRY_MODEL }}
343344
FUNCTIONS_WORKER_RUNTIME: "python"
@@ -392,13 +393,11 @@ jobs:
392393
github.event_name != 'pull_request' &&
393394
needs.paths-filter.outputs.pythonChanges == 'true' &&
394395
(github.event_name != 'merge_group' ||
395-
needs.paths-filter.outputs.azureAiChanged == 'true' ||
396+
needs.paths-filter.outputs.foundryChanged == 'true' ||
396397
needs.paths-filter.outputs.coreChanged == 'true')
397398
runs-on: ubuntu-latest
398399
environment: integration
399400
env:
400-
AZURE_AI_PROJECT_ENDPOINT: ${{ secrets.AZUREAI__ENDPOINT }}
401-
AZURE_AI_MODEL: ${{ vars.AZUREAI__DEPLOYMENTNAME }}
402401
FOUNDRY_PROJECT_ENDPOINT: ${{ vars.FOUNDRY_PROJECT_ENDPOINT }}
403402
FOUNDRY_MODEL: ${{ vars.FOUNDRY_MODEL }}
404403
FOUNDRY_AGENT_NAME: ${{ vars.FOUNDRY_AGENT_NAME }}
@@ -432,11 +431,6 @@ jobs:
432431
--timeout=120 --session-timeout=900 --timeout_method thread
433432
--retries 2 --retry-delay 5
434433
working-directory: ./python
435-
- name: Test Azure AI samples
436-
timeout-minutes: 10
437-
if: env.RUN_SAMPLES_TESTS == 'true'
438-
run: uv run pytest tests/samples/ -m "azure-ai"
439-
working-directory: ./python
440434
- name: Surface failing tests
441435
if: always()
442436
uses: pmeier/pytest-results-action@v0.7.2

.github/workflows/python-sample-validation.yml

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -66,12 +66,13 @@ jobs:
6666
# Azure OpenAI configuration
6767
AZURE_OPENAI_ENDPOINT: ${{ vars.AZUREOPENAI__ENDPOINT }}
6868
AZURE_OPENAI_MODEL: ${{ vars.AZURE_OPENAI_DEPLOYMENT_NAME || vars.AZUREOPENAI__RESPONSESDEPLOYMENTNAME }}
69-
AZURE_OPENAI_RESPONSES_MODEL: ${{ vars.AZUREOPENAI__RESPONSESDEPLOYMENTNAME }}
69+
AZURE_OPENAI_CHAT_COMPLETION_MODEL: ${{ vars.AZUREOPENAI__CHATDEPLOYMENTNAME }}
70+
AZURE_OPENAI_CHAT_MODEL: ${{ vars.AZUREOPENAI__RESPONSESDEPLOYMENTNAME }}
7071
AZURE_OPENAI_EMBEDDING_MODEL: ${{ vars.AZURE_OPENAI_EMBEDDING_DEPLOYMENT_NAME || vars.AZUREOPENAI__EMBEDDINGDEPLOYMENTNAME }}
7172
# OpenAI configuration
7273
OPENAI_API_KEY: ${{ secrets.OPENAI__APIKEY }}
73-
OPENAI_CHAT_MODEL: ${{ vars.OPENAI__CHATMODELID }}
74-
OPENAI_RESPONSES_MODEL: ${{ vars.OPENAI__RESPONSESMODELID }}
74+
OPENAI_CHAT_COMPLETION_MODEL: ${{ vars.OPENAI__CHATMODELID }}
75+
OPENAI_CHAT_MODEL: ${{ vars.OPENAI__RESPONSESMODELID }}
7576
# GitHub MCP
7677
GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }}
7778
OPENAI_MODEL: ${{ vars.OPENAI__RESPONSESMODELID }}
@@ -97,11 +98,12 @@ jobs:
9798
echo "FOUNDRY_MODEL=$FOUNDRY_MODEL" >> .env
9899
echo "AZURE_OPENAI_ENDPOINT=$AZURE_OPENAI_ENDPOINT" >> .env
99100
echo "AZURE_OPENAI_MODEL=$AZURE_OPENAI_MODEL" >> .env
100-
echo "AZURE_OPENAI_RESPONSES_MODEL=$AZURE_OPENAI_RESPONSES_MODEL" >> .env
101+
echo "AZURE_OPENAI_CHAT_COMPLETION_MODEL=$AZURE_OPENAI_CHAT_COMPLETION_MODEL" >> .env
102+
echo "AZURE_OPENAI_CHAT_MODEL=$AZURE_OPENAI_CHAT_MODEL" >> .env
101103
echo "AZURE_OPENAI_EMBEDDING_MODEL=$AZURE_OPENAI_EMBEDDING_MODEL" >> .env
102104
echo "OPENAI_API_KEY=$OPENAI_API_KEY" >> .env
105+
echo "OPENAI_CHAT_COMPLETION_MODEL=$OPENAI_CHAT_COMPLETION_MODEL" >> .env
103106
echo "OPENAI_CHAT_MODEL=$OPENAI_CHAT_MODEL" >> .env
104-
echo "OPENAI_RESPONSES_MODEL=$OPENAI_RESPONSES_MODEL" >> .env
105107
echo "GITHUB_PAT=$GITHUB_PAT" >> .env
106108
107109
- name: Run sample validation
@@ -122,8 +124,8 @@ jobs:
122124
env:
123125
OPENAI_API_KEY: ${{ secrets.OPENAI__APIKEY }}
124126
OPENAI_MODEL: ${{ vars.OPENAI__CHATMODELID }}
125-
OPENAI_CHAT_MODEL: ${{ vars.OPENAI__CHATMODELID }}
126-
OPENAI_RESPONSES_MODEL: ${{ vars.OPENAI__RESPONSESMODELID }}
127+
OPENAI_CHAT_COMPLETION_MODEL: ${{ vars.OPENAI__CHATMODELID }}
128+
OPENAI_CHAT_MODEL: ${{ vars.OPENAI__RESPONSESMODELID }}
127129
defaults:
128130
run:
129131
working-directory: python
@@ -142,8 +144,8 @@ jobs:
142144
run: |
143145
echo "OPENAI_API_KEY=$OPENAI_API_KEY" >> .env
144146
echo "OPENAI_MODEL=$OPENAI_MODEL" >> .env
147+
echo "OPENAI_CHAT_COMPLETION_MODEL=$OPENAI_CHAT_COMPLETION_MODEL" >> .env
145148
echo "OPENAI_CHAT_MODEL=$OPENAI_CHAT_MODEL" >> .env
146-
echo "OPENAI_RESPONSES_MODEL=$OPENAI_RESPONSES_MODEL" >> .env
147149
148150
- name: Run sample validation
149151
run: |
@@ -565,8 +567,8 @@ jobs:
565567
AZURE_OPENAI_MODEL: ${{ vars.AZURE_OPENAI_DEPLOYMENT_NAME || vars.AZUREOPENAI__RESPONSESDEPLOYMENTNAME }}
566568
# OpenAI configuration
567569
OPENAI_API_KEY: ${{ secrets.OPENAI__APIKEY }}
568-
OPENAI_CHAT_MODEL: ${{ vars.OPENAI__CHATMODELID }}
569-
OPENAI_RESPONSES_MODEL: ${{ vars.OPENAI__RESPONSESMODELID }}
570+
OPENAI_CHAT_COMPLETION_MODEL: ${{ vars.OPENAI__CHATMODELID }}
571+
OPENAI_CHAT_MODEL: ${{ vars.OPENAI__RESPONSESMODELID }}
570572
OPENAI_MODEL: ${{ vars.OPENAI__RESPONSESMODELID }}
571573
defaults:
572574
run:
@@ -589,8 +591,8 @@ jobs:
589591
echo "AZURE_OPENAI_ENDPOINT=$AZURE_OPENAI_ENDPOINT" >> .env
590592
echo "AZURE_OPENAI_MODEL=$AZURE_OPENAI_MODEL" >> .env
591593
echo "OPENAI_API_KEY=$OPENAI_API_KEY" >> .env
594+
echo "OPENAI_CHAT_COMPLETION_MODEL=$OPENAI_CHAT_COMPLETION_MODEL" >> .env
592595
echo "OPENAI_CHAT_MODEL=$OPENAI_CHAT_MODEL" >> .env
593-
echo "OPENAI_RESPONSES_MODEL=$OPENAI_RESPONSES_MODEL" >> .env
594596
595597
- name: Run sample validation
596598
run: |
@@ -617,9 +619,8 @@ jobs:
617619
AZURE_OPENAI_CHAT_DEPLOYMENT_NAME: ${{ vars.AZURE_OPENAI_DEPLOYMENT_NAME }}
618620
# OpenAI key
619621
OPENAI_API_KEY: ${{ secrets.OPENAI__APIKEY }}
620-
# OpenAI configuration for AF
621-
OPENAI_CHAT_MODEL: ${{ vars.OPENAI__CHATMODELID }}
622-
OPENAI_RESPONSES_MODEL: ${{ vars.OPENAI__RESPONSESMODELID }}
622+
OPENAI_CHAT_COMPLETION_MODEL: ${{ vars.OPENAI__CHATMODELID }}
623+
OPENAI_CHAT_MODEL: ${{ vars.OPENAI__RESPONSESMODELID }}
623624
OPENAI_MODEL: ${{ vars.OPENAI__RESPONSESMODELID }}
624625
# OpenAI configuration for SK
625626
OPENAI_CHAT_MODEL_ID: ${{ vars.OPENAI__CHATMODELID }}
@@ -649,8 +650,8 @@ jobs:
649650
echo "AZURE_OPENAI_ENDPOINT=$AZURE_OPENAI_ENDPOINT" >> .env
650651
echo "AZURE_OPENAI_MODEL=$AZURE_OPENAI_MODEL" >> .env
651652
echo "OPENAI_API_KEY=$OPENAI_API_KEY" >> .env
653+
echo "OPENAI_CHAT_COMPLETION_MODEL=$OPENAI_CHAT_COMPLETION_MODEL" >> .env
652654
echo "OPENAI_CHAT_MODEL=$OPENAI_CHAT_MODEL" >> .env
653-
echo "OPENAI_RESPONSES_MODEL=$OPENAI_RESPONSES_MODEL" >> .env
654655
echo "COPILOTSTUDIOAGENT__ENVIRONMENTID=$COPILOTSTUDIOAGENT__ENVIRONMENTID" >> .env
655656
echo "COPILOTSTUDIOAGENT__SCHEMANAME=$COPILOTSTUDIOAGENT__SCHEMANAME" >> .env
656657
echo "COPILOTSTUDIOAGENT__TENANTID=$COPILOTSTUDIOAGENT__TENANTID" >> .env

docs/decisions/0021-provider-leading-clients.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ Key changes:
3737
4. **New `FoundryChatClient`** in azure-ai for Azure AI Foundry Responses API access, built on `RawFoundryChatClient(RawOpenAIChatClient)`.
3838
5. **All deprecated `AzureOpenAI*` classes** consolidated into a single file (`_deprecated_azure_openai.py`) in the azure-ai package for clean future deletion.
3939
6. **Core's `agent_framework.openai` and `agent_framework.azure` namespaces** become lazy-loading gateways, preserving backward-compatible import paths while removing hard dependencies.
40-
7. **Unified `model` parameter** replaces `model_id` (OpenAI), `deployment_name` (Azure OpenAI), and `model_deployment_name` (Azure AI) across all client constructors. The term `model` is intentionally generic: it naturally maps to an OpenAI model name *and* to an Azure OpenAI deployment name, making it straightforward to use `OpenAIChatClient` with either OpenAI or Azure OpenAI backends (via `AsyncAzureOpenAI`). Environment variables are similarly unified (e.g., `OPENAI_MODEL` instead of separate `OPENAI_RESPONSES_MODEL_ID` / `OPENAI_CHAT_MODEL_ID`).
40+
7. **Unified `model` parameter** replaces `model_id` (OpenAI), `deployment_name` (Azure OpenAI), and `model_deployment_name` (Azure AI) across all client constructors. The term `model` is intentionally generic: it naturally maps to an OpenAI model name *and* to an Azure OpenAI deployment name, making it straightforward to use `OpenAIChatClient` with either OpenAI or Azure OpenAI backends (via `AsyncAzureOpenAI`). Environment variables are similarly unified (e.g., `OPENAI_MODEL` instead of separate `OPENAI_CHAT_MODEL_ID` / `OPENAI_CHAT_COMPLETION_MODEL_ID`).
4141
8. **`FoundryAgent`** replaces the pattern of `Agent(client=AzureAIClient(...))` for connecting to pre-configured agents in Azure AI Foundry (PromptAgents and HostedAgents). The underlying `RawFoundryAgentChatClient` is an implementation detail — most users interact only with `FoundryAgent`. `AzureAIAgentClient` is separately deprecated as it refers to the V1 Agents Service API. See below for design rationale.
4242

4343
### Foundry Agent Design: `FoundryAgentClient` vs `FoundryAgent`

docs/features/vector-stores-and-embeddings/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ This feature ports the vector store abstractions, embedding generator abstractio
177177
**Goal:** Add embedding generators to all existing AF provider packages that have chat clients.
178178
**Mergeable:** Yes — each is independent, added to existing provider packages.
179179

180-
#### 2.1 — Azure AI Inference embedding (in `packages/azure-ai/`)
180+
#### 2.1 — Foundry inference embedding (in `packages/foundry/`)
181181
#### 2.2 — Ollama embedding (in `packages/ollama/`)
182182
#### 2.3 — Anthropic embedding (in `packages/anthropic/`)
183183
#### 2.4 — Bedrock embedding (in `packages/bedrock/`)

python/.env.example

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,15 @@
1-
# Azure AI
1+
# Microsoft Foundry
22
FOUNDRY_PROJECT_ENDPOINT=""
3+
# Model used for FoundryChatClient
34
FOUNDRY_MODEL=""
5+
# Foundry Agents (prompt or hosted agents)
6+
FOUNDRY_AGENT_NAME=""
7+
FOUNDRY_AGENT_VERSION=""
8+
# Microsoft Foundry Models endpoint, used by embeddings
9+
FOUNDRY_MODELS_ENDPOINT=""
10+
FOUNDRY_MODELS_API_KEY=""
11+
FOUNDRY_EMBEDDING_MODEL=""
12+
FOUNDRY_IMAGE_EMBEDDING_MODEL=""
413
# Bing connection for web search (optional, used by samples with web search)
514
BING_CONNECTION_ID=""
615
# Azure AI Search (optional, used by AzureAISearchContextProvider samples)
@@ -13,12 +22,12 @@ AZURE_SEARCH_KNOWLEDGE_BASE_NAME=""
1322
# (different from AZURE_AI_PROJECT_ENDPOINT - Knowledge Base needs OpenAI endpoint for model calls)
1423
# OpenAI
1524
OPENAI_API_KEY=""
25+
OPENAI_CHAT_COMPLETION_MODEL=""
1626
OPENAI_CHAT_MODEL=""
17-
OPENAI_RESPONSES_MODEL=""
1827
# Azure OpenAI
1928
AZURE_OPENAI_ENDPOINT=""
29+
AZURE_OPENAI_CHAT_COMPLETION_MODEL=""
2030
AZURE_OPENAI_CHAT_MODEL=""
21-
AZURE_OPENAI_RESPONSES_MODEL=""
2231
# Mem0
2332
MEM0_API_KEY=""
2433
# Copilot Studio

python/.github/skills/python-package-management/SKILL.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ python/
1515
├── pyproject.toml # Root package (agent-framework)
1616
├── packages/
1717
│ ├── core/ # agent-framework-core (main package)
18-
│ ├── azure-ai/ # agent-framework-azure-ai
18+
│ ├── foundry/ # agent-framework-foundry
1919
│ ├── anthropic/ # agent-framework-anthropic
2020
│ └── ... # Other connector packages
2121
```
@@ -76,9 +76,9 @@ uv run poe add-dependency-and-validate-bounds --package core --dependency "<depe
7676
Provider folders in core use `__getattr__` to lazy load from connector packages:
7777

7878
```python
79-
# In agent_framework/azure/__init__.py
79+
# In agent_framework/foundry/__init__.py
8080
_IMPORTS: dict[str, tuple[str, str]] = {
81-
"AzureAIAgentClient": ("agent_framework_azure_ai", "agent-framework-azure-ai"),
81+
"FoundryChatClient": ("agent_framework_foundry", "agent-framework-foundry"),
8282
}
8383

8484
def __getattr__(name: str) -> Any:

python/.github/skills/python-testing/SKILL.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ The merge CI workflow (`python-merge-tests.yml`) splits integration tests into p
124124
- **Azure OpenAI integration** — runs when `packages/core/agent_framework/azure/` or core changes
125125
- **Misc integration** — Anthropic, Ollama, MCP tests; runs when their packages or core change
126126
- **Functions integration** — Azure Functions + Durable Task; runs when their packages or core change
127-
- **Azure AI integration** — runs when `packages/azure-ai/` or core changes
127+
- **Foundry integration** — runs when `packages/foundry/` or core changes
128128

129129
Core infrastructure changes (e.g., `_agents.py`, `_types.py`) trigger all integration test jobs. Scheduled and manual runs always execute all jobs.
130130

0 commit comments

Comments
 (0)