(provider: string, model: string, userProvidedKey?: string)
| 860 | * For use server-side only |
| 861 | */ |
| 862 | export function getApiKey(provider: string, model: string, userProvidedKey?: string): string { |
| 863 | const hasUserKey = !!userProvidedKey |
| 864 | |
| 865 | const isOllamaModel = |
| 866 | provider === 'ollama' || useProvidersStore.getState().providers.ollama.models.includes(model) |
| 867 | if (isOllamaModel) { |
| 868 | return 'empty' |
| 869 | } |
| 870 | |
| 871 | const isVllmModel = |
| 872 | provider === 'vllm' || useProvidersStore.getState().providers.vllm.models.includes(model) |
| 873 | if (isVllmModel) { |
| 874 | return userProvidedKey || 'empty' |
| 875 | } |
| 876 | |
| 877 | const isLitellmModel = |
| 878 | provider === 'litellm' || useProvidersStore.getState().providers.litellm.models.includes(model) |
| 879 | if (isLitellmModel) { |
| 880 | return userProvidedKey || 'empty' |
| 881 | } |
| 882 | |
| 883 | // Bedrock uses its own credentials (bedrockAccessKeyId/bedrockSecretKey), not apiKey |
| 884 | const isBedrockModel = provider === 'bedrock' || model.startsWith('bedrock/') |
| 885 | if (isBedrockModel) { |
| 886 | return PROVIDER_PLACEHOLDER_KEY |
| 887 | } |
| 888 | |
| 889 | const isOpenAIModel = provider === 'openai' |
| 890 | const isClaudeModel = provider === 'anthropic' |
| 891 | const isGeminiModel = provider === 'google' |
| 892 | |
| 893 | if (isHosted && (isOpenAIModel || isClaudeModel || isGeminiModel)) { |
| 894 | const hostedModels = getHostedModels() |
| 895 | const isModelHosted = hostedModels.some((m) => m.toLowerCase() === model.toLowerCase()) |
| 896 | |
| 897 | if (isModelHosted) { |
| 898 | try { |
| 899 | const { getRotatingApiKey } = require('@/lib/core/config/api-keys') |
| 900 | const serverKey = getRotatingApiKey(isGeminiModel ? 'gemini' : provider) |
| 901 | return serverKey |
| 902 | } catch (_error) { |
| 903 | if (hasUserKey) { |
| 904 | return userProvidedKey! |
| 905 | } |
| 906 | |
| 907 | throw new Error(`No API key available for ${provider} ${model}`) |
| 908 | } |
| 909 | } |
| 910 | } |
| 911 | |
| 912 | if (!hasUserKey) { |
| 913 | throw new Error(`API key is required for ${provider} ${model}`) |
| 914 | } |
| 915 | |
| 916 | return userProvidedKey! |
| 917 | } |
| 918 | |
| 919 | /** |
no test coverage detected