Repository navigation
Conversation
Use the in-process SDK singleton and catalog model APIs with the existing OpenAI transport. Require Python 3.11 and document the breaking migration. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: d8ebdb3c-28b8-4fa1-830d-3fa7d6333d9e
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: d8ebdb3c-28b8-4fa1-830d-3fa7d6333d9e
Follow the existing OpenAI test pattern so transport coverage works with both OpenAI 2.x and locked OpenAI 3.x/httpx2. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: d8ebdb3c-28b8-4fa1-830d-3fa7d6333d9e
There was a problem hiding this comment.
🟡 Changes recommended
Python 3.15 compatibility declarations and CI gating are inconsistent, and singleton construction has a concurrency race.
5 open findings
What changed in this PR
Migrates the Python Foundry Local integration to SDK 2.1, addressing #9321 while retaining Agent Framework’s OpenAI transport.
Changes:
- Adopts the SDK singleton, catalog/model lifecycle, and built-in web service.
- Raises support to Python 3.11+ and updates dependencies and CI.
- Expands migration documentation and regression tests.
| File | Description |
|---|---|
.github/workflows/python-tests.yml |
Updates Python-version exclusions. |
python/packages/core/pyproject.toml |
Gates the Foundry Local extra. |
python/packages/foundry_local/AGENTS.md |
Updates package guidance. |
python/packages/foundry_local/README.md |
Documents usage and migration. |
python/packages/foundry_local/agent_framework_foundry_local/_foundry_local_client.py |
Implements SDK 2.1 integration. |
python/packages/foundry_local/pyproject.toml |
Updates Python and SDK requirements. |
python/packages/foundry_local/tests/conftest.py |
Adds SDK-aware fixtures. |
python/packages/foundry_local/tests/test_foundry_local_client.py |
Expands lifecycle and transport tests. |
python/samples/02-agents/providers/foundry/foundry_local_agent.py |
Updates sample APIs and cleanup. |
python/uv.lock |
Resolves SDK 2.1 dependencies. |
🧠 Review effort: Balanced
💡 Add a code-review agent skill for context-aware, tailored reviews. Learn more in the docs.
SDK 2.1 pins ONNX Runtime 1.30.0, which has no Python 3.15 wheels. Exclude Foundry Local from the 3.15 workspace job and align package and extra metadata with Python 3.11-3.14. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: d8ebdb3c-28b8-4fa1-830d-3fa7d6333d9e
Hold the adapter setup lock through singleton initialization, web-service startup, model preparation, and failure rollback. Add concurrent success/failure regressions and keep invalid-input and transport tests compatible with all CI type checkers. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: d8ebdb3c-28b8-4fa1-830d-3fa7d6333d9e
Avoid passing an unspecialized generic constructor to Executor.submit, and isolate the concurrency regressions from real HTTP client initialization. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: d8ebdb3c-28b8-4fa1-830d-3fa7d6333d9e
Normalize native token limits and response schemas, preserve required tool invocation before structured replies, expose download controls, and roll back services started during failed client setup. Expand transport and agent regressions and document public-catalog-only scope. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: d8ebdb3c-28b8-4fa1-830d-3fa7d6333d9e
The Foundry Local checks passed. The first full matrix failed in the existing declarative MCP approval/checkpoint regression and cancelled other matrix rows. GitHub requires repository-admin rights for a rerun, so trigger a fresh check run without changing unrelated code. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: d8ebdb3c-28b8-4fa1-830d-3fa7d6333d9e
|
Hi Eduard van Valkenburg (@eavanvalkenburg) , Thank you for the review. I have updated the PR accordingly and also with some new features available in the latest SDK for Foundry Local. |
Keep current release versions alongside the SDK 2.1 Python support window. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: ecbd0aec-c6cd-4997-a0a7-d75f9a265e5b
Defer configured-model download and load to the async provider boundary when prepare_model=False. Reuse loaded variants, serialize native preparation without blocking the event loop, preserve download controls, and leave request overrides caller-prepared. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: ecbd0aec-c6cd-4997-a0a7-d75f9a265e5b
Eduard van Valkenburg (eavanvalkenburg)
left a comment
There was a problem hiding this comment.
bmehta001 python/packages/foundry_local/pyproject.toml still permits agent-framework-openai>=1.6.0, but this migration's structured-output path in _foundry_local_client.py only unwraps an already-normalized json_schema envelope. Older allowed OpenAI adapter versions pass raw schema dictionaries through unchanged, so a dependency set that satisfies this package's metadata can send an invalid response_format to Foundry Local. Please either raise the agent-framework-openai lower bound for agent-framework-foundry-local only to the first version that normalizes raw schemas, or normalize raw schema dictionaries inside FoundryLocalClient, with minimum-bound coverage. No repository-wide or cross-package floor change is requested.
Keep dependency floors unchanged and cover raw schemas, schema references, and named envelopes for streaming and non-streaming requests. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 8cc02580-c3c4-41aa-a2f6-f06f37c1cb62
|
Eduard van Valkenburg (@eavanvalkenburg) Thanks for the comment. I have updated the PR to support raw JSON schema as well. |



Motivation & Context
The Foundry Local integration still uses SDK 0.5.1. This updates it to work with SDK 2.1.
Description & Review Guide
prepare_model=Falsestill loads the configured model on the first request, including streaming; manual loading is not required.Image support has not been verified. Audio and embeddings are outside this PR.
Related Issue
Fixes #9321.
Original report: microsoft/homebrew-foundrylocal#31.
This remains a draft pending maintainer agreement and human review.
AI Assistance
AI assistance details: GitHub Copilot helped with the code, tests, documentation, and this description.
Contribution Checklist
breaking changelabel (or add "[BREAKING]" to the title prefix, before or after any language prefix) -- a workflow keeps the label and title prefix in sync automatically.