diff --git a/src/Cli/src/Helpers.cs b/src/Cli/src/Helpers.cs index 78ab506f..9d7a2eca 100644 --- a/src/Cli/src/Helpers.cs +++ b/src/Cli/src/Helpers.cs @@ -54,11 +54,7 @@ public static IChatClient GetChatModel( } IChatClient chatClient; - Uri? endpoint = provider switch - { - Provider.Free or Provider.OpenRouter => new Uri(tryAGI.OpenAI.CustomProviders.OpenRouterBaseUrl), - _ => null, - }; + var endpoint = GetEndpoint(provider); model = model switch { null => "o4-mini", @@ -68,14 +64,9 @@ public static IChatClient GetChatModel( "latest-smart" => "o3", _ => model, }; - var apiKey = provider switch - { - Provider.OpenAi or null => Environment.GetEnvironmentVariable("OPENAI_API_KEY") ?? - throw new InvalidOperationException("OPENAI_API_KEY environment variable is not set."), - Provider.OpenRouter or Provider.Free => Environment.GetEnvironmentVariable("OPENROUTER_API_KEY") ?? - throw new InvalidOperationException("OPENROUTER_API_KEY environment variable is not set."), - _ => throw new NotImplementedException(), - }; + var apiKeyEnvironmentVariable = GetApiKeyEnvironmentVariable(provider); + var apiKey = Environment.GetEnvironmentVariable(apiKeyEnvironmentVariable) ?? + throw new InvalidOperationException($"{apiKeyEnvironmentVariable} environment variable is not set."); switch (provider) { @@ -111,4 +102,19 @@ public static IChatClient GetChatModel( return client; } + + internal static Uri? GetEndpoint(Provider? provider) => provider switch + { + Provider.Free or Provider.OpenRouter => new Uri(tryAGI.OpenAI.CustomProviders.OpenRouterBaseUrl), + Provider.Requesty => new Uri("https://router.requesty.ai/v1"), + _ => null, + }; + + internal static string GetApiKeyEnvironmentVariable(Provider? provider) => provider switch + { + Provider.OpenAi or null => "OPENAI_API_KEY", + Provider.OpenRouter or Provider.Free => "OPENROUTER_API_KEY", + Provider.Requesty => "REQUESTY_API_KEY", + _ => throw new NotImplementedException(), + }; } diff --git a/src/Cli/src/Models/Provider.cs b/src/Cli/src/Models/Provider.cs index b669aaae..ee560002 100644 --- a/src/Cli/src/Models/Provider.cs +++ b/src/Cli/src/Models/Provider.cs @@ -4,6 +4,7 @@ internal enum Provider { OpenAi, OpenRouter, + Requesty, Anthropic, Free, } \ No newline at end of file diff --git a/src/Cli/test/LangChain.Cli.IntegrationTests/HelpersTests.cs b/src/Cli/test/LangChain.Cli.IntegrationTests/HelpersTests.cs new file mode 100644 index 00000000..1c9abf04 --- /dev/null +++ b/src/Cli/test/LangChain.Cli.IntegrationTests/HelpersTests.cs @@ -0,0 +1,14 @@ +using LangChain.Cli.Models; + +namespace LangChain.Cli.IntegrationTests; + +[TestFixture] +public class HelpersTests +{ + [Test] + public void Requesty_UsesExpectedEndpointAndApiKeyEnvironmentVariable() + { + Helpers.GetEndpoint(Provider.Requesty).Should().Be(new Uri("https://router.requesty.ai/v1")); + Helpers.GetApiKeyEnvironmentVariable(Provider.Requesty).Should().Be("REQUESTY_API_KEY"); + } +}