WIP
This commit is contained in:
@@ -179,11 +179,25 @@ builder.Services.AddScoped<ROLAC.API.Services.Notifications.ILineNotificationSer
|
||||
builder.Services.AddHttpClient<ROLAC.API.Services.Notifications.IMessageChannel,
|
||||
ROLAC.API.Services.Notifications.LineMessageChannel>();
|
||||
|
||||
// ── AI assist (Google Gemini) ──────────────────────────────────────────────
|
||||
// Backend proxy for expense translation + category suggestion; the API key stays server-side.
|
||||
// ── AI assist (expense translation + category suggestion) ──────────────────
|
||||
// Backend proxy so the API key stays server-side. Two interchangeable providers (Claude / Gemini)
|
||||
// implement IExpenseAiService; "Ai:Provider" selects which one is bound (default Claude).
|
||||
builder.Services.Configure<ROLAC.API.Services.Ai.GeminiOptions>(config.GetSection("Gemini"));
|
||||
builder.Services.AddHttpClient<ROLAC.API.Services.Ai.IExpenseAiService,
|
||||
ROLAC.API.Services.Ai.GeminiExpenseAiService>();
|
||||
builder.Services.Configure<ROLAC.API.Services.Ai.ClaudeOptions>(config.GetSection("Claude"));
|
||||
builder.Services.AddHttpClient<ROLAC.API.Services.Ai.GeminiExpenseAiService>();
|
||||
builder.Services.AddHttpClient<ROLAC.API.Services.Ai.ClaudeExpenseAiService>();
|
||||
|
||||
var aiProvider = config["Ai:Provider"] ?? "Claude";
|
||||
if (aiProvider.Equals("Gemini", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
builder.Services.AddScoped<ROLAC.API.Services.Ai.IExpenseAiService>(
|
||||
sp => sp.GetRequiredService<ROLAC.API.Services.Ai.GeminiExpenseAiService>());
|
||||
}
|
||||
else
|
||||
{
|
||||
builder.Services.AddScoped<ROLAC.API.Services.Ai.IExpenseAiService>(
|
||||
sp => sp.GetRequiredService<ROLAC.API.Services.Ai.ClaudeExpenseAiService>());
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Configurable role-based permissions (RBAC matrix)
|
||||
|
||||
Reference in New Issue
Block a user