Martin Ouimet commited on
Commit
76cc7a8
·
1 Parent(s): 7fc8e40

feat: add Together AI integration and provider implementation guide

Browse files

- Create detailed provider implementation guide with:
- Architecture overview and implementation steps
- Configuration patterns and best practices
- Testing checklist and Docker integration guide
- Example using Together AI implementation
- Add Together AI as new provider with:
- Environment variables and Docker configuration
- Support for Qwen, Llama, and Mixtral models
- API key and base URL management
- OpenAI-compatible API integration

.env.example CHANGED
@@ -38,12 +38,18 @@ OLLAMA_API_BASE_URL=
38
  # You only need this environment variable set if you want to use OpenAI Like models
39
  OPENAI_LIKE_API_BASE_URL=
40
 
 
 
 
41
  # You only need this environment variable set if you want to use DeepSeek models through their API
42
  DEEPSEEK_API_KEY=
43
 
44
  # Get your OpenAI Like API Key
45
  OPENAI_LIKE_API_KEY=
46
 
 
 
 
47
  # Get your Mistral API Key by following these instructions -
48
  # https://console.mistral.ai/api-keys/
49
  # You only need this environment variable set if you want to use Mistral models
 
38
  # You only need this environment variable set if you want to use OpenAI Like models
39
  OPENAI_LIKE_API_BASE_URL=
40
 
41
+ # You only need this environment variable set if you want to use Together AI models
42
+ TOGETHER_API_BASE_URL=
43
+
44
  # You only need this environment variable set if you want to use DeepSeek models through their API
45
  DEEPSEEK_API_KEY=
46
 
47
  # Get your OpenAI Like API Key
48
  OPENAI_LIKE_API_KEY=
49
 
50
+ # Get your Together API Key
51
+ TOGATHER_API_KEY=
52
+
53
  # Get your Mistral API Key by following these instructions -
54
  # https://console.mistral.ai/api-keys/
55
  # You only need this environment variable set if you want to use Mistral models
Dockerfile CHANGED
@@ -25,6 +25,8 @@ ARG ANTHROPIC_API_KEY
25
  ARG OPEN_ROUTER_API_KEY
26
  ARG GOOGLE_GENERATIVE_AI_API_KEY
27
  ARG OLLAMA_API_BASE_URL
 
 
28
  ARG VITE_LOG_LEVEL=debug
29
  ARG DEFAULT_NUM_CTX
30
 
@@ -36,6 +38,8 @@ ENV WRANGLER_SEND_METRICS=false \
36
  OPEN_ROUTER_API_KEY=${OPEN_ROUTER_API_KEY} \
37
  GOOGLE_GENERATIVE_AI_API_KEY=${GOOGLE_GENERATIVE_AI_API_KEY} \
38
  OLLAMA_API_BASE_URL=${OLLAMA_API_BASE_URL} \
 
 
39
  VITE_LOG_LEVEL=${VITE_LOG_LEVEL} \
40
  DEFAULT_NUM_CTX=${DEFAULT_NUM_CTX}
41
 
@@ -58,6 +62,8 @@ ARG ANTHROPIC_API_KEY
58
  ARG OPEN_ROUTER_API_KEY
59
  ARG GOOGLE_GENERATIVE_AI_API_KEY
60
  ARG OLLAMA_API_BASE_URL
 
 
61
  ARG VITE_LOG_LEVEL=debug
62
  ARG DEFAULT_NUM_CTX
63
 
@@ -68,6 +74,8 @@ ENV GROQ_API_KEY=${GROQ_API_KEY} \
68
  OPEN_ROUTER_API_KEY=${OPEN_ROUTER_API_KEY} \
69
  GOOGLE_GENERATIVE_AI_API_KEY=${GOOGLE_GENERATIVE_AI_API_KEY} \
70
  OLLAMA_API_BASE_URL=${OLLAMA_API_BASE_URL} \
 
 
71
  VITE_LOG_LEVEL=${VITE_LOG_LEVEL} \
72
  DEFAULT_NUM_CTX=${DEFAULT_NUM_CTX}
73
 
 
25
  ARG OPEN_ROUTER_API_KEY
26
  ARG GOOGLE_GENERATIVE_AI_API_KEY
27
  ARG OLLAMA_API_BASE_URL
28
+ ARG TOGETHER_API_KEY
29
+ ARG TOGETHER_API_BASE_URL
30
  ARG VITE_LOG_LEVEL=debug
31
  ARG DEFAULT_NUM_CTX
32
 
 
38
  OPEN_ROUTER_API_KEY=${OPEN_ROUTER_API_KEY} \
39
  GOOGLE_GENERATIVE_AI_API_KEY=${GOOGLE_GENERATIVE_AI_API_KEY} \
40
  OLLAMA_API_BASE_URL=${OLLAMA_API_BASE_URL} \
