mirror of
https://github.com/MindWorkAI/AI-Studio.git
synced 2026-10-17 11:57:59 +00:00
Ask the endpoint for transcription models before falling back to the documented list
This commit is contained in:
4 files changed
+64
-13
No files matched your search
@@ -93,6 +93,16 @@ public class ProviderFireworks() : BaseProvider(LLMProviders.FIREWORKS, new Uri(
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
/// <remarks>
|
||||
/// The one transcription list which stays a plain list, where GWDG and Mistral ask their
|
||||
/// endpoint first. There is nothing to ask here: HasModelLoadingCapability is false and every
|
||||
/// other method above answers with nothing, which is why a chat model at Fireworks has to be
|
||||
/// typed in by hand. A list is all there is.
|
||||
///
|
||||
/// The commented-out entry is no oversight either. The documentation names Whisper v3 Turbo,
|
||||
/// and trying it does not work -- which is worth keeping written down, so that nobody adds it
|
||||
/// back and finds out the same way again.
|
||||
/// </remarks>
|
||||
public override Task<ModelLoadResult> GetTranscriptionModels(string? apiKeyProvisional = null, CancellationToken token = default)
|
||||
{
|
||||
// Source: https://docs.fireworks.ai/api-reference/audio-transcriptions#param-model
|
||||
|
||||
@@ -18,6 +18,12 @@ public sealed class ProviderGWDG() : BaseProvider(LLMProviders.GWDG, new Uri("ht
|
||||
new("qwen3-embedding-4b", "Qwen3 Embedding 4B"),
|
||||
];
|
||||
|
||||
// Source: https://docs.hpc.gwdg.de/services/saia/index.html#voice-to-text
|
||||
private static readonly Model[] KNOWN_TRANSCRIPTION_MODELS =
|
||||
[
|
||||
new("whisper-large-v2", "Whisper v2 Large"),
|
||||
];
|
||||
|
||||
#region Implementation of IProvider
|
||||
|
||||
/// <inheritdoc />
|
||||
@@ -123,13 +129,27 @@ public sealed class ProviderGWDG() : BaseProvider(LLMProviders.GWDG, new Uri("ht
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override Task<ModelLoadResult> GetTranscriptionModels(string? apiKeyProvisional = null, CancellationToken token = default)
|
||||
/// <remarks>
|
||||
/// Built the same way as the embedding models above, and for the same reason: SAIA answers the
|
||||
/// models endpoint with its chat models only, so this comes back empty and the documented list
|
||||
/// stands in. Asking first costs nothing and means a speech model appearing in that answer one
|
||||
/// day shows up on its own, rather than waiting for somebody to notice and edit this file. A
|
||||
/// failed request is passed on unchanged, so a wrong API key stays visible as such.
|
||||
/// </remarks>
|
||||
public override async Task<ModelLoadResult> GetTranscriptionModels(string? apiKeyProvisional = null, CancellationToken token = default)
|
||||
{
|
||||
// Source: https://docs.hpc.gwdg.de/services/saia/index.html#voice-to-text
|
||||
return Task.FromResult(ModelLoadResult.FromModels(
|
||||
[
|
||||
new Model("whisper-large-v2", "Whisper v2 Large"),
|
||||
]));
|
||||
var result = await this.LoadModels(SecretStoreType.TRANSCRIPTION_PROVIDER, apiKeyProvisional, token);
|
||||
if (!result.Success)
|
||||
return result;
|
||||
|
||||
var transcriptionModels = result.Models.Where(model => model.IsTranscriptionModel(this.Provider)).ToList();
|
||||
if (transcriptionModels.Count is 0)
|
||||
return ModelLoadResult.FromModels(KNOWN_TRANSCRIPTION_MODELS);
|
||||
|
||||
return result with
|
||||
{
|
||||
Models = [..transcriptionModels]
|
||||
};
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
@@ -124,13 +124,16 @@ public sealed class ProviderMistral() : BaseProvider(LLMProviders.MISTRAL, new U
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override Task<ModelLoadResult> GetTranscriptionModels(string? apiKeyProvisional = null, CancellationToken token = default)
|
||||
public override async Task<ModelLoadResult> GetTranscriptionModels(string? apiKeyProvisional = null, CancellationToken token = default)
|
||||
{
|
||||
// Source: https://docs.mistral.ai/capabilities/audio_transcription
|
||||
return Task.FromResult(ModelLoadResult.FromModels(
|
||||
[
|
||||
new Provider.Model("voxtral-mini-latest", "Voxtral Mini Latest"),
|
||||
]));
|
||||
var modelResponse = await this.LoadModelList(SecretStoreType.TRANSCRIPTION_PROVIDER, apiKeyProvisional, token);
|
||||
if (!modelResponse.Success)
|
||||
return modelResponse;
|
||||
|
||||
return modelResponse with
|
||||
{
|
||||
Models = [..modelResponse.Models.Where(n => n.IsTranscriptionModel(this.Provider))]
|
||||
};
|
||||
}
|
||||
|
||||
#endregion
|
||||
@@ -145,4 +148,4 @@ public sealed class ProviderMistral() : BaseProvider(LLMProviders.MISTRAL, new U
|
||||
listingFactory: modelResponse => modelResponse.Data.Select(n => ModelListing.For(n.Id, n.ContextWindowTokens)),
|
||||
token: token);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user