@anthropic-field/core 0.1.0 → 0.2.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.
@@ -20,3 +20,4 @@ export { executeModule, runModule, parseLLMResponse, setDefaultLLMCaller, getDef
20
20
  export { CognitiveTool, createCognitiveTool, createCognitiveTools, CognitiveModuleRegistry, getGlobalRegistry, initGlobalRegistry, resetGlobalRegistry, getDefaultConfig, type CognitiveToolParams, type CognitiveToolResult, type CognitiveConfig, } from './tool/index.js';
21
21
  export { discoverAndRegisterCognitiveTools, registerCognitiveModule, getCognitiveTools, isCognitiveTool, getCognitiveConfigFromSettings, createLLMCallerFromGeminiClient, type GeminiClientAdapter, } from './integration.js';
22
22
  export { createLLMCallerFromContentGenerator, createSimpleLLMCaller, } from './gemini-adapter.js';
23
+ export { OpenAICompatibleClient, createLLMCallerFromOpenAI, createLLMCallerFromPreset, createLLMCallerFromEnv, PROVIDER_PRESETS, createLLMCaller, createDefaultLLMCaller, detectProviderFromEnv, DEFAULT_PROVIDER, DEFAULT_MODELS, API_KEY_ENV_VARS, type ProviderType, type ProviderSettings, } from '../providers/index.js';
@@ -47,4 +47,12 @@ export { discoverAndRegisterCognitiveTools, registerCognitiveModule, getCognitiv
47
47
  // Gemini Adapter
48
48
  // =============================================================================
49
49
  export { createLLMCallerFromContentGenerator, createSimpleLLMCaller, } from './gemini-adapter.js';
50
+ // =============================================================================
51
+ // OpenAI-Compatible Providers (MiniMax, DeepSeek, Qwen, etc.)
52
+ // =============================================================================
53
+ export {
54
+ // OpenAI-compatible client
55
+ OpenAICompatibleClient, createLLMCallerFromOpenAI, createLLMCallerFromPreset, createLLMCallerFromEnv, PROVIDER_PRESETS,
56
+ // Provider configuration (MiniMax default)
57
+ createLLMCaller, createDefaultLLMCaller, detectProviderFromEnv, DEFAULT_PROVIDER, DEFAULT_MODELS, API_KEY_ENV_VARS, } from '../providers/index.js';
50
58
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cognitive/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AA2CH,gFAAgF;AAChF,SAAS;AACT,gFAAgF;AAEhF,OAAO,EACL,UAAU,EACV,UAAU,EACV,eAAe,EACf,YAAY,EACZ,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,iBAAiB,EACjB,cAAc,GAEf,MAAM,mBAAmB,CAAC;AAE3B,gFAAgF;AAChF,YAAY;AACZ,gFAAgF;AAEhF,OAAO,EACL,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,EACZ,kBAAkB,EAClB,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,yBAAyB,EACzB,kBAAkB,GAGnB,MAAM,sBAAsB,CAAC;AAE9B,gFAAgF;AAChF,UAAU;AACV,gFAAgF;AAEhF,OAAO;AACL,WAAW;AACX,aAAa,EACb,SAAS,EACT,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,WAAW,EACX,cAAc,EACd,oBAAoB;AAIpB,mBAAmB;AACnB,YAAY,EACZ,uBAAuB,EACvB,qBAAqB,EACrB,qBAAqB,EACrB,gBAAgB,EAChB,uBAAuB,EACvB,yBAAyB,EACzB,2BAA2B,EAC3B,mBAAmB;AAEnB,OAAO;AACP,aAAa,EACb,qBAAqB,EACrB,WAAW,EACX,OAAO,EACP,cAAc;AAEd,SAAS;AACT,cAAc,EACd,mBAAmB,EACnB,SAAS,EACT,gBAAgB;AAGhB,SAAS;AACT,WAAW,EACX,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,GAElB,MAAM,oBAAoB,CAAC;AAE5B,gFAAgF;AAChF,mBAAmB;AACnB,gFAAgF;AAEhF,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,oBAAoB,EACpB,uBAAuB,EACvB,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,GAIjB,MAAM,iBAAiB,CAAC;AAEzB,gFAAgF;AAChF,cAAc;AACd,gFAAgF;AAEhF,OAAO,EACL,iCAAiC,EACjC,uBAAuB,EACvB,iBAAiB,EACjB,eAAe,EACf,8BAA8B,EAC9B,+BAA+B,GAEhC,MAAM,kBAAkB,CAAC;AAE1B,gFAAgF;AAChF,iBAAiB;AACjB,gFAAgF;AAEhF,OAAO,EACL,mCAAmC,EACnC,qBAAqB,GACtB,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cognitive/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AA2CH,gFAAgF;AAChF,SAAS;AACT,gFAAgF;AAEhF,OAAO,EACL,UAAU,EACV,UAAU,EACV,eAAe,EACf,YAAY,EACZ,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,iBAAiB,EACjB,cAAc,GAEf,MAAM,mBAAmB,CAAC;AAE3B,gFAAgF;AAChF,YAAY;AACZ,gFAAgF;AAEhF,OAAO,EACL,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,EACZ,kBAAkB,EAClB,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,yBAAyB,EACzB,kBAAkB,GAGnB,MAAM,sBAAsB,CAAC;AAE9B,gFAAgF;AAChF,UAAU;AACV,gFAAgF;AAEhF,OAAO;AACL,WAAW;AACX,aAAa,EACb,SAAS,EACT,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,WAAW,EACX,cAAc,EACd,oBAAoB;AAIpB,mBAAmB;AACnB,YAAY,EACZ,uBAAuB,EACvB,qBAAqB,EACrB,qBAAqB,EACrB,gBAAgB,EAChB,uBAAuB,EACvB,yBAAyB,EACzB,2BAA2B,EAC3B,mBAAmB;AAEnB,OAAO;AACP,aAAa,EACb,qBAAqB,EACrB,WAAW,EACX,OAAO,EACP,cAAc;AAEd,SAAS;AACT,cAAc,EACd,mBAAmB,EACnB,SAAS,EACT,gBAAgB;AAGhB,SAAS;AACT,WAAW,EACX,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,GAElB,MAAM,oBAAoB,CAAC;AAE5B,gFAAgF;AAChF,mBAAmB;AACnB,gFAAgF;AAEhF,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,oBAAoB,EACpB,uBAAuB,EACvB,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,GAIjB,MAAM,iBAAiB,CAAC;AAEzB,gFAAgF;AAChF,cAAc;AACd,gFAAgF;AAEhF,OAAO,EACL,iCAAiC,EACjC,uBAAuB,EACvB,iBAAiB,EACjB,eAAe,EACf,8BAA8B,EAC9B,+BAA+B,GAEhC,MAAM,kBAAkB,CAAC;AAE1B,gFAAgF;AAChF,iBAAiB;AACjB,gFAAgF;AAEhF,OAAO,EACL,mCAAmC,EACnC,qBAAqB,GACtB,MAAM,qBAAqB,CAAC;AAE7B,gFAAgF;AAChF,8DAA8D;AAC9D,gFAAgF;AAEhF,OAAO;AACL,2BAA2B;AAC3B,sBAAsB,EACtB,yBAAyB,EACzB,yBAAyB,EACzB,sBAAsB,EACtB,gBAAgB;AAChB,2CAA2C;AAC3C,eAAe,EACf,sBAAsB,EACtB,qBAAqB,EACrB,gBAAgB,EAChB,cAAc,EACd,gBAAgB,GAGjB,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ *
6
+ * LLM Providers
7
+ */
8
+ export { OpenAICompatibleClient, createLLMCallerFromOpenAI, createLLMCallerFromPreset, createLLMCallerFromEnv, PROVIDER_PRESETS, type OpenAICompatibleConfig, type ChatMessage, type ChatCompletionRequest, type ChatCompletionResponse, } from './openai-compatible.js';
9
+ export { createLLMCaller, createDefaultLLMCaller, detectProviderFromEnv, getApiKey, DEFAULT_PROVIDER, DEFAULT_MODELS, API_KEY_ENV_VARS, type ProviderType, type ProviderSettings, } from './provider-config.js';
@@ -0,0 +1,10 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ *
6
+ * LLM Providers
7
+ */
8
+ export { OpenAICompatibleClient, createLLMCallerFromOpenAI, createLLMCallerFromPreset, createLLMCallerFromEnv, PROVIDER_PRESETS, } from './openai-compatible.js';
9
+ export { createLLMCaller, createDefaultLLMCaller, detectProviderFromEnv, getApiKey, DEFAULT_PROVIDER, DEFAULT_MODELS, API_KEY_ENV_VARS, } from './provider-config.js';
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/providers/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,sBAAsB,EACtB,yBAAyB,EACzB,yBAAyB,EACzB,sBAAsB,EACtB,gBAAgB,GAKjB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,qBAAqB,EACrB,SAAS,EACT,gBAAgB,EAChB,cAAc,EACd,gBAAgB,GAGjB,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,118 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ *
6
+ * OpenAI-Compatible API Adapter
7
+ *
8
+ * Supports any provider with OpenAI-compatible API:
9
+ * - MiniMax
10
+ * - DeepSeek
11
+ * - Qwen
12
+ * - Moonshot
13
+ * - Together AI
14
+ * - OpenRouter
15
+ * - And more...
16
+ */
17
+ import type { LLMCaller } from '../cognitive/runtime/executor.js';
18
+ export interface OpenAICompatibleConfig {
19
+ /** API base URL (e.g., https://api.minimax.chat/v1) */
20
+ baseUrl: string;
21
+ /** API key */
22
+ apiKey: string;
23
+ /** Default model name */
24
+ defaultModel: string;
25
+ /** Provider name for logging */
26
+ providerName: string;
27
+ /** Optional organization ID */
28
+ organizationId?: string;
29
+ /** Optional custom headers */
30
+ headers?: Record<string, string>;
31
+ }
32
+ export interface ChatMessage {
33
+ role: 'system' | 'user' | 'assistant';
34
+ content: string;
35
+ }
36
+ export interface ChatCompletionRequest {
37
+ model: string;
38
+ messages: ChatMessage[];
39
+ temperature?: number;
40
+ max_tokens?: number;
41
+ top_p?: number;
42
+ stream?: boolean;
43
+ response_format?: {
44
+ type: 'json_object' | 'text';
45
+ };
46
+ }
47
+ export interface ChatCompletionResponse {
48
+ id: string;
49
+ object: string;
50
+ created: number;
51
+ model: string;
52
+ choices: Array<{
53
+ index: number;
54
+ message: {
55
+ role: string;
56
+ content: string;
57
+ };
58
+ finish_reason: string;
59
+ }>;
60
+ usage?: {
61
+ prompt_tokens: number;
62
+ completion_tokens: number;
63
+ total_tokens: number;
64
+ };
65
+ }
66
+ export declare const PROVIDER_PRESETS: Record<string, Omit<OpenAICompatibleConfig, 'apiKey'>>;
67
+ export declare class OpenAICompatibleClient {
68
+ private config;
69
+ constructor(config: OpenAICompatibleConfig);
70
+ /**
71
+ * Create a client from a preset provider name.
72
+ */
73
+ static fromPreset(presetName: keyof typeof PROVIDER_PRESETS, apiKey: string): OpenAICompatibleClient;
74
+ /**
75
+ * Send a chat completion request.
76
+ */
77
+ chatCompletion(request: ChatCompletionRequest): Promise<ChatCompletionResponse>;
78
+ /**
79
+ * Simple text generation.
80
+ */
81
+ generate(options: {
82
+ prompt: string;
83
+ systemPrompt?: string;
84
+ model?: string;
85
+ jsonMode?: boolean;
86
+ }): Promise<string>;
87
+ /**
88
+ * Get provider name.
89
+ */
90
+ getProviderName(): string;
91
+ /**
92
+ * Get default model.
93
+ */
94
+ getDefaultModel(): string;
95
+ }
96
+ /**
97
+ * Create an LLMCaller from an OpenAI-compatible client.
98
+ */
99
+ export declare function createLLMCallerFromOpenAI(client: OpenAICompatibleClient): LLMCaller;
100
+ /**
101
+ * Create an LLMCaller from a provider preset.
102
+ */
103
+ export declare function createLLMCallerFromPreset(presetName: keyof typeof PROVIDER_PRESETS, apiKey: string): LLMCaller;
104
+ /**
105
+ * Create an LLMCaller from environment variables.
106
+ *
107
+ * Checks in order:
108
+ * 1. MINIMAX_API_KEY → MiniMax
109
+ * 2. DEEPSEEK_API_KEY → DeepSeek
110
+ * 3. QWEN_API_KEY → Qwen
111
+ * 4. MOONSHOT_API_KEY → Moonshot
112
+ * 5. TOGETHER_API_KEY → Together AI
113
+ * 6. OPENROUTER_API_KEY → OpenRouter
114
+ * 7. OPENAI_API_KEY → OpenAI
115
+ * 8. GEMINI_API_KEY → Falls back to Gemini
116
+ */
117
+ export declare function createLLMCallerFromEnv(): LLMCaller | null;
118
+ export type { LLMCaller };
@@ -0,0 +1,195 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ *
6
+ * OpenAI-Compatible API Adapter
7
+ *
8
+ * Supports any provider with OpenAI-compatible API:
9
+ * - MiniMax
10
+ * - DeepSeek
11
+ * - Qwen
12
+ * - Moonshot
13
+ * - Together AI
14
+ * - OpenRouter
15
+ * - And more...
16
+ */
17
+ // =============================================================================
18
+ // Provider Presets
19
+ // =============================================================================
20
+ export const PROVIDER_PRESETS = {
21
+ minimax: {
22
+ baseUrl: 'https://api.minimax.chat/v1',
23
+ defaultModel: 'MiniMax-Text-01',
24
+ providerName: 'MiniMax',
25
+ },
26
+ 'minimax-m2': {
27
+ baseUrl: 'https://api.minimax.chat/v1',
28
+ defaultModel: 'abab7-chat-preview',
29
+ providerName: 'MiniMax M2',
30
+ },
31
+ deepseek: {
32
+ baseUrl: 'https://api.deepseek.com/v1',
33
+ defaultModel: 'deepseek-chat',
34
+ providerName: 'DeepSeek',
35
+ },
36
+ qwen: {
37
+ baseUrl: 'https://dashscope.aliyuncs.com/compatible-mode/v1',
38
+ defaultModel: 'qwen-max',
39
+ providerName: 'Qwen',
40
+ },
41
+ moonshot: {
42
+ baseUrl: 'https://api.moonshot.cn/v1',
43
+ defaultModel: 'moonshot-v1-8k',
44
+ providerName: 'Moonshot',
45
+ },
46
+ together: {
47
+ baseUrl: 'https://api.together.xyz/v1',
48
+ defaultModel: 'meta-llama/Llama-3.3-70B-Instruct-Turbo',
49
+ providerName: 'Together AI',
50
+ },
51
+ openrouter: {
52
+ baseUrl: 'https://openrouter.ai/api/v1',
53
+ defaultModel: 'anthropic/claude-3.5-sonnet',
54
+ providerName: 'OpenRouter',
55
+ },
56
+ openai: {
57
+ baseUrl: 'https://api.openai.com/v1',
58
+ defaultModel: 'gpt-4o',
59
+ providerName: 'OpenAI',
60
+ },
61
+ };
62
+ // =============================================================================
63
+ // OpenAI Compatible Client
64
+ // =============================================================================
65
+ export class OpenAICompatibleClient {
66
+ config;
67
+ constructor(config) {
68
+ this.config = config;
69
+ }
70
+ /**
71
+ * Create a client from a preset provider name.
72
+ */
73
+ static fromPreset(presetName, apiKey) {
74
+ const preset = PROVIDER_PRESETS[presetName];
75
+ if (!preset) {
76
+ throw new Error(`Unknown provider preset: ${presetName}`);
77
+ }
78
+ return new OpenAICompatibleClient({ ...preset, apiKey });
79
+ }
80
+ /**
81
+ * Send a chat completion request.
82
+ */
83
+ async chatCompletion(request) {
84
+ const url = `${this.config.baseUrl}/chat/completions`;
85
+ const headers = {
86
+ 'Content-Type': 'application/json',
87
+ Authorization: `Bearer ${this.config.apiKey}`,
88
+ ...this.config.headers,
89
+ };
90
+ if (this.config.organizationId) {
91
+ headers['OpenAI-Organization'] = this.config.organizationId;
92
+ }
93
+ const response = await fetch(url, {
94
+ method: 'POST',
95
+ headers,
96
+ body: JSON.stringify(request),
97
+ });
98
+ if (!response.ok) {
99
+ const errorText = await response.text();
100
+ throw new Error(`${this.config.providerName} API error (${response.status}): ${errorText}`);
101
+ }
102
+ return (await response.json());
103
+ }
104
+ /**
105
+ * Simple text generation.
106
+ */
107
+ async generate(options) {
108
+ const messages = [];
109
+ if (options.systemPrompt) {
110
+ messages.push({ role: 'system', content: options.systemPrompt });
111
+ }
112
+ messages.push({ role: 'user', content: options.prompt });
113
+ const request = {
114
+ model: options.model || this.config.defaultModel,
115
+ messages,
116
+ ...(options.jsonMode && { response_format: { type: 'json_object' } }),
117
+ };
118
+ const response = await this.chatCompletion(request);
119
+ const content = response.choices[0]?.message?.content;
120
+ if (!content) {
121
+ throw new Error('No content in response');
122
+ }
123
+ return content;
124
+ }
125
+ /**
126
+ * Get provider name.
127
+ */
128
+ getProviderName() {
129
+ return this.config.providerName;
130
+ }
131
+ /**
132
+ * Get default model.
133
+ */
134
+ getDefaultModel() {
135
+ return this.config.defaultModel;
136
+ }
137
+ }
138
+ // =============================================================================
139
+ // LLM Caller Factory
140
+ // =============================================================================
141
+ /**
142
+ * Create an LLMCaller from an OpenAI-compatible client.
143
+ */
144
+ export function createLLMCallerFromOpenAI(client) {
145
+ return {
146
+ async call({ systemPrompt, userPrompt, model }) {
147
+ return client.generate({
148
+ prompt: userPrompt,
149
+ systemPrompt,
150
+ model: model || client.getDefaultModel(),
151
+ jsonMode: true,
152
+ });
153
+ },
154
+ };
155
+ }
156
+ /**
157
+ * Create an LLMCaller from a provider preset.
158
+ */
159
+ export function createLLMCallerFromPreset(presetName, apiKey) {
160
+ const client = OpenAICompatibleClient.fromPreset(presetName, apiKey);
161
+ return createLLMCallerFromOpenAI(client);
162
+ }
163
+ /**
164
+ * Create an LLMCaller from environment variables.
165
+ *
166
+ * Checks in order:
167
+ * 1. MINIMAX_API_KEY → MiniMax
168
+ * 2. DEEPSEEK_API_KEY → DeepSeek
169
+ * 3. QWEN_API_KEY → Qwen
170
+ * 4. MOONSHOT_API_KEY → Moonshot
171
+ * 5. TOGETHER_API_KEY → Together AI
172
+ * 6. OPENROUTER_API_KEY → OpenRouter
173
+ * 7. OPENAI_API_KEY → OpenAI
174
+ * 8. GEMINI_API_KEY → Falls back to Gemini
175
+ */
176
+ export function createLLMCallerFromEnv() {
177
+ const providers = [
178
+ { envKey: 'MINIMAX_API_KEY', preset: 'minimax' },
179
+ { envKey: 'DEEPSEEK_API_KEY', preset: 'deepseek' },
180
+ { envKey: 'QWEN_API_KEY', preset: 'qwen' },
181
+ { envKey: 'MOONSHOT_API_KEY', preset: 'moonshot' },
182
+ { envKey: 'TOGETHER_API_KEY', preset: 'together' },
183
+ { envKey: 'OPENROUTER_API_KEY', preset: 'openrouter' },
184
+ { envKey: 'OPENAI_API_KEY', preset: 'openai' },
185
+ ];
186
+ for (const { envKey, preset } of providers) {
187
+ const apiKey = process.env[envKey];
188
+ if (apiKey) {
189
+ return createLLMCallerFromPreset(preset, apiKey);
190
+ }
191
+ }
192
+ // No OpenAI-compatible provider found
193
+ return null;
194
+ }
195
+ //# sourceMappingURL=openai-compatible.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-compatible.js","sourceRoot":"","sources":["../../../src/providers/openai-compatible.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ *
6
+ * Provider Configuration
7
+ *
8
+ * Manages LLM provider selection and configuration.
9
+ * Default provider: MiniMax M2.1
10
+ */
11
+ import type { LLMCaller } from '../cognitive/runtime/executor.js';
12
+ export type ProviderType = 'minimax' | 'deepseek' | 'qwen' | 'moonshot' | 'together' | 'openrouter' | 'openai' | 'gemini' | 'custom';
13
+ export interface ProviderSettings {
14
+ /** Provider type */
15
+ provider: ProviderType;
16
+ /** Model name (optional, uses provider default if not set) */
17
+ model?: string;
18
+ /** API key (optional, reads from env if not set) */
19
+ apiKey?: string;
20
+ /** Custom base URL (for custom providers) */
21
+ baseUrl?: string;
22
+ }
23
+ /**
24
+ * Default provider is MiniMax.
25
+ * Users can override via:
26
+ * - FIELD_PROVIDER env var
27
+ * - settings.json
28
+ * - CLI flags
29
+ */
30
+ export declare const DEFAULT_PROVIDER: ProviderType;
31
+ /**
32
+ * Default model for each provider.
33
+ */
34
+ export declare const DEFAULT_MODELS: Record<ProviderType, string>;
35
+ /**
36
+ * Environment variable names for API keys.
37
+ */
38
+ export declare const API_KEY_ENV_VARS: Record<ProviderType, string>;
39
+ /**
40
+ * Detect provider from environment variables.
41
+ * Returns the first provider with a configured API key.
42
+ */
43
+ export declare function detectProviderFromEnv(): ProviderType | null;
44
+ /**
45
+ * Get API key for a provider.
46
+ */
47
+ export declare function getApiKey(provider: ProviderType): string | undefined;
48
+ /**
49
+ * Create an LLMCaller based on settings.
50
+ * Falls back to environment detection if settings are incomplete.
51
+ */
52
+ export declare function createLLMCaller(settings?: Partial<ProviderSettings>): LLMCaller;
53
+ /**
54
+ * Create an LLMCaller with MiniMax as default.
55
+ * This is the recommended entry point for Field CLI.
56
+ */
57
+ export declare function createDefaultLLMCaller(): LLMCaller;
@@ -0,0 +1,146 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ *
6
+ * Provider Configuration
7
+ *
8
+ * Manages LLM provider selection and configuration.
9
+ * Default provider: MiniMax M2.1
10
+ */
11
+ import { OpenAICompatibleClient, createLLMCallerFromOpenAI, PROVIDER_PRESETS, } from './openai-compatible.js';
12
+ // =============================================================================
13
+ // Default Configuration
14
+ // =============================================================================
15
+ /**
16
+ * Default provider is MiniMax.
17
+ * Users can override via:
18
+ * - FIELD_PROVIDER env var
19
+ * - settings.json
20
+ * - CLI flags
21
+ */
22
+ export const DEFAULT_PROVIDER = 'minimax';
23
+ /**
24
+ * Default model for each provider.
25
+ */
26
+ export const DEFAULT_MODELS = {
27
+ minimax: 'MiniMax-Text-01',
28
+ deepseek: 'deepseek-chat',
29
+ qwen: 'qwen-max',
30
+ moonshot: 'moonshot-v1-8k',
31
+ together: 'meta-llama/Llama-3.3-70B-Instruct-Turbo',
32
+ openrouter: 'anthropic/claude-3.5-sonnet',
33
+ openai: 'gpt-4o',
34
+ gemini: 'gemini-2.5-pro',
35
+ custom: 'custom-model',
36
+ };
37
+ /**
38
+ * Environment variable names for API keys.
39
+ */
40
+ export const API_KEY_ENV_VARS = {
41
+ minimax: 'MINIMAX_API_KEY',
42
+ deepseek: 'DEEPSEEK_API_KEY',
43
+ qwen: 'QWEN_API_KEY',
44
+ moonshot: 'MOONSHOT_API_KEY',
45
+ together: 'TOGETHER_API_KEY',
46
+ openrouter: 'OPENROUTER_API_KEY',
47
+ openai: 'OPENAI_API_KEY',
48
+ gemini: 'GEMINI_API_KEY',
49
+ custom: 'CUSTOM_API_KEY',
50
+ };
51
+ // =============================================================================
52
+ // Provider Detection
53
+ // =============================================================================
54
+ /**
55
+ * Detect provider from environment variables.
56
+ * Returns the first provider with a configured API key.
57
+ */
58
+ export function detectProviderFromEnv() {
59
+ // Check FIELD_PROVIDER first
60
+ const envProvider = process.env['FIELD_PROVIDER']?.toLowerCase();
61
+ if (envProvider && envProvider in API_KEY_ENV_VARS) {
62
+ return envProvider;
63
+ }
64
+ // Check API keys in priority order (MiniMax first)
65
+ const priorityOrder = [
66
+ 'minimax',
67
+ 'deepseek',
68
+ 'qwen',
69
+ 'moonshot',
70
+ 'together',
71
+ 'openrouter',
72
+ 'openai',
73
+ 'gemini',
74
+ ];
75
+ for (const provider of priorityOrder) {
76
+ const envVar = API_KEY_ENV_VARS[provider];
77
+ if (process.env[envVar]) {
78
+ return provider;
79
+ }
80
+ }
81
+ return null;
82
+ }
83
+ /**
84
+ * Get API key for a provider.
85
+ */
86
+ export function getApiKey(provider) {
87
+ const envVar = API_KEY_ENV_VARS[provider];
88
+ return process.env[envVar];
89
+ }
90
+ // =============================================================================
91
+ // LLM Caller Factory
92
+ // =============================================================================
93
+ /**
94
+ * Create an LLMCaller based on settings.
95
+ * Falls back to environment detection if settings are incomplete.
96
+ */
97
+ export function createLLMCaller(settings) {
98
+ // Determine provider
99
+ const provider = settings?.provider || detectProviderFromEnv() || DEFAULT_PROVIDER;
100
+ // Get API key
101
+ const apiKey = settings?.apiKey || getApiKey(provider);
102
+ if (!apiKey) {
103
+ throw new Error(`No API key found for provider '${provider}'. ` +
104
+ `Set ${API_KEY_ENV_VARS[provider]} environment variable.`);
105
+ }
106
+ // Handle Gemini separately (uses different SDK)
107
+ if (provider === 'gemini') {
108
+ // Return a placeholder - actual Gemini caller is created elsewhere
109
+ throw new Error('Gemini provider should use createSimpleLLMCaller from gemini-adapter.js');
110
+ }
111
+ // Get model
112
+ const model = settings?.model || DEFAULT_MODELS[provider];
113
+ // Get preset or create custom config
114
+ let client;
115
+ if (provider === 'custom' && settings?.baseUrl) {
116
+ client = new OpenAICompatibleClient({
117
+ baseUrl: settings.baseUrl,
118
+ apiKey,
119
+ defaultModel: model,
120
+ providerName: 'Custom',
121
+ });
122
+ }
123
+ else {
124
+ const preset = PROVIDER_PRESETS[provider];
125
+ if (!preset) {
126
+ throw new Error(`Unknown provider: ${provider}`);
127
+ }
128
+ client = new OpenAICompatibleClient({
129
+ ...preset,
130
+ apiKey,
131
+ defaultModel: model,
132
+ });
133
+ }
134
+ return createLLMCallerFromOpenAI(client);
135
+ }
136
+ /**
137
+ * Create an LLMCaller with MiniMax as default.
138
+ * This is the recommended entry point for Field CLI.
139
+ */
140
+ export function createDefaultLLMCaller() {
141
+ return createLLMCaller();
142
+ }
143
+ // =============================================================================
144
+ // Exports (types and functions are already exported inline above)
145
+ // =============================================================================
146
+ //# sourceMappingURL=provider-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-config.js","sourceRoot":"","sources":["../../../src/providers/provider-config.ts"],"names":[],"mappings":"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"}