41
+ TOGETHER_API_KEY=${TOGETHER_API_KEY} \
42
+ TOGETHER_API_BASE_URL=${TOGETHER_API_BASE_URL} \
43
  VITE_LOG_LEVEL=${VITE_LOG_LEVEL} \
44
  DEFAULT_NUM_CTX=${DEFAULT_NUM_CTX}
45
 
 
62
  ARG OPEN_ROUTER_API_KEY
63
  ARG GOOGLE_GENERATIVE_AI_API_KEY
64
  ARG OLLAMA_API_BASE_URL
65
+ ARG TOGETHER_API_KEY
66
+ ARG TOGETHER_API_BASE_URL
67
  ARG VITE_LOG_LEVEL=debug
68
  ARG DEFAULT_NUM_CTX
69
 
 
74
  OPEN_ROUTER_API_KEY=${OPEN_ROUTER_API_KEY} \
75
  GOOGLE_GENERATIVE_AI_API_KEY=${GOOGLE_GENERATIVE_AI_API_KEY} \
76
  OLLAMA_API_BASE_URL=${OLLAMA_API_BASE_URL} \
77
+ TOGETHER_API_KEY=${TOGETHER_API_KEY} \
78
+ TOGETHER_API_BASE_URL=${TOGETHER_API_BASE_URL} \
79
  VITE_LOG_LEVEL=${VITE_LOG_LEVEL} \
80
  DEFAULT_NUM_CTX=${DEFAULT_NUM_CTX}
81
 
