cognitive-runtime 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -10
- package/dist/cli.js +7 -3
- package/dist/providers/anthropic.js +1 -1
- package/dist/providers/deepseek.js +1 -0
- package/dist/providers/gemini.js +1 -1
- package/dist/providers/index.d.ts +1 -1
- package/dist/providers/index.js +32 -30
- package/dist/providers/minimax.js +1 -1
- package/dist/providers/moonshot.js +1 -1
- package/dist/providers/ollama.js +1 -1
- package/dist/providers/openai.js +1 -1
- package/dist/providers/qwen.js +1 -1
- package/package.json +1 -1
- package/src/cli.ts +7 -3
- package/src/providers/anthropic.ts +1 -1
- package/src/providers/deepseek.ts +1 -0
- package/src/providers/gemini.ts +1 -1
- package/src/providers/index.ts +36 -31
- package/src/providers/minimax.ts +1 -1
- package/src/providers/moonshot.ts +1 -1
- package/src/providers/ollama.ts +1 -1
- package/src/providers/openai.ts +1 -1
- package/src/providers/qwen.ts +1 -1
package/README.md
CHANGED
|
@@ -67,16 +67,16 @@ cog doctor
|
|
|
67
67
|
|
|
68
68
|
## Providers
|
|
69
69
|
|
|
70
|
-
| Provider | Environment Variable | Default Model
|
|
71
|
-
|
|
72
|
-
| Gemini | `GEMINI_API_KEY` | `gemini-
|
|
73
|
-
| OpenAI | `OPENAI_API_KEY` | `gpt-
|
|
74
|
-
| Anthropic | `ANTHROPIC_API_KEY` | `claude-sonnet-4
|
|
75
|
-
| DeepSeek | `DEEPSEEK_API_KEY` | `deepseek-
|
|
76
|
-
| MiniMax | `MINIMAX_API_KEY` | `MiniMax-
|
|
77
|
-
| Moonshot | `MOONSHOT_API_KEY` | `
|
|
78
|
-
| Qwen | `DASHSCOPE_API_KEY` | `
|
|
79
|
-
| Ollama | `OLLAMA_HOST` | `
|
|
70
|
+
| Provider | Environment Variable | Default Model |
|
|
71
|
+
|------------|------------------------|----------------------|
|
|
72
|
+
| Gemini | `GEMINI_API_KEY` | `gemini-3-flash` |
|
|
73
|
+
| OpenAI | `OPENAI_API_KEY` | `gpt-5.2` |
|
|
74
|
+
| Anthropic | `ANTHROPIC_API_KEY` | `claude-sonnet-4.5` |
|
|
75
|
+
| DeepSeek | `DEEPSEEK_API_KEY` | `deepseek-v3.2` |
|
|
76
|
+
| MiniMax | `MINIMAX_API_KEY` | `MiniMax-M2.1` |
|
|
77
|
+
| Moonshot | `MOONSHOT_API_KEY` | `kimi-k2.5` |
|
|
78
|
+
| Qwen | `DASHSCOPE_API_KEY` | `qwen3-max` |
|
|
79
|
+
| Ollama | `OLLAMA_HOST` | `llama4` (local) |
|
|
80
80
|
|
|
81
81
|
### Provider Aliases
|
|
82
82
|
|
package/dist/cli.js
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
import { parseArgs } from 'node:util';
|
|
11
11
|
import { getProvider, listProviders } from './providers/index.js';
|
|
12
12
|
import { run, list, pipe, init } from './commands/index.js';
|
|
13
|
-
const VERSION = '0.
|
|
13
|
+
const VERSION = '0.3.0';
|
|
14
14
|
async function main() {
|
|
15
15
|
const args = process.argv.slice(2);
|
|
16
16
|
const command = args[0];
|
|
@@ -29,6 +29,7 @@ async function main() {
|
|
|
29
29
|
args: { type: 'string', short: 'a' },
|
|
30
30
|
input: { type: 'string', short: 'i' },
|
|
31
31
|
module: { type: 'string', short: 'm' },
|
|
32
|
+
model: { type: 'string', short: 'M' },
|
|
32
33
|
provider: { type: 'string', short: 'p' },
|
|
33
34
|
pretty: { type: 'boolean', default: false },
|
|
34
35
|
verbose: { type: 'boolean', short: 'V', default: false },
|
|
@@ -39,7 +40,7 @@ async function main() {
|
|
|
39
40
|
// Get provider
|
|
40
41
|
let provider;
|
|
41
42
|
try {
|
|
42
|
-
provider = getProvider(values.provider);
|
|
43
|
+
provider = getProvider(values.provider, values.model);
|
|
43
44
|
}
|
|
44
45
|
catch (e) {
|
|
45
46
|
console.error(`Error: ${e instanceof Error ? e.message : e}`);
|
|
@@ -174,7 +175,8 @@ OPTIONS:
|
|
|
174
175
|
-a, --args <str> Arguments to pass to module
|
|
175
176
|
-i, --input <json> JSON input for module
|
|
176
177
|
-m, --module <name> Module name (for pipe)
|
|
177
|
-
-
|
|
178
|
+
-M, --model <name> LLM model (e.g., gpt-4o, gemini-2.0-flash)
|
|
179
|
+
-p, --provider <name> LLM provider (gemini, openai, anthropic, deepseek, minimax, moonshot, qwen, ollama)
|
|
178
180
|
--pretty Pretty-print JSON output
|
|
179
181
|
-V, --verbose Verbose output
|
|
180
182
|
--no-validate Skip schema validation
|
|
@@ -183,6 +185,7 @@ OPTIONS:
|
|
|
183
185
|
|
|
184
186
|
EXAMPLES:
|
|
185
187
|
cog run code-reviewer --args "def foo(): pass"
|
|
188
|
+
cog run code-reviewer --provider openai --model gpt-4o --args "..."
|
|
186
189
|
cog list
|
|
187
190
|
echo "review this code" | cog pipe --module code-reviewer
|
|
188
191
|
cog init my-module
|
|
@@ -197,6 +200,7 @@ ENVIRONMENT:
|
|
|
197
200
|
MOONSHOT_API_KEY Moonshot (Kimi)
|
|
198
201
|
DASHSCOPE_API_KEY Alibaba Qwen (通义千问)
|
|
199
202
|
OLLAMA_HOST Ollama local (default: localhost:11434)
|
|
203
|
+
COG_MODEL Override default model for any provider
|
|
200
204
|
`);
|
|
201
205
|
}
|
|
202
206
|
main().catch(e => {
|
|
@@ -7,7 +7,7 @@ export class AnthropicProvider extends BaseProvider {
|
|
|
7
7
|
apiKey;
|
|
8
8
|
model;
|
|
9
9
|
baseUrl = 'https://api.anthropic.com/v1';
|
|
10
|
-
constructor(apiKey, model = 'claude-sonnet-4-
|
|
10
|
+
constructor(apiKey, model = 'claude-sonnet-4-5-20250929') {
|
|
11
11
|
super();
|
|
12
12
|
this.apiKey = apiKey || process.env.ANTHROPIC_API_KEY || '';
|
|
13
13
|
this.model = model;
|
|
@@ -8,6 +8,7 @@ export class DeepSeekProvider extends BaseProvider {
|
|
|
8
8
|
model;
|
|
9
9
|
baseUrl = 'https://api.deepseek.com/v1';
|
|
10
10
|
constructor(apiKey, model = 'deepseek-chat') {
|
|
11
|
+
// deepseek-chat 自动映射到最新的 DeepSeek-V3.2
|
|
11
12
|
super();
|
|
12
13
|
this.apiKey = apiKey || process.env.DEEPSEEK_API_KEY || '';
|
|
13
14
|
this.model = model;
|
package/dist/providers/gemini.js
CHANGED
|
@@ -7,7 +7,7 @@ export class GeminiProvider extends BaseProvider {
|
|
|
7
7
|
apiKey;
|
|
8
8
|
model;
|
|
9
9
|
baseUrl = 'https://generativelanguage.googleapis.com/v1beta';
|
|
10
|
-
constructor(apiKey, model = 'gemini-
|
|
10
|
+
constructor(apiKey, model = 'gemini-3-flash') {
|
|
11
11
|
super();
|
|
12
12
|
this.apiKey = apiKey || process.env.GEMINI_API_KEY || '';
|
|
13
13
|
this.model = model;
|
|
@@ -11,7 +11,7 @@ export { DeepSeekProvider } from './deepseek.js';
|
|
|
11
11
|
export { MoonshotProvider } from './moonshot.js';
|
|
12
12
|
export { QwenProvider } from './qwen.js';
|
|
13
13
|
export { OllamaProvider } from './ollama.js';
|
|
14
|
-
export declare function getProvider(name?: string): Provider;
|
|
14
|
+
export declare function getProvider(name?: string, model?: string): Provider;
|
|
15
15
|
export declare function listProviders(): Array<{
|
|
16
16
|
name: string;
|
|
17
17
|
configured: boolean;
|
package/dist/providers/index.js
CHANGED
|
@@ -19,54 +19,56 @@ export { MoonshotProvider } from './moonshot.js';
|
|
|
19
19
|
export { QwenProvider } from './qwen.js';
|
|
20
20
|
export { OllamaProvider } from './ollama.js';
|
|
21
21
|
const providers = {
|
|
22
|
-
gemini: () => new GeminiProvider(),
|
|
23
|
-
openai: () => new OpenAIProvider(),
|
|
24
|
-
anthropic: () => new AnthropicProvider(),
|
|
25
|
-
minimax: () => new MiniMaxProvider(),
|
|
26
|
-
deepseek: () => new DeepSeekProvider(),
|
|
27
|
-
moonshot: () => new MoonshotProvider(),
|
|
28
|
-
kimi: () => new MoonshotProvider(), // Alias
|
|
29
|
-
qwen: () => new QwenProvider(),
|
|
30
|
-
tongyi: () => new QwenProvider(), // Alias
|
|
31
|
-
dashscope: () => new QwenProvider(), // Alias
|
|
32
|
-
ollama: () => new OllamaProvider(),
|
|
33
|
-
local: () => new OllamaProvider(), // Alias
|
|
22
|
+
gemini: (model) => new GeminiProvider(undefined, model),
|
|
23
|
+
openai: (model) => new OpenAIProvider(undefined, model),
|
|
24
|
+
anthropic: (model) => new AnthropicProvider(undefined, model),
|
|
25
|
+
minimax: (model) => new MiniMaxProvider(undefined, model),
|
|
26
|
+
deepseek: (model) => new DeepSeekProvider(undefined, model),
|
|
27
|
+
moonshot: (model) => new MoonshotProvider(undefined, model),
|
|
28
|
+
kimi: (model) => new MoonshotProvider(undefined, model), // Alias
|
|
29
|
+
qwen: (model) => new QwenProvider(undefined, model),
|
|
30
|
+
tongyi: (model) => new QwenProvider(undefined, model), // Alias
|
|
31
|
+
dashscope: (model) => new QwenProvider(undefined, model), // Alias
|
|
32
|
+
ollama: (model) => new OllamaProvider(model),
|
|
33
|
+
local: (model) => new OllamaProvider(model), // Alias
|
|
34
34
|
};
|
|
35
|
-
export function getProvider(name) {
|
|
35
|
+
export function getProvider(name, model) {
|
|
36
|
+
// Check for model override from environment
|
|
37
|
+
const modelOverride = model || process.env.COG_MODEL;
|
|
36
38
|
// Auto-detect if not specified
|
|
37
39
|
if (!name) {
|
|
38
40
|
if (process.env.GEMINI_API_KEY)
|
|
39
|
-
return new GeminiProvider();
|
|
41
|
+
return new GeminiProvider(undefined, modelOverride);
|
|
40
42
|
if (process.env.OPENAI_API_KEY)
|
|
41
|
-
return new OpenAIProvider();
|
|
43
|
+
return new OpenAIProvider(undefined, modelOverride);
|
|
42
44
|
if (process.env.ANTHROPIC_API_KEY)
|
|
43
|
-
return new AnthropicProvider();
|
|
45
|
+
return new AnthropicProvider(undefined, modelOverride);
|
|
44
46
|
if (process.env.DEEPSEEK_API_KEY)
|
|
45
|
-
return new DeepSeekProvider();
|
|
47
|
+
return new DeepSeekProvider(undefined, modelOverride);
|
|
46
48
|
if (process.env.MINIMAX_API_KEY)
|
|
47
|
-
return new MiniMaxProvider();
|
|
49
|
+
return new MiniMaxProvider(undefined, modelOverride);
|
|
48
50
|
if (process.env.MOONSHOT_API_KEY)
|
|
49
|
-
return new MoonshotProvider();
|
|
51
|
+
return new MoonshotProvider(undefined, modelOverride);
|
|
50
52
|
if (process.env.DASHSCOPE_API_KEY || process.env.QWEN_API_KEY)
|
|
51
|
-
return new QwenProvider();
|
|
53
|
+
return new QwenProvider(undefined, modelOverride);
|
|
52
54
|
// Ollama is always available as fallback if nothing else is configured
|
|
53
|
-
return new OllamaProvider();
|
|
55
|
+
return new OllamaProvider(modelOverride);
|
|
54
56
|
}
|
|
55
57
|
const factory = providers[name.toLowerCase()];
|
|
56
58
|
if (!factory) {
|
|
57
59
|
throw new Error(`Unknown provider: ${name}. Available: ${Object.keys(providers).join(', ')}`);
|
|
58
60
|
}
|
|
59
|
-
return factory();
|
|
61
|
+
return factory(modelOverride);
|
|
60
62
|
}
|
|
61
63
|
export function listProviders() {
|
|
62
64
|
return [
|
|
63
|
-
{ name: 'gemini', configured: !!process.env.GEMINI_API_KEY, model: 'gemini-
|
|
64
|
-
{ name: 'openai', configured: !!process.env.OPENAI_API_KEY, model: 'gpt-
|
|
65
|
-
{ name: 'anthropic', configured: !!process.env.ANTHROPIC_API_KEY, model: 'claude-sonnet-4
|
|
66
|
-
{ name: 'deepseek', configured: !!process.env.DEEPSEEK_API_KEY, model: 'deepseek-
|
|
67
|
-
{ name: 'minimax', configured: !!process.env.MINIMAX_API_KEY, model: 'MiniMax-
|
|
68
|
-
{ name: 'moonshot', configured: !!process.env.MOONSHOT_API_KEY, model: '
|
|
69
|
-
{ name: 'qwen', configured: !!(process.env.DASHSCOPE_API_KEY || process.env.QWEN_API_KEY), model: '
|
|
70
|
-
{ name: 'ollama', configured: true, model: '
|
|
65
|
+
{ name: 'gemini', configured: !!process.env.GEMINI_API_KEY, model: 'gemini-3-flash' },
|
|
66
|
+
{ name: 'openai', configured: !!process.env.OPENAI_API_KEY, model: 'gpt-5.2' },
|
|
67
|
+
{ name: 'anthropic', configured: !!process.env.ANTHROPIC_API_KEY, model: 'claude-sonnet-4.5' },
|
|
68
|
+
{ name: 'deepseek', configured: !!process.env.DEEPSEEK_API_KEY, model: 'deepseek-v3.2' },
|
|
69
|
+
{ name: 'minimax', configured: !!process.env.MINIMAX_API_KEY, model: 'MiniMax-M2.1' },
|
|
70
|
+
{ name: 'moonshot', configured: !!process.env.MOONSHOT_API_KEY, model: 'kimi-k2.5' },
|
|
71
|
+
{ name: 'qwen', configured: !!(process.env.DASHSCOPE_API_KEY || process.env.QWEN_API_KEY), model: 'qwen3-max' },
|
|
72
|
+
{ name: 'ollama', configured: true, model: 'llama4 (local)' },
|
|
71
73
|
];
|
|
72
74
|
}
|
|
@@ -7,7 +7,7 @@ export class MiniMaxProvider extends BaseProvider {
|
|
|
7
7
|
apiKey;
|
|
8
8
|
model;
|
|
9
9
|
baseUrl = 'https://api.minimax.chat/v1';
|
|
10
|
-
constructor(apiKey, model = 'MiniMax-
|
|
10
|
+
constructor(apiKey, model = 'MiniMax-M2.1') {
|
|
11
11
|
super();
|
|
12
12
|
this.apiKey = apiKey || process.env.MINIMAX_API_KEY || '';
|
|
13
13
|
this.model = model;
|
|
@@ -7,7 +7,7 @@ export class MoonshotProvider extends BaseProvider {
|
|
|
7
7
|
apiKey;
|
|
8
8
|
model;
|
|
9
9
|
baseUrl = 'https://api.moonshot.cn/v1';
|
|
10
|
-
constructor(apiKey, model = '
|
|
10
|
+
constructor(apiKey, model = 'kimi-k2.5') {
|
|
11
11
|
super();
|
|
12
12
|
this.apiKey = apiKey || process.env.MOONSHOT_API_KEY || '';
|
|
13
13
|
this.model = model;
|
package/dist/providers/ollama.js
CHANGED
|
@@ -6,7 +6,7 @@ export class OllamaProvider extends BaseProvider {
|
|
|
6
6
|
name = 'ollama';
|
|
7
7
|
model;
|
|
8
8
|
baseUrl;
|
|
9
|
-
constructor(model = '
|
|
9
|
+
constructor(model = 'llama4', baseUrl = 'http://localhost:11434') {
|
|
10
10
|
super();
|
|
11
11
|
this.model = process.env.OLLAMA_MODEL || model;
|
|
12
12
|
this.baseUrl = process.env.OLLAMA_HOST || baseUrl;
|
package/dist/providers/openai.js
CHANGED
|
@@ -7,7 +7,7 @@ export class OpenAIProvider extends BaseProvider {
|
|
|
7
7
|
apiKey;
|
|
8
8
|
model;
|
|
9
9
|
baseUrl;
|
|
10
|
-
constructor(apiKey, model = 'gpt-
|
|
10
|
+
constructor(apiKey, model = 'gpt-5.2', baseUrl = 'https://api.openai.com/v1') {
|
|
11
11
|
super();
|
|
12
12
|
this.apiKey = apiKey || process.env.OPENAI_API_KEY || '';
|
|
13
13
|
this.model = model;
|
package/dist/providers/qwen.js
CHANGED
|
@@ -7,7 +7,7 @@ export class QwenProvider extends BaseProvider {
|
|
|
7
7
|
apiKey;
|
|
8
8
|
model;
|
|
9
9
|
baseUrl = 'https://dashscope.aliyuncs.com/compatible-mode/v1';
|
|
10
|
-
constructor(apiKey, model = '
|
|
10
|
+
constructor(apiKey, model = 'qwen3-max') {
|
|
11
11
|
super();
|
|
12
12
|
this.apiKey = apiKey || process.env.DASHSCOPE_API_KEY || process.env.QWEN_API_KEY || '';
|
|
13
13
|
this.model = model;
|
package/package.json
CHANGED
package/src/cli.ts
CHANGED
|
@@ -13,7 +13,7 @@ import { getProvider, listProviders } from './providers/index.js';
|
|
|
13
13
|
import { run, list, pipe, init } from './commands/index.js';
|
|
14
14
|
import type { CommandContext } from './types.js';
|
|
15
15
|
|
|
16
|
-
const VERSION = '0.
|
|
16
|
+
const VERSION = '0.3.0';
|
|
17
17
|
|
|
18
18
|
async function main() {
|
|
19
19
|
const args = process.argv.slice(2);
|
|
@@ -36,6 +36,7 @@ async function main() {
|
|
|
36
36
|
args: { type: 'string', short: 'a' },
|
|
37
37
|
input: { type: 'string', short: 'i' },
|
|
38
38
|
module: { type: 'string', short: 'm' },
|
|
39
|
+
model: { type: 'string', short: 'M' },
|
|
39
40
|
provider: { type: 'string', short: 'p' },
|
|
40
41
|
pretty: { type: 'boolean', default: false },
|
|
41
42
|
verbose: { type: 'boolean', short: 'V', default: false },
|
|
@@ -47,7 +48,7 @@ async function main() {
|
|
|
47
48
|
// Get provider
|
|
48
49
|
let provider;
|
|
49
50
|
try {
|
|
50
|
-
provider = getProvider(values.provider);
|
|
51
|
+
provider = getProvider(values.provider, values.model);
|
|
51
52
|
} catch (e) {
|
|
52
53
|
console.error(`Error: ${e instanceof Error ? e.message : e}`);
|
|
53
54
|
process.exit(1);
|
|
@@ -196,7 +197,8 @@ OPTIONS:
|
|
|
196
197
|
-a, --args <str> Arguments to pass to module
|
|
197
198
|
-i, --input <json> JSON input for module
|
|
198
199
|
-m, --module <name> Module name (for pipe)
|
|
199
|
-
-
|
|
200
|
+
-M, --model <name> LLM model (e.g., gpt-4o, gemini-2.0-flash)
|
|
201
|
+
-p, --provider <name> LLM provider (gemini, openai, anthropic, deepseek, minimax, moonshot, qwen, ollama)
|
|
200
202
|
--pretty Pretty-print JSON output
|
|
201
203
|
-V, --verbose Verbose output
|
|
202
204
|
--no-validate Skip schema validation
|
|
@@ -205,6 +207,7 @@ OPTIONS:
|
|
|
205
207
|
|
|
206
208
|
EXAMPLES:
|
|
207
209
|
cog run code-reviewer --args "def foo(): pass"
|
|
210
|
+
cog run code-reviewer --provider openai --model gpt-4o --args "..."
|
|
208
211
|
cog list
|
|
209
212
|
echo "review this code" | cog pipe --module code-reviewer
|
|
210
213
|
cog init my-module
|
|
@@ -219,6 +222,7 @@ ENVIRONMENT:
|
|
|
219
222
|
MOONSHOT_API_KEY Moonshot (Kimi)
|
|
220
223
|
DASHSCOPE_API_KEY Alibaba Qwen (通义千问)
|
|
221
224
|
OLLAMA_HOST Ollama local (default: localhost:11434)
|
|
225
|
+
COG_MODEL Override default model for any provider
|
|
222
226
|
`);
|
|
223
227
|
}
|
|
224
228
|
|
|
@@ -11,7 +11,7 @@ export class AnthropicProvider extends BaseProvider {
|
|
|
11
11
|
private model: string;
|
|
12
12
|
private baseUrl = 'https://api.anthropic.com/v1';
|
|
13
13
|
|
|
14
|
-
constructor(apiKey?: string, model = 'claude-sonnet-4-
|
|
14
|
+
constructor(apiKey?: string, model = 'claude-sonnet-4-5-20250929') {
|
|
15
15
|
super();
|
|
16
16
|
this.apiKey = apiKey || process.env.ANTHROPIC_API_KEY || '';
|
|
17
17
|
this.model = model;
|
|
@@ -12,6 +12,7 @@ export class DeepSeekProvider extends BaseProvider {
|
|
|
12
12
|
private baseUrl = 'https://api.deepseek.com/v1';
|
|
13
13
|
|
|
14
14
|
constructor(apiKey?: string, model = 'deepseek-chat') {
|
|
15
|
+
// deepseek-chat 自动映射到最新的 DeepSeek-V3.2
|
|
15
16
|
super();
|
|
16
17
|
this.apiKey = apiKey || process.env.DEEPSEEK_API_KEY || '';
|
|
17
18
|
this.model = model;
|
package/src/providers/gemini.ts
CHANGED
|
@@ -11,7 +11,7 @@ export class GeminiProvider extends BaseProvider {
|
|
|
11
11
|
private model: string;
|
|
12
12
|
private baseUrl = 'https://generativelanguage.googleapis.com/v1beta';
|
|
13
13
|
|
|
14
|
-
constructor(apiKey?: string, model = 'gemini-
|
|
14
|
+
constructor(apiKey?: string, model = 'gemini-3-flash') {
|
|
15
15
|
super();
|
|
16
16
|
this.apiKey = apiKey || process.env.GEMINI_API_KEY || '';
|
|
17
17
|
this.model = model;
|
package/src/providers/index.ts
CHANGED
|
@@ -22,33 +22,38 @@ export { MoonshotProvider } from './moonshot.js';
|
|
|
22
22
|
export { QwenProvider } from './qwen.js';
|
|
23
23
|
export { OllamaProvider } from './ollama.js';
|
|
24
24
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
25
|
+
type ProviderFactory = (model?: string) => Provider;
|
|
26
|
+
|
|
27
|
+
const providers: Record<string, ProviderFactory> = {
|
|
28
|
+
gemini: (model) => new GeminiProvider(undefined, model),
|
|
29
|
+
openai: (model) => new OpenAIProvider(undefined, model),
|
|
30
|
+
anthropic: (model) => new AnthropicProvider(undefined, model),
|
|
31
|
+
minimax: (model) => new MiniMaxProvider(undefined, model),
|
|
32
|
+
deepseek: (model) => new DeepSeekProvider(undefined, model),
|
|
33
|
+
moonshot: (model) => new MoonshotProvider(undefined, model),
|
|
34
|
+
kimi: (model) => new MoonshotProvider(undefined, model), // Alias
|
|
35
|
+
qwen: (model) => new QwenProvider(undefined, model),
|
|
36
|
+
tongyi: (model) => new QwenProvider(undefined, model), // Alias
|
|
37
|
+
dashscope: (model) => new QwenProvider(undefined, model), // Alias
|
|
38
|
+
ollama: (model) => new OllamaProvider(model),
|
|
39
|
+
local: (model) => new OllamaProvider(model), // Alias
|
|
38
40
|
};
|
|
39
41
|
|
|
40
|
-
export function getProvider(name?: string): Provider {
|
|
42
|
+
export function getProvider(name?: string, model?: string): Provider {
|
|
43
|
+
// Check for model override from environment
|
|
44
|
+
const modelOverride = model || process.env.COG_MODEL;
|
|
45
|
+
|
|
41
46
|
// Auto-detect if not specified
|
|
42
47
|
if (!name) {
|
|
43
|
-
if (process.env.GEMINI_API_KEY) return new GeminiProvider();
|
|
44
|
-
if (process.env.OPENAI_API_KEY) return new OpenAIProvider();
|
|
45
|
-
if (process.env.ANTHROPIC_API_KEY) return new AnthropicProvider();
|
|
46
|
-
if (process.env.DEEPSEEK_API_KEY) return new DeepSeekProvider();
|
|
47
|
-
if (process.env.MINIMAX_API_KEY) return new MiniMaxProvider();
|
|
48
|
-
if (process.env.MOONSHOT_API_KEY) return new MoonshotProvider();
|
|
49
|
-
if (process.env.DASHSCOPE_API_KEY || process.env.QWEN_API_KEY) return new QwenProvider();
|
|
48
|
+
if (process.env.GEMINI_API_KEY) return new GeminiProvider(undefined, modelOverride);
|
|
49
|
+
if (process.env.OPENAI_API_KEY) return new OpenAIProvider(undefined, modelOverride);
|
|
50
|
+
if (process.env.ANTHROPIC_API_KEY) return new AnthropicProvider(undefined, modelOverride);
|
|
51
|
+
if (process.env.DEEPSEEK_API_KEY) return new DeepSeekProvider(undefined, modelOverride);
|
|
52
|
+
if (process.env.MINIMAX_API_KEY) return new MiniMaxProvider(undefined, modelOverride);
|
|
53
|
+
if (process.env.MOONSHOT_API_KEY) return new MoonshotProvider(undefined, modelOverride);
|
|
54
|
+
if (process.env.DASHSCOPE_API_KEY || process.env.QWEN_API_KEY) return new QwenProvider(undefined, modelOverride);
|
|
50
55
|
// Ollama is always available as fallback if nothing else is configured
|
|
51
|
-
return new OllamaProvider();
|
|
56
|
+
return new OllamaProvider(modelOverride);
|
|
52
57
|
}
|
|
53
58
|
|
|
54
59
|
const factory = providers[name.toLowerCase()];
|
|
@@ -56,18 +61,18 @@ export function getProvider(name?: string): Provider {
|
|
|
56
61
|
throw new Error(`Unknown provider: ${name}. Available: ${Object.keys(providers).join(', ')}`);
|
|
57
62
|
}
|
|
58
63
|
|
|
59
|
-
return factory();
|
|
64
|
+
return factory(modelOverride);
|
|
60
65
|
}
|
|
61
66
|
|
|
62
67
|
export function listProviders(): Array<{ name: string; configured: boolean; model: string }> {
|
|
63
68
|
return [
|
|
64
|
-
{ name: 'gemini', configured: !!process.env.GEMINI_API_KEY, model: 'gemini-
|
|
65
|
-
{ name: 'openai', configured: !!process.env.OPENAI_API_KEY, model: 'gpt-
|
|
66
|
-
{ name: 'anthropic', configured: !!process.env.ANTHROPIC_API_KEY, model: 'claude-sonnet-4
|
|
67
|
-
{ name: 'deepseek', configured: !!process.env.DEEPSEEK_API_KEY, model: 'deepseek-
|
|
68
|
-
{ name: 'minimax', configured: !!process.env.MINIMAX_API_KEY, model: 'MiniMax-
|
|
69
|
-
{ name: 'moonshot', configured: !!process.env.MOONSHOT_API_KEY, model: '
|
|
70
|
-
{ name: 'qwen', configured: !!(process.env.DASHSCOPE_API_KEY || process.env.QWEN_API_KEY), model: '
|
|
71
|
-
{ name: 'ollama', configured: true, model: '
|
|
69
|
+
{ name: 'gemini', configured: !!process.env.GEMINI_API_KEY, model: 'gemini-3-flash' },
|
|
70
|
+
{ name: 'openai', configured: !!process.env.OPENAI_API_KEY, model: 'gpt-5.2' },
|
|
71
|
+
{ name: 'anthropic', configured: !!process.env.ANTHROPIC_API_KEY, model: 'claude-sonnet-4.5' },
|
|
72
|
+
{ name: 'deepseek', configured: !!process.env.DEEPSEEK_API_KEY, model: 'deepseek-v3.2' },
|
|
73
|
+
{ name: 'minimax', configured: !!process.env.MINIMAX_API_KEY, model: 'MiniMax-M2.1' },
|
|
74
|
+
{ name: 'moonshot', configured: !!process.env.MOONSHOT_API_KEY, model: 'kimi-k2.5' },
|
|
75
|
+
{ name: 'qwen', configured: !!(process.env.DASHSCOPE_API_KEY || process.env.QWEN_API_KEY), model: 'qwen3-max' },
|
|
76
|
+
{ name: 'ollama', configured: true, model: 'llama4 (local)' },
|
|
72
77
|
];
|
|
73
78
|
}
|
package/src/providers/minimax.ts
CHANGED
|
@@ -11,7 +11,7 @@ export class MiniMaxProvider extends BaseProvider {
|
|
|
11
11
|
private model: string;
|
|
12
12
|
private baseUrl = 'https://api.minimax.chat/v1';
|
|
13
13
|
|
|
14
|
-
constructor(apiKey?: string, model = 'MiniMax-
|
|
14
|
+
constructor(apiKey?: string, model = 'MiniMax-M2.1') {
|
|
15
15
|
super();
|
|
16
16
|
this.apiKey = apiKey || process.env.MINIMAX_API_KEY || '';
|
|
17
17
|
this.model = model;
|
|
@@ -11,7 +11,7 @@ export class MoonshotProvider extends BaseProvider {
|
|
|
11
11
|
private model: string;
|
|
12
12
|
private baseUrl = 'https://api.moonshot.cn/v1';
|
|
13
13
|
|
|
14
|
-
constructor(apiKey?: string, model = '
|
|
14
|
+
constructor(apiKey?: string, model = 'kimi-k2.5') {
|
|
15
15
|
super();
|
|
16
16
|
this.apiKey = apiKey || process.env.MOONSHOT_API_KEY || '';
|
|
17
17
|
this.model = model;
|
package/src/providers/ollama.ts
CHANGED
|
@@ -10,7 +10,7 @@ export class OllamaProvider extends BaseProvider {
|
|
|
10
10
|
private model: string;
|
|
11
11
|
private baseUrl: string;
|
|
12
12
|
|
|
13
|
-
constructor(model = '
|
|
13
|
+
constructor(model = 'llama4', baseUrl = 'http://localhost:11434') {
|
|
14
14
|
super();
|
|
15
15
|
this.model = process.env.OLLAMA_MODEL || model;
|
|
16
16
|
this.baseUrl = process.env.OLLAMA_HOST || baseUrl;
|
package/src/providers/openai.ts
CHANGED
|
@@ -11,7 +11,7 @@ export class OpenAIProvider extends BaseProvider {
|
|
|
11
11
|
private model: string;
|
|
12
12
|
private baseUrl: string;
|
|
13
13
|
|
|
14
|
-
constructor(apiKey?: string, model = 'gpt-
|
|
14
|
+
constructor(apiKey?: string, model = 'gpt-5.2', baseUrl = 'https://api.openai.com/v1') {
|
|
15
15
|
super();
|
|
16
16
|
this.apiKey = apiKey || process.env.OPENAI_API_KEY || '';
|
|
17
17
|
this.model = model;
|
package/src/providers/qwen.ts
CHANGED
|
@@ -11,7 +11,7 @@ export class QwenProvider extends BaseProvider {
|
|
|
11
11
|
private model: string;
|
|
12
12
|
private baseUrl = 'https://dashscope.aliyuncs.com/compatible-mode/v1';
|
|
13
13
|
|
|
14
|
-
constructor(apiKey?: string, model = '
|
|
14
|
+
constructor(apiKey?: string, model = 'qwen3-max') {
|
|
15
15
|
super();
|
|
16
16
|
this.apiKey = apiKey || process.env.DASHSCOPE_API_KEY || process.env.QWEN_API_KEY || '';
|
|
17
17
|
this.model = model;
|