diff --git a/src/Aspire.Hosting.GitHub.Models/GitHubModelResource.cs b/src/Aspire.Hosting.GitHub.Models/GitHubModelResource.cs
index a6c441e38ac..054e8f8ce0c 100644
--- a/src/Aspire.Hosting.GitHub.Models/GitHubModelResource.cs
+++ b/src/Aspire.Hosting.GitHub.Models/GitHubModelResource.cs
@@ -10,6 +10,8 @@ namespace Aspire.Hosting.GitHub.Models;
///
public class GitHubModelResource : Resource, IResourceWithConnectionString, IResourceWithoutLifetime
{
+ internal ParameterResource DefaultKeyParameter { get; set; }
+
///
/// Initializes a new instance of the class.
///
@@ -21,7 +23,7 @@ public GitHubModelResource(string name, string model, ParameterResource? organiz
{
Model = model;
Organization = organization;
- Key = key;
+ Key = DefaultKeyParameter = key;
}
///
diff --git a/src/Aspire.Hosting.GitHub.Models/GitHubModelsExtensions.cs b/src/Aspire.Hosting.GitHub.Models/GitHubModelsExtensions.cs
index 7b68c6ac2d2..34ca285214d 100644
--- a/src/Aspire.Hosting.GitHub.Models/GitHubModelsExtensions.cs
+++ b/src/Aspire.Hosting.GitHub.Models/GitHubModelsExtensions.cs
@@ -85,8 +85,11 @@ public static IResourceBuilder WithApiKey(this IResourceBui
throw new ArgumentException("The API key parameter must be marked as secret. Use AddParameter with secret: true when creating the parameter.", nameof(apiKey));
}
- // Remove the existing API key parameter
- builder.ApplicationBuilder.Resources.Remove(builder.Resource.Key);
+ // Remove the existing parameter if it's the default one
+ if (builder.Resource.DefaultKeyParameter == builder.Resource.Key)
+ {
+ builder.ApplicationBuilder.Resources.Remove(builder.Resource.Key);
+ }
builder.Resource.Key = apiKey.Resource;
diff --git a/tests/Aspire.Hosting.GitHub.Models.Tests/GitHubModelsExtensionTests.cs b/tests/Aspire.Hosting.GitHub.Models.Tests/GitHubModelsExtensionTests.cs
index 0ea7e0e2951..89dd0499ba3 100644
--- a/tests/Aspire.Hosting.GitHub.Models.Tests/GitHubModelsExtensionTests.cs
+++ b/tests/Aspire.Hosting.GitHub.Models.Tests/GitHubModelsExtensionTests.cs
@@ -254,6 +254,26 @@ public void WithApiKeySucceedsIfParameterIsSecret()
Assert.Equal(apiKey.Resource, github.Resource.Key);
}
+ [Fact]
+ public void WithApiKeyCalledTwiceOnlyRemovesDefaultParameter()
+ {
+ using var builder = TestDistributedApplicationBuilder.Create();
+
+ var github = builder.AddGitHubModel("github", "openai/gpt-4o-mini");
+
+ Assert.NotNull(builder.Resources.FirstOrDefault(r => r.Name == "github-gh-apikey"));
+
+ github.WithApiKey(builder.AddParameter("secret-key1", secret: true));
+
+ Assert.Null(builder.Resources.FirstOrDefault(r => r.Name == "github-gh-apikey"));
+ Assert.NotNull(builder.Resources.FirstOrDefault(r => r.Name == "secret-key1"));
+
+ github.WithApiKey(builder.AddParameter("secret-key2", secret: true));
+
+ Assert.NotNull(builder.Resources.FirstOrDefault(r => r.Name == "secret-key1"));
+ Assert.NotNull(builder.Resources.FirstOrDefault(r => r.Name == "secret-key2"));
+ }
+
[Fact]
public void WithHealthCheckAddsHealthCheckAnnotation()
{