app/lib/.server/llm/api-key.ts CHANGED
@@ -35,6 +35,8 @@ export function getAPIKey(cloudflareEnv: Env, provider: string, userApiKeys?: Re
35
  return env.MISTRAL_API_KEY || cloudflareEnv.MISTRAL_API_KEY;
36
  case 'OpenAILike':
37
  return env.OPENAI_LIKE_API_KEY || cloudflareEnv.OPENAI_LIKE_API_KEY;
 
 
38
  case 'xAI':
39
  return env.XAI_API_KEY || cloudflareEnv.XAI_API_KEY;
40
  case 'Cohere':
@@ -48,6 +50,8 @@ export function getAPIKey(cloudflareEnv: Env, provider: string, userApiKeys?: Re
48
 
49
  export function getBaseURL(cloudflareEnv: Env, provider: string) {
50
  switch (provider) {
 
 
51
  case 'OpenAILike':
52
  return env.OPENAI_LIKE_API_BASE_URL || cloudflareEnv.OPENAI_LIKE_API_BASE_URL;
53
  case 'LMStudio':
 
35
  return env.MISTRAL_API_KEY || cloudflareEnv.MISTRAL_API_KEY;
36
  case 'OpenAILike':
37
  return env.OPENAI_LIKE_API_KEY || cloudflareEnv.OPENAI_LIKE_API_KEY;
38
+ case 'Together':
39
+ return env.TOGETHER_API_KEY || cloudflareEnv.TOGETHER_API_KEY;
40
  case 'xAI':
41
  return env.XAI_API_KEY || cloudflareEnv.XAI_API_KEY;
42
  case 'Cohere':
 
50
 
51
  export function getBaseURL(cloudflareEnv: Env, provider: string) {
52
  switch (provider) {
53
+ case 'Together':
54
+ return env.TOGETHER_API_BASE_URL || cloudflareEnv.TOGETHER_API_BASE_URL;
55
  case 'OpenAILike':
56
  return env.OPENAI_LIKE_API_BASE_URL || cloudflareEnv.OPENAI_LIKE_API_BASE_URL;
57
  case 'LMStudio':
app/lib/.server/llm/model.ts CHANGED
@@ -146,6 +146,8 @@ export function getModel(provider: string, model: string, env: Env, apiKeys?: Re
146
  return getGoogleModel(apiKey, model);
147
  case 'OpenAILike':
148
  return getOpenAILikeModel(baseURL, apiKey, model);
 
 
149
  case 'Deepseek':
150
  return getDeepseekModel(apiKey, model);
151
  case 'Mistral':
 
146
  return getGoogleModel(apiKey, model);
147
  case 'OpenAILike':
148
  return getOpenAILikeModel(baseURL, apiKey, model);
149
+ case 'Together':
150
+ return getOpenAILikeModel(baseURL, apiKey, model);
151
  case 'Deepseek':
152
  return getDeepseekModel(apiKey, model);
153
  case 'Mistral':
app/utils/constants.ts CHANGED
@@ -259,6 +259,23 @@ const PROVIDER_LIST: ProviderInfo[] = [
259
  labelForGetApiKey: 'Get LMStudio',
260
  icon: 'i-ph:cloud-arrow-down',
261
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
262
  ];
263
 
264
  export const DEFAULT_PROVIDER = PROVIDER_LIST[0];
 
259
  labelForGetApiKey: 'Get LMStudio',
260
  icon: 'i-ph:cloud-arrow-down',
261
  },
262
+ {
263
+ name: 'Together',
264
+ staticModels: [
265
+
266
+ { name: 'Qwen/Qwen2.5-Coder-32B-Instruct', label: 'Qwen/Qwen2.5-Coder-32B-Instruct', provider: 'Together', maxTokenAllowed: 8000, },
267
+ {
268
+ name: 'meta-llama/Llama-3.2-90B-Vision-Instruct-Turbo',
269
+ label: 'meta-llama/Llama-3.2-90B-Vision-Instruct-Turbo',
270
+ provider: 'Together',
271
+ maxTokenAllowed: 8000,
272
+ },
273
+
274
+ { name: 'mistralai/Mixtral-8x7B-Instruct-v0.1', label: 'Mixtral 8x7B Instruct', provider: 'Together', maxTokenAllowed: 8192 },
275
+
276
+ ],
277
+ getApiKeyLink: 'https://api.together.xyz/settings/api-keys',
278
+ },
279
  ];
280
 
281
  export const DEFAULT_PROVIDER = PROVIDER_LIST[0];
docker-compose.yaml CHANGED
@@ -20,6 +20,8 @@ services:
20
  - OPEN_ROUTER_API_KEY=${OPEN_ROUTER_API_KEY}
21
  - GOOGLE_GENERATIVE_AI_API_KEY=${GOOGLE_GENERATIVE_AI_API_KEY}
22
  - OLLAMA_API_BASE_URL=${OLLAMA_API_BASE_URL}
 
 
23
  - VITE_LOG_LEVEL=${VITE_LOG_LEVEL:-debug}
24
  - DEFAULT_NUM_CTX=${DEFAULT_NUM_CTX:-32768}
25
  - RUNNING_IN_DOCKER=true
@@ -48,6 +50,8 @@ services:
48
  - OPEN_ROUTER_API_KEY=${OPEN_ROUTER_API_KEY}
49
  - GOOGLE_GENERATIVE_AI_API_KEY=${GOOGLE_GENERATIVE_AI_API_KEY}
50
  - OLLAMA_API_BASE_URL=${OLLAMA_API_BASE_URL}
 
 
51
  - VITE_LOG_LEVEL=${VITE_LOG_LEVEL:-debug}
52
  - DEFAULT_NUM_CTX=${DEFAULT_NUM_CTX:-32768}
53
  - RUNNING_IN_DOCKER=true
 
20
  - OPEN_ROUTER_API_KEY=${OPEN_ROUTER_API_KEY}
21
  - GOOGLE_GENERATIVE_AI_API_KEY=${GOOGLE_GENERATIVE_AI_API_KEY}
22
  - OLLAMA_API_BASE_URL=${OLLAMA_API_BASE_URL}
23
+ - TOGETHER_API_KEY=${TOGETHER_API_KEY}
24
+ - TOGETHER_API_BASE_URL=${TOGETHER_API_BASE_URL}
25
  - VITE_LOG_LEVEL=${VITE_LOG_LEVEL:-debug}
26
  - DEFAULT_NUM_CTX=${DEFAULT_NUM_CTX:-32768}
27
  - RUNNING_IN_DOCKER=true
 
50
  - OPEN_ROUTER_API_KEY=${OPEN_ROUTER_API_KEY}
51
  - GOOGLE_GENERATIVE_AI_API_KEY=${GOOGLE_GENERATIVE_AI_API_KEY}
52
  - OLLAMA_API_BASE_URL=${OLLAMA_API_BASE_URL}
53
+ - TOGETHER_API_KEY=${TOGETHER_API_KEY}
54
+ - TOGETHER_API_BASE_URL=${TOGETHER_API_BASE_URL}
55
  - VITE_LOG_LEVEL=${VITE_LOG_LEVEL:-debug}
56
  - DEFAULT_NUM_CTX=${DEFAULT_NUM_CTX:-32768}
57
  - RUNNING_IN_DOCKER=true
worker-configuration.d.ts CHANGED
@@ -7,6 +7,8 @@ interface Env {
7
  OLLAMA_API_BASE_URL: string;
8
  OPENAI_LIKE_API_KEY: string;
9
  OPENAI_LIKE_API_BASE_URL: string;
 
 
10
  DEEPSEEK_API_KEY: string;
11
  LMSTUDIO_API_BASE_URL: string;
12
  GOOGLE_GENERATIVE_AI_API_KEY: string;
 
7
  OLLAMA_API_BASE_URL: string;
8
  OPENAI_LIKE_API_KEY: string;
9
  OPENAI_LIKE_API_BASE_URL: string;
10
+ TOGETHER_API_KEY: string;
11
+ TOGETHER_API_BASE_URL: string;
12
  DEEPSEEK_API_KEY: string;
13
  LMSTUDIO_API_BASE_URL: string;
14
  GOOGLE_GENERATIVE_AI_API_KEY: string;