User-spezifische API-Key-Auswahl, globales is_active entfernt
Backend:
- is_active komplett entfernt, durch is_public (Admin-Toggle) ersetzt
- Neues selected_api_key_id auf users-Tabelle
- AnthropicService: globaler _token entfernt, apiToken pro Request
- Token-Durchreichung: StreamChat → ProcessStream → RunAgentChat →
RunPreparer/RunReview/RunFinalizer, ExecuteTool, send_to_session
- ChatEndpoint: User-Key aus DB laden, an StreamChat übergeben
- TelegramService: Key per bot.UserId auflösen
- CronjobService: Key per job.UserId auflösen
- Neue Endpoints: GET /api/api-keys/available, PUT /api/api-keys/select/{keyId},
GET /api/api-keys/selected, PUT /api/admin/api-keys/{keyId}/public,
POST /api/admin/api-keys/check-all
- Program.cs: AnthropicService ohne Token-Parameter
Frontend:
- API-Keys-Page: Public-Toggle (Globe/Lock) statt Activate/Deactivate
- Alle prüfen Button für Batch-Key-Check
- Chat: Key-Auswahl für alle User (nicht nur Admin)
- Dummy-Badge wenn kein Key ausgewählt
- Fallback-Badge bei Key ohne Usage-Daten
- Key-Switch-Modal: apiGetAvailableKeys + apiSelectApiKey
This commit is contained in:
1 parent
cc46cf2bbc
commit
dde0fede7d
18 files changed
+340
-193
No files matched your search
+2
-9
@@ -66,21 +66,14 @@ var embeddingBgService = new Gott.Services.EmbeddingBackgroundService(vectorSear
|
||||
builder.Services.AddSingleton(embeddingBgService);
|
||||
builder.Services.AddHostedService(sp => sp.GetRequiredService<Gott.Services.EmbeddingBackgroundService>());
|
||||
|
||||
// AnthropicService (Singleton – shared zwischen ChatEndpoint und TelegramService)
|
||||
// Token wird aus DB geladen (api_keys Tabelle), Fallback auf Config
|
||||
var anthropicToken = "";
|
||||
var activeKey = dbService.GetActiveApiKey("anthropic").GetAwaiter().GetResult();
|
||||
if (activeKey != null)
|
||||
anthropicToken = activeKey.ApiKey;
|
||||
else if (!string.IsNullOrWhiteSpace(builder.Configuration["AnthropicToken"]))
|
||||
anthropicToken = builder.Configuration["AnthropicToken"];
|
||||
// AnthropicService (Singleton – Token wird pro Request vom User aufgelöst)
|
||||
var payloadLogging = builder.Configuration.GetValue<bool>("PayloadLogging", false);
|
||||
var payloadLoggingGzip = builder.Configuration.GetValue<bool>("PayloadLoggingGzip", false);
|
||||
builder.Services.AddSingleton<AnthropicService>(sp =>
|
||||
{
|
||||
var svc = new AnthropicService(
|
||||
sp.GetRequiredService<IHttpClientFactory>(),
|
||||
anthropicToken, toolService, dbService, memoryService,
|
||||
toolService, dbService, memoryService,
|
||||
payloadLogging, payloadLoggingGzip,
|
||||
vectorSearch: vectorSearchService,
|
||||
embeddingBg: embeddingBgService);
|
||||
|
||||
Reference in new issue
Block a user