using AIStudio.Provider.Anthropic; using AIStudio.Provider.Mistral; using AIStudio.Provider.OpenAI; using AIStudio.Provider.SelfHosted; namespace AIStudio.Provider; /// /// Enum for all available providers. /// public enum Providers { NONE, OPEN_AI, ANTHROPIC, MISTRAL, SELF_HOSTED, } /// /// Extension methods for the provider enum. /// public static class ExtensionsProvider { /// /// Returns the human-readable name of the provider. /// /// The provider. /// The human-readable name of the provider. public static string ToName(this Providers provider) => provider switch { Providers.NONE => "No provider selected", Providers.OPEN_AI => "OpenAI", Providers.ANTHROPIC => "Anthropic", Providers.MISTRAL => "Mistral", Providers.SELF_HOSTED => "Self-hosted", _ => "Unknown", }; /// /// Creates a new provider instance based on the provider value. /// /// The provider settings. /// The provider instance. public static IProvider CreateProvider(this Settings.Provider providerSettings) { try { return providerSettings.UsedProvider switch { Providers.OPEN_AI => new ProviderOpenAI { InstanceName = providerSettings.InstanceName }, Providers.ANTHROPIC => new ProviderAnthropic { InstanceName = providerSettings.InstanceName }, Providers.MISTRAL => new ProviderMistral { InstanceName = providerSettings.InstanceName }, Providers.SELF_HOSTED => new ProviderSelfHosted(providerSettings) { InstanceName = providerSettings.InstanceName }, _ => new NoProvider(), }; } catch (Exception e) { Console.WriteLine($"Failed to create provider: {e.Message}"); return new NoProvider(); } } }