58 lines
1.6 KiB
TypeScript
58 lines
1.6 KiB
TypeScript
export type ProviderMeta = {
|
|
name: string;
|
|
envVar: string;
|
|
url: string;
|
|
requiresKey: boolean;
|
|
models: string[];
|
|
};
|
|
|
|
// 1. Explicitly define the literal union
|
|
export type OnlineProvider = "gemini" | "deepseek" | "openrouter" | "groq";
|
|
|
|
// 2. Use the union to type the Record
|
|
export const ONLINE_PROVIDERS: Record<OnlineProvider, ProviderMeta> = {
|
|
gemini: {
|
|
name: "Gemini",
|
|
envVar: "GEMINI_API_KEY",
|
|
url: "https://generativelanguage.googleapis.com/v1beta",
|
|
requiresKey: true,
|
|
models: ["gemini-2.5-flash", "gemini-2.5-pro"],
|
|
},
|
|
deepseek: {
|
|
name: "DeepSeek",
|
|
envVar: "DEEPSEEK_API_KEY",
|
|
url: "https://api.deepseek.com/v1/chat/completions",
|
|
requiresKey: true,
|
|
models: ["deepseek-chat", "deepseek-reasoner"],
|
|
},
|
|
openrouter: {
|
|
name: "OpenRouter",
|
|
envVar: "OPENROUTER_API_KEY",
|
|
url: "https://openrouter.ai/api/v1/chat/completions",
|
|
requiresKey: true,
|
|
models: [
|
|
"openai/gpt-oss-120b:free",
|
|
"google/gemma-4-31b-it:free",
|
|
"qwen/qwen3-next-80b-a3b-instruct:free",
|
|
"meta-llama/llama-3.3-70b-instruct:free",
|
|
"anthropic/claude-sonnet-4",
|
|
"google/gemini-2.5-flash",
|
|
"deepseek/deepseek-chat-v3",
|
|
],
|
|
},
|
|
groq: {
|
|
name: "Groq",
|
|
envVar: "GROQ_API_KEY",
|
|
url: "https://api.groq.com/openai/v1/chat/completions",
|
|
requiresKey: true,
|
|
models: ["llama-3.3-70b-versatile", "gemma2-9b-it", "mixtral-8x7b-32768"],
|
|
},
|
|
};
|
|
|
|
export const LOCAL_PROVIDER: ProviderMeta = {
|
|
name: "Local (llama.cpp / ollama / lm-studio)",
|
|
envVar: "",
|
|
url: "http://127.0.0.1:8080/v1/chat/completions",
|
|
requiresKey: false,
|
|
models: [],
|
|
};
|