mirror of
https://github.com/MindWorkAI/AI-Studio.git
synced 2025-04-28 21:39:46 +00:00
Improved LM Studio handling by querying embedding models
This commit is contained in:
parent
eae33e5271
commit
492cf4ac6e
@ -56,7 +56,7 @@
|
|||||||
</MudSelect>
|
</MudSelect>
|
||||||
|
|
||||||
<MudStack Row="@true" AlignItems="AlignItems.Center">
|
<MudStack Row="@true" AlignItems="AlignItems.Center">
|
||||||
@if (this.DataLLMProvider.IsEmbeddingModelProvidedManually())
|
@if (this.DataLLMProvider.IsEmbeddingModelProvidedManually(this.DataHost))
|
||||||
{
|
{
|
||||||
<MudTextField
|
<MudTextField
|
||||||
T="string"
|
T="string"
|
||||||
|
@ -193,9 +193,9 @@ public static class LLMProvidersExtensions
|
|||||||
_ => false,
|
_ => false,
|
||||||
};
|
};
|
||||||
|
|
||||||
public static bool IsEmbeddingModelProvidedManually(this LLMProviders provider) => provider switch
|
public static bool IsEmbeddingModelProvidedManually(this LLMProviders provider, Host host) => provider switch
|
||||||
{
|
{
|
||||||
LLMProviders.SELF_HOSTED => true,
|
LLMProviders.SELF_HOSTED => host is not Host.LM_STUDIO,
|
||||||
_ => false,
|
_ => false,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -168,27 +168,7 @@ public sealed class ProviderSelfHosted(ILogger logger, Host host, string hostnam
|
|||||||
|
|
||||||
case Host.LM_STUDIO:
|
case Host.LM_STUDIO:
|
||||||
case Host.OLLAMA:
|
case Host.OLLAMA:
|
||||||
|
return await this.LoadModels(["embed"], [], token, apiKeyProvisional);
|
||||||
var secretKey = apiKeyProvisional switch
|
|
||||||
{
|
|
||||||
not null => apiKeyProvisional,
|
|
||||||
_ => await RUST_SERVICE.GetAPIKey(this, isTrying: true) switch
|
|
||||||
{
|
|
||||||
{ Success: true } result => await result.Secret.Decrypt(ENCRYPTION),
|
|
||||||
_ => null,
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
var lmStudioRequest = new HttpRequestMessage(HttpMethod.Get, "models");
|
|
||||||
if(secretKey is not null)
|
|
||||||
lmStudioRequest.Headers.Authorization = new AuthenticationHeaderValue("Bearer", apiKeyProvisional);
|
|
||||||
|
|
||||||
var lmStudioResponse = await this.httpClient.SendAsync(lmStudioRequest, token);
|
|
||||||
if(!lmStudioResponse.IsSuccessStatusCode)
|
|
||||||
return [];
|
|
||||||
|
|
||||||
var lmStudioModelResponse = await lmStudioResponse.Content.ReadFromJsonAsync<ModelsResponse>(token);
|
|
||||||
return lmStudioModelResponse.Data.Where(n => !n.Id.Contains("embed")).Select(n => new Provider.Model(n.Id, null));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return [];
|
return [];
|
||||||
@ -206,10 +186,52 @@ public sealed class ProviderSelfHosted(ILogger logger, Host host, string hostnam
|
|||||||
return Task.FromResult(Enumerable.Empty<Provider.Model>());
|
return Task.FromResult(Enumerable.Empty<Provider.Model>());
|
||||||
}
|
}
|
||||||
|
|
||||||
public override Task<IEnumerable<Provider.Model>> GetEmbeddingModels(string? apiKeyProvisional = null, CancellationToken token = default)
|
public override async Task<IEnumerable<Provider.Model>> GetEmbeddingModels(string? apiKeyProvisional = null, CancellationToken token = default)
|
||||||
{
|
{
|
||||||
return Task.FromResult(Enumerable.Empty<Provider.Model>());
|
try
|
||||||
|
{
|
||||||
|
switch (host)
|
||||||
|
{
|
||||||
|
case Host.LM_STUDIO:
|
||||||
|
case Host.OLLAMA:
|
||||||
|
return await this.LoadModels([], ["embed"], token, apiKeyProvisional);
|
||||||
|
}
|
||||||
|
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
catch(Exception e)
|
||||||
|
{
|
||||||
|
this.logger.LogError($"Failed to load text models from self-hosted provider: {e.Message}");
|
||||||
|
return [];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
private async Task<IEnumerable<Provider.Model>> LoadModels(string[] ignorePhrases, string[] filterPhrases, CancellationToken token, string? apiKeyProvisional = null)
|
||||||
|
{
|
||||||
|
var secretKey = apiKeyProvisional switch
|
||||||
|
{
|
||||||
|
not null => apiKeyProvisional,
|
||||||
|
_ => await RUST_SERVICE.GetAPIKey(this, isTrying: true) switch
|
||||||
|
{
|
||||||
|
{ Success: true } result => await result.Secret.Decrypt(ENCRYPTION),
|
||||||
|
_ => null,
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
var lmStudioRequest = new HttpRequestMessage(HttpMethod.Get, "models");
|
||||||
|
if(secretKey is not null)
|
||||||
|
lmStudioRequest.Headers.Authorization = new AuthenticationHeaderValue("Bearer", apiKeyProvisional);
|
||||||
|
|
||||||
|
var lmStudioResponse = await this.httpClient.SendAsync(lmStudioRequest, token);
|
||||||
|
if(!lmStudioResponse.IsSuccessStatusCode)
|
||||||
|
return [];
|
||||||
|
|
||||||
|
var lmStudioModelResponse = await lmStudioResponse.Content.ReadFromJsonAsync<ModelsResponse>(token);
|
||||||
|
return lmStudioModelResponse.Data.
|
||||||
|
Where(model => !ignorePhrases.Any(ignorePhrase => model.Id.Contains(ignorePhrase, StringComparison.InvariantCulture)) &&
|
||||||
|
filterPhrases.All( filter => model.Id.Contains(filter, StringComparison.InvariantCulture)))
|
||||||
|
.Select(n => new Provider.Model(n.Id, null));
|
||||||
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user