mirror of
https://github.com/MindWorkAI/AI-Studio.git
synced 2025-03-12 18:29:06 +00:00
58 lines
2.3 KiB
C#
58 lines
2.3 KiB
C#
using AIStudio.Provider.SelfHosted;
|
|
using AIStudio.Settings.DataModel;
|
|
|
|
namespace AIStudio.Chat;
|
|
|
|
public static class ChatThreadExtensions
|
|
{
|
|
/// <summary>
|
|
/// Checks if the specified provider is allowed for the chat thread.
|
|
/// </summary>
|
|
/// <remarks>
|
|
/// We don't check if the provider is allowed to use the data sources of the chat thread.
|
|
/// That kind of check is done in the RAG process itself.<br/><br/>
|
|
///
|
|
/// One thing which is not so obvious: after RAG was used on this thread, the entire chat
|
|
/// thread is kind of a data source by itself. Why? Because the augmentation data collected
|
|
/// from the data sources is stored in the chat thread. This means we must check if the
|
|
/// selected provider is allowed to use this thread's data.
|
|
/// </remarks>
|
|
/// <param name="chatThread">The chat thread to check.</param>
|
|
/// <param name="provider">The provider to check.</param>
|
|
/// <returns>True, when the provider is allowed for the chat thread. False, otherwise.</returns>
|
|
public static bool IsLLMProviderAllowed<T>(this ChatThread? chatThread, T provider)
|
|
{
|
|
// No chat thread available means we have a new chat. That's fine:
|
|
if (chatThread is null)
|
|
return true;
|
|
|
|
// The chat thread is available, but the data security is not specified.
|
|
// Means, we never used RAG or RAG was enabled, but no data sources were selected.
|
|
// That's fine as well:
|
|
if (chatThread.DataSecurity is DataSourceSecurity.NOT_SPECIFIED)
|
|
return true;
|
|
|
|
//
|
|
// Is the provider self-hosted?
|
|
//
|
|
var isSelfHostedProvider = provider switch
|
|
{
|
|
ProviderSelfHosted => true,
|
|
AIStudio.Settings.Provider p => p.IsSelfHosted,
|
|
|
|
_ => false,
|
|
};
|
|
|
|
//
|
|
// Check the chat data security against the selected provider:
|
|
//
|
|
return isSelfHostedProvider switch
|
|
{
|
|
// The provider is self-hosted -- we can use any data source:
|
|
true => true,
|
|
|
|
// The provider is not self-hosted -- it depends on the data security of the chat thread:
|
|
false => chatThread.DataSecurity is not DataSourceSecurity.SELF_HOSTED,
|
|
};
|
|
}
|
|
} |