Repository navigation
Every dependency on its current release, and automated checks that catch the next breaking one (#31). The core Foundry SDKs move to Agent Framework 1.20, azure-ai-projects 2.7 and openai 3; the hosted-agent containers move to the current Copilot SDK, Agent Framework and AgentServer releases; the fine-tune lab moves to torch 2.14. A weekly canary tests the newest releases offline, and a weekly live run executes the notebooks against Azure. Three labs were broken on main and are fixed: the lab 11 knowledge bases, the 08-05-03 tool catalog and the lab 15 GPU jobs.
Added
scripts/check_imports.pyexecutes every distinct third-party import in the notebooks, helper modules and container sources, sofrom pkg import Namefails when a release removesName. That is howazure-ai-projects2.3.0 broke the hosted-agent notebooks while every unit test passed.scripts/check_sdk_kwargs.pycompares the keyword arguments of every call to a generated model class fromazure-ai-projects,azure-search-documents,azure-ai-agentsandazure-ai-evaluationwith the fields the installed class defines. It catches removed fields, such asHostedAgentDefinition'simagein 2.7, which import checks miss.scripts/run_notebooks.pyruns notebooks headless from the ordered manifestscripts/notebooks.txt(tagsweekly,deploy,ingest,long,manual, plus scriptedinput()answers). It prints only what is safe for public logs: notebook, status, seconds, failing cell and exception type. The kernel's own stdout and stderr are discarded unless--verbose.- GitHub Actions:
offline-checks.ymlon pull requests andmain: lock check, imports, SDK keyword arguments, the pytest suites, every hosted-agent image build with an import check inside it, and every MCP Function app install.dependency-canary.yml, Mondays 05:00 UTC: reruns the offline checks against the newest allowed releases on a throwaway checkout and opens a tracking issue on failure.live-notebooks.yml, Mondays 07:00 UTC: runs theweeklynotebooks against Azure through an OIDC federated credential (no stored Azure password). A notebook that fails is rerun on the committed lock to tell a package regression from Azure drift.azure-login-check.yml: a manual check that the workflows can sign in to Azure.
CONTRIBUTING.md"Automated checks" section describing the above and the manifest.
Changed
uv.lockis committed, so a fresh clone installs the versions the notebooks were last run with.prerelease = "if-necessary-or-explicit"stops alphas and release candidates of unrequested packages entering the lock.- Core SDKs, which move together because each caps another:
agent-framework-core/-openai/-foundry1.0.0rc6 to 1.20.0 / 1.15.0 / 1.14.0.agent-framework-azure-ai, abandoned at rc6, is dropped;AzureAISearchContextProvidernow comes fromagent-framework-azure-ai-search.azure-ai-projects2.1.0 to 2.7.0,openai2.38.0 to 3.24.0, andazure-search-documents11.7.0b2 to 12.1.0b2 (the preview line, which the Agent Framework search provider needs for answer synthesis).azure-ai-agents,azure-ai-evaluationandazure-identityto their current releases.azure-ai-agentsis now declared (08-06-01 imports it);azure-mgmt-cognitiveservicesandrichare dropped, since nothing imports them.- API migrations: hosted agents register with
protocol_versionsandcontainer_configuration=ContainerConfiguration(image=...)(08-03, 08-10, 08-10b, 08-10c, 08-11); the knowledge-base output-mode and reasoning-effort classes moved toazure.search.documents.knowledgebases.models(10-03, 11-03); lab 11'sWorkflowBuilderusesoutput_from.
- Hosted-agent containers and MCP Function apps keep their intent in
requirements.inand exact pins in a compiledrequirements.txt(the compile command is in each header). Container base images are pinned by tag. The deploy notebooks build from the committed files instead of regenerating them. - 08-10, 08-10b and 08-10c:
github-copilot-sdk0.3.0 to 1.0.16 andazure-ai-agentserver-invocations1.1.0 to 1.2.0.CopilotClienttakes keyword options in 1.x, and time to first token arrives as atimedelta;tracing.pystill records milliseconds. - 08-03: Agent Framework 1.20 and
azure-ai-agentserver-responses2.2.0, built onagent-framework-corerather than the meta-package, which pulled in about 20 pre-release integrationsmain.pynever imports. The agent registers Responses protocol version 2.0.0, because the new hosting package rejects requests that lack the per-request user and call IDs the platform only sends on 2.0.0. - 08-11:
azure-ai-agentserver-invocations1.2.0 andclaude-agent-sdk0.2.164 (verified offline only; the lab's Claude deployment is still blocked by Marketplace policy). - 15: torch 2.14.1 and peft 0.21.2 locally, with transformers held at 4.53.3 for Phi-4-mini's remote code. The ACA GPU jobs pin their image to tag 58 instead of
:latestand pin accelerate, datasets, peft and olive-ai to the lock. - 14-01 and 14-02 no longer open with an unpinned
%pip install. - 05-01 and
.env.exampleno longer listcontoso-pmo-project, retired in May. - Notebook outputs refreshed on the upgraded SDKs.
Fixed
- Fresh clones could not run the hosted-agent notebooks: with
uv.lockgitignored, a new clone resolvedazure-ai-projects2.4.0, which had removedAgentProtocol. - 11: Azure AI Search rejects APIM endpoints in knowledge base model configurations, so 11-03, 11-04 and 11-05 failed. The knowledge base model now calls the core account, and
core-search-rbac.bicepgrants the search service's managed identity access to it (the same fix lab 10 got in 0.9.0). - 08-05-03 used
contoso-pmo-project, which no longer exists, so every run failed withResourceNotFound. It now uses the admin project, and its catalog listing masks the Function key embedded in connection targets. - 08-03:
- It stopped with a
NameErroronCORE_CONNECTIONbefore registering the agent. - Re-running it never rolled out a rebuilt image:
create_versionreturns the existing version when the definition is unchanged, and the image was referenced by:latest. It now registers the build by digest. ask()printed HTTP 500s and failed responses and carried on, so the notebook passed with no answers. It now raises, and Step 7 waits for the new role assignments itself.
- It stopped with a
- 08-10c stopped with
KeyError: 'image'on versions registered with the new definition shape, and the health summaries in 08-10, 08-10b and 08-11 would have reported the image asNone. - 15: Microsoft rebuilt the GPU jobs' base image, and
pip installfailed on it (Permission deniedremoving the image's own packages) before training started. The jobs now install into a venv layered on the image. 15-02 and 15-03 also passed when their GPU job failed; they now raise.