Merge pull request #36 from ArulGandhi/main
Browse files- .env.example +5 -0
- app/lib/.server/llm/api-key.ts +2 -0
- app/lib/.server/llm/model.ts +12 -0
- app/utils/constants.ts +9 -0
- package.json +1 -0
- pnpm-lock.yaml +15 -0
.env.example
CHANGED
|
@@ -29,5 +29,10 @@ GOOGLE_GENERATIVE_AI_API_KEY=
|
|
| 29 |
# EXAMPLE http://localhost:11434
|
| 30 |
OLLAMA_API_BASE_URL=
|
| 31 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 32 |
# Include this environment variable if you want more logging for debugging locally
|
| 33 |
VITE_LOG_LEVEL=debug
|
|
|
|
| 29 |
# EXAMPLE http://localhost:11434
|
| 30 |
OLLAMA_API_BASE_URL=
|
| 31 |
|
| 32 |
+
# Get your Mistral API Key by following these instructions -
|
| 33 |
+
# https://console.mistral.ai/api-keys/
|
| 34 |
+
# You only need this environment variable set if you want to use Mistral models
|
| 35 |
+
MISTRAL_API_KEY=
|
| 36 |
+
|
| 37 |
# Include this environment variable if you want more logging for debugging locally
|
| 38 |
VITE_LOG_LEVEL=debug
|
app/lib/.server/llm/api-key.ts
CHANGED
|
@@ -19,6 +19,8 @@ export function getAPIKey(cloudflareEnv: Env, provider: string) {
|
|
| 19 |
return env.GROQ_API_KEY || cloudflareEnv.GROQ_API_KEY;
|
| 20 |
case 'OpenRouter':
|
| 21 |
return env.OPEN_ROUTER_API_KEY || cloudflareEnv.OPEN_ROUTER_API_KEY;
|
|
|
|
|
|
|
| 22 |
default:
|
| 23 |
return "";
|
| 24 |
}
|
|
|
|
| 19 |
return env.GROQ_API_KEY || cloudflareEnv.GROQ_API_KEY;
|
| 20 |
case 'OpenRouter':
|
| 21 |
return env.OPEN_ROUTER_API_KEY || cloudflareEnv.OPEN_ROUTER_API_KEY;
|
| 22 |
+
case 'Mistral':
|
| 23 |
+
return env.MISTRAL_API_KEY || cloudflareEnv.MISTRAL_API_KEY;
|
| 24 |
default:
|
| 25 |
return "";
|
| 26 |
}
|
app/lib/.server/llm/model.ts
CHANGED
|
@@ -6,6 +6,8 @@ import { createOpenAI } from '@ai-sdk/openai';
|
|
| 6 |
import { createGoogleGenerativeAI } from '@ai-sdk/google';
|
| 7 |
import { ollama } from 'ollama-ai-provider';
|
| 8 |
import { createOpenRouter } from "@openrouter/ai-sdk-provider";
|
|
|
|
|
|
|
| 9 |
|
| 10 |
export function getAnthropicModel(apiKey: string, model: string) {
|
| 11 |
const anthropic = createAnthropic({
|
|
@@ -23,6 +25,14 @@ export function getOpenAIModel(apiKey: string, model: string) {
|
|
| 23 |
return openai(model);
|
| 24 |
}
|
| 25 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 26 |
export function getGoogleModel(apiKey: string, model: string) {
|
| 27 |
const google = createGoogleGenerativeAI(
|
| 28 |
apiKey,
|
|
@@ -67,6 +77,8 @@ export function getModel(provider: string, model: string, env: Env) {
|
|
| 67 |
return getOpenRouterModel(apiKey, model);
|
| 68 |
case 'Google':
|
| 69 |
return getGoogleModel(apiKey, model)
|
|
|
|
|
|
|
| 70 |
default:
|
| 71 |
return getOllamaModel(model);
|
| 72 |
}
|
|
|
|
| 6 |
import { createGoogleGenerativeAI } from '@ai-sdk/google';
|
| 7 |
import { ollama } from 'ollama-ai-provider';
|
| 8 |
import { createOpenRouter } from "@openrouter/ai-sdk-provider";
|
| 9 |
+
import { mistral } from '@ai-sdk/mistral';
|
| 10 |
+
import { createMistral } from '@ai-sdk/mistral';
|
| 11 |
|
| 12 |
export function getAnthropicModel(apiKey: string, model: string) {
|
| 13 |
const anthropic = createAnthropic({
|
|
|
|
| 25 |
return openai(model);
|
| 26 |
}
|
| 27 |
|
| 28 |
+
export function getMistralModel(apiKey: string, model: string) {
|
| 29 |
+
const mistral = createMistral({
|
| 30 |
+
apiKey
|
| 31 |
+
});
|
| 32 |
+
|
| 33 |
+
return mistral(model);
|
| 34 |
+
}
|
| 35 |
+
|
| 36 |
export function getGoogleModel(apiKey: string, model: string) {
|
| 37 |
const google = createGoogleGenerativeAI(
|
| 38 |
apiKey,
|
|
|
|
| 77 |
return getOpenRouterModel(apiKey, model);
|
| 78 |
case 'Google':
|
| 79 |
return getGoogleModel(apiKey, model)
|
| 80 |
+
case 'Mistral':
|
| 81 |
+
return getMistralModel(apiKey, model);
|
| 82 |
default:
|
| 83 |
return getOllamaModel(model);
|
| 84 |
}
|
app/utils/constants.ts
CHANGED
|
@@ -32,6 +32,15 @@ const staticModels: ModelInfo[] = [
|
|
| 32 |
{ name: 'gpt-4-turbo', label: 'GPT-4 Turbo', provider: 'OpenAI' },
|
| 33 |
{ name: 'gpt-4', label: 'GPT-4', provider: 'OpenAI' },
|
| 34 |
{ name: 'gpt-3.5-turbo', label: 'GPT-3.5 Turbo', provider: 'OpenAI' },
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 35 |
];
|
| 36 |
|
| 37 |
export let MODEL_LIST: ModelInfo[] = [...staticModels];
|
|
|
|
| 32 |
{ name: 'gpt-4-turbo', label: 'GPT-4 Turbo', provider: 'OpenAI' },
|
| 33 |
{ name: 'gpt-4', label: 'GPT-4', provider: 'OpenAI' },
|
| 34 |
{ name: 'gpt-3.5-turbo', label: 'GPT-3.5 Turbo', provider: 'OpenAI' },
|
| 35 |
+
{ name: 'open-mistral-7b', label: 'Mistral 7B', provider: 'Mistral' },
|
| 36 |
+
{ name: 'open-mixtral-8x7b', label: 'Mistral 8x7B', provider: 'Mistral' },
|
| 37 |
+
{ name: 'open-mixtral-8x22b', label: 'Mistral 8x22B', provider: 'Mistral' },
|
| 38 |
+
{ name: 'open-codestral-mamba', label: 'Codestral Mamba', provider: 'Mistral' },
|
| 39 |
+
{ name: 'open-mistral-nemo', label: 'Mistral Nemo', provider: 'Mistral' },
|
| 40 |
+
{ name: 'ministral-8b-latest', label: 'Mistral 8B', provider: 'Mistral' },
|
| 41 |
+
{ name: 'ministral-small-latest', label: 'Mistral Small', provider: 'Mistral' },
|
| 42 |
+
{ name: 'codestral-latest', label: 'Codestral', provider: 'Mistral' },
|
| 43 |
+
{ name: 'ministral-large-latest', label: 'Mistral Large Latest', provider: 'Mistral' },
|
| 44 |
];
|
| 45 |
|
| 46 |
export let MODEL_LIST: ModelInfo[] = [...staticModels];
|
package.json
CHANGED
|
@@ -25,6 +25,7 @@
|
|
| 25 |
"@ai-sdk/anthropic": "^0.0.39",
|
| 26 |
"@ai-sdk/google": "^0.0.52",
|
| 27 |
"@ai-sdk/openai": "^0.0.66",
|
|
|
|
| 28 |
"@codemirror/autocomplete": "^6.17.0",
|
| 29 |
"@codemirror/commands": "^6.6.0",
|
| 30 |
"@codemirror/lang-cpp": "^6.0.2",
|
|
|
|
| 25 |
"@ai-sdk/anthropic": "^0.0.39",
|
| 26 |
"@ai-sdk/google": "^0.0.52",
|
| 27 |
"@ai-sdk/openai": "^0.0.66",
|
| 28 |
+
"@ai-sdk/mistral": "^0.0.43",
|
| 29 |
"@codemirror/autocomplete": "^6.17.0",
|
| 30 |
"@codemirror/commands": "^6.6.0",
|
| 31 |
"@codemirror/lang-cpp": "^6.0.2",
|
pnpm-lock.yaml
CHANGED
|
@@ -17,6 +17,9 @@ importers:
|
|
| 17 |
'@ai-sdk/google':
|
| 18 |
specifier: ^0.0.52
|
| 19 |
version: 0.0.52([email protected])
|
|
|
|
|
|
|
|
|
|
| 20 |
'@ai-sdk/openai':
|
| 21 |
specifier: ^0.0.66
|
| 22 |
version: 0.0.66([email protected])
|
|
@@ -270,6 +273,12 @@ packages:
|
|
| 270 |
peerDependencies:
|
| 271 |
zod: ^3.0.0
|
| 272 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 273 |
'@ai-sdk/[email protected]':
|
| 274 |
resolution: {integrity: sha512-V4XeDnlNl5/AY3GB3ozJUjqnBLU5pK3DacKTbCNH3zH8/MggJoH6B8wRGdLUPVFMcsMz60mtvh4DC9JsIVFrKw==}
|
| 275 |
engines: {node: '>=18'}
|
|
@@ -5448,6 +5457,12 @@ snapshots:
|
|
| 5448 |
json-schema: 0.4.0
|
| 5449 |
zod: 3.23.8
|
| 5450 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 5451 |
'@ai-sdk/[email protected]([email protected])':
|
| 5452 |
dependencies:
|
| 5453 |
'@ai-sdk/provider': 0.0.24
|
|
|
|
| 17 |
'@ai-sdk/google':
|
| 18 |
specifier: ^0.0.52
|
| 19 |
version: 0.0.52([email protected])
|
| 20 |
+
'@ai-sdk/mistral':
|
| 21 |
+
specifier: ^0.0.43
|
| 22 |
+
version: 0.0.43([email protected])
|
| 23 |
'@ai-sdk/openai':
|
| 24 |
specifier: ^0.0.66
|
| 25 |
version: 0.0.66([email protected])
|
|
|
|
| 273 |
peerDependencies:
|
| 274 |
zod: ^3.0.0
|
| 275 |
|
| 276 |
+
'@ai-sdk/[email protected]':
|
| 277 |
+
resolution: {integrity: sha512-YcneVvO57bbmseUmnvQaj6OolMj7/q1W/oeiFj1h+CJZsXIOX8P9i2Cmo2B7HMBbt73NIcvtyPze3GjaczZRqw==}
|
| 278 |
+
engines: {node: '>=18'}
|
| 279 |
+
peerDependencies:
|
| 280 |
+
zod: ^3.0.0
|
| 281 |
+
|
| 282 |
'@ai-sdk/[email protected]':
|
| 283 |
resolution: {integrity: sha512-V4XeDnlNl5/AY3GB3ozJUjqnBLU5pK3DacKTbCNH3zH8/MggJoH6B8wRGdLUPVFMcsMz60mtvh4DC9JsIVFrKw==}
|
| 284 |
engines: {node: '>=18'}
|
|
|
|
| 5457 |
json-schema: 0.4.0
|
| 5458 |
zod: 3.23.8
|
| 5459 |
|
| 5460 |
+
'@ai-sdk/[email protected]([email protected])':
|
| 5461 |
+
dependencies:
|
| 5462 |
+
'@ai-sdk/provider': 0.0.24
|
| 5463 |
+
'@ai-sdk/provider-utils': 1.0.20([email protected])
|
| 5464 |
+
zod: 3.23.8
|
| 5465 |
+
|
| 5466 |
'@ai-sdk/[email protected]([email protected])':
|
| 5467 |
dependencies:
|
| 5468 |
'@ai-sdk/provider': 0.0.24
|