@howlil/ez-agents 2.0.0 → 3.0.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/LICENSE +21 -21
- package/README.md +157 -110
- package/README.zh-CN.md +84 -84
- package/agents/ez-plan-checker.md +2 -2
- package/agents/ez-research-synthesizer.md +1 -1
- package/agents/ez-ui-auditor.md +0 -2
- package/agents/ez-ui-checker.md +2 -4
- package/agents/ez-ui-researcher.md +0 -2
- package/agents/ez-verifier.md +1 -1
- package/bin/install.js +211 -211
- package/commands/ez/debug.md +1 -1
- package/commands/ez/map-codebase.md +1 -1
- package/commands/ez/reapply-patches.md +3 -3
- package/commands/ez/research-phase.md +1 -1
- package/{get-shit-done → ez-agents}/bin/ez-tools.cjs +1 -1
- package/{get-shit-done → ez-agents}/bin/lib/assistant-adapter.cjs +205 -205
- package/{get-shit-done → ez-agents}/bin/lib/audit-exec.cjs +150 -150
- package/{get-shit-done → ez-agents}/bin/lib/auth.cjs +175 -175
- package/{get-shit-done → ez-agents}/bin/lib/circuit-breaker.cjs +118 -118
- package/{get-shit-done → ez-agents}/bin/lib/commands.cjs +666 -666
- package/{get-shit-done → ez-agents}/bin/lib/config.cjs +183 -183
- package/{get-shit-done → ez-agents}/bin/lib/core.cjs +495 -495
- package/{get-shit-done → ez-agents}/bin/lib/file-lock.cjs +236 -236
- package/{get-shit-done → ez-agents}/bin/lib/frontmatter.cjs +299 -299
- package/{get-shit-done → ez-agents}/bin/lib/fs-utils.cjs +153 -153
- package/{get-shit-done → ez-agents}/bin/lib/git-utils.cjs +203 -203
- package/{get-shit-done → ez-agents}/bin/lib/health-check.cjs +163 -163
- package/{get-shit-done → ez-agents}/bin/lib/index.cjs +113 -113
- package/{get-shit-done → ez-agents}/bin/lib/init.cjs +710 -710
- package/{get-shit-done → ez-agents}/bin/lib/logger.cjs +117 -117
- package/{get-shit-done → ez-agents}/bin/lib/milestone.cjs +241 -241
- package/{get-shit-done → ez-agents}/bin/lib/model-provider.cjs +146 -146
- package/{get-shit-done → ez-agents}/bin/lib/phase.cjs +908 -908
- package/{get-shit-done → ez-agents}/bin/lib/retry.cjs +119 -119
- package/{get-shit-done → ez-agents}/bin/lib/roadmap.cjs +305 -305
- package/{get-shit-done → ez-agents}/bin/lib/safe-exec.cjs +128 -128
- package/{get-shit-done → ez-agents}/bin/lib/safe-path.cjs +130 -130
- package/{get-shit-done → ez-agents}/bin/lib/state.cjs +721 -721
- package/{get-shit-done → ez-agents}/bin/lib/temp-file.cjs +239 -239
- package/{get-shit-done → ez-agents}/bin/lib/template.cjs +222 -222
- package/{get-shit-done → ez-agents}/bin/lib/test-file-lock.cjs +112 -112
- package/{get-shit-done → ez-agents}/bin/lib/test-graceful.cjs +93 -93
- package/{get-shit-done → ez-agents}/bin/lib/test-logger.cjs +60 -60
- package/{get-shit-done → ez-agents}/bin/lib/test-safe-exec.cjs +38 -38
- package/{get-shit-done → ez-agents}/bin/lib/test-safe-path.cjs +33 -33
- package/{get-shit-done → ez-agents}/bin/lib/test-temp-file.cjs +125 -125
- package/{get-shit-done → ez-agents}/bin/lib/timeout-exec.cjs +62 -62
- package/{get-shit-done → ez-agents}/bin/lib/verify.cjs +820 -820
- package/{get-shit-done → ez-agents}/references/checkpoints.md +776 -776
- package/{get-shit-done → ez-agents}/references/questioning.md +162 -162
- package/{get-shit-done → ez-agents}/references/tdd.md +263 -263
- package/{get-shit-done → ez-agents}/templates/codebase/concerns.md +310 -310
- package/{get-shit-done → ez-agents}/templates/codebase/conventions.md +307 -307
- package/{get-shit-done → ez-agents}/templates/codebase/integrations.md +280 -280
- package/{get-shit-done → ez-agents}/templates/codebase/stack.md +186 -186
- package/{get-shit-done → ez-agents}/templates/codebase/testing.md +480 -480
- package/{get-shit-done → ez-agents}/templates/config.json +37 -37
- package/{get-shit-done → ez-agents}/templates/continue-here.md +78 -78
- package/{get-shit-done → ez-agents}/templates/milestone-archive.md +123 -123
- package/{get-shit-done → ez-agents}/templates/milestone.md +115 -115
- package/{get-shit-done → ez-agents}/templates/requirements.md +231 -231
- package/{get-shit-done → ez-agents}/templates/research-project/ARCHITECTURE.md +204 -204
- package/{get-shit-done → ez-agents}/templates/research-project/FEATURES.md +147 -147
- package/{get-shit-done → ez-agents}/templates/research-project/PITFALLS.md +200 -200
- package/{get-shit-done → ez-agents}/templates/research-project/STACK.md +120 -120
- package/{get-shit-done → ez-agents}/templates/research-project/SUMMARY.md +170 -170
- package/{get-shit-done → ez-agents}/templates/retrospective.md +54 -54
- package/{get-shit-done → ez-agents}/templates/roadmap.md +202 -202
- package/{get-shit-done → ez-agents}/templates/summary-minimal.md +41 -41
- package/{get-shit-done → ez-agents}/templates/summary-standard.md +48 -48
- package/{get-shit-done → ez-agents}/templates/summary.md +248 -248
- package/{get-shit-done → ez-agents}/templates/user-setup.md +311 -311
- package/{get-shit-done → ez-agents}/templates/verification-report.md +322 -322
- package/{get-shit-done → ez-agents}/workflows/add-phase.md +112 -112
- package/{get-shit-done → ez-agents}/workflows/add-tests.md +351 -351
- package/{get-shit-done → ez-agents}/workflows/add-todo.md +158 -158
- package/{get-shit-done → ez-agents}/workflows/audit-milestone.md +332 -332
- package/{get-shit-done → ez-agents}/workflows/autonomous.md +743 -743
- package/{get-shit-done → ez-agents}/workflows/check-todos.md +177 -177
- package/{get-shit-done → ez-agents}/workflows/cleanup.md +152 -152
- package/{get-shit-done → ez-agents}/workflows/complete-milestone.md +766 -766
- package/ez-agents/workflows/debug.md +0 -0
- package/{get-shit-done → ez-agents}/workflows/diagnose-issues.md +219 -219
- package/{get-shit-done → ez-agents}/workflows/discovery-phase.md +289 -289
- package/{get-shit-done → ez-agents}/workflows/discuss-phase.md +762 -762
- package/{get-shit-done → ez-agents}/workflows/execute-phase.md +468 -468
- package/{get-shit-done → ez-agents}/workflows/execute-plan.md +483 -483
- package/{get-shit-done → ez-agents}/workflows/health.md +159 -159
- package/{get-shit-done → ez-agents}/workflows/help.md +492 -492
- package/{get-shit-done → ez-agents}/workflows/insert-phase.md +130 -130
- package/{get-shit-done → ez-agents}/workflows/list-phase-assumptions.md +178 -178
- package/{get-shit-done → ez-agents}/workflows/map-codebase.md +316 -316
- package/{get-shit-done → ez-agents}/workflows/new-milestone.md +384 -384
- package/{get-shit-done → ez-agents}/workflows/new-project.md +1111 -1111
- package/{get-shit-done → ez-agents}/workflows/node-repair.md +92 -92
- package/{get-shit-done → ez-agents}/workflows/pause-work.md +122 -122
- package/{get-shit-done → ez-agents}/workflows/plan-milestone-gaps.md +274 -274
- package/{get-shit-done → ez-agents}/workflows/plan-phase.md +651 -651
- package/{get-shit-done → ez-agents}/workflows/progress.md +382 -382
- package/{get-shit-done → ez-agents}/workflows/quick.md +610 -610
- package/{get-shit-done → ez-agents}/workflows/remove-phase.md +155 -155
- package/{get-shit-done → ez-agents}/workflows/research-phase.md +74 -74
- package/{get-shit-done → ez-agents}/workflows/resume-project.md +307 -307
- package/{get-shit-done → ez-agents}/workflows/set-profile.md +81 -81
- package/{get-shit-done → ez-agents}/workflows/settings.md +242 -242
- package/{get-shit-done → ez-agents}/workflows/stats.md +57 -57
- package/{get-shit-done → ez-agents}/workflows/transition.md +544 -544
- package/{get-shit-done → ez-agents}/workflows/ui-phase.md +290 -290
- package/{get-shit-done → ez-agents}/workflows/ui-review.md +157 -157
- package/{get-shit-done → ez-agents}/workflows/update.md +320 -320
- package/{get-shit-done → ez-agents}/workflows/validate-phase.md +167 -167
- package/{get-shit-done → ez-agents}/workflows/verify-phase.md +243 -243
- package/{get-shit-done → ez-agents}/workflows/verify-work.md +5 -5
- package/hooks/dist/ez-check-update.js +81 -0
- package/hooks/dist/ez-context-monitor.js +141 -0
- package/hooks/dist/ez-statusline.js +115 -0
- package/package.json +13 -3
- package/scripts/build-hooks.js +43 -43
- package/scripts/run-tests.cjs +29 -29
- /package/{get-shit-done → ez-agents}/references/continuation-format.md +0 -0
- /package/{get-shit-done → ez-agents}/references/decimal-phase-calculation.md +0 -0
- /package/{get-shit-done → ez-agents}/references/git-integration.md +0 -0
- /package/{get-shit-done → ez-agents}/references/git-planning-commit.md +0 -0
- /package/{get-shit-done → ez-agents}/references/model-profile-resolution.md +0 -0
- /package/{get-shit-done → ez-agents}/references/model-profiles.md +0 -0
- /package/{get-shit-done → ez-agents}/references/phase-argument-parsing.md +0 -0
- /package/{get-shit-done → ez-agents}/references/planning-config.md +0 -0
- /package/{get-shit-done → ez-agents}/references/ui-brand.md +0 -0
- /package/{get-shit-done → ez-agents}/references/verification-patterns.md +0 -0
- /package/{get-shit-done → ez-agents}/templates/DEBUG.md +0 -0
- /package/{get-shit-done → ez-agents}/templates/UAT.md +0 -0
- /package/{get-shit-done → ez-agents}/templates/UI-SPEC.md +0 -0
- /package/{get-shit-done → ez-agents}/templates/VALIDATION.md +0 -0
- /package/{get-shit-done → ez-agents}/templates/codebase/architecture.md +0 -0
- /package/{get-shit-done → ez-agents}/templates/codebase/structure.md +0 -0
- /package/{get-shit-done → ez-agents}/templates/context.md +0 -0
- /package/{get-shit-done → ez-agents}/templates/copilot-instructions.md +0 -0
- /package/{get-shit-done → ez-agents}/templates/debug-subagent-prompt.md +0 -0
- /package/{get-shit-done → ez-agents}/templates/discovery.md +0 -0
- /package/{get-shit-done → ez-agents}/templates/phase-prompt.md +0 -0
- /package/{get-shit-done → ez-agents}/templates/planner-subagent-prompt.md +0 -0
- /package/{get-shit-done → ez-agents}/templates/project.md +0 -0
- /package/{get-shit-done → ez-agents}/templates/research.md +0 -0
- /package/{get-shit-done → ez-agents}/templates/state.md +0 -0
- /package/{get-shit-done → ez-agents}/templates/summary-complex.md +0 -0
|
@@ -1,146 +1,146 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* GSD Model Provider — Unified API for multiple AI providers
|
|
5
|
-
*
|
|
6
|
-
* Supports: Anthropic, Moonshot (Kimi), Alibaba (Qwen), OpenAI
|
|
7
|
-
*
|
|
8
|
-
* Usage:
|
|
9
|
-
* const ModelProvider = require('./model-provider.cjs');
|
|
10
|
-
* const model = new ModelProvider({ provider: 'anthropic', model: 'sonnet' });
|
|
11
|
-
* const response = await model.chat([{ role: 'user', content: 'Hello' }]);
|
|
12
|
-
*/
|
|
13
|
-
|
|
14
|
-
const Logger = require('./logger.cjs');
|
|
15
|
-
const logger = new Logger();
|
|
16
|
-
|
|
17
|
-
class ModelProvider {
|
|
18
|
-
/**
|
|
19
|
-
* Create model provider
|
|
20
|
-
* @param {Object} config - Configuration
|
|
21
|
-
*/
|
|
22
|
-
constructor(config) {
|
|
23
|
-
this.provider = config.provider || 'anthropic';
|
|
24
|
-
this.model = config.model || 'sonnet';
|
|
25
|
-
this.apiKey = config.apiKey || process.env[`${this.provider.toUpperCase()}_API_KEY`];
|
|
26
|
-
|
|
27
|
-
if (!this.apiKey) {
|
|
28
|
-
logger.warn('API key not configured', { provider: this.provider });
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* Send chat message
|
|
34
|
-
* @param {Object[]} messages - Chat messages
|
|
35
|
-
* @param {Object} options - Chat options
|
|
36
|
-
* @returns {Promise<Object>} - Response
|
|
37
|
-
*/
|
|
38
|
-
async chat(messages, options = {}) {
|
|
39
|
-
logger.info('Chat request', {
|
|
40
|
-
provider: this.provider,
|
|
41
|
-
model: this.model,
|
|
42
|
-
messageCount: messages.length
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
switch (this.provider) {
|
|
46
|
-
case 'anthropic':
|
|
47
|
-
return this._chatAnthropic(messages, options);
|
|
48
|
-
case 'moonshot':
|
|
49
|
-
return this._chatMoonshot(messages, options);
|
|
50
|
-
case 'alibaba':
|
|
51
|
-
return this._chatQwen(messages, options);
|
|
52
|
-
case 'openai':
|
|
53
|
-
return this._chatOpenAI(messages, options);
|
|
54
|
-
default:
|
|
55
|
-
throw new Error(`Unsupported provider: ${this.provider}`);
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
/**
|
|
60
|
-
* Anthropic Claude API
|
|
61
|
-
*/
|
|
62
|
-
async _chatAnthropic(messages, options) {
|
|
63
|
-
// Placeholder - would use @anthropic-ai/sdk in production
|
|
64
|
-
logger.debug('Anthropic chat', { model: this.model });
|
|
65
|
-
return {
|
|
66
|
-
content: '[Anthropic response placeholder]',
|
|
67
|
-
provider: 'anthropic',
|
|
68
|
-
model: this.model
|
|
69
|
-
};
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
/**
|
|
73
|
-
* Moonshot (Kimi) API
|
|
74
|
-
*/
|
|
75
|
-
async _chatMoonshot(messages, options) {
|
|
76
|
-
// Placeholder - would use moonshot SDK in production
|
|
77
|
-
logger.debug('Moonshot chat', { model: this.model });
|
|
78
|
-
return {
|
|
79
|
-
content: '[Moonshot response placeholder]',
|
|
80
|
-
provider: 'moonshot',
|
|
81
|
-
model: this.model
|
|
82
|
-
};
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
/**
|
|
86
|
-
* Alibaba Qwen API
|
|
87
|
-
*/
|
|
88
|
-
async _chatQwen(messages, options) {
|
|
89
|
-
// Placeholder - would use DashScope SDK in production
|
|
90
|
-
logger.debug('Qwen chat', { model: this.model });
|
|
91
|
-
return {
|
|
92
|
-
content: '[Qwen response placeholder]',
|
|
93
|
-
provider: 'alibaba',
|
|
94
|
-
model: this.model
|
|
95
|
-
};
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
/**
|
|
99
|
-
* OpenAI API
|
|
100
|
-
*/
|
|
101
|
-
async _chatOpenAI(messages, options) {
|
|
102
|
-
// Placeholder - would use openai SDK in production
|
|
103
|
-
logger.debug('OpenAI chat', { model: this.model });
|
|
104
|
-
return {
|
|
105
|
-
content: '[OpenAI response placeholder]',
|
|
106
|
-
provider: 'openai',
|
|
107
|
-
model: this.model
|
|
108
|
-
};
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
/**
|
|
112
|
-
* Count tokens (approximate)
|
|
113
|
-
* @param {string} text - Text to count
|
|
114
|
-
* @returns {number} - Approximate token count
|
|
115
|
-
*/
|
|
116
|
-
countTokens(text) {
|
|
117
|
-
// Rough estimate: 1 token ≈ 4 characters
|
|
118
|
-
return Math.ceil(text.length / 4);
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
/**
|
|
122
|
-
* Get provider info
|
|
123
|
-
* @returns {Object} - Provider information
|
|
124
|
-
*/
|
|
125
|
-
getInfo() {
|
|
126
|
-
return {
|
|
127
|
-
provider: this.provider,
|
|
128
|
-
model: this.model,
|
|
129
|
-
hasApiKey: !!this.apiKey
|
|
130
|
-
};
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
/**
|
|
135
|
-
* Create provider from config
|
|
136
|
-
* @param {Object} config - Provider config
|
|
137
|
-
* @returns {ModelProvider} - Model provider instance
|
|
138
|
-
*/
|
|
139
|
-
function createProvider(config) {
|
|
140
|
-
return new ModelProvider(config);
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
module.exports = {
|
|
144
|
-
ModelProvider,
|
|
145
|
-
createProvider
|
|
146
|
-
};
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* GSD Model Provider — Unified API for multiple AI providers
|
|
5
|
+
*
|
|
6
|
+
* Supports: Anthropic, Moonshot (Kimi), Alibaba (Qwen), OpenAI
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* const ModelProvider = require('./model-provider.cjs');
|
|
10
|
+
* const model = new ModelProvider({ provider: 'anthropic', model: 'sonnet' });
|
|
11
|
+
* const response = await model.chat([{ role: 'user', content: 'Hello' }]);
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
const Logger = require('./logger.cjs');
|
|
15
|
+
const logger = new Logger();
|
|
16
|
+
|
|
17
|
+
class ModelProvider {
|
|
18
|
+
/**
|
|
19
|
+
* Create model provider
|
|
20
|
+
* @param {Object} config - Configuration
|
|
21
|
+
*/
|
|
22
|
+
constructor(config) {
|
|
23
|
+
this.provider = config.provider || 'anthropic';
|
|
24
|
+
this.model = config.model || 'sonnet';
|
|
25
|
+
this.apiKey = config.apiKey || process.env[`${this.provider.toUpperCase()}_API_KEY`];
|
|
26
|
+
|
|
27
|
+
if (!this.apiKey) {
|
|
28
|
+
logger.warn('API key not configured', { provider: this.provider });
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Send chat message
|
|
34
|
+
* @param {Object[]} messages - Chat messages
|
|
35
|
+
* @param {Object} options - Chat options
|
|
36
|
+
* @returns {Promise<Object>} - Response
|
|
37
|
+
*/
|
|
38
|
+
async chat(messages, options = {}) {
|
|
39
|
+
logger.info('Chat request', {
|
|
40
|
+
provider: this.provider,
|
|
41
|
+
model: this.model,
|
|
42
|
+
messageCount: messages.length
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
switch (this.provider) {
|
|
46
|
+
case 'anthropic':
|
|
47
|
+
return this._chatAnthropic(messages, options);
|
|
48
|
+
case 'moonshot':
|
|
49
|
+
return this._chatMoonshot(messages, options);
|
|
50
|
+
case 'alibaba':
|
|
51
|
+
return this._chatQwen(messages, options);
|
|
52
|
+
case 'openai':
|
|
53
|
+
return this._chatOpenAI(messages, options);
|
|
54
|
+
default:
|
|
55
|
+
throw new Error(`Unsupported provider: ${this.provider}`);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Anthropic Claude API
|
|
61
|
+
*/
|
|
62
|
+
async _chatAnthropic(messages, options) {
|
|
63
|
+
// Placeholder - would use @anthropic-ai/sdk in production
|
|
64
|
+
logger.debug('Anthropic chat', { model: this.model });
|
|
65
|
+
return {
|
|
66
|
+
content: '[Anthropic response placeholder]',
|
|
67
|
+
provider: 'anthropic',
|
|
68
|
+
model: this.model
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Moonshot (Kimi) API
|
|
74
|
+
*/
|
|
75
|
+
async _chatMoonshot(messages, options) {
|
|
76
|
+
// Placeholder - would use moonshot SDK in production
|
|
77
|
+
logger.debug('Moonshot chat', { model: this.model });
|
|
78
|
+
return {
|
|
79
|
+
content: '[Moonshot response placeholder]',
|
|
80
|
+
provider: 'moonshot',
|
|
81
|
+
model: this.model
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Alibaba Qwen API
|
|
87
|
+
*/
|
|
88
|
+
async _chatQwen(messages, options) {
|
|
89
|
+
// Placeholder - would use DashScope SDK in production
|
|
90
|
+
logger.debug('Qwen chat', { model: this.model });
|
|
91
|
+
return {
|
|
92
|
+
content: '[Qwen response placeholder]',
|
|
93
|
+
provider: 'alibaba',
|
|
94
|
+
model: this.model
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* OpenAI API
|
|
100
|
+
*/
|
|
101
|
+
async _chatOpenAI(messages, options) {
|
|
102
|
+
// Placeholder - would use openai SDK in production
|
|
103
|
+
logger.debug('OpenAI chat', { model: this.model });
|
|
104
|
+
return {
|
|
105
|
+
content: '[OpenAI response placeholder]',
|
|
106
|
+
provider: 'openai',
|
|
107
|
+
model: this.model
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Count tokens (approximate)
|
|
113
|
+
* @param {string} text - Text to count
|
|
114
|
+
* @returns {number} - Approximate token count
|
|
115
|
+
*/
|
|
116
|
+
countTokens(text) {
|
|
117
|
+
// Rough estimate: 1 token ≈ 4 characters
|
|
118
|
+
return Math.ceil(text.length / 4);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Get provider info
|
|
123
|
+
* @returns {Object} - Provider information
|
|
124
|
+
*/
|
|
125
|
+
getInfo() {
|
|
126
|
+
return {
|
|
127
|
+
provider: this.provider,
|
|
128
|
+
model: this.model,
|
|
129
|
+
hasApiKey: !!this.apiKey
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Create provider from config
|
|
136
|
+
* @param {Object} config - Provider config
|
|
137
|
+
* @returns {ModelProvider} - Model provider instance
|
|
138
|
+
*/
|
|
139
|
+
function createProvider(config) {
|
|
140
|
+
return new ModelProvider(config);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
module.exports = {
|
|
144
|
+
ModelProvider,
|
|
145
|
+
createProvider
|
|
146
|
+
};
|