@calliopelabs/cli 0.4.6 → 0.6.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 +258 -105
- package/dist/branching.d.ts +56 -0
- package/dist/branching.d.ts.map +1 -0
- package/dist/branching.js +211 -0
- package/dist/branching.js.map +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +235 -2
- package/dist/cli.js.map +1 -1
- package/dist/completion.d.ts +75 -0
- package/dist/completion.d.ts.map +1 -0
- package/dist/completion.js +234 -0
- package/dist/completion.js.map +1 -0
- package/dist/config.d.ts +36 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +90 -0
- package/dist/config.js.map +1 -1
- package/dist/diff.d.ts +73 -0
- package/dist/diff.d.ts.map +1 -0
- package/dist/diff.js +317 -0
- package/dist/diff.js.map +1 -0
- package/dist/errors.d.ts +41 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +199 -0
- package/dist/errors.js.map +1 -0
- package/dist/file-watcher.d.ts +91 -0
- package/dist/file-watcher.d.ts.map +1 -0
- package/dist/file-watcher.js +269 -0
- package/dist/file-watcher.js.map +1 -0
- package/dist/files.d.ts +49 -0
- package/dist/files.d.ts.map +1 -0
- package/dist/files.js +191 -0
- package/dist/files.js.map +1 -0
- package/dist/fuzzy-search.d.ts +75 -0
- package/dist/fuzzy-search.d.ts.map +1 -0
- package/dist/fuzzy-search.js +240 -0
- package/dist/fuzzy-search.js.map +1 -0
- package/dist/hooks.d.ts +79 -0
- package/dist/hooks.d.ts.map +1 -0
- package/dist/hooks.js +271 -0
- package/dist/hooks.js.map +1 -0
- package/dist/keyboard.d.ts +57 -0
- package/dist/keyboard.d.ts.map +1 -0
- package/dist/keyboard.js +265 -0
- package/dist/keyboard.js.map +1 -0
- package/dist/markdown.d.ts +14 -0
- package/dist/markdown.d.ts.map +1 -0
- package/dist/markdown.js +248 -0
- package/dist/markdown.js.map +1 -0
- package/dist/mcp.d.ts +90 -0
- package/dist/mcp.d.ts.map +1 -0
- package/dist/mcp.js +290 -0
- package/dist/mcp.js.map +1 -0
- package/dist/memory.d.ts +104 -0
- package/dist/memory.d.ts.map +1 -0
- package/dist/memory.js +394 -0
- package/dist/memory.js.map +1 -0
- package/dist/model-router.d.ts +67 -0
- package/dist/model-router.d.ts.map +1 -0
- package/dist/model-router.js +289 -0
- package/dist/model-router.js.map +1 -0
- package/dist/parallel-tools.d.ts +51 -0
- package/dist/parallel-tools.d.ts.map +1 -0
- package/dist/parallel-tools.js +278 -0
- package/dist/parallel-tools.js.map +1 -0
- package/dist/project-config.d.ts +84 -0
- package/dist/project-config.d.ts.map +1 -0
- package/dist/project-config.js +250 -0
- package/dist/project-config.js.map +1 -0
- package/dist/providers.d.ts +10 -2
- package/dist/providers.d.ts.map +1 -1
- package/dist/providers.js +240 -38
- package/dist/providers.js.map +1 -1
- package/dist/risk.d.ts +31 -0
- package/dist/risk.d.ts.map +1 -0
- package/dist/risk.js +367 -0
- package/dist/risk.js.map +1 -0
- package/dist/sandbox.d.ts +49 -0
- package/dist/sandbox.d.ts.map +1 -0
- package/dist/sandbox.js +347 -0
- package/dist/sandbox.js.map +1 -0
- package/dist/skills.d.ts +71 -0
- package/dist/skills.d.ts.map +1 -0
- package/dist/skills.js +383 -0
- package/dist/skills.js.map +1 -0
- package/dist/storage.d.ts +139 -0
- package/dist/storage.d.ts.map +1 -0
- package/dist/storage.js +508 -0
- package/dist/storage.js.map +1 -0
- package/dist/streaming.d.ts +94 -0
- package/dist/streaming.d.ts.map +1 -0
- package/dist/streaming.js +305 -0
- package/dist/streaming.js.map +1 -0
- package/dist/summarization.d.ts +76 -0
- package/dist/summarization.d.ts.map +1 -0
- package/dist/summarization.js +242 -0
- package/dist/summarization.js.map +1 -0
- package/dist/themes.d.ts +110 -0
- package/dist/themes.d.ts.map +1 -0
- package/dist/themes.js +329 -0
- package/dist/themes.js.map +1 -0
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +335 -1
- package/dist/tools.js.map +1 -1
- package/dist/types.d.ts +56 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +105 -0
- package/dist/types.js.map +1 -1
- package/dist/ui-cli.d.ts +9 -2
- package/dist/ui-cli.d.ts.map +1 -1
- package/dist/ui-cli.js +1315 -220
- package/dist/ui-cli.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Calliope CLI - Multi-Model Router
|
|
3
|
+
*
|
|
4
|
+
* Intelligently routes requests to different models based on task complexity.
|
|
5
|
+
*/
|
|
6
|
+
// ============================================================================
|
|
7
|
+
// Default Model Tiers
|
|
8
|
+
// ============================================================================
|
|
9
|
+
const DEFAULT_TIERS = {
|
|
10
|
+
anthropic: {
|
|
11
|
+
fast: {
|
|
12
|
+
name: 'Haiku',
|
|
13
|
+
provider: 'anthropic',
|
|
14
|
+
model: 'claude-3-5-haiku-20241022',
|
|
15
|
+
maxTokens: 8192,
|
|
16
|
+
costPer1kInput: 0.00025,
|
|
17
|
+
costPer1kOutput: 0.00125,
|
|
18
|
+
},
|
|
19
|
+
balanced: {
|
|
20
|
+
name: 'Sonnet',
|
|
21
|
+
provider: 'anthropic',
|
|
22
|
+
model: 'claude-sonnet-4-20250514',
|
|
23
|
+
maxTokens: 8192,
|
|
24
|
+
costPer1kInput: 0.003,
|
|
25
|
+
costPer1kOutput: 0.015,
|
|
26
|
+
},
|
|
27
|
+
smart: {
|
|
28
|
+
name: 'Opus',
|
|
29
|
+
provider: 'anthropic',
|
|
30
|
+
model: 'claude-opus-4-20250514',
|
|
31
|
+
maxTokens: 8192,
|
|
32
|
+
costPer1kInput: 0.015,
|
|
33
|
+
costPer1kOutput: 0.075,
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
openai: {
|
|
37
|
+
fast: {
|
|
38
|
+
name: 'GPT-4o Mini',
|
|
39
|
+
provider: 'openai',
|
|
40
|
+
model: 'gpt-4o-mini',
|
|
41
|
+
maxTokens: 16384,
|
|
42
|
+
costPer1kInput: 0.00015,
|
|
43
|
+
costPer1kOutput: 0.0006,
|
|
44
|
+
},
|
|
45
|
+
balanced: {
|
|
46
|
+
name: 'GPT-4o',
|
|
47
|
+
provider: 'openai',
|
|
48
|
+
model: 'gpt-4o',
|
|
49
|
+
maxTokens: 16384,
|
|
50
|
+
costPer1kInput: 0.0025,
|
|
51
|
+
costPer1kOutput: 0.01,
|
|
52
|
+
},
|
|
53
|
+
smart: {
|
|
54
|
+
name: 'o1',
|
|
55
|
+
provider: 'openai',
|
|
56
|
+
model: 'o1',
|
|
57
|
+
maxTokens: 32768,
|
|
58
|
+
costPer1kInput: 0.015,
|
|
59
|
+
costPer1kOutput: 0.06,
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
google: {
|
|
63
|
+
fast: {
|
|
64
|
+
name: 'Flash',
|
|
65
|
+
provider: 'google',
|
|
66
|
+
model: 'gemini-2.0-flash',
|
|
67
|
+
maxTokens: 8192,
|
|
68
|
+
costPer1kInput: 0.000075,
|
|
69
|
+
costPer1kOutput: 0.0003,
|
|
70
|
+
},
|
|
71
|
+
balanced: {
|
|
72
|
+
name: 'Pro',
|
|
73
|
+
provider: 'google',
|
|
74
|
+
model: 'gemini-1.5-pro',
|
|
75
|
+
maxTokens: 8192,
|
|
76
|
+
costPer1kInput: 0.00125,
|
|
77
|
+
costPer1kOutput: 0.005,
|
|
78
|
+
},
|
|
79
|
+
smart: {
|
|
80
|
+
name: 'Pro (long)',
|
|
81
|
+
provider: 'google',
|
|
82
|
+
model: 'gemini-1.5-pro',
|
|
83
|
+
maxTokens: 32768,
|
|
84
|
+
costPer1kInput: 0.00125,
|
|
85
|
+
costPer1kOutput: 0.005,
|
|
86
|
+
},
|
|
87
|
+
},
|
|
88
|
+
// Fallback for other providers
|
|
89
|
+
together: {
|
|
90
|
+
fast: { name: 'Llama 8B', provider: 'together', model: 'meta-llama/Meta-Llama-3.1-8B-Instruct-Turbo', maxTokens: 8192, costPer1kInput: 0.00018, costPer1kOutput: 0.00018 },
|
|
91
|
+
balanced: { name: 'Llama 70B', provider: 'together', model: 'meta-llama/Llama-3.3-70B-Instruct-Turbo', maxTokens: 8192, costPer1kInput: 0.00088, costPer1kOutput: 0.00088 },
|
|
92
|
+
smart: { name: 'Llama 405B', provider: 'together', model: 'meta-llama/Meta-Llama-3.1-405B-Instruct-Turbo', maxTokens: 8192, costPer1kInput: 0.003, costPer1kOutput: 0.003 },
|
|
93
|
+
},
|
|
94
|
+
groq: {
|
|
95
|
+
fast: { name: 'Llama 8B', provider: 'groq', model: 'llama-3.1-8b-instant', maxTokens: 8192, costPer1kInput: 0.00005, costPer1kOutput: 0.00008 },
|
|
96
|
+
balanced: { name: 'Llama 70B', provider: 'groq', model: 'llama-3.3-70b-versatile', maxTokens: 8192, costPer1kInput: 0.00059, costPer1kOutput: 0.00079 },
|
|
97
|
+
smart: { name: 'Llama 70B', provider: 'groq', model: 'llama-3.3-70b-versatile', maxTokens: 32768, costPer1kInput: 0.00059, costPer1kOutput: 0.00079 },
|
|
98
|
+
},
|
|
99
|
+
openrouter: {
|
|
100
|
+
fast: { name: 'Haiku', provider: 'openrouter', model: 'anthropic/claude-3.5-haiku', maxTokens: 8192, costPer1kInput: 0.0008, costPer1kOutput: 0.004 },
|
|
101
|
+
balanced: { name: 'Sonnet', provider: 'openrouter', model: 'anthropic/claude-sonnet-4', maxTokens: 8192, costPer1kInput: 0.003, costPer1kOutput: 0.015 },
|
|
102
|
+
smart: { name: 'Opus', provider: 'openrouter', model: 'anthropic/claude-opus-4', maxTokens: 8192, costPer1kInput: 0.015, costPer1kOutput: 0.075 },
|
|
103
|
+
},
|
|
104
|
+
fireworks: {
|
|
105
|
+
fast: { name: 'Llama 8B', provider: 'fireworks', model: 'accounts/fireworks/models/llama-v3p1-8b-instruct', maxTokens: 8192, costPer1kInput: 0.0002, costPer1kOutput: 0.0002 },
|
|
106
|
+
balanced: { name: 'Llama 70B', provider: 'fireworks', model: 'accounts/fireworks/models/llama-v3p1-70b-instruct', maxTokens: 8192, costPer1kInput: 0.0009, costPer1kOutput: 0.0009 },
|
|
107
|
+
smart: { name: 'Llama 405B', provider: 'fireworks', model: 'accounts/fireworks/models/llama-v3p1-405b-instruct', maxTokens: 8192, costPer1kInput: 0.003, costPer1kOutput: 0.003 },
|
|
108
|
+
},
|
|
109
|
+
mistral: {
|
|
110
|
+
fast: { name: 'Mistral Small', provider: 'mistral', model: 'mistral-small-latest', maxTokens: 8192, costPer1kInput: 0.001, costPer1kOutput: 0.003 },
|
|
111
|
+
balanced: { name: 'Mistral Large', provider: 'mistral', model: 'mistral-large-latest', maxTokens: 8192, costPer1kInput: 0.003, costPer1kOutput: 0.009 },
|
|
112
|
+
smart: { name: 'Mistral Large', provider: 'mistral', model: 'mistral-large-latest', maxTokens: 32768, costPer1kInput: 0.003, costPer1kOutput: 0.009 },
|
|
113
|
+
},
|
|
114
|
+
ollama: {
|
|
115
|
+
fast: { name: 'Llama 8B', provider: 'ollama', model: 'llama3.1:8b', maxTokens: 8192, costPer1kInput: 0, costPer1kOutput: 0 },
|
|
116
|
+
balanced: { name: 'Llama 70B', provider: 'ollama', model: 'llama3.3', maxTokens: 8192, costPer1kInput: 0, costPer1kOutput: 0 },
|
|
117
|
+
smart: { name: 'Llama 70B', provider: 'ollama', model: 'llama3.3', maxTokens: 32768, costPer1kInput: 0, costPer1kOutput: 0 },
|
|
118
|
+
},
|
|
119
|
+
ai21: {
|
|
120
|
+
fast: { name: 'Jamba Mini', provider: 'ai21', model: 'jamba-1.5-mini', maxTokens: 4096, costPer1kInput: 0.0002, costPer1kOutput: 0.0004 },
|
|
121
|
+
balanced: { name: 'Jamba Large', provider: 'ai21', model: 'jamba-1.5-large', maxTokens: 4096, costPer1kInput: 0.002, costPer1kOutput: 0.008 },
|
|
122
|
+
smart: { name: 'Jamba Large', provider: 'ai21', model: 'jamba-1.5-large', maxTokens: 4096, costPer1kInput: 0.002, costPer1kOutput: 0.008 },
|
|
123
|
+
},
|
|
124
|
+
huggingface: {
|
|
125
|
+
fast: { name: 'Default', provider: 'huggingface', model: 'meta-llama/Llama-3.1-8B-Instruct', maxTokens: 4096, costPer1kInput: 0, costPer1kOutput: 0 },
|
|
126
|
+
balanced: { name: 'Default', provider: 'huggingface', model: 'meta-llama/Llama-3.1-70B-Instruct', maxTokens: 4096, costPer1kInput: 0, costPer1kOutput: 0 },
|
|
127
|
+
smart: { name: 'Default', provider: 'huggingface', model: 'meta-llama/Llama-3.1-70B-Instruct', maxTokens: 4096, costPer1kInput: 0, costPer1kOutput: 0 },
|
|
128
|
+
},
|
|
129
|
+
litellm: {
|
|
130
|
+
fast: { name: 'Default', provider: 'litellm', model: 'gpt-4o-mini', maxTokens: 8192, costPer1kInput: 0, costPer1kOutput: 0 },
|
|
131
|
+
balanced: { name: 'Default', provider: 'litellm', model: 'gpt-4o', maxTokens: 8192, costPer1kInput: 0, costPer1kOutput: 0 },
|
|
132
|
+
smart: { name: 'Default', provider: 'litellm', model: 'gpt-4o', maxTokens: 16384, costPer1kInput: 0, costPer1kOutput: 0 },
|
|
133
|
+
},
|
|
134
|
+
auto: {
|
|
135
|
+
fast: { name: 'Auto', provider: 'auto', model: 'auto', maxTokens: 8192, costPer1kInput: 0, costPer1kOutput: 0 },
|
|
136
|
+
balanced: { name: 'Auto', provider: 'auto', model: 'auto', maxTokens: 8192, costPer1kInput: 0, costPer1kOutput: 0 },
|
|
137
|
+
smart: { name: 'Auto', provider: 'auto', model: 'auto', maxTokens: 8192, costPer1kInput: 0, costPer1kOutput: 0 },
|
|
138
|
+
},
|
|
139
|
+
};
|
|
140
|
+
// ============================================================================
|
|
141
|
+
// Complexity Analysis
|
|
142
|
+
// ============================================================================
|
|
143
|
+
/**
|
|
144
|
+
* Analyze task complexity from user message
|
|
145
|
+
*/
|
|
146
|
+
export function analyzeComplexity(message, context) {
|
|
147
|
+
const signals = [];
|
|
148
|
+
let score = 0;
|
|
149
|
+
const lower = message.toLowerCase();
|
|
150
|
+
const words = message.split(/\s+/).length;
|
|
151
|
+
// Message length signals
|
|
152
|
+
if (words < 10) {
|
|
153
|
+
signals.push('short message');
|
|
154
|
+
score -= 1;
|
|
155
|
+
}
|
|
156
|
+
else if (words > 100) {
|
|
157
|
+
signals.push('long message');
|
|
158
|
+
score += 2;
|
|
159
|
+
}
|
|
160
|
+
// Simple task indicators
|
|
161
|
+
const simplePatterns = [
|
|
162
|
+
/\b(what|how|explain|show|list|print|display)\b/i,
|
|
163
|
+
/\b(simple|quick|easy|basic|just)\b/i,
|
|
164
|
+
/\b(typo|fix|rename|format)\b/i,
|
|
165
|
+
];
|
|
166
|
+
for (const pattern of simplePatterns) {
|
|
167
|
+
if (pattern.test(lower)) {
|
|
168
|
+
signals.push('simple task keywords');
|
|
169
|
+
score -= 1;
|
|
170
|
+
break;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
// Complex task indicators
|
|
174
|
+
const complexPatterns = [
|
|
175
|
+
/\b(refactor|architect|design|implement|optimize|analyze)\b/i,
|
|
176
|
+
/\b(complex|comprehensive|thorough|detailed)\b/i,
|
|
177
|
+
/\b(security|performance|scalability)\b/i,
|
|
178
|
+
/\b(debug|investigate|diagnose)\b/i,
|
|
179
|
+
/\b(multiple|several|various|different)\s+(files?|components?|modules?)/i,
|
|
180
|
+
];
|
|
181
|
+
for (const pattern of complexPatterns) {
|
|
182
|
+
if (pattern.test(lower)) {
|
|
183
|
+
signals.push('complex task keywords');
|
|
184
|
+
score += 2;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
// Expert task indicators
|
|
188
|
+
const expertPatterns = [
|
|
189
|
+
/\b(cryptograph|concurrency|distributed|microservice)/i,
|
|
190
|
+
/\b(algorithm|data\s*structure|complexity)\b/i,
|
|
191
|
+
/\b(security\s*audit|vulnerability|exploit)\b/i,
|
|
192
|
+
/\b(machine\s*learning|neural|ai\s*model)\b/i,
|
|
193
|
+
];
|
|
194
|
+
for (const pattern of expertPatterns) {
|
|
195
|
+
if (pattern.test(lower)) {
|
|
196
|
+
signals.push('expert domain keywords');
|
|
197
|
+
score += 3;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
// Context-based adjustments
|
|
201
|
+
if (context) {
|
|
202
|
+
if (context.messageCount && context.messageCount > 10) {
|
|
203
|
+
signals.push('long conversation');
|
|
204
|
+
score += 1;
|
|
205
|
+
}
|
|
206
|
+
if (context.hasCode) {
|
|
207
|
+
signals.push('involves code');
|
|
208
|
+
score += 1;
|
|
209
|
+
}
|
|
210
|
+
if (context.fileCount && context.fileCount > 3) {
|
|
211
|
+
signals.push('multiple files');
|
|
212
|
+
score += 1;
|
|
213
|
+
}
|
|
214
|
+
if (context.toolsUsed && context.toolsUsed.length > 2) {
|
|
215
|
+
signals.push('multiple tools needed');
|
|
216
|
+
score += 1;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
// Map score to complexity
|
|
220
|
+
let complexity;
|
|
221
|
+
if (score <= -1)
|
|
222
|
+
complexity = 'trivial';
|
|
223
|
+
else if (score <= 1)
|
|
224
|
+
complexity = 'simple';
|
|
225
|
+
else if (score <= 3)
|
|
226
|
+
complexity = 'moderate';
|
|
227
|
+
else if (score <= 5)
|
|
228
|
+
complexity = 'complex';
|
|
229
|
+
else
|
|
230
|
+
complexity = 'expert';
|
|
231
|
+
// Confidence based on signal count
|
|
232
|
+
const confidence = Math.min(0.9, 0.5 + signals.length * 0.1);
|
|
233
|
+
return { complexity, confidence, signals };
|
|
234
|
+
}
|
|
235
|
+
// ============================================================================
|
|
236
|
+
// Routing
|
|
237
|
+
// ============================================================================
|
|
238
|
+
/**
|
|
239
|
+
* Route request to appropriate model tier
|
|
240
|
+
*/
|
|
241
|
+
export function routeRequest(message, provider, context) {
|
|
242
|
+
const { complexity, confidence, signals } = analyzeComplexity(message, context);
|
|
243
|
+
const tiers = DEFAULT_TIERS[provider] || DEFAULT_TIERS.anthropic;
|
|
244
|
+
let tier;
|
|
245
|
+
let reason;
|
|
246
|
+
switch (complexity) {
|
|
247
|
+
case 'trivial':
|
|
248
|
+
case 'simple':
|
|
249
|
+
tier = 'fast';
|
|
250
|
+
reason = `Simple task (${signals.join(', ')})`;
|
|
251
|
+
break;
|
|
252
|
+
case 'moderate':
|
|
253
|
+
tier = 'balanced';
|
|
254
|
+
reason = `Moderate complexity (${signals.join(', ')})`;
|
|
255
|
+
break;
|
|
256
|
+
case 'complex':
|
|
257
|
+
case 'expert':
|
|
258
|
+
tier = 'smart';
|
|
259
|
+
reason = `Complex task (${signals.join(', ')})`;
|
|
260
|
+
break;
|
|
261
|
+
}
|
|
262
|
+
return {
|
|
263
|
+
tier,
|
|
264
|
+
model: tiers[tier],
|
|
265
|
+
reason,
|
|
266
|
+
complexity,
|
|
267
|
+
confidence,
|
|
268
|
+
};
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* Get model tier for provider
|
|
272
|
+
*/
|
|
273
|
+
export function getModelTier(provider, tier) {
|
|
274
|
+
const tiers = DEFAULT_TIERS[provider] || DEFAULT_TIERS.anthropic;
|
|
275
|
+
return tiers[tier];
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Get all tiers for a provider
|
|
279
|
+
*/
|
|
280
|
+
export function getAllTiers(provider) {
|
|
281
|
+
return DEFAULT_TIERS[provider] || DEFAULT_TIERS.anthropic;
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* Check if provider supports routing
|
|
285
|
+
*/
|
|
286
|
+
export function supportsRouting(provider) {
|
|
287
|
+
return provider in DEFAULT_TIERS;
|
|
288
|
+
}
|
|
289
|
+
//# sourceMappingURL=model-router.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-router.js","sourceRoot":"","sources":["../src/model-router.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Calliope CLI - Parallel Tool Execution
|
|
3
|
+
*
|
|
4
|
+
* Execute independent tools concurrently for better performance.
|
|
5
|
+
*/
|
|
6
|
+
import type { ToolCall } from './types.js';
|
|
7
|
+
export interface ToolDependency {
|
|
8
|
+
name: string;
|
|
9
|
+
dependsOn: string[];
|
|
10
|
+
outputs: string[];
|
|
11
|
+
}
|
|
12
|
+
export interface ToolResult {
|
|
13
|
+
toolCall: ToolCall;
|
|
14
|
+
result: string;
|
|
15
|
+
duration: number;
|
|
16
|
+
error?: string;
|
|
17
|
+
}
|
|
18
|
+
export interface ParallelExecutionPlan {
|
|
19
|
+
stages: ToolCall[][];
|
|
20
|
+
dependencies: Map<string, string[]>;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Analyze tool calls for dependencies
|
|
24
|
+
*/
|
|
25
|
+
export declare function analyzeDependencies(toolCalls: ToolCall[]): ParallelExecutionPlan;
|
|
26
|
+
/**
|
|
27
|
+
* Execute tools in parallel stages
|
|
28
|
+
*/
|
|
29
|
+
export declare function executeParallel(toolCalls: ToolCall[], executor: (call: ToolCall) => Promise<string>, onProgress?: (completed: number, total: number, current: ToolCall) => void): Promise<ToolResult[]>;
|
|
30
|
+
/**
|
|
31
|
+
* Execute with concurrency limit
|
|
32
|
+
*/
|
|
33
|
+
export declare function executeWithLimit(toolCalls: ToolCall[], executor: (call: ToolCall) => Promise<string>, concurrencyLimit?: number, onProgress?: (completed: number, total: number) => void): Promise<ToolResult[]>;
|
|
34
|
+
/**
|
|
35
|
+
* Check if tool calls can be parallelized
|
|
36
|
+
*/
|
|
37
|
+
export declare function canParallelize(toolCalls: ToolCall[]): boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Get parallelization stats
|
|
40
|
+
*/
|
|
41
|
+
export declare function getParallelizationStats(toolCalls: ToolCall[]): {
|
|
42
|
+
totalTools: number;
|
|
43
|
+
stages: number;
|
|
44
|
+
maxParallel: number;
|
|
45
|
+
speedupFactor: number;
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* Format execution plan for display
|
|
49
|
+
*/
|
|
50
|
+
export declare function formatPlan(plan: ParallelExecutionPlan): string;
|
|
51
|
+
//# sourceMappingURL=parallel-tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parallel-tools.d.ts","sourceRoot":"","sources":["../src/parallel-tools.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAM3C,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC;IACrB,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CACrC;AAsDD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,qBAAqB,CA2DhF;AAiDD;;GAEG;AACH,wBAAsB,eAAe,CACnC,SAAS,EAAE,QAAQ,EAAE,EACrB,QAAQ,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,OAAO,CAAC,MAAM,CAAC,EAC7C,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,KAAK,IAAI,GACzE,OAAO,CAAC,UAAU,EAAE,CAAC,CAqCvB;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,QAAQ,EAAE,EACrB,QAAQ,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,OAAO,CAAC,MAAM,CAAC,EAC7C,gBAAgB,GAAE,MAAU,EAC5B,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,GACtD,OAAO,CAAC,UAAU,EAAE,CAAC,CAuDvB;AAMD;;GAEG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,OAAO,CAO7D;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG;IAC9D,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;CACvB,CAUA;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,qBAAqB,GAAG,MAAM,CAkB9D"}
|
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Calliope CLI - Parallel Tool Execution
|
|
3
|
+
*
|
|
4
|
+
* Execute independent tools concurrently for better performance.
|
|
5
|
+
*/
|
|
6
|
+
// ============================================================================
|
|
7
|
+
// Tool Dependencies
|
|
8
|
+
// ============================================================================
|
|
9
|
+
// Known tool dependencies
|
|
10
|
+
const TOOL_DEPENDENCIES = {
|
|
11
|
+
read_file: {
|
|
12
|
+
name: 'read_file',
|
|
13
|
+
dependsOn: [],
|
|
14
|
+
outputs: ['file_content'],
|
|
15
|
+
},
|
|
16
|
+
write_file: {
|
|
17
|
+
name: 'write_file',
|
|
18
|
+
dependsOn: ['file_content'], // Often depends on reading first
|
|
19
|
+
outputs: ['file_modified'],
|
|
20
|
+
},
|
|
21
|
+
shell: {
|
|
22
|
+
name: 'shell',
|
|
23
|
+
dependsOn: [], // Can depend on file changes
|
|
24
|
+
outputs: ['shell_output'],
|
|
25
|
+
},
|
|
26
|
+
list_files: {
|
|
27
|
+
name: 'list_files',
|
|
28
|
+
dependsOn: [],
|
|
29
|
+
outputs: ['file_list'],
|
|
30
|
+
},
|
|
31
|
+
think: {
|
|
32
|
+
name: 'think',
|
|
33
|
+
dependsOn: [],
|
|
34
|
+
outputs: ['thought'],
|
|
35
|
+
},
|
|
36
|
+
execute_code: {
|
|
37
|
+
name: 'execute_code',
|
|
38
|
+
dependsOn: [],
|
|
39
|
+
outputs: ['code_output'],
|
|
40
|
+
},
|
|
41
|
+
web_search: {
|
|
42
|
+
name: 'web_search',
|
|
43
|
+
dependsOn: [],
|
|
44
|
+
outputs: ['search_results'],
|
|
45
|
+
},
|
|
46
|
+
git: {
|
|
47
|
+
name: 'git',
|
|
48
|
+
dependsOn: ['file_modified'], // Git commands often follow file changes
|
|
49
|
+
outputs: ['git_output'],
|
|
50
|
+
},
|
|
51
|
+
};
|
|
52
|
+
// ============================================================================
|
|
53
|
+
// Dependency Analysis
|
|
54
|
+
// ============================================================================
|
|
55
|
+
/**
|
|
56
|
+
* Analyze tool calls for dependencies
|
|
57
|
+
*/
|
|
58
|
+
export function analyzeDependencies(toolCalls) {
|
|
59
|
+
const dependencies = new Map();
|
|
60
|
+
const stages = [];
|
|
61
|
+
// Build dependency graph
|
|
62
|
+
for (let i = 0; i < toolCalls.length; i++) {
|
|
63
|
+
const call = toolCalls[i];
|
|
64
|
+
const deps = [];
|
|
65
|
+
// Check if this tool depends on outputs from previous tools
|
|
66
|
+
for (let j = 0; j < i; j++) {
|
|
67
|
+
const prevCall = toolCalls[j];
|
|
68
|
+
if (hasDependency(call, prevCall)) {
|
|
69
|
+
deps.push(prevCall.id);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
dependencies.set(call.id, deps);
|
|
73
|
+
}
|
|
74
|
+
// Group into stages based on dependencies
|
|
75
|
+
const executed = new Set();
|
|
76
|
+
const remaining = new Set(toolCalls.map(c => c.id));
|
|
77
|
+
while (remaining.size > 0) {
|
|
78
|
+
const stage = [];
|
|
79
|
+
for (const call of toolCalls) {
|
|
80
|
+
if (!remaining.has(call.id))
|
|
81
|
+
continue;
|
|
82
|
+
const deps = dependencies.get(call.id) || [];
|
|
83
|
+
const allDepsExecuted = deps.every(d => executed.has(d));
|
|
84
|
+
if (allDepsExecuted) {
|
|
85
|
+
stage.push(call);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
if (stage.length === 0) {
|
|
89
|
+
// Circular dependency or stuck - add remaining sequentially
|
|
90
|
+
for (const call of toolCalls) {
|
|
91
|
+
if (remaining.has(call.id)) {
|
|
92
|
+
stages.push([call]);
|
|
93
|
+
remaining.delete(call.id);
|
|
94
|
+
executed.add(call.id);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
break;
|
|
98
|
+
}
|
|
99
|
+
stages.push(stage);
|
|
100
|
+
for (const call of stage) {
|
|
101
|
+
remaining.delete(call.id);
|
|
102
|
+
executed.add(call.id);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return { stages, dependencies };
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Check if one tool call depends on another
|
|
109
|
+
*/
|
|
110
|
+
function hasDependency(current, previous) {
|
|
111
|
+
const currentDef = TOOL_DEPENDENCIES[current.name];
|
|
112
|
+
const prevDef = TOOL_DEPENDENCIES[previous.name];
|
|
113
|
+
if (!currentDef || !prevDef) {
|
|
114
|
+
// Unknown tools - assume sequential dependency
|
|
115
|
+
return true;
|
|
116
|
+
}
|
|
117
|
+
// Check output/input matching
|
|
118
|
+
for (const output of prevDef.outputs) {
|
|
119
|
+
if (currentDef.dependsOn.includes(output)) {
|
|
120
|
+
return true;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
// Check file path dependencies
|
|
124
|
+
const currentArgs = current.arguments;
|
|
125
|
+
const prevArgs = previous.arguments;
|
|
126
|
+
// If both operate on the same file, they depend on each other
|
|
127
|
+
if (currentArgs.path && prevArgs.path && currentArgs.path === prevArgs.path) {
|
|
128
|
+
return true;
|
|
129
|
+
}
|
|
130
|
+
// Write after read dependency
|
|
131
|
+
if (current.name === 'write_file' && previous.name === 'read_file') {
|
|
132
|
+
if (currentArgs.path === prevArgs.path) {
|
|
133
|
+
return true;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
// Shell commands that might depend on file changes
|
|
137
|
+
if (current.name === 'shell' && previous.name === 'write_file') {
|
|
138
|
+
return true; // Conservative: assume shell might need the file
|
|
139
|
+
}
|
|
140
|
+
return false;
|
|
141
|
+
}
|
|
142
|
+
// ============================================================================
|
|
143
|
+
// Parallel Execution
|
|
144
|
+
// ============================================================================
|
|
145
|
+
/**
|
|
146
|
+
* Execute tools in parallel stages
|
|
147
|
+
*/
|
|
148
|
+
export async function executeParallel(toolCalls, executor, onProgress) {
|
|
149
|
+
const plan = analyzeDependencies(toolCalls);
|
|
150
|
+
const results = [];
|
|
151
|
+
let completed = 0;
|
|
152
|
+
const total = toolCalls.length;
|
|
153
|
+
for (const stage of plan.stages) {
|
|
154
|
+
// Execute all tools in this stage concurrently
|
|
155
|
+
const stagePromises = stage.map(async (call) => {
|
|
156
|
+
const startTime = Date.now();
|
|
157
|
+
try {
|
|
158
|
+
onProgress?.(completed, total, call);
|
|
159
|
+
const result = await executor(call);
|
|
160
|
+
completed++;
|
|
161
|
+
return {
|
|
162
|
+
toolCall: call,
|
|
163
|
+
result,
|
|
164
|
+
duration: Date.now() - startTime,
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
catch (error) {
|
|
168
|
+
completed++;
|
|
169
|
+
return {
|
|
170
|
+
toolCall: call,
|
|
171
|
+
result: '',
|
|
172
|
+
duration: Date.now() - startTime,
|
|
173
|
+
error: error instanceof Error ? error.message : String(error),
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
});
|
|
177
|
+
const stageResults = await Promise.all(stagePromises);
|
|
178
|
+
results.push(...stageResults);
|
|
179
|
+
}
|
|
180
|
+
return results;
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Execute with concurrency limit
|
|
184
|
+
*/
|
|
185
|
+
export async function executeWithLimit(toolCalls, executor, concurrencyLimit = 5, onProgress) {
|
|
186
|
+
const results = [];
|
|
187
|
+
let completed = 0;
|
|
188
|
+
const total = toolCalls.length;
|
|
189
|
+
// Simple concurrent execution with limit
|
|
190
|
+
const executing = [];
|
|
191
|
+
const queue = [...toolCalls];
|
|
192
|
+
const runNext = async () => {
|
|
193
|
+
if (queue.length === 0)
|
|
194
|
+
return;
|
|
195
|
+
const call = queue.shift();
|
|
196
|
+
const startTime = Date.now();
|
|
197
|
+
try {
|
|
198
|
+
const result = await executor(call);
|
|
199
|
+
results.push({
|
|
200
|
+
toolCall: call,
|
|
201
|
+
result,
|
|
202
|
+
duration: Date.now() - startTime,
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
catch (error) {
|
|
206
|
+
results.push({
|
|
207
|
+
toolCall: call,
|
|
208
|
+
result: '',
|
|
209
|
+
duration: Date.now() - startTime,
|
|
210
|
+
error: error instanceof Error ? error.message : String(error),
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
completed++;
|
|
214
|
+
onProgress?.(completed, total);
|
|
215
|
+
// Start next if queue not empty
|
|
216
|
+
if (queue.length > 0) {
|
|
217
|
+
await runNext();
|
|
218
|
+
}
|
|
219
|
+
};
|
|
220
|
+
// Start initial batch
|
|
221
|
+
for (let i = 0; i < Math.min(concurrencyLimit, queue.length); i++) {
|
|
222
|
+
executing.push(runNext());
|
|
223
|
+
}
|
|
224
|
+
await Promise.all(executing);
|
|
225
|
+
// Sort results to match original order
|
|
226
|
+
results.sort((a, b) => {
|
|
227
|
+
const aIdx = toolCalls.findIndex(c => c.id === a.toolCall.id);
|
|
228
|
+
const bIdx = toolCalls.findIndex(c => c.id === b.toolCall.id);
|
|
229
|
+
return aIdx - bIdx;
|
|
230
|
+
});
|
|
231
|
+
return results;
|
|
232
|
+
}
|
|
233
|
+
// ============================================================================
|
|
234
|
+
// Utilities
|
|
235
|
+
// ============================================================================
|
|
236
|
+
/**
|
|
237
|
+
* Check if tool calls can be parallelized
|
|
238
|
+
*/
|
|
239
|
+
export function canParallelize(toolCalls) {
|
|
240
|
+
if (toolCalls.length <= 1)
|
|
241
|
+
return false;
|
|
242
|
+
const plan = analyzeDependencies(toolCalls);
|
|
243
|
+
// If any stage has more than one tool, we can parallelize
|
|
244
|
+
return plan.stages.some(stage => stage.length > 1);
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Get parallelization stats
|
|
248
|
+
*/
|
|
249
|
+
export function getParallelizationStats(toolCalls) {
|
|
250
|
+
const plan = analyzeDependencies(toolCalls);
|
|
251
|
+
const maxParallel = Math.max(...plan.stages.map(s => s.length));
|
|
252
|
+
return {
|
|
253
|
+
totalTools: toolCalls.length,
|
|
254
|
+
stages: plan.stages.length,
|
|
255
|
+
maxParallel,
|
|
256
|
+
speedupFactor: toolCalls.length / plan.stages.length,
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Format execution plan for display
|
|
261
|
+
*/
|
|
262
|
+
export function formatPlan(plan) {
|
|
263
|
+
const lines = ['Execution Plan:', ''];
|
|
264
|
+
plan.stages.forEach((stage, i) => {
|
|
265
|
+
const parallel = stage.length > 1 ? ' (parallel)' : '';
|
|
266
|
+
lines.push(`Stage ${i + 1}${parallel}:`);
|
|
267
|
+
for (const call of stage) {
|
|
268
|
+
const args = call.arguments;
|
|
269
|
+
const preview = Object.entries(args)
|
|
270
|
+
.slice(0, 2)
|
|
271
|
+
.map(([k, v]) => `${k}=${String(v).slice(0, 20)}`)
|
|
272
|
+
.join(', ');
|
|
273
|
+
lines.push(` - ${call.name}(${preview})`);
|
|
274
|
+
}
|
|
275
|
+
});
|
|
276
|
+
return lines.join('\n');
|
|
277
|
+
}
|
|
278
|
+
//# sourceMappingURL=parallel-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parallel-tools.js","sourceRoot":"","sources":["../src/parallel-tools.ts"],"names":[],"mappings":"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"}
|