mirror of
https://github.com/MindWorkAI/AI-Studio.git
synced 2026-05-20 23:32:15 +00:00
95 lines
4.2 KiB
C#
95 lines
4.2 KiB
C#
using System.Runtime.CompilerServices;
|
|
|
|
using AIStudio.Chat;
|
|
using AIStudio.Provider.OpenAI;
|
|
using AIStudio.Settings;
|
|
|
|
namespace AIStudio.Provider.HuggingFace;
|
|
|
|
public sealed class ProviderHuggingFace : BaseProvider
|
|
{
|
|
private static readonly ILogger<ProviderHuggingFace> LOGGER = Program.LOGGER_FACTORY.CreateLogger<ProviderHuggingFace>();
|
|
|
|
public ProviderHuggingFace(HFInferenceProvider hfProvider, Model model) : base(LLMProviders.HUGGINGFACE, $"https://router.huggingface.co/{hfProvider.Endpoints(model)}", LOGGER)
|
|
{
|
|
LOGGER.LogInformation($"We use the inference provider '{hfProvider}'. Thus we use the base URL 'https://router.huggingface.co/{hfProvider.Endpoints(model)}'.");
|
|
}
|
|
|
|
#region Implementation of IProvider
|
|
|
|
/// <inheritdoc />
|
|
public override string Id => LLMProviders.HUGGINGFACE.ToName();
|
|
|
|
/// <inheritdoc />
|
|
public override string InstanceName { get; set; } = "HuggingFace";
|
|
|
|
/// <inheritdoc />
|
|
public override async IAsyncEnumerable<ContentStreamChunk> StreamChatCompletion(Model chatModel, ChatThread chatThread, SettingsManager settingsManager, [EnumeratorCancellation] CancellationToken token = default)
|
|
{
|
|
await foreach (var content in this.StreamOpenAICompatibleChatCompletion<ChatCompletionDeltaStreamLine, ChatCompletionAnnotationStreamLine>(
|
|
"HuggingFace",
|
|
chatModel,
|
|
chatThread,
|
|
settingsManager,
|
|
() => chatThread.Blocks.BuildMessagesUsingNestedImageUrlAsync(this.Provider, chatModel),
|
|
(systemPrompt, messages, apiParameters, stream, tools) =>
|
|
Task.FromResult(new ChatCompletionAPIRequest
|
|
{
|
|
Model = chatModel.Id,
|
|
Messages = [systemPrompt, ..messages],
|
|
Stream = stream,
|
|
Tools = tools,
|
|
ParallelToolCalls = tools is null ? null : true,
|
|
AdditionalApiParameters = apiParameters
|
|
}),
|
|
token: token))
|
|
yield return content;
|
|
}
|
|
|
|
#pragma warning disable CS1998 // Async method lacks 'await' operators and will run synchronously
|
|
/// <inheritdoc />
|
|
public override async IAsyncEnumerable<ImageURL> StreamImageCompletion(Model imageModel, string promptPositive, string promptNegative = FilterOperator.String.Empty, ImageURL referenceImageURL = default, [EnumeratorCancellation] CancellationToken token = default)
|
|
{
|
|
yield break;
|
|
}
|
|
#pragma warning restore CS1998 // Async method lacks 'await' operators and will run synchronously
|
|
|
|
/// <inheritdoc />
|
|
public override Task<string> TranscribeAudioAsync(Model transcriptionModel, string audioFilePath, SettingsManager settingsManager, CancellationToken token = default)
|
|
{
|
|
return Task.FromResult(string.Empty);
|
|
}
|
|
|
|
/// <inhertidoc />
|
|
public override Task<IReadOnlyList<IReadOnlyList<float>>> EmbedTextAsync(Model embeddingModel, SettingsManager settingsManager, CancellationToken token = default, params List<string> texts)
|
|
{
|
|
return Task.FromResult<IReadOnlyList<IReadOnlyList<float>>>([]);
|
|
}
|
|
|
|
/// <inheritdoc />
|
|
public override Task<IEnumerable<Model>> GetTextModels(string? apiKeyProvisional = null, CancellationToken token = default)
|
|
{
|
|
return Task.FromResult(Enumerable.Empty<Model>());
|
|
}
|
|
|
|
/// <inheritdoc />
|
|
public override Task<IEnumerable<Model>> GetImageModels(string? apiKeyProvisional = null, CancellationToken token = default)
|
|
{
|
|
return Task.FromResult(Enumerable.Empty<Model>());
|
|
}
|
|
|
|
/// <inheritdoc />
|
|
public override Task<IEnumerable<Model>> GetEmbeddingModels(string? apiKeyProvisional = null, CancellationToken token = default)
|
|
{
|
|
return Task.FromResult(Enumerable.Empty<Model>());
|
|
}
|
|
|
|
/// <inheritdoc />
|
|
public override Task<IEnumerable<Model>> GetTranscriptionModels(string? apiKeyProvisional = null, CancellationToken token = default)
|
|
{
|
|
return Task.FromResult(Enumerable.Empty<Model>());
|
|
}
|
|
|
|
#endregion
|
|
}
|