feat(backend): add LLM provider abstraction, contextual ranking and explanations
Add a pluggable LLM provider with an offline template fallback, prompt builder, contextual match scoring (area/location boosts, availability), per-solution explanations and in-memory request limiting for cost control.
This commit is contained in:
@@ -5,6 +5,7 @@ using TarninaHub.Application.Abstractions;
|
||||
using TarninaHub.Application.Matchmaking;
|
||||
using TarninaHub.Infrastructure.Auth;
|
||||
using TarninaHub.Infrastructure.Events;
|
||||
using TarninaHub.Infrastructure.Llm;
|
||||
using TarninaHub.Infrastructure.Persistence;
|
||||
using TarninaHub.Infrastructure.Settings;
|
||||
|
||||
@@ -19,6 +20,23 @@ public static class DependencyInjection
|
||||
services.Configure<SurrealDbSettings>(configuration.GetSection("SurrealDb"));
|
||||
services.Configure<AuthSettings>(configuration.GetSection("Auth"));
|
||||
|
||||
var llmSettings = configuration.GetSection("Llm").Get<LlmSettings>() ?? new LlmSettings();
|
||||
services.Configure<LlmSettings>(configuration.GetSection("Llm"));
|
||||
services.AddSingleton<ILlmRequestLimiter>(
|
||||
new InMemoryLlmRequestLimiter(llmSettings.MaxRequestsPerMinute));
|
||||
|
||||
if (llmSettings.IsConfigured)
|
||||
{
|
||||
services.AddHttpClient<OpenAiCompatibleLlmProvider>(
|
||||
client => client.Timeout = TimeSpan.FromSeconds(llmSettings.TimeoutSeconds));
|
||||
services.AddSingleton<ILlmProvider>(
|
||||
provider => provider.GetRequiredService<OpenAiCompatibleLlmProvider>());
|
||||
}
|
||||
else
|
||||
{
|
||||
services.AddSingleton<ILlmProvider, NullLlmProvider>();
|
||||
}
|
||||
|
||||
var settings = configuration.GetSection("SurrealDb").Get<SurrealDbSettings>()
|
||||
?? new SurrealDbSettings();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user