mirror of
https://github.com/MindWorkAI/AI-Studio.git
synced 2026-09-30 13:53:36 +00:00
Resolved 29 conflicting files. The notable decisions: Confidence: main's tool-calling gate (RequiredProviderConfidence) and this branch's local-RAG gate (DataConfidenceLevel) turned out to be the same rule on the same axis, so they are now one field. Both tool results and data sources raise it through RequireProviderConfidence(). The gate checks the level strictly and no longer exempts providers trusted by configuration: TrustedProviderIds is documented as applying to data-source security checks only, and organizations set confidence through DataConfidence .CustomConfidenceScheme instead. The security axis (DataSecurity, ERI, IsTrustedForDataSourceSecurityChecks) is unchanged. Provider creation: main's CreateProvider signature won (hfEndpointKind, capabilityOverrides, no model parameter); tokenizerPath was added to it and is set for every provider, including the new Hetzner, IONOS and LiteLLM. Provider and EmbeddingProvider combine the record parameters, Lua parsing and Lua serialization of both sides. File types: main's hierarchy (ODT leaf, WORD parent, PowerPoint without the legacy .ppt, TABULAR instead of DELIMITED_TABLE) plus this branch's SPREADSHEET parent with ODS and the xlsm/xlsb/xla/xlam extensions, which the runtime already reads. Both sides had added a conflicting HTML filter; the reading family keeps the name, and the export path uses a narrow HTML_DOCUMENT, following the existing LATEX/TEX split. Runtime: main's file_data.rs is the base, including the prompt-injection sanitizer and the extraction routes. Token counting and chunk segmentation moved into take_released, so they act on the text the filter has released rather than on text it is still holding. A failed count is logged and left out instead of ending the extraction, because the app counts such a segment itself. Data sources: the participating-provider checks of this branch are kept, and main's GetAllowedDataSources overload now builds on them. DirectChatService resolves the launched chat's data source options before the check, so filter and chat see the same options. .NET and Rust both build clean; I18N regenerated to 4060 keys.
123 lines
6.0 KiB
C#
123 lines
6.0 KiB
C#
using AIStudio.Chat;
|
|
using AIStudio.Settings;
|
|
|
|
namespace AIStudio.Provider;
|
|
|
|
/// <summary>
|
|
/// A common interface for all providers.
|
|
/// </summary>
|
|
public interface IProvider
|
|
{
|
|
/// <summary>
|
|
/// The provider type.
|
|
/// </summary>
|
|
public LLMProviders Provider { get; }
|
|
|
|
/// <summary>
|
|
/// The provider's ID.
|
|
/// </summary>
|
|
public string Id { get; }
|
|
|
|
/// <summary>
|
|
/// The ID of the configured provider instance.
|
|
/// </summary>
|
|
public string ConfiguredProviderId { get; }
|
|
|
|
/// <summary>
|
|
/// The provider's instance name. Useful for multiple instances of the same provider,
|
|
/// e.g., to distinguish between different OpenAI API keys.
|
|
/// </summary>
|
|
public string InstanceName { get; }
|
|
|
|
/// <summary>
|
|
/// The additional API parameters.
|
|
/// </summary>
|
|
public string AdditionalJsonApiParameters { get; }
|
|
|
|
/// <summary>
|
|
/// The tokenizer path associated with this provider configuration.
|
|
/// </summary>
|
|
public string TokenizerPath { get; }
|
|
|
|
/// Whether this provider instance can load available models from the backend/API.
|
|
/// This capability may differ by provider type, host, or modality.
|
|
/// </summary>
|
|
public bool HasModelLoadingCapability { get; }
|
|
|
|
/// <summary>
|
|
/// Starts a chat completion stream.
|
|
/// </summary>
|
|
/// <param name="chatModel">The model to use for chat completion.</param>
|
|
/// <param name="chatThread">The chat thread to continue.</param>
|
|
/// <param name="settingsManager">The settings manager instance to use.</param>
|
|
/// <param name="token">The cancellation token.</param>
|
|
/// <returns>The chat completion stream.</returns>
|
|
public IAsyncEnumerable<ContentStreamChunk> StreamChatCompletion(Model chatModel, ChatThread chatThread, SettingsManager settingsManager, CancellationToken token = default);
|
|
|
|
/// <summary>
|
|
/// Starts an image completion stream.
|
|
/// </summary>
|
|
/// <param name="imageModel">The model to use for image completion.</param>
|
|
/// <param name="promptPositive">The positive prompt.</param>
|
|
/// <param name="promptNegative">The negative prompt.</param>
|
|
/// <param name="referenceImageURL">The reference image URL.</param>
|
|
/// <param name="token">The cancellation token.</param>
|
|
/// <returns>The image completion stream.</returns>
|
|
public IAsyncEnumerable<ImageURL> StreamImageCompletion(Model imageModel, string promptPositive, string promptNegative = FilterOperator.String.Empty, ImageURL referenceImageURL = default, CancellationToken token = default);
|
|
|
|
/// <summary>
|
|
/// Transcribe an audio file.
|
|
/// </summary>
|
|
/// <param name="transcriptionModel">The model to use for transcription.</param>
|
|
/// <param name="audioFilePath">The audio file path.</param>
|
|
/// <param name="settingsManager">The settings manager instance to use.</param>
|
|
/// <param name="token">The cancellation token.</param>
|
|
/// <returns>>The transcription result.</returns>
|
|
public Task<TranscriptionResult> TranscribeAudioAsync(Model transcriptionModel, string audioFilePath, SettingsManager settingsManager, CancellationToken token = default);
|
|
|
|
/// <summary>
|
|
/// Embed a text file.
|
|
/// </summary>
|
|
/// <remarks>
|
|
/// The cancellation token is not the last parameter, unlike everywhere else in this codebase:
|
|
/// C# demands that a params parameter comes last, and every implementation inherits that order.
|
|
/// </remarks>
|
|
/// <param name="embeddingModel">The model to use for embedding.</param>
|
|
/// <param name="settingsManager">The settings manager instance to use.</param>
|
|
/// <param name="token">The cancellation token.</param>
|
|
/// <param name="texts">A single string or a list of strings to embed.</param>
|
|
/// <returns>>The embedded text as a single vector or as a list of vectors.</returns>
|
|
public Task<IReadOnlyList<IReadOnlyList<float>>> EmbedTextAsync(Model embeddingModel, SettingsManager settingsManager, CancellationToken token = default, params List<string> texts);
|
|
|
|
/// <summary>
|
|
/// Load all possible text models that can be used with this provider.
|
|
/// </summary>
|
|
/// <param name="apiKeyProvisional">The provisional API key to use. Useful when the user is adding a new provider. When null, the stored API key is used.</param>
|
|
/// <param name="token">The cancellation token.</param>
|
|
/// <returns>The list of text models.</returns>
|
|
public Task<ModelLoadResult> GetTextModels(string? apiKeyProvisional = null, CancellationToken token = default);
|
|
|
|
/// <summary>
|
|
/// Load all possible image models that can be used with this provider.
|
|
/// </summary>
|
|
/// <param name="apiKeyProvisional">The provisional API key to use. Useful when the user is adding a new provider. When null, the stored API key is used.</param>
|
|
/// <param name="token">The cancellation token.</param>
|
|
/// <returns>The list of image models.</returns>
|
|
public Task<ModelLoadResult> GetImageModels(string? apiKeyProvisional = null, CancellationToken token = default);
|
|
|
|
/// <summary>
|
|
/// Load all possible embedding models that can be used with this provider.
|
|
/// </summary>
|
|
/// <param name="apiKeyProvisional">The provisional API key to use. Useful when the user is adding a new provider. When null, the stored API key is used.</param>
|
|
/// <param name="token">The cancellation token.</param>
|
|
/// <returns>The list of embedding models.</returns>
|
|
public Task<ModelLoadResult> GetEmbeddingModels(string? apiKeyProvisional = null, CancellationToken token = default);
|
|
|
|
/// <summary>
|
|
/// Load all possible transcription models that can be used with this provider.
|
|
/// </summary>
|
|
/// <param name="apiKeyProvisional">The provisional API key to use. Useful when the user is adding a new provider. When null, the stored API key is used.</param>
|
|
/// <param name="token">>The cancellation token.</param>
|
|
/// <returns>>The list of transcription models.</returns>
|
|
public Task<ModelLoadResult> GetTranscriptionModels(string? apiKeyProvisional = null, CancellationToken token = default);
|
|
} |