2024-09-01 18:10:03 +00:00
|
|
|
using AIStudio.Provider.Anthropic;
|
|
|
|
using AIStudio.Provider.Fireworks;
|
2024-11-09 21:04:00 +00:00
|
|
|
using AIStudio.Provider.Google;
|
2024-11-09 19:13:14 +00:00
|
|
|
using AIStudio.Provider.Groq;
|
2024-09-01 18:10:03 +00:00
|
|
|
using AIStudio.Provider.Mistral;
|
|
|
|
using AIStudio.Provider.OpenAI;
|
|
|
|
using AIStudio.Provider.SelfHosted;
|
2024-09-11 21:08:02 +00:00
|
|
|
using AIStudio.Settings;
|
2024-09-01 18:10:03 +00:00
|
|
|
|
|
|
|
namespace AIStudio.Provider;
|
|
|
|
|
2024-09-15 19:14:56 +00:00
|
|
|
public static class LLMProvidersExtensions
|
2024-09-01 18:10:03 +00:00
|
|
|
{
|
|
|
|
/// <summary>
|
|
|
|
/// Returns the human-readable name of the provider.
|
|
|
|
/// </summary>
|
2024-09-13 19:50:00 +00:00
|
|
|
/// <param name="llmProvider">The provider.</param>
|
2024-09-01 18:10:03 +00:00
|
|
|
/// <returns>The human-readable name of the provider.</returns>
|
2024-09-13 19:50:00 +00:00
|
|
|
public static string ToName(this LLMProviders llmProvider) => llmProvider switch
|
2024-09-01 18:10:03 +00:00
|
|
|
{
|
2024-09-13 19:50:00 +00:00
|
|
|
LLMProviders.NONE => "No provider selected",
|
2024-09-01 18:10:03 +00:00
|
|
|
|
2024-09-13 19:50:00 +00:00
|
|
|
LLMProviders.OPEN_AI => "OpenAI",
|
|
|
|
LLMProviders.ANTHROPIC => "Anthropic",
|
|
|
|
LLMProviders.MISTRAL => "Mistral",
|
2024-11-09 21:04:00 +00:00
|
|
|
LLMProviders.GOOGLE => "Google",
|
2024-09-01 18:10:03 +00:00
|
|
|
|
2024-11-09 19:13:14 +00:00
|
|
|
LLMProviders.GROQ => "Groq",
|
2024-09-13 19:50:00 +00:00
|
|
|
LLMProviders.FIREWORKS => "Fireworks.ai",
|
2024-09-01 18:10:03 +00:00
|
|
|
|
2024-09-13 19:50:00 +00:00
|
|
|
LLMProviders.SELF_HOSTED => "Self-hosted",
|
2024-09-01 18:10:03 +00:00
|
|
|
|
|
|
|
_ => "Unknown",
|
|
|
|
};
|
2024-09-11 21:08:02 +00:00
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Get a provider's confidence.
|
|
|
|
/// </summary>
|
2024-09-13 19:50:00 +00:00
|
|
|
/// <param name="llmProvider">The provider.</param>
|
2024-09-11 21:08:02 +00:00
|
|
|
/// <param name="settingsManager">The settings manager.</param>
|
|
|
|
/// <returns>The confidence of the provider.</returns>
|
2024-09-13 19:50:00 +00:00
|
|
|
public static Confidence GetConfidence(this LLMProviders llmProvider, SettingsManager settingsManager) => llmProvider switch
|
2024-09-11 21:08:02 +00:00
|
|
|
{
|
2024-09-13 19:50:00 +00:00
|
|
|
LLMProviders.NONE => Confidence.NONE,
|
2024-09-11 21:08:02 +00:00
|
|
|
|
2024-09-13 19:50:00 +00:00
|
|
|
LLMProviders.FIREWORKS => Confidence.USA_NOT_TRUSTED.WithRegion("America, U.S.").WithSources("https://fireworks.ai/terms-of-service").WithLevel(settingsManager.GetConfiguredConfidenceLevel(llmProvider)),
|
2024-09-11 21:08:02 +00:00
|
|
|
|
2024-09-13 19:50:00 +00:00
|
|
|
LLMProviders.OPEN_AI => Confidence.USA_NO_TRAINING.WithRegion("America, U.S.").WithSources(
|
2024-09-12 20:58:32 +00:00
|
|
|
"https://platform.openai.com/docs/models/default-usage-policies-by-endpoint",
|
2024-09-11 21:08:02 +00:00
|
|
|
"https://openai.com/policies/terms-of-use/",
|
|
|
|
"https://help.openai.com/en/articles/5722486-how-your-data-is-used-to-improve-model-performance",
|
|
|
|
"https://openai.com/enterprise-privacy/"
|
2024-09-13 19:50:00 +00:00
|
|
|
).WithLevel(settingsManager.GetConfiguredConfidenceLevel(llmProvider)),
|
2024-09-11 21:08:02 +00:00
|
|
|
|
2024-11-09 21:04:00 +00:00
|
|
|
LLMProviders.GOOGLE => Confidence.USA_NO_TRAINING.WithRegion("America, U.S.").WithSources("https://ai.google.dev/gemini-api/terms").WithLevel(settingsManager.GetConfiguredConfidenceLevel(llmProvider)),
|
|
|
|
|
2024-11-09 19:13:14 +00:00
|
|
|
LLMProviders.GROQ => Confidence.USA_NO_TRAINING.WithRegion("America, U.S.").WithSources("https://wow.groq.com/terms-of-use/").WithLevel(settingsManager.GetConfiguredConfidenceLevel(llmProvider)),
|
|
|
|
|
2024-09-13 19:50:00 +00:00
|
|
|
LLMProviders.ANTHROPIC => Confidence.USA_NO_TRAINING.WithRegion("America, U.S.").WithSources("https://www.anthropic.com/legal/commercial-terms").WithLevel(settingsManager.GetConfiguredConfidenceLevel(llmProvider)),
|
2024-09-11 21:08:02 +00:00
|
|
|
|
2024-09-13 19:50:00 +00:00
|
|
|
LLMProviders.MISTRAL => Confidence.GDPR_NO_TRAINING.WithRegion("Europe, France").WithSources("https://mistral.ai/terms/#terms-of-service-la-plateforme").WithLevel(settingsManager.GetConfiguredConfidenceLevel(llmProvider)),
|
2024-09-11 21:08:02 +00:00
|
|
|
|
2024-09-13 19:50:00 +00:00
|
|
|
LLMProviders.SELF_HOSTED => Confidence.SELF_HOSTED.WithLevel(settingsManager.GetConfiguredConfidenceLevel(llmProvider)),
|
2024-09-11 21:08:02 +00:00
|
|
|
|
2024-09-13 19:50:00 +00:00
|
|
|
_ => Confidence.UNKNOWN.WithLevel(settingsManager.GetConfiguredConfidenceLevel(llmProvider)),
|
2024-09-11 21:08:02 +00:00
|
|
|
};
|
2024-09-01 18:10:03 +00:00
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Creates a new provider instance based on the provider value.
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="providerSettings">The provider settings.</param>
|
|
|
|
/// <param name="logger">The logger to use.</param>
|
|
|
|
/// <returns>The provider instance.</returns>
|
|
|
|
public static IProvider CreateProvider(this Settings.Provider providerSettings, ILogger logger)
|
|
|
|
{
|
|
|
|
try
|
|
|
|
{
|
2024-09-13 19:50:00 +00:00
|
|
|
return providerSettings.UsedLLMProvider switch
|
2024-09-01 18:10:03 +00:00
|
|
|
{
|
2024-09-13 19:50:00 +00:00
|
|
|
LLMProviders.OPEN_AI => new ProviderOpenAI(logger) { InstanceName = providerSettings.InstanceName },
|
|
|
|
LLMProviders.ANTHROPIC => new ProviderAnthropic(logger) { InstanceName = providerSettings.InstanceName },
|
|
|
|
LLMProviders.MISTRAL => new ProviderMistral(logger) { InstanceName = providerSettings.InstanceName },
|
2024-11-09 21:04:00 +00:00
|
|
|
LLMProviders.GOOGLE => new ProviderGoogle(logger) { InstanceName = providerSettings.InstanceName },
|
2024-09-01 18:10:03 +00:00
|
|
|
|
2024-11-09 19:13:14 +00:00
|
|
|
LLMProviders.GROQ => new ProviderGroq(logger) { InstanceName = providerSettings.InstanceName },
|
2024-09-13 19:50:00 +00:00
|
|
|
LLMProviders.FIREWORKS => new ProviderFireworks(logger) { InstanceName = providerSettings.InstanceName },
|
2024-09-01 18:10:03 +00:00
|
|
|
|
2024-09-13 19:50:00 +00:00
|
|
|
LLMProviders.SELF_HOSTED => new ProviderSelfHosted(logger, providerSettings) { InstanceName = providerSettings.InstanceName },
|
2024-09-01 18:10:03 +00:00
|
|
|
|
|
|
|
_ => new NoProvider(),
|
|
|
|
};
|
|
|
|
}
|
|
|
|
catch (Exception e)
|
|
|
|
{
|
|
|
|
logger.LogError($"Failed to create provider: {e.Message}");
|
|
|
|
return new NoProvider();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|