raiyanhasan commited on
Commit
eabfbb2
·
1 Parent(s): d41a0ac

max token is now dynamically handle for each model

Browse files
app/lib/.server/llm/constants.ts CHANGED
@@ -1,5 +1,5 @@
1
  // see https://docs.anthropic.com/en/docs/about-claude/models
2
- export const MAX_TOKENS = 4096;
3
 
4
  // limits the number of model responses that can be returned in a single request
5
  export const MAX_RESPONSE_SEGMENTS = 2;
 
1
  // see https://docs.anthropic.com/en/docs/about-claude/models
2
+ export const MAX_TOKENS = 8000;
3
 
4
  // limits the number of model responses that can be returned in a single request
5
  export const MAX_RESPONSE_SEGMENTS = 2;
app/lib/.server/llm/stream-text.ts CHANGED
@@ -41,10 +41,9 @@ function extractPropertiesFromMessage(message: Message): { model: string; provid
41
 
42
  return { model, provider, content: cleanedContent };
43
  }
44
-
45
  export function streamText(
46
- messages: Messages,
47
- env: Env,
48
  options?: StreamingOptions,
49
  apiKeys?: Record<string, string>
50
  ) {
@@ -64,13 +63,21 @@ export function streamText(
64
  return { ...message, content };
65
  }
66
 
67
- return message; // No changes for non-user messages
68
  });
69
 
 
 
 
 
 
 
 
 
70
  return _streamText({
71
  model: getModel(currentProvider, currentModel, env, apiKeys),
72
  system: getSystemPrompt(),
73
- maxTokens: MAX_TOKENS,
74
  messages: convertToCoreMessages(processedMessages),
75
  ...options,
76
  });
 
41
 
42
  return { model, provider, content: cleanedContent };
43
  }
 
44
  export function streamText(
45
+ messages: Messages,
46
+ env: Env,
47
  options?: StreamingOptions,
48
  apiKeys?: Record<string, string>
49
  ) {
 
63
  return { ...message, content };
64
  }
65
 
66
+ return message;
67
  });
68
 
69
+ const modelDetails = MODEL_LIST.find((m) => m.name === currentModel);
70
+
71
+ const dynamicMaxTokens =
72
+ modelDetails && modelDetails.maxTokenAllowed
73
+ ? Math.min(MAX_TOKENS, modelDetails.maxTokenAllowed)
74
+ : MAX_TOKENS;
75
+ console.log(dynamicMaxTokens)
76
+
77
  return _streamText({
78
  model: getModel(currentProvider, currentModel, env, apiKeys),
79
  system: getSystemPrompt(),
80
+ maxTokens: dynamicMaxTokens,
81
  messages: convertToCoreMessages(processedMessages),
82
  ...options,
83
  });
