Skip to content

Fix Foundry Local lifecycle and remote endpoints - #19197

Merged
Sébastien Ros (sebastienros) merged 14 commits into
mainfrom
sebros/fix-foundry-local
Sep 4, 2026
Merged

Fix Foundry Local lifecycle and remote endpoints#19197
Sébastien Ros (sebastienros) merged 14 commits into
mainfrom
sebros/fix-foundry-local

Conversation

@sebastienros

Copy link
Copy Markdown
Contributor

Description

Foundry Local's newer CLI daemonizes through foundry server, which caused Aspire to hang while reading inherited output streams and left cached models stuck in a downloading state. WSL2 and Linux AppHosts also had no supported way to connect to a Foundry Local service already running on another host.

This change supports both legacy foundry service and current foundry server CLI generations, waits for structured startup output without waiting indefinitely for daemon-owned streams, serializes shutdown, and loads cached models before downloading. It also adds an unmanaged endpoint mode that observes an existing Foundry Local service without starting, stopping, downloading, or loading models on that host. Service and model health checks now use the Foundry HTTP APIs, including the loaded-model endpoint.

User-facing usage

C# AppHost:

var foundry = builder.AddFoundry("foundry")
                     .RunAsFoundryLocal("http://windows-host:5273");

var chat = foundry.AddDeployment("chat", FoundryModel.Local.Phi4Mini)
                  .WithProperties(deployment =>
                  {
                      deployment.LocalModelId = "Phi-4-mini-instruct-generic-gpu:5";
                  });

TypeScript AppHost:

const foundry = await builder.addFoundry('foundry')
    .runAsFoundryLocal({ endpoint: 'http://windows-host:5273' });

const chat = await foundry
    .addDeployment('chat', 'Phi-3.5-mini-instruct', { modelVersion: '1', format: 'Microsoft' })
    .withProperties(async (deployment) => {
        await deployment.localModelId.set('Phi-3.5-mini-instruct-generic-gpu:1');
    });

Validation includes 38 targeted Foundry hosting tests, compilation of the TypeScript, Java, Python, and Go polyglot AppHosts, and an end-to-end lifecycle check with Foundry CLI 0.10.1 that confirmed the daemon starts, reaches readiness, and stops cleanly.

Fixes #10937

Fixes #12750

Checklist

  • Is this feature complete?
    • Yes. Ready to ship.
    • No. Follow-up changes expected.
  • Are you including unit tests for the changes and scenario tests if relevant?
    • Yes
    • No
  • Did you add public API?
    • Yes
      • If yes, did you have an API Review for it?
        • Yes
        • No
      • Did you add <remarks /> and <code /> elements on your triple slash comments?
        • Yes
        • No
    • No
  • Does the change make any security assumptions or guarantees?
    • Yes
      • If yes, have you done a threat model and had a security review?
        • Yes
        • No
    • No

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: dc2ed36b-6e61-4271-8ceb-3de8338a20e1
Copilot AI balanced review requested due to automatic review settings August 10, 2026 17:58
@github-actions

Copy link
Copy Markdown
Contributor

🚀 Dogfood this PR with:

⚠️ WARNING: Do not do this without first carefully reviewing the code of this PR to satisfy yourself it is safe.

curl -fsSL https://raw.githubusercontent.com/microsoft/aspire/main/eng/scripts/get-aspire-cli-pr.sh | bash -s -- 19197

Or

  • Run remotely in PowerShell:
iex "& { $(irm https://raw.githubusercontent.com/microsoft/aspire/main/eng/scripts/get-aspire-cli-pr.ps1) } 19197"

@github-actions github-actions Bot added the area-app-model Issues pertaining to the APIs in Aspire.Hosting, e.g. DistributedApplication label Aug 10, 2026
@github-actions

This comment has been minimized.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Updates the Foundry hosting integration for modern daemonized CLI behavior and remote Foundry Local endpoints.

Changes:

  • Supports legacy service and modern server CLI lifecycles.
  • Adds unmanaged remote endpoints and LocalModelId.
  • Uses HTTP health checks and loads cached models before downloading.

Reviewed changes

