mirror of
https://github.com/MindWorkAI/AI-Studio.git
synced 2026-10-17 12:58:00 +00:00
Added tool calling support (#731)
Co-authored-by: krut_ni <nils.kruthoff@dlr.de> Co-authored-by: Thorsten Sommer <SommerEngineering@users.noreply.github.com>
This commit is contained in:
266 files changed
+11186
-740
No files matched your search
@@ -0,0 +1,8 @@
|
||||
namespace AIStudio.Provider.HuggingFace;
|
||||
|
||||
/// <summary>
|
||||
/// One model as the Hugging Face router describes it.
|
||||
/// </summary>
|
||||
/// <param name="Id">The ID of the model, written as "org/model".</param>
|
||||
/// <param name="Providers">The inference providers serving this model.</param>
|
||||
public readonly record struct HFModel(string Id, IList<HFModelProvider>? Providers);
|
||||
@@ -0,0 +1,8 @@
|
||||
namespace AIStudio.Provider.HuggingFace;
|
||||
|
||||
/// <summary>
|
||||
/// One inference provider serving a model.
|
||||
/// </summary>
|
||||
/// <param name="Provider">The slug of the inference provider, e.g. "novita".</param>
|
||||
/// <param name="Status">Whether the provider currently serves the model. Known value: "live".</param>
|
||||
public readonly record struct HFModelProvider(string Provider, string Status);
|
||||
@@ -0,0 +1,12 @@
|
||||
namespace AIStudio.Provider.HuggingFace;
|
||||
|
||||
/// <summary>
|
||||
/// One model as the Hugging Face hub lists it.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// The hub answers with a plain array of models and describes each of them in far more detail than
|
||||
/// we need here, from tags to download counts. We only ever ask for the models of one provider and
|
||||
/// one task, so the ID is all that is left to read.
|
||||
/// </remarks>
|
||||
/// <param name="Id">The ID of the model, written as "org/model".</param>
|
||||
public readonly record struct HubModel(string Id);
|
||||
@@ -9,29 +9,4 @@ namespace AIStudio.Provider.HuggingFace;
|
||||
/// instead of using the shared one.
|
||||
/// </remarks>
|
||||
/// <param name="Data">The models the router knows.</param>
|
||||
public readonly record struct ModelsResponse(IList<HFModel> Data);
|
||||
|
||||
/// <summary>
|
||||
/// One model as the Hugging Face router describes it.
|
||||
/// </summary>
|
||||
/// <param name="Id">The ID of the model, written as "org/model".</param>
|
||||
/// <param name="Providers">The inference providers serving this model.</param>
|
||||
public readonly record struct HFModel(string Id, IList<HFModelProvider>? Providers);
|
||||
|
||||
/// <summary>
|
||||
/// One inference provider serving a model.
|
||||
/// </summary>
|
||||
/// <param name="Provider">The slug of the inference provider, e.g. "novita".</param>
|
||||
/// <param name="Status">Whether the provider currently serves the model. Known value: "live".</param>
|
||||
public readonly record struct HFModelProvider(string Provider, string Status);
|
||||
|
||||
/// <summary>
|
||||
/// One model as the Hugging Face hub lists it.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// The hub answers with a plain array of models and describes each of them in far more detail than
|
||||
/// we need here, from tags to download counts. We only ever ask for the models of one provider and
|
||||
/// one task, so the ID is all that is left to read.
|
||||
/// </remarks>
|
||||
/// <param name="Id">The ID of the model, written as "org/model".</param>
|
||||
public readonly record struct HubModel(string Id);
|
||||
public readonly record struct ModelsResponse(IList<HFModel> Data);
|
||||
@@ -163,7 +163,7 @@ public sealed class ProviderHuggingFace : BaseProvider
|
||||
chatModel,
|
||||
chatThread,
|
||||
settingsManager,
|
||||
async (systemPrompt, apiParameters) =>
|
||||
async (systemPrompt, apiParameters, tools) =>
|
||||
{
|
||||
// Build the list of messages:
|
||||
var messages = await chatThread.Blocks.BuildMessagesUsingNestedImageUrlAsync(this.Provider, chatModel);
|
||||
@@ -178,6 +178,7 @@ public sealed class ProviderHuggingFace : BaseProvider
|
||||
Messages = [systemPrompt, ..messages],
|
||||
|
||||
Stream = true,
|
||||
Tools = tools,
|
||||
AdditionalApiParameters = apiParameters
|
||||
};
|
||||
},
|
||||
@@ -220,7 +221,7 @@ public sealed class ProviderHuggingFace : BaseProvider
|
||||
/// <inheritdoc />
|
||||
public override Task<ModelLoadResult> GetTextModels(string? apiKeyProvisional = null, CancellationToken token = default)
|
||||
{
|
||||
return this.LoadModelsResponse<ModelsResponse>(SecretStoreType.LLM_PROVIDER, "models", this.SelectChatModels, token, apiKeyProvisional);
|
||||
return this.LoadModelsResponse<ModelsResponse>(SecretStoreType.LLM_PROVIDER, "models", this.SelectChatModels, apiKeyProvisional, token: token);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -282,7 +283,7 @@ public sealed class ProviderHuggingFace : BaseProvider
|
||||
private Task<ModelLoadResult> LoadHubModels(SecretStoreType storeType, string pipelineTag, string? apiKeyProvisional, CancellationToken token)
|
||||
{
|
||||
var requestURL = $"{HUB_MODELS_URL}{this.hfProvider.EndpointsId()}&pipeline_tag={pipelineTag}";
|
||||
return this.LoadModelsResponse<IList<HubModel>>(storeType, requestURL, hubModels => hubModels.Select(hubModel => new Model(hubModel.Id, null)), token, apiKeyProvisional);
|
||||
return this.LoadModelsResponse<IList<HubModel>>(storeType, requestURL, hubModels => hubModels.Select(hubModel => new Model(hubModel.Id, null)), apiKeyProvisional, token: token);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
|
||||
Reference in new issue
Block a user