From 68bf6275aa6945f92f21b4cc2bcd60829f66d0a0 Mon Sep 17 00:00:00 2001 From: Thorsten Sommer Date: Wed, 16 Sep 2026 18:35:14 +0200 Subject: [PATCH] Fixed self-hosted providers sending an empty bearer token when loading models --- .../Provider/SelfHosted/ProviderSelfHosted.cs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/app/MindWork AI Studio/Provider/SelfHosted/ProviderSelfHosted.cs b/app/MindWork AI Studio/Provider/SelfHosted/ProviderSelfHosted.cs index ffe8ead7..c24e7238 100644 --- a/app/MindWork AI Studio/Provider/SelfHosted/ProviderSelfHosted.cs +++ b/app/MindWork AI Studio/Provider/SelfHosted/ProviderSelfHosted.cs @@ -173,12 +173,17 @@ public sealed class ProviderSelfHosted(Host host, string hostname) : BaseProvide private async Task LoadModels(SecretStoreType storeType, string[] ignorePhrases, string[] filterPhrases, string? apiKeyProvisional, CancellationToken token) { - var secretKey = await this.GetModelLoadingSecretKey(storeType, apiKeyProvisional, true); + var secretKey = await this.GetModelLoadingSecretKey(storeType, apiKeyProvisional, isTryingSecret: true); try { using var lmStudioRequest = new HttpRequestMessage(HttpMethod.Get, "models"); - if(secretKey is not null) + + // An empty token is worse than none at all: a proxy which enforces authentication + // rejects an empty bearer with 401, where it would have let a request without any + // authorization header through. The dialogs hand us their key field as it stands, so + // an empty string arrives here whenever the user stored no key: + if(!string.IsNullOrWhiteSpace(secretKey)) lmStudioRequest.Headers.Authorization = new AuthenticationHeaderValue("Bearer", secretKey); using var lmStudioResponse = await this.HttpClient.SendAsync(lmStudioRequest, token);