Skip to content

Commit 443c258

Browse files
committed
PR feedback: Add an extension method to handle Ollama's resilience handler settings instead of the hardcoded calls in Web/Program.cs
1 parent e2c700b commit 443c258

File tree

3 files changed

+45
-30
lines changed

3 files changed

+45
-30
lines changed

src/ProjectTemplates/Microsoft.Extensions.AI.Templates/src/ChatWithCustomData/.template.config/template.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,10 +60,17 @@
6060
"ChatWithCustomData-CSharp.AppHost/**",
6161
"ChatWithCustomData-CSharp.ServiceDefaults/**",
6262
"ChatWithCustomData-CSharp.Web/Program.Aspire.cs",
63+
"ChatWithCustomData-CSharp.Web/AspireOllamaResilienceHandlerExtensions.cs",
6364
"README.Aspire.md",
6465
"*.sln"
6566
]
6667
},
68+
{
69+
"condition": "(IsAspire && !IsOllama)",
70+
"exclude": [
71+
"ChatWithCustomData-CSharp.Web/AspireOllamaResilienceHandlerExtensions.cs"
72+
]
73+
},
6774
{
6875
"condition": "(IsAspire)",
6976
"exclude": [
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
using System;
2+
3+
namespace ChatWithCustomData_CSharp.Web.Services;
4+
5+
public static class AspireOllamaResilienceHandlerExtensions
6+
{
7+
public static IServiceCollection AddOllamaHttpClientResilience(this IServiceCollection services)
8+
{
9+
services.ConfigureHttpClientDefaults(http =>
10+
{
11+
#pragma warning disable EXTEXP0001 // RemoveAllResilienceHandlers is experimental
12+
http.RemoveAllResilienceHandlers();
13+
#pragma warning restore EXTEXP0001
14+
15+
// Turn on resilience by default
16+
http.AddStandardResilienceHandler(config =>
17+
{
18+
// Extend the HTTP Client timeout for Ollama
19+
config.AttemptTimeout.Timeout = TimeSpan.FromMinutes(3);
20+
21+
// Must be at least double the AttemptTimeout to pass options validation
22+
config.CircuitBreaker.SamplingDuration = TimeSpan.FromMinutes(10);
23+
config.TotalRequestTimeout.Timeout = TimeSpan.FromMinutes(10);
24+
});
25+
26+
// Turn on service discovery by default
27+
http.AddServiceDiscovery();
28+
});
29+
30+
return services;
31+
}
32+
}
33+

src/ProjectTemplates/Microsoft.Extensions.AI.Templates/src/ChatWithCustomData/ChatWithCustomData-CSharp.Web/Program.Aspire.cs

Lines changed: 5 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -51,36 +51,11 @@
5151
builder.Services.AddScoped<DataIngestor>();
5252
builder.Services.AddSingleton<SemanticSearch>();
5353
#if (IsOllama)
54-
// Get the IHttpClientBuilder for chat_httpClient
55-
var chatClientBuilder = builder.Services.AddHttpClient("chat_httpClient");
56-
#pragma warning disable EXTEXP0001 // RemoveAllResilienceHandlers is experimental
57-
chatClientBuilder.RemoveAllResilienceHandlers();
58-
#pragma warning restore EXTEXP0001
59-
// Override resilience for this client
60-
chatClientBuilder.AddStandardResilienceHandler(config =>
61-
{
62-
// Extend the HTTP Client timeout for Ollama
63-
config.AttemptTimeout.Timeout = TimeSpan.FromMinutes(3);
64-
// Must be at least double the AttemptTimeout to pass options validation
65-
config.CircuitBreaker.SamplingDuration = TimeSpan.FromMinutes(10);
66-
config.TotalRequestTimeout.Timeout = TimeSpan.FromMinutes(10);
67-
});
68-
chatClientBuilder.AddServiceDiscovery();
69-
// Get the IHttpClientBuilder for embeddings_httpClient
70-
var embeddingsClientBuilder = builder.Services.AddHttpClient("embeddings_httpClient");
71-
#pragma warning disable EXTEXP0001 // RemoveAllResilienceHandlers is experimental
72-
embeddingsClientBuilder.RemoveAllResilienceHandlers();
73-
#pragma warning restore EXTEXP0001
74-
// Override resilience for this client
75-
embeddingsClientBuilder.AddStandardResilienceHandler(config =>
76-
{
77-
// Extend the HTTP Client timeout for Ollama
78-
config.AttemptTimeout.Timeout = TimeSpan.FromMinutes(3);
79-
// Must be at least double the AttemptTimeout to pass options validation
80-
config.CircuitBreaker.SamplingDuration = TimeSpan.FromMinutes(10);
81-
config.TotalRequestTimeout.Timeout = TimeSpan.FromMinutes(10);
82-
});
83-
embeddingsClientBuilder.AddServiceDiscovery();
54+
// Applies robust HTTP resilience settings for all HttpClients in the Web project,
55+
// not across the entire solution. It's aimed at supporting Ollama scenarios due
56+
// to its self-hosted nature and potentially slow responses.
57+
// Remove this if you want to use the global or a different HTTP resilience policy instead.
58+
builder.Services.AddOllamaHttpClientResilience();
8459
#endif
8560

8661
var app = builder.Build();

0 commit comments

Comments
 (0)