Copilot reviewed 13 out of 13 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
tests/PolyglotAppHosts/Aspire.Hosting.Foundry/TypeScript/apphost.mts Exercises new TypeScript APIs.
tests/PolyglotAppHosts/Aspire.Hosting.Foundry/Python/apphost.py Exercises new Python APIs.
tests/PolyglotAppHosts/Aspire.Hosting.Foundry/Java/AppHost.java Exercises new Java APIs.
tests/PolyglotAppHosts/Aspire.Hosting.Foundry/Go/apphost.go Exercises new Go APIs.
tests/Aspire.Hosting.Azure.Tests/FoundryExtensionsTests.cs Adds lifecycle, parsing, and endpoint tests.
tests/Aspire.Hosting.Azure.Tests/FoundryDeploymentConnectionPropertiesTests.cs Verifies local model connection properties.
src/Aspire.Hosting.Foundry/README.md Documents managed and remote usage.
src/Aspire.Hosting.Foundry/LocalModelHealthCheck.cs Checks loaded models through HTTP.
src/Aspire.Hosting.Foundry/FoundryResource.cs Tracks service management mode.
src/Aspire.Hosting.Foundry/FoundryLocalService.cs Implements CLI lifecycle and model handling.
src/Aspire.Hosting.Foundry/FoundryLocalHealthCheck.cs Probes Foundry through HTTP.
src/Aspire.Hosting.Foundry/FoundryExtensions.cs Adds remote endpoint configuration and orchestration.
src/Aspire.Hosting.Foundry/FoundryDeploymentResource.cs Exposes LocalModelId.
Suppressed comments (2)

src/Aspire.Hosting.Foundry/FoundryLocalService.cs:355

  • When foundry server start exits nonzero without reporting an endpoint, this still waits for the full startup timeout before RunFoundryCommandAsync can inspect the exit code. Users therefore get a delayed generic timeout instead of the CLI's immediate failure output. Only wait for the endpoint predicate after a successful parent exit; a nonzero exit should flow through to the existing detailed command error.
                await process.WaitForExitAsync(startCancellation.Token).ConfigureAwait(false);
                await outputCompletionSource.Task.WaitAsync(startCancellation.Token).ConfigureAwait(false);

src/Aspire.Hosting.Foundry/FoundryLocalService.cs:355

  • The central daemonized-stream regression is not exercised by the added tests: the parser tests never enter this process path, and RunAsFoundryLocal_SetsIsEmulator accepts FailedToStart when the CLI is unavailable. Add an automated process-level regression using a fake foundry command whose parent exits while a child retains the redirected handles, and verify startup returns after the endpoint is observed rather than waiting for EOF.
                // The modern "server start" command daemonizes, and the daemon inherits the CLI's
                // redirected stream handles. Wait until the parent exits and reports its endpoint,
                // then stop draining instead of waiting forever for EOF from the daemon.
                await process.WaitForExitAsync(startCancellation.Token).ConfigureAwait(false);
                await outputCompletionSource.Task.WaitAsync(startCancellation.Token).ConfigureAwait(false);

Comment thread src/Aspire.Hosting.Foundry/FoundryLocalService.cs Outdated
Comment thread src/Aspire.Hosting.Foundry/FoundryLocalService.cs
Comment thread src/Aspire.Hosting.Foundry/README.md
Comment thread src/Aspire.Hosting.Foundry/FoundryExtensions.cs Outdated
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: dc2ed36b-6e61-4271-8ceb-3de8338a20e1
Copilot AI review requested due to automatic review settings August 10, 2026 18:13
@github-actions

This comment has been minimized.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 13 out of 13 changed files in this pull request and generated no new comments.

Suppressed comments (4)

