File size: 3,023 Bytes
2327de3
 
 
 
6927c07
62ebfe5
6927c07
a544611
6927c07
 
 
 
8701be2
a544611
 
 
 
 
 
90a206f
 
 
 
 
8701be2
 
90a206f
 
7bf9c5c
 
4f7a06f
 
3b90afb
2327de3
5e8a0b0
2327de3
 
4660e5b
76cc7a8
 
2327de3
9a2fc92
8bcd82c
 
2327de3
d41a0ac
2327de3
 
30dfa4f
2327de3
30dfa4f
 
 
62ebfe5
 
 
 
 
 
 
30dfa4f
76cc7a8
62ebfe5
 
 
 
 
 
30dfa4f
62ebfe5
4edcc5e
62ebfe5
 
 
7d8f811
62ebfe5
 
2327de3
 
 
 
 
 
7d8f811
90a206f
2327de3
90a206f
6927c07
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
/*
 * @ts-nocheck
 * Preventing TS checks with files presented in the video for a better presentation.
 */
import { env } from 'node:process';
import type { IProviderSetting } from '~/types/model';

export function getAPIKey(cloudflareEnv: Env, provider: string, userApiKeys?: Record<string, string>) {
  /**
   * The `cloudflareEnv` is only used when deployed or when previewing locally.
   * In development the environment variables are available through `env`.
   */

  // First check user-provided API keys
  if (userApiKeys?.[provider]) {
    return userApiKeys[provider];
  }

  // Fall back to environment variables
  switch (provider) {
    case 'Anthropic':
      return env.ANTHROPIC_API_KEY || cloudflareEnv.ANTHROPIC_API_KEY;
    case 'OpenAI':
      return env.OPENAI_API_KEY || cloudflareEnv.OPENAI_API_KEY;
    case 'Google':
      return env.GOOGLE_GENERATIVE_AI_API_KEY || cloudflareEnv.GOOGLE_GENERATIVE_AI_API_KEY;
    case 'Groq':
      return env.GROQ_API_KEY || cloudflareEnv.GROQ_API_KEY;
    case 'HuggingFace':
      return env.HuggingFace_API_KEY || cloudflareEnv.HuggingFace_API_KEY;
    case 'OpenRouter':
      return env.OPEN_ROUTER_API_KEY || cloudflareEnv.OPEN_ROUTER_API_KEY;
    case 'Deepseek':
      return env.DEEPSEEK_API_KEY || cloudflareEnv.DEEPSEEK_API_KEY;
    case 'Mistral':
      return env.MISTRAL_API_KEY || cloudflareEnv.MISTRAL_API_KEY;
    case 'OpenAILike':
      return env.OPENAI_LIKE_API_KEY || cloudflareEnv.OPENAI_LIKE_API_KEY;
    case 'Together':
      return env.TOGETHER_API_KEY || cloudflareEnv.TOGETHER_API_KEY;
    case 'xAI':
      return env.XAI_API_KEY || cloudflareEnv.XAI_API_KEY;
    case 'Perplexity':
      return env.PERPLEXITY_API_KEY || cloudflareEnv.PERPLEXITY_API_KEY;
    case 'Cohere':
      return env.COHERE_API_KEY;
    case 'AzureOpenAI':
      return env.AZURE_OPENAI_API_KEY;
    default:
      return '';
  }
}

export function getBaseURL(cloudflareEnv: Env, provider: string, providerSettings?: Record<string, IProviderSetting>) {
  let settingBaseUrl = providerSettings?.[provider].baseUrl;

  if (settingBaseUrl && settingBaseUrl.length == 0) {
    settingBaseUrl = undefined;
  }

  switch (provider) {
    case 'Together':
      return (
        settingBaseUrl ||
        env.TOGETHER_API_BASE_URL ||
        cloudflareEnv.TOGETHER_API_BASE_URL ||
        'https://api.together.xyz/v1'
      );
    case 'OpenAILike':
      return settingBaseUrl || env.OPENAI_LIKE_API_BASE_URL || cloudflareEnv.OPENAI_LIKE_API_BASE_URL;
    case 'LMStudio':
      return (
        settingBaseUrl || env.LMSTUDIO_API_BASE_URL || cloudflareEnv.LMSTUDIO_API_BASE_URL || 'http://localhost:1234'
      );
    case 'Ollama': {
      let baseUrl =
        settingBaseUrl || env.OLLAMA_API_BASE_URL || cloudflareEnv.OLLAMA_API_BASE_URL || 'http://localhost:11434';

      if (env.RUNNING_IN_DOCKER === 'true') {
        baseUrl = baseUrl.replace('localhost', 'host.docker.internal');
      }

      return baseUrl;
    }
    default:
      return '';
  }
}