[release/13.4] Update Foundry hosted agent builder APIs#17669
Conversation
Consolidate AsHostedAgent usage, update Foundry icons and command rendering, and refresh playgrounds, samples, and tests. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Conditionally require/provision Foundry project ACR only for hosted-agent publish or explicit registry override, add regression tests for run/publish paths, and align PromptAgent Send Message icon with ChatSparkle. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Avoid allocating a fresh JsonSerializerOptions per Send Message command invocation, which also defeats JsonSerializer's per-options metadata cache. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- AsHostedAgent(project, HostedAgentOptions?) is now the polyglot-exported overload
- Action<HostedAgentConfiguration> overload kept as .NET-only for advanced use
- HostedAgentOptions exposes Description, Cpu, Memory, Metadata, EnvironmentVariables
- Polyglot users now get .asHostedAgent(project, { ... }) instead of
.asHostedAgent({ project, configure: async cfg => ... })
- Updated TypeScript, Go, and Java polyglot apphost fixtures to new shape
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
HostedAgentOptions exists only to give polyglot SDK generators a clean options-bag shape. .NET callers should keep using the richer Action<HostedAgentConfiguration> overload, so both the DTO and the overload that takes it are now internal. To avoid C# overload ambiguity between '.AsHostedAgent(project)' (which should bind to the public Action overload) and the internal options overload, the internal method is renamed to AsHostedAgentForExport. The polyglot-facing name stays as 'asHostedAgent' via [AspireExport(MethodName)]. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Remove <remarks> blocks from HostedAgentOptions and AsHostedAgentForExport
that were flowing into the generated TypeScript/Go/Java SDK JSDoc and
including C#-only implementation notes plus broken <see cref> renderings
(e.g. \`AsHostedAgent\`\`1). The polyglot codegen concatenates
<summary>+<remarks>, so any C#-implementation chatter pollutes the
generated SDK docs. Replace with plain // source comments that stay in C#.
Also fix the TypeScript polyglot fixture to match the actual generated
signature: when an extension method takes a single optional DTO parameter,
the codegen wraps it in an options bag, so the call shape is
asHostedAgent(project, { options: { ... } }) — not the flat
asHostedAgent(project, { ... }) shape.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Mark HostedAgentOptions as an ATS DTO so polyglot SDK generation treats it as a JSON value object instead of a live exported handle. Update the TypeScript validation fixture to use the generated flat options shape. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Update Go and Java Foundry polyglot AppHosts to match the generated HostedAgentOptions DTO and AsHostedAgent optional-parameter shapes. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Use Double literals for hosted agent CPU and memory options so the generated Java DTO setters compile.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Regenerate the Foundry ATS and API baselines so the release branch backport exposes the hosted-agent options export and drops the stale withComputeEnvironmentExecutable surface. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
🚀 Dogfood this PR with:
curl -fsSL https://raw.githubusercontent.com/microsoft/aspire/main/eng/scripts/get-aspire-cli-pr.sh | bash -s -- 17669Or
iex "& { $(irm https://raw.githubusercontent.com/microsoft/aspire/main/eng/scripts/get-aspire-cli-pr.ps1) } 17669" |
There was a problem hiding this comment.
Pull request overview
Backport to release/13.4 of the Foundry hosted-agent API updates in Aspire.Hosting.Foundry, moving to a clearer project-first AsHostedAgent API shape for polyglot SDKs and adjusting deployment behavior so local run mode no longer creates a default Azure Container Registry (ACR) resource.
Changes:
- Replaces the polyglot-facing
WithComputeEnvironmentusage withAsHostedAgentacross C#/TS/Python/Go/Java fixtures and tests, including a typedHostedAgentOptionsDTO for polyglot configuration. - Updates Foundry project provisioning logic to only create/provision the default ACR when needed (publish/deploy / hosted-agent scenarios), and updates Azure Bicep snapshots accordingly.
- Updates Prompt Agent and Hosted Agent dashboard command/icon behavior and adds/adjusts tests to validate the new behavior.
Show a summary per file
| File | Description |
|---|---|
| tests/PolyglotAppHosts/Aspire.Hosting.Foundry/TypeScript/apphost.mts | Updates TS fixture to call asHostedAgent(project, options) with DTO-style options. |
| tests/PolyglotAppHosts/Aspire.Hosting.Foundry/Python/apphost.py | Updates Python fixture to use as_hosted_agent(project=...). |
| tests/PolyglotAppHosts/Aspire.Hosting.Foundry/Java/AppHost.java | Updates Java fixture to construct/pass HostedAgentOptions and call asHostedAgent(...). |
| tests/PolyglotAppHosts/Aspire.Hosting.Foundry/Go/apphost.go | Updates Go fixture to call AsHostedAgent(...) with options object. |
| tests/Aspire.Hosting.Foundry.Tests/PromptAgentTests.cs | Adds test coverage for the Prompt Agent “Send Message” command annotation configuration. |
| tests/Aspire.Hosting.Foundry.Tests/ProjectResourceTests.cs | Updates tests for “no default ACR in run mode” and validates default ACR removal when no hosted agents exist. |
| tests/Aspire.Hosting.Foundry.Tests/HostedAgentExtensionTests.cs | Updates hosted-agent tests to AsHostedAgent and adds coverage for export options + run-mode behaviors. |
| tests/Aspire.Hosting.Azure.Tests/Snapshots/FoundryExtensionsTests.AddProject_GeneratesEndpointFromParentFoundryApiEndpoint.verified.bicep | Updates snapshot to reflect removal of ACR resources/outputs when not required. |
| tests/Aspire.Hosting.Azure.Tests/FoundryExtensionsTests.cs | Updates Azure Foundry tests to the new hosted-agent API and run-mode ACR behavior. |
| tests/Aspire.Hosting.Azure.Tests/AzureDeployerTests.cs | Updates deploy test to use AsHostedAgent(foundryProject). |
| tests/Aspire.Deployment.EndToEnd.Tests/FoundryHostedAgentDeploymentTests.cs | Updates end-to-end deployment scenario to the new AsHostedAgent(...) API. |
| src/Aspire.Hosting.Foundry/README.md | Updates docs sample to use AsHostedAgent(project). |
| src/Aspire.Hosting.Foundry/PromptAgent/PromptAgentBuilderExtensions.cs | Adjusts Prompt Agent resource/command icon configuration. |
| src/Aspire.Hosting.Foundry/Project/ProjectResource.cs | Adds an annotation used to determine whether default ACR provisioning is required, and removes default registry when not needed. |
| src/Aspire.Hosting.Foundry/Project/ProjectBuilderExtension.cs | Creates default ACR only in publish mode; provisions ACR dependencies only when required/overridden. |
| src/Aspire.Hosting.Foundry/HostedAgent/HostedAgentOptions.cs | Introduces internal DTO used for polyglot configuration (subset of HostedAgentConfiguration). |
| src/Aspire.Hosting.Foundry/HostedAgent/HostedAgentBuilderExtension.cs | Implements the project-first hosted-agent API (AsHostedAgent) and improves run-mode dashboard command result handling. |
| src/Aspire.Hosting.Foundry/FoundryExtensions.cs | Adds resource icons for Foundry resources/deployments (dashboard UX). |
| src/Aspire.Hosting.Foundry/api/Aspire.Hosting.Foundry.cs | Updates generated public API surface to reflect the new hosted-agent API shape and other generated deltas. |
| src/Aspire.Hosting.Foundry/api/Aspire.Hosting.Foundry.ats.txt | Updates ATS surface to include HostedAgentOptions and the new exported hosted-agent entrypoint. |
| playground/FoundryAgents/FoundryAgents.AppHost/AppHost.cs | Updates playground AppHost to use AsHostedAgent(project). |
| playground/FoundryAgentEnterprise/FoundryAgentEnterprise.AppHost/AppHost.cs | Updates enterprise playground AppHost to use the new hosted-agent API and removes redundant references. |
Copilot's findings
- Files reviewed: 22/22 changed files
- Comments generated: 2
| /// <remarks> | ||
| /// In run mode, this configures the resource with hosted agent endpoints, health checks, | ||
| /// and OpenTelemetry settings. In publish mode, the resource is deployed as a hosted agent | ||
| /// in Microsoft Foundry. | ||
| /// This method applies in run mode. It configures the resource with the hosted agent responses endpoint, | ||
| /// a dashboard command for sending messages to the agent, and OpenTelemetry environment variables expected | ||
| /// by the Microsoft Foundry agent server SDK. | ||
| /// </remarks> |
| .AsHostedAgent(project); | ||
| ``` | ||
|
|
||
| In run mode, the agent runs locally with health check endpoints and OpenTelemetry instrumentation. In publish mode, the agent is deployed as a hosted agent in Microsoft Foundry. |
|
❓ CLI E2E Tests unknown — 108 passed, 0 failed, 2 unknown (commit View all recordings
📹 Recordings uploaded automatically from CI run #26649968221 |
…Agent Documents the API rename from WithComputeEnvironment/PublishAsHostedAgent to AsHostedAgent introduced in microsoft/aspire#17669. Updates all code examples, section headings, and prose in the Azure AI Foundry hosting integration docs to use the new AsHostedAgent method. Also clarifies that the default Azure Container Registry is only created in publish mode, not local run mode. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
Pull request created: #1130
|
|
📝 Documentation has been drafted in microsoft/aspire.dev#1130 targeting Updated Note This draft PR needs human review before merging. |
Backport of #17545 to release/13.4
/cc @tommasodotNET
Customer Impact
Customers using Aspire Foundry hosted agents get the updated project-first API and correct hosted-agent deployment configuration behavior. Local run mode no longer creates an unnecessary default Azure Container Registry resource.
Testing
Aspire.Hosting.Foundry.Tests: 92/92 passing on the release/13.4 backport branch.Risk
Low. The changes are localized to
Aspire.Hosting.Foundryhosted-agent/project APIs and generated polyglot/API baselines, but they do affect public/generated API surface.Regression?
No.