src/Aspire.Hosting.Foundry/FoundryLocalService.cs:114

  • The new cross-generation loaded-model HTTP logic has no behavioral coverage; the added test only exercises the JSON parser. Add handler-backed tests for the modern /models/loaded response, the legacy 404 fallback to /openai/loadedmodels, non-success responses, and case-insensitive model matching so either CLI generation cannot silently remain unhealthy.
    public static async Task<bool> IsModelLoadedAsync(Uri endpoint, string modelId, HttpClient httpClient, CancellationToken cancellationToken)
    {
        foreach (var path in new[] { "models/loaded", "openai/loadedmodels" })
        {
            using var request = new HttpRequestMessage(HttpMethod.Get, new Uri(endpoint, path));

src/Aspire.Hosting.Foundry/README.md:69

  • This new remote-endpoint workflow is only documented in C#, although both RunAsFoundryLocal(endpoint) and LocalModelId are exported to polyglot AppHosts. Add the equivalent TypeScript example so the hosting README covers every exported usage surface.
```csharp
var foundry = builder.AddFoundry("foundry")
                     .RunAsFoundryLocal("http://windows-host:5273");

src/Aspire.Hosting.Foundry/FoundryDeploymentResource.cs:44

  • These new remarks conflict with the adjacent DeploymentName documentation, which still says that DeploymentName is the model ID for Foundry Local. The connection string now ignores DeploymentName in local mode and uses LocalModelId ?? ModelName, so update that remark to avoid contradictory IntelliSense.
    /// <remarks>
    /// Aspire resolves this value automatically when it manages Foundry Local. Set it explicitly
    /// when connecting to an existing Foundry Local service and <see cref="ModelName"/> is an alias
    /// rather than the identifier reported by the service.

src/Aspire.Hosting.Foundry/FoundryLocalService.cs:388

  • The daemonized-stream regression is not covered by an automated test. The updated AppHost test can pass via FailedToStart when Foundry is absent, while the parser tests never exercise a parent process exiting with a child still holding redirected pipes. Add a deterministic fake-CLI process test that verifies startup returns after the endpoint is emitted and shutdown completes without waiting for stream EOF.
        if (stopReadingAfterProcessExit)
        {
            using var startCancellation = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken);
            startCancellation.CancelAfter(s_serviceStartTimeout);
            using var startCancellationRegistration = startCancellation.Token.Register(static state => KillProcess((Process)state!), process);

@github-actions

Copy link
Copy Markdown
Contributor

Retrying the failed CI jobs for this pull request from the CI run attempt. The rerun is being tracked in the rerun attempt.

@sebastienros

Copy link
Copy Markdown
Contributor Author

PR Testing Report

PR Information

Artifact Version Verification

  • Expected Commit: a7d0f62
  • Installed Version: 13.6.0-pr.19197.ga7d0f625
  • Status: Verified

The dogfood CLI and NuGet package hive were installed into an isolated temporary directory. Four fresh C# file-based AppHosts were generated from the PR hive, and each added Aspire.Hosting.Foundry version 13.6.0-pr.19197.ga7d0f625.

Changes Analyzed

Change Categories

  • CLI changes
  • Hosting integration changes
  • Dashboard changes
  • Template changes
  • Client/component changes
  • VS Code extension changes
  • CI infrastructure changes
  • Unit test and polyglot fixture changes

The PR changes Foundry Local process lifecycle management, cached-model reuse, HTTP health checks, unmanaged remote endpoints, LocalModelId, documentation, and C#/TypeScript/Java/Python/Go API coverage.

Test Scenarios Executed

Scenario 1: PR artifact and fresh AppHost verification

Objective: Verify testing uses packages built from the latest PR commit rather than the workspace build.

Coverage Type: Artifact/build validation

Status: Passed

Steps:

  1. Installed the PR dogfood CLI and NuGet hive with the repository installer.
  2. Verified the installed version contains short commit a7d0f625.
  3. Generated four independent aspire-empty C# AppHosts from the PR hive.
  4. Added the Foundry integration from the same PR hive to every AppHost.

Evidence:

  • ManagedFoundry-new.log
  • ManagedFoundry-add.log
  • Generated apphost.cs package directive

Scenario 2: Managed modern Foundry lifecycle with cached model

Objective: Verify Aspire manages Foundry CLI 0.10.1, loads an already-cached model, reports HTTP health, resolves the concrete local model ID, and stops the daemon.

Coverage Type: Happy path

Status: Passed

Steps:

  1. Configured RunAsFoundryLocal() with deployment alias phi-4-mini.
  2. Started the AppHost with Foundry CLI 0.10.1 on PATH.
  3. Waited for deployment chat to become healthy.
  4. Described resources and verified:
    • foundry was Running and Healthy.
    • chat was Running and Healthy.
    • chat resolved to Phi-4-mini-instruct-generic-gpu:5.
  5. Stopped the AppHost.
  6. Verified foundry server status --output json returned running:false.

Evidence:

  • ManagedFoundry/start.log
  • ManagedFoundry/wait.log
  • ManagedFoundry/describe.json
  • ManagedFoundry/stop.log
  • ManagedFoundry/foundry-status-after-stop.json

Scenario 3: Existing remote endpoint remains externally owned

Objective: Verify Aspire observes an existing Foundry Local endpoint with explicit LocalModelId and does not stop the external daemon.

Coverage Type: Happy path and lifecycle boundary

Status: Passed

Steps:

  1. Started Foundry CLI 0.10.1 independently.
  2. Loaded Phi-4-mini-instruct-generic-gpu:5 and verified /models/loaded.
  3. Configured RunAsFoundryLocal(endpoint) with explicit LocalModelId.
  4. Started a fresh AppHost and waited for chat to become healthy.
  5. Verified both Foundry resources were Running and Healthy.
  6. Stopped the AppHost.
  7. Verified the external daemon still reported running:true.
  8. Explicitly stopped the external daemon as test cleanup.

Evidence:

  • RemoteFoundry/model-load.log
  • RemoteFoundry/external-status-before-apphost.json
  • RemoteFoundry/start.log
  • RemoteFoundry/wait.log
  • RemoteFoundry/describe.json
  • RemoteFoundry/stop.log
  • RemoteFoundry/external-status-after-apphost-stop.json
  • RemoteFoundry/external-server-final-stop.json

Scenario 4: Invalid existing endpoint

Objective: Verify unsupported endpoint schemes fail before AppHost startup.

Coverage Type: Unhappy path

Status: Passed

Expected Outcome: A non-zero exit code and the documented absolute HTTP/HTTPS validation error.

Observed Outcome: aspire start exited with code 2 after the AppHost raised:

The Foundry Local endpoint must be an absolute HTTP or HTTPS URL. (Parameter 'endpoint')

Evidence:

  • InvalidEndpoint/start.log
  • InvalidEndpoint/result.txt

Scenario 5: Failed modern startup cleans up the daemon

Objective: Verify a modern CLI that reports daemon startup and then fails is cleaned up without leaving the resource in a success-shaped state.

Coverage Type: Unhappy path and cleanup recovery

Status: Passed

Steps:

  1. Placed a controlled foundry executable on PATH.
  2. Reported modern server support from --help.
  3. Emitted the observed 0.10.1 daemon startup and endpoint output, then returned exit code 1.
  4. Verified the Foundry resource reached FailedToStart.
  5. Verified Aspire invoked server stop --output json.
  6. Stopped the AppHost successfully.

Evidence:

  • FailedStartup/start.log
  • FailedStartup/describe.json
  • FailedStartup/commands.log
  • FailedStartup/stop.log

Summary

Scenario Status Notes
PR artifact and fresh AppHosts Passed Dogfood version matched PR head
Managed modern lifecycle Passed Cached model healthy; daemon stopped
Existing remote endpoint Passed Resources healthy; external daemon preserved
Invalid endpoint Passed Clear validation error and non-zero exit
Failed startup cleanup Passed Failed state and server stop observed

Overall Result

PR VERIFIED

All approved scenarios passed against the packaged PR artifact. No product issue was found.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: dc2ed36b-6e61-4271-8ceb-3de8338a20e1
Copilot AI review requested due to automatic review settings August 10, 2026 19:29
@github-actions

This comment has been minimized.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 13 out of 13 changed files in this pull request and generated no new comments.

Suppressed comments (1)

src/Aspire.Hosting.Foundry/FoundryLocalHealthCheck.cs:20

  • Legacy foundry service instances do not expose GET /v1/models; the v0.8.94 REST contract uses GET /openai/status for service status. This probe therefore keeps an otherwise healthy legacy service unhealthy, despite this change explicitly retaining legacy CLI support. Add a 404 fallback to /openai/status (or choose the probe by CLI generation) and cover both endpoint generations.
            using var request = new HttpRequestMessage(HttpMethod.Get, new Uri(resource.EmulatorServiceUri, "v1/models"));

@github-actions

Copy link
Copy Markdown
Contributor

Retrying the failed CI jobs for this pull request from the CI run attempt. The rerun is being tracked in the rerun attempt.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: dc2ed36b-6e61-4271-8ceb-3de8338a20e1
Copilot AI review requested due to automatic review settings August 28, 2026 16:50
@github-actions

This comment has been minimized.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 13 out of 13 changed files in this pull request and generated no new comments.

Suppressed comments (1)

Previously missed (1) — in code that hasn't changed since the last review.

src/Aspire.Hosting.Foundry/FoundryLocalService.cs:395

  • The hang regression is not exercised by the added tests: they cover output parsing, while the existing lifecycle test uses whatever foundry installation happens to be present and therefore does not deterministically execute this daemonized-stream path in CI. A future change could wait for daemon-owned EOF again without failing any test. Add a process-runner regression test where the CLI parent writes an endpoint and exits while a child keeps stdout/stderr open, and assert startup returns within a bounded time.
                await process.WaitForExitAsync(startCancellation.Token).ConfigureAwait(false);
                await outputCompletionSource.Task.WaitAsync(startCancellation.Token).ConfigureAwait(false);

@github-actions

This comment has been minimized.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

The new public endpoint overload is missing the required IntelliSense usage example.

Review details

Suppressed comments (1)

Previously missed (1) — in code that hasn't changed since the last review.

src/Aspire.Hosting.Foundry/FoundryExtensions.cs:181

  • This public fluent API has two materially different ownership modes, but its IntelliSense documentation does not include a usage example for the new external-endpoint mode. Add an <example> with a <code> block so callers can see the required call shape without relying on the package README.
  • Files reviewed: 13/13 changed files
  • Comments generated: 0 new
  • Review effort level: Balanced

@github-actions

github-actions Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

Retrying the failed CI jobs for this pull request from the CI run attempt. The rerun is being tracked in the rerun attempt.

@github-actions

github-actions Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

Retrying the failed CI jobs for this pull request from the CI run attempt. The rerun is being tracked in the rerun attempt.

@github-actions

github-actions Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

Retrying the failed CI jobs for this pull request from the CI run attempt. The rerun is being tracked in the rerun attempt.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: dc2ed36b-6e61-4271-8ceb-3de8338a20e1
Copilot AI review requested due to automatic review settings September 4, 2026 17:33
@sebastienros

Copy link
Copy Markdown
Contributor Author

Addressed the suppressed documentation recommendation from review 5115545563. The public RunAsFoundryLocal(endpoint) overload now includes an IntelliSense example showing how to connect to an existing service and set LocalModelId for the already-loaded model. The focused Foundry extension test class passes (46 tests).

@github-actions

This comment has been minimized.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟢 Approval recommended

The lifecycle, remote endpoint, health-check, connection-property, and polyglot paths have focused regression coverage.

Review details
  • Files reviewed: 13/13 changed files
  • Comments generated: 0 new
  • Review effort level: Balanced

@github-actions

github-actions Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

Retrying the failed CI jobs for this pull request from the CI run attempt. The rerun is being tracked in the rerun attempt.

@github-actions

github-actions Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

Retrying the failed CI jobs for this pull request from the CI run attempt. The rerun is being tracked in the rerun attempt.

@github-actions

github-actions Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

Retrying the failed CI jobs for this pull request from the CI run attempt. The rerun is being tracked in the rerun attempt.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: dc2ed36b-6e61-4271-8ceb-3de8338a20e1
Copilot AI review requested due to automatic review settings September 4, 2026 18:41
@github-actions

github-actions Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

Tests selector

3 / 99 PR test projects · 3 PR jobs · 0 advisory-only targets, from 12 changed files.

Selected PR test projects (3 / 99)

Aspire.Hosting.Azure.Kubernetes.Tests, Aspire.Hosting.Azure.Tests, Aspire.Hosting.Foundry.Tests

Selected PR jobs (3)

extension-e2e, polyglot, typescript-api-compat

Advisory workflow impact (0)

none


How these were chosen — grouped by what changed

🧪 tests/Aspire.Hosting.Azure.Tests/FoundryDeploymentConnectionPropertiesTests.cs (changed test)
1 directly: Aspire.Hosting.Azure.Tests
1 via the project graph: Aspire.Hosting.Azure.Kubernetes.Tests

🔧 src/Aspire.Hosting.Foundry/FoundryDeploymentResource.cs (changed source)
1 directly: Aspire.Hosting.Foundry.Tests

🔧 src/Aspire.Hosting.Foundry/FoundryExtensions.cs (changed source)
1 directly: Aspire.Hosting.Foundry.Tests

🔧 src/Aspire.Hosting.Foundry/FoundryLocalHealthCheck.cs (changed source)
1 directly: Aspire.Hosting.Foundry.Tests

🔧 src/Aspire.Hosting.Foundry/FoundryLocalService.cs (changed source)
1 directly: Aspire.Hosting.Foundry.Tests

🔧 src/Aspire.Hosting.Foundry/FoundryResource.cs (changed source)
1 directly: Aspire.Hosting.Foundry.Tests

🔧 src/Aspire.Hosting.Foundry/LocalModelHealthCheck.cs (changed source)
1 directly: Aspire.Hosting.Foundry.Tests

🧪 tests/Aspire.Hosting.Azure.Tests/FoundryExtensionsTests.cs (changed test)
1 directly: Aspire.Hosting.Azure.Tests

Job reasons

Job Triggered by
extension-e2e src/Aspire.Hosting.Foundry/FoundryDeploymentResource.cs, src/Aspire.Hosting.Foundry/FoundryExtensions.cs, src/Aspire.Hosting.Foundry/FoundryLocalHealthCheck.cs, src/Aspire.Hosting.Foundry/FoundryLocalService.cs, src/Aspire.Hosting.Foundry/FoundryResource.cs, src/Aspire.Hosting.Foundry/LocalModelHealthCheck.cs
• affected project Aspire.Hosting.Foundry
polyglot tests/PolyglotAppHosts/Aspire.Hosting.Foundry/Go/apphost.go, tests/PolyglotAppHosts/Aspire.Hosting.Foundry/Java/AppHost.java, tests/PolyglotAppHosts/Aspire.Hosting.Foundry/Python/apphost.py, tests/PolyglotAppHosts/Aspire.Hosting.Foundry/TypeScript/apphost.mts
typescript-api-compat affected project Aspire.Hosting.Foundry

Selection computed for commit b23e0da.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

Cross-version external daemon ownership, networking, and shutdown behavior warrant final human validation despite strong focused coverage.

Review details
  • Files reviewed: 13/13 changed files
  • Comments generated: 0 new
  • Review effort level: Balanced

@sebastienros
Sébastien Ros (sebastienros) merged commit 3608710 into main Sep 4, 2026
89 checks passed
@sebastienros
Sébastien Ros (sebastienros) deleted the sebros/fix-foundry-local branch September 4, 2026 19:18
@microsoft-github-policy-service microsoft-github-policy-service Bot added this to the 13.6 milestone Sep 4, 2026
@aspire-repo-bot

Copy link
Copy Markdown
Contributor

Pull request created: #1621

Generated by PR Documentation Check · auto · 86.1 AIC · ⌖ 14 AIC · ⊞ 19.7K

@aspire-repo-bot

Copy link
Copy Markdown
Contributor

📝 Documentation has been drafted in microsoft/aspire.dev#1621 targeting release/13.6.

Documented the new Foundry Local remote endpoint mode (RunAsFoundryLocal(endpoint)) and updated the lifecycle description to reflect dual foundry server/foundry service support and cached-model-first loading.

  • Updated integrations/cloud/azure/azure-ai-foundry/azure-ai-foundry-host.mdx: revised the existing local-development section and added a new "Connect to a remote Foundry Local service" subsection with C#/TypeScript examples covering RunAsFoundryLocal(endpoint) and LocalModelId.

Note

This draft PR needs human review before merging.

@github-actions

github-actions Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

⚠️ CI Failure Analysis: Possible Flaky Test(s)

The CI build failed due to test failure(s) that appear unrelated to the PR changes. These may be flaky tests.

Suspected flaky test(s):

Suggested actions:

  • Re-run the failed CI jobs to confirm if the failure is intermittent
  • If the test continues to fail, consider quarantining it using /quarantine-test <test name> <issue URL>
  • Search existing issues to see if this test is already known to be flaky

You can re-run the failed jobs from the workflow run page.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area-app-model Issues pertaining to the APIs in Aspire.Hosting, e.g. DistributedApplication

Projects

None yet

Development

Successfully merging this pull request may close these issues.

AzureAIFoundry RunAsFoundryLocal() stuck in 'Downloading' state even when model is already cached AI Foundry Local and .NET Aspire in WSL2 / Linux

3 participants