namespace AnchorCli.Providers;
///
/// Factory for creating provider instances based on endpoint or provider name.
///
internal static class ProviderFactory
{
///
/// Creates a token extractor based on the provider name.
///
public static ITokenExtractor CreateTokenExtractor(string providerName)
{
return providerName.ToLowerInvariant() switch
{
"openrouter" => new OpenRouterTokenExtractor(),
"groq" => new GroqTokenExtractor(),
"ollama" => new OllamaTokenExtractor(),
_ => new GenericTokenExtractor()
};
}
///
/// Creates a token extractor by auto-detecting from the endpoint URL.
///
public static ITokenExtractor CreateTokenExtractorForEndpoint(string endpoint)
{
if (string.IsNullOrEmpty(endpoint))
{
return new GenericTokenExtractor();
}
var url = endpoint.ToLowerInvariant();
if (url.Contains("openrouter"))
{
return new OpenRouterTokenExtractor();
}
if (url.Contains("groq"))
{
return new GroqTokenExtractor();
}
if (url.Contains("ollama") || url.Contains("localhost") || url.Contains("127.0.0.1"))
{
return new OllamaTokenExtractor();
}
return new GenericTokenExtractor();
}
///
/// Creates a pricing provider based on the provider name.
/// Only OpenRouter has a pricing API currently.
///
public static IPricingProvider? CreatePricingProvider(string providerName)
{
return providerName.ToLowerInvariant() switch
{
"openrouter" => new OpenRouterProvider(),
_ => null // Other providers don't have pricing APIs yet
};
}
///
/// Determines if an endpoint is OpenRouter.
///
public static bool IsOpenRouter(string endpoint) =>
!string.IsNullOrEmpty(endpoint) && endpoint.Contains("openrouter", StringComparison.OrdinalIgnoreCase);
}