app/utils/constants.ts CHANGED
@@ -12,12 +12,12 @@ const PROVIDER_LIST: ProviderInfo[] = [
12
  {
13
  name: 'Anthropic',
14
  staticModels: [
15
- { name: 'claude-3-5-sonnet-latest', label: 'Claude 3.5 Sonnet (new)', provider: 'Anthropic' },
16
- { name: 'claude-3-5-sonnet-20240620', label: 'Claude 3.5 Sonnet (old)', provider: 'Anthropic' },
17
- { name: 'claude-3-5-haiku-latest', label: 'Claude 3.5 Haiku (new)', provider: 'Anthropic' },
18
- { name: 'claude-3-opus-latest', label: 'Claude 3 Opus', provider: 'Anthropic' },
19
- { name: 'claude-3-sonnet-20240229', label: 'Claude 3 Sonnet', provider: 'Anthropic' },
20
- { name: 'claude-3-haiku-20240307', label: 'Claude 3 Haiku', provider: 'Anthropic' }
21
  ],
22
  getApiKeyLink: "https://console.anthropic.com/settings/keys",
23
  },
@@ -36,36 +36,37 @@ const PROVIDER_LIST: ProviderInfo[] = [
36
  {
37
  name: 'Cohere',
38
  staticModels: [
39
- { name: 'command-r-plus-08-2024', label: 'Command R plus Latest', provider: 'Cohere' },
40
- { name: 'command-r-08-2024', label: 'Command R Latest', provider: 'Cohere' },
41
- { name: 'command-r-plus', label: 'Command R plus', provider: 'Cohere' },
42
- { name: 'command-r', label: 'Command R', provider: 'Cohere' },
43
- { name: 'command', label: 'Command', provider: 'Cohere' },
44
- { name: 'command-nightly', label: 'Command Nightly', provider: 'Cohere' },
45
- { name: 'command-light', label: 'Command Light', provider: 'Cohere' },
46
- { name: 'command-light-nightly', label: 'Command Light Nightly', provider: 'Cohere' },
47
- { name: 'c4ai-aya-expanse-8b', label: 'c4AI Aya Expanse 8b', provider: 'Cohere' },
48
- { name: 'c4ai-aya-expanse-32b', label: 'c4AI Aya Expanse 32b', provider: 'Cohere' },
49
  ],
50
  getApiKeyLink: 'https://dashboard.cohere.com/api-keys'
51
  },
52
  {
53
  name: 'OpenRouter',
54
  staticModels: [
55
- { name: 'gpt-4o', label: 'GPT-4o', provider: 'OpenAI' },
56
  {
57
  name: 'anthropic/claude-3.5-sonnet',
58
  label: 'Anthropic: Claude 3.5 Sonnet (OpenRouter)',
59
  provider: 'OpenRouter'
 
60
  },
61
- { name: 'anthropic/claude-3-haiku', label: 'Anthropic: Claude 3 Haiku (OpenRouter)', provider: 'OpenRouter' },
62
- { name: 'deepseek/deepseek-coder', label: 'Deepseek-Coder V2 236B (OpenRouter)', provider: 'OpenRouter' },
63
- { name: 'google/gemini-flash-1.5', label: 'Google Gemini Flash 1.5 (OpenRouter)', provider: 'OpenRouter' },
64
- { name: 'google/gemini-pro-1.5', label: 'Google Gemini Pro 1.5 (OpenRouter)', provider: 'OpenRouter' },
65
- { name: 'x-ai/grok-beta', label: 'xAI Grok Beta (OpenRouter)', provider: 'OpenRouter' },
66
- { name: 'mistralai/mistral-nemo', label: 'OpenRouter Mistral Nemo (OpenRouter)', provider: 'OpenRouter' },
67
- { name: 'qwen/qwen-110b-chat', label: 'OpenRouter Qwen 110b Chat (OpenRouter)', provider: 'OpenRouter' },
68
- { name: 'cohere/command', label: 'Cohere Command (OpenRouter)', provider: 'OpenRouter' }
69
  ],
70
  getDynamicModels: getOpenRouterModels,
71
  getApiKeyLink: 'https://openrouter.ai/settings/keys',
@@ -73,70 +74,70 @@ const PROVIDER_LIST: ProviderInfo[] = [
73
  }, {
74
  name: 'Google',
75
  staticModels: [
76
- { name: 'gemini-1.5-flash-latest', label: 'Gemini 1.5 Flash', provider: 'Google' },
77
- { name: 'gemini-1.5-flash-002', label: 'Gemini 1.5 Flash-002', provider: 'Google' },
78
- { name: 'gemini-1.5-flash-8b', label: 'Gemini 1.5 Flash-8b', provider: 'Google' },
79
- { name: 'gemini-1.5-pro-latest', label: 'Gemini 1.5 Pro', provider: 'Google' },
80
- { name: 'gemini-1.5-pro-002', label: 'Gemini 1.5 Pro-002', provider: 'Google' },
81
- { name: 'gemini-exp-1114', label: 'Gemini exp-1114', provider: 'Google' }
82
  ],
83
  getApiKeyLink: 'https://aistudio.google.com/app/apikey'
84
  }, {
85
  name: 'Groq',
86
  staticModels: [
87
- { name: 'llama-3.1-70b-versatile', label: 'Llama 3.1 70b (Groq)', provider: 'Groq' },
88
- { name: 'llama-3.1-8b-instant', label: 'Llama 3.1 8b (Groq)', provider: 'Groq' },
89
- { name: 'llama-3.2-11b-vision-preview', label: 'Llama 3.2 11b (Groq)', provider: 'Groq' },
90
- { name: 'llama-3.2-3b-preview', label: 'Llama 3.2 3b (Groq)', provider: 'Groq' },
91
- { name: 'llama-3.2-1b-preview', label: 'Llama 3.2 1b (Groq)', provider: 'Groq' }
92
  ],
93
  getApiKeyLink: 'https://console.groq.com/keys'
94
  },
95
  {
96
  name: 'HuggingFace',
97
  staticModels: [
98
- { name: 'Qwen/Qwen2.5-Coder-32B-Instruct', label: 'Qwen2.5-Coder-32B-Instruct (HuggingFace)', provider: 'HuggingFace' },
99
- { name: '01-ai/Yi-1.5-34B-Chat', label: 'Yi-1.5-34B-Chat (HuggingFace)', provider: 'HuggingFace' },
100
- { name: 'codellama/CodeLlama-34b-Instruct-hf', label: 'CodeLlama-34b-Instruct (HuggingFace)', provider: 'HuggingFace' },
101
- { name: 'NousResearch/Hermes-3-Llama-3.1-8B', label: 'Hermes-3-Llama-3.1-8B (HuggingFace)', provider: 'HuggingFace' }
102
  ],
103
  getApiKeyLink: 'https://huggingface.co/settings/tokens'
104
  },
105
-
106
  {
107
  name: 'OpenAI',
108
  staticModels: [
109
- { name: 'gpt-4o-mini', label: 'GPT-4o Mini', provider: 'OpenAI' },
110
- { name: 'gpt-4-turbo', label: 'GPT-4 Turbo', provider: 'OpenAI' },
111
- { name: 'gpt-4', label: 'GPT-4', provider: 'OpenAI' },
112
- { name: 'gpt-3.5-turbo', label: 'GPT-3.5 Turbo', provider: 'OpenAI' }
113
  ],
114
  getApiKeyLink: "https://platform.openai.com/api-keys",
115
  }, {
116
  name: 'xAI',
117
  staticModels: [
118
- { name: 'grok-beta', label: 'xAI Grok Beta', provider: 'xAI' }
119
  ],
120
  getApiKeyLink: 'https://docs.x.ai/docs/quickstart#creating-an-api-key'
121
  }, {
122
  name: 'Deepseek',
123
  staticModels: [
124
- { name: 'deepseek-coder', label: 'Deepseek-Coder', provider: 'Deepseek' },
125
- { name: 'deepseek-chat', label: 'Deepseek-Chat', provider: 'Deepseek' }
126
  ],
127
  getApiKeyLink: 'https://platform.deepseek.com/api_keys'
128
  }, {
129
  name: 'Mistral',
130
  staticModels: [
131
- { name: 'open-mistral-7b', label: 'Mistral 7B', provider: 'Mistral' },
132
- { name: 'open-mixtral-8x7b', label: 'Mistral 8x7B', provider: 'Mistral' },
133
- { name: 'open-mixtral-8x22b', label: 'Mistral 8x22B', provider: 'Mistral' },
134
- { name: 'open-codestral-mamba', label: 'Codestral Mamba', provider: 'Mistral' },
135
- { name: 'open-mistral-nemo', label: 'Mistral Nemo', provider: 'Mistral' },
136
- { name: 'ministral-8b-latest', label: 'Mistral 8B', provider: 'Mistral' },
137
- { name: 'mistral-small-latest', label: 'Mistral Small', provider: 'Mistral' },
138
- { name: 'codestral-latest', label: 'Codestral', provider: 'Mistral' },
139
- { name: 'mistral-large-latest', label: 'Mistral Large Latest', provider: 'Mistral' }
140
  ],
141
  getApiKeyLink: 'https://console.mistral.ai/api-keys/'
142
  }, {
@@ -180,7 +181,8 @@ async function getOllamaModels(): Promise<ModelInfo[]> {
180
  return data.models.map((model: OllamaModel) => ({
181
  name: model.name,
182
  label: `${model.name} (${model.details.parameter_size})`,
183
- provider: 'Ollama'
 
184
  }));
185
  } catch (e) {
186
  return [];
@@ -233,8 +235,9 @@ async function getOpenRouterModels(): Promise<ModelInfo[]> {
233
  name: m.id,
234
  label: `${m.name} - in:$${(m.pricing.prompt * 1_000_000).toFixed(
235
  2)} out:$${(m.pricing.completion * 1_000_000).toFixed(2)} - context ${Math.floor(
236
- m.context_length / 1000)}k`,
237
- provider: 'OpenRouter'
 
238
  }));
239
  }
240
 
 
12
  {
13
  name: 'Anthropic',
14
  staticModels: [
15
+ { name: 'claude-3-5-sonnet-latest', label: 'Claude 3.5 Sonnet (new)', provider: 'Anthropic', maxTokenAllowed: 8000 },
16
+ { name: 'claude-3-5-sonnet-20240620', label: 'Claude 3.5 Sonnet (old)', provider: 'Anthropic', maxTokenAllowed: 8000 },
17
+ { name: 'claude-3-5-haiku-latest', label: 'Claude 3.5 Haiku (new)', provider: 'Anthropic', maxTokenAllowed: 8000 },
18
+ { name: 'claude-3-opus-latest', label: 'Claude 3 Opus', provider: 'Anthropic', maxTokenAllowed: 8000 },
19
+ { name: 'claude-3-sonnet-20240229', label: 'Claude 3 Sonnet', provider: 'Anthropic', maxTokenAllowed: 8000 },
20
+ { name: 'claude-3-haiku-20240307', label: 'Claude 3 Haiku', provider: 'Anthropic', maxTokenAllowed: 8000 }
21
  ],
22
  getApiKeyLink: "https://console.anthropic.com/settings/keys",
23
  },
 
36
  {
37
  name: 'Cohere',
38
  staticModels: [
39
+ { name: 'command-r-plus-08-2024', label: 'Command R plus Latest', provider: 'Cohere', maxTokenAllowed: 4096 },
40
+ { name: 'command-r-08-2024', label: 'Command R Latest', provider: 'Cohere', maxTokenAllowed: 4096 },
41
+ { name: 'command-r-plus', label: 'Command R plus', provider: 'Cohere', maxTokenAllowed: 4096 },
42
+ { name: 'command-r', label: 'Command R', provider: 'Cohere', maxTokenAllowed: 4096 },
43
+ { name: 'command', label: 'Command', provider: 'Cohere', maxTokenAllowed: 4096 },
44
+ { name: 'command-nightly', label: 'Command Nightly', provider: 'Cohere', maxTokenAllowed: 4096 },
45
+ { name: 'command-light', label: 'Command Light', provider: 'Cohere', maxTokenAllowed: 4096 },
46
+ { name: 'command-light-nightly', label: 'Command Light Nightly', provider: 'Cohere', maxTokenAllowed: 4096 },
47
+ { name: 'c4ai-aya-expanse-8b', label: 'c4AI Aya Expanse 8b', provider: 'Cohere', maxTokenAllowed: 4096 },
48
+ { name: 'c4ai-aya-expanse-32b', label: 'c4AI Aya Expanse 32b', provider: 'Cohere', maxTokenAllowed: 4096 },
49
  ],
50
  getApiKeyLink: 'https://dashboard.cohere.com/api-keys'
51
  },
52
  {
53
  name: 'OpenRouter',
54
  staticModels: [
55
+ { name: 'gpt-4o', label: 'GPT-4o', provider: 'OpenAI', maxTokenAllowed: 8000 },
56
  {
57
  name: 'anthropic/claude-3.5-sonnet',
58
  label: 'Anthropic: Claude 3.5 Sonnet (OpenRouter)',
59
  provider: 'OpenRouter'
60
+ , maxTokenAllowed: 8000
61
  },
62
+ { name: 'anthropic/claude-3-haiku', label: 'Anthropic: Claude 3 Haiku (OpenRouter)', provider: 'OpenRouter', maxTokenAllowed: 8000 },
63
+ { name: 'deepseek/deepseek-coder', label: 'Deepseek-Coder V2 236B (OpenRouter)', provider: 'OpenRouter', maxTokenAllowed: 8000 },
64
+ { name: 'google/gemini-flash-1.5', label: 'Google Gemini Flash 1.5 (OpenRouter)', provider: 'OpenRouter', maxTokenAllowed: 8000 },
65
+ { name: 'google/gemini-pro-1.5', label: 'Google Gemini Pro 1.5 (OpenRouter)', provider: 'OpenRouter', maxTokenAllowed: 8000 },
66
+ { name: 'x-ai/grok-beta', label: 'xAI Grok Beta (OpenRouter)', provider: 'OpenRouter', maxTokenAllowed: 8000 },
67
+ { name: 'mistralai/mistral-nemo', label: 'OpenRouter Mistral Nemo (OpenRouter)', provider: 'OpenRouter', maxTokenAllowed: 8000 },
68
+ { name: 'qwen/qwen-110b-chat', label: 'OpenRouter Qwen 110b Chat (OpenRouter)', provider: 'OpenRouter', maxTokenAllowed: 8000 },
69
+ { name: 'cohere/command', label: 'Cohere Command (OpenRouter)', provider: 'OpenRouter', maxTokenAllowed: 4096 }
70
  ],
71
  getDynamicModels: getOpenRouterModels,
72
  getApiKeyLink: 'https://openrouter.ai/settings/keys',
 
74
  }, {
75
  name: 'Google',
76
  staticModels: [
77
+ { name: 'gemini-1.5-flash-latest', label: 'Gemini 1.5 Flash', provider: 'Google', maxTokenAllowed: 8192 },
78
+ { name: 'gemini-1.5-flash-002', label: 'Gemini 1.5 Flash-002', provider: 'Google', maxTokenAllowed: 8192 },
79
+ { name: 'gemini-1.5-flash-8b', label: 'Gemini 1.5 Flash-8b', provider: 'Google', maxTokenAllowed: 8192 },
80
+ { name: 'gemini-1.5-pro-latest', label: 'Gemini 1.5 Pro', provider: 'Google', maxTokenAllowed: 8192 },
81
+ { name: 'gemini-1.5-pro-002', label: 'Gemini 1.5 Pro-002', provider: 'Google', maxTokenAllowed: 8192 },
82
+ { name: 'gemini-exp-1114', label: 'Gemini exp-1114', provider: 'Google', maxTokenAllowed: 8192 }
83
  ],
84
  getApiKeyLink: 'https://aistudio.google.com/app/apikey'
85
  }, {
86
  name: 'Groq',
87
  staticModels: [
88
+ { name: 'llama-3.1-70b-versatile', label: 'Llama 3.1 70b (Groq)', provider: 'Groq', maxTokenAllowed: 8000 },
89
+ { name: 'llama-3.1-8b-instant', label: 'Llama 3.1 8b (Groq)', provider: 'Groq', maxTokenAllowed: 8000 },
90
+ { name: 'llama-3.2-11b-vision-preview', label: 'Llama 3.2 11b (Groq)', provider: 'Groq', maxTokenAllowed: 8000 },
91
+ { name: 'llama-3.2-3b-preview', label: 'Llama 3.2 3b (Groq)', provider: 'Groq', maxTokenAllowed: 8000 },
92
+ { name: 'llama-3.2-1b-preview', label: 'Llama 3.2 1b (Groq)', provider: 'Groq', maxTokenAllowed: 8000 }
93
  ],
94
  getApiKeyLink: 'https://console.groq.com/keys'
95
  },
96
  {
97
  name: 'HuggingFace',
98
  staticModels: [
99
+ { name: 'Qwen/Qwen2.5-Coder-32B-Instruct', label: 'Qwen2.5-Coder-32B-Instruct (HuggingFace)', provider: 'HuggingFace', maxTokenAllowed: 8000 },
100
+ { name: '01-ai/Yi-1.5-34B-Chat', label: 'Yi-1.5-34B-Chat (HuggingFace)', provider: 'HuggingFace', maxTokenAllowed: 8000 },
101
+ { name: 'codellama/CodeLlama-34b-Instruct-hf', label: 'CodeLlama-34b-Instruct (HuggingFace)', provider: 'HuggingFace', maxTokenAllowed: 8000 },
102
+ { name: 'NousResearch/Hermes-3-Llama-3.1-8B', label: 'Hermes-3-Llama-3.1-8B (HuggingFace)', provider: 'HuggingFace', maxTokenAllowed: 8000 }
103
  ],
104
  getApiKeyLink: 'https://huggingface.co/settings/tokens'
105
  },
106
+
107
  {
108
  name: 'OpenAI',
109
  staticModels: [
110
+ { name: 'gpt-4o-mini', label: 'GPT-4o Mini', provider: 'OpenAI', maxTokenAllowed: 8000 },
111
+ { name: 'gpt-4-turbo', label: 'GPT-4 Turbo', provider: 'OpenAI', maxTokenAllowed: 8000 },
112
+ { name: 'gpt-4', label: 'GPT-4', provider: 'OpenAI', maxTokenAllowed: 8000 },
113
+ { name: 'gpt-3.5-turbo', label: 'GPT-3.5 Turbo', provider: 'OpenAI', maxTokenAllowed: 8000 }
114
  ],
115
  getApiKeyLink: "https://platform.openai.com/api-keys",
116
  }, {
117
  name: 'xAI',
118
  staticModels: [
119
+ { name: 'grok-beta', label: 'xAI Grok Beta', provider: 'xAI', maxTokenAllowed: 8000 }
120
  ],
121
  getApiKeyLink: 'https://docs.x.ai/docs/quickstart#creating-an-api-key'
122
  }, {
123
  name: 'Deepseek',
124
  staticModels: [
125
+ { name: 'deepseek-coder', label: 'Deepseek-Coder', provider: 'Deepseek', maxTokenAllowed: 8000 },
126
+ { name: 'deepseek-chat', label: 'Deepseek-Chat', provider: 'Deepseek', maxTokenAllowed: 8000 }
127
  ],
128
  getApiKeyLink: 'https://platform.deepseek.com/api_keys'
129
  }, {
130
  name: 'Mistral',
131
  staticModels: [
132
+ { name: 'open-mistral-7b', label: 'Mistral 7B', provider: 'Mistral', maxTokenAllowed: 8000 },
133
+ { name: 'open-mixtral-8x7b', label: 'Mistral 8x7B', provider: 'Mistral', maxTokenAllowed: 8000 },
134
+ { name: 'open-mixtral-8x22b', label: 'Mistral 8x22B', provider: 'Mistral', maxTokenAllowed: 8000 },
135
+ { name: 'open-codestral-mamba', label: 'Codestral Mamba', provider: 'Mistral', maxTokenAllowed: 8000 },
136
+ { name: 'open-mistral-nemo', label: 'Mistral Nemo', provider: 'Mistral', maxTokenAllowed: 8000 },
137
+ { name: 'ministral-8b-latest', label: 'Mistral 8B', provider: 'Mistral', maxTokenAllowed: 8000 },
138
+ { name: 'mistral-small-latest', label: 'Mistral Small', provider: 'Mistral', maxTokenAllowed: 8000 },
139
+ { name: 'codestral-latest', label: 'Codestral', provider: 'Mistral', maxTokenAllowed: 8000 },
140
+ { name: 'mistral-large-latest', label: 'Mistral Large Latest', provider: 'Mistral', maxTokenAllowed: 8000 }
141
  ],
142
  getApiKeyLink: 'https://console.mistral.ai/api-keys/'
143
  }, {
 
181
  return data.models.map((model: OllamaModel) => ({
182
  name: model.name,
183
  label: `${model.name} (${model.details.parameter_size})`,
184
+ provider: 'Ollama',
185
+ maxTokenAllowed:8000,
186
  }));
187
  } catch (e) {
188
  return [];
 
235
  name: m.id,
236
  label: `${m.name} - in:$${(m.pricing.prompt * 1_000_000).toFixed(
237
  2)} out:$${(m.pricing.completion * 1_000_000).toFixed(2)} - context ${Math.floor(
238
+ m.context_length / 1000)}k`,
239
+ provider: 'OpenRouter',
240
+ maxTokenAllowed:8000,
241
  }));
242
  }
243
 
app/utils/types.ts CHANGED
@@ -25,6 +25,7 @@ export interface ModelInfo {
25
  name: string;
26
  label: string;
27
  provider: string;
 
28
  }
29
 
30
  export interface ProviderInfo {
 
25
  name: string;
26
  label: string;
27
  provider: string;
28
+ maxTokenAllowed: number;
29
  }
30
 
31
  export interface ProviderInfo {