@just-every/ensemble 0.1.25 → 0.1.26

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.
@@ -0,0 +1,167 @@
1
+ export class ToolBuilder {
2
+ options;
3
+ parameters = {};
4
+ requiredParams = [];
5
+ implementation;
6
+ constructor(name) {
7
+ this.options = { name };
8
+ }
9
+ description(desc) {
10
+ this.options.description = desc;
11
+ return this;
12
+ }
13
+ category(cat) {
14
+ this.options.category = cat;
15
+ return this;
16
+ }
17
+ param(name, schema, required = false) {
18
+ this.parameters[name] = schema;
19
+ if (required) {
20
+ this.requiredParams.push(name);
21
+ }
22
+ return this;
23
+ }
24
+ string(name, description, required = true) {
25
+ return this.param(name, {
26
+ type: 'string',
27
+ description
28
+ }, required);
29
+ }
30
+ number(name, description, required = true) {
31
+ return this.param(name, {
32
+ type: 'number',
33
+ description
34
+ }, required);
35
+ }
36
+ boolean(name, description, required = true) {
37
+ return this.param(name, {
38
+ type: 'boolean',
39
+ description
40
+ }, required);
41
+ }
42
+ array(name, itemType, description, required = true) {
43
+ return this.param(name, {
44
+ type: 'array',
45
+ items: { type: itemType },
46
+ description
47
+ }, required);
48
+ }
49
+ object(name, properties, description, required = true) {
50
+ return this.param(name, {
51
+ type: 'object',
52
+ properties,
53
+ description
54
+ }, required);
55
+ }
56
+ enum(name, values, description, required = true) {
57
+ return this.param(name, {
58
+ type: 'string',
59
+ enum: values,
60
+ description
61
+ }, required);
62
+ }
63
+ constraints(opts) {
64
+ Object.assign(this.options, opts);
65
+ return this;
66
+ }
67
+ hasSideEffects() {
68
+ this.options.sideEffects = true;
69
+ return this;
70
+ }
71
+ implement(fn) {
72
+ this.implementation = fn;
73
+ return this;
74
+ }
75
+ build() {
76
+ if (!this.implementation) {
77
+ throw new Error(`Tool ${this.options.name} has no implementation`);
78
+ }
79
+ const baseTool = {
80
+ function: this.implementation,
81
+ definition: {
82
+ type: 'function',
83
+ function: {
84
+ name: this.options.name,
85
+ description: this.options.description || `Tool for ${this.options.name}`,
86
+ parameters: {
87
+ type: 'object',
88
+ properties: this.parameters,
89
+ required: this.requiredParams
90
+ }
91
+ }
92
+ }
93
+ };
94
+ const enhancedTool = {
95
+ ...baseTool,
96
+ category: this.options.category,
97
+ priority: this.options.priority,
98
+ maxExecutions: this.options.maxExecutions,
99
+ cooldown: this.options.cooldown,
100
+ sideEffects: this.options.sideEffects
101
+ };
102
+ return enhancedTool;
103
+ }
104
+ }
105
+ export function tool(name) {
106
+ return new ToolBuilder(name);
107
+ }
108
+ export function createControlTools(handlers) {
109
+ const tools = [];
110
+ tools.push(tool('task_complete')
111
+ .description('Mark the current task as complete')
112
+ .category('control')
113
+ .constraints({ priority: 1 })
114
+ .hasSideEffects()
115
+ .string('result', 'The task result')
116
+ .number('confidence', 'Confidence score 0-1', false)
117
+ .implement(async ({ result, confidence }) => {
118
+ if (handlers.onComplete) {
119
+ handlers.onComplete({ result, confidence });
120
+ }
121
+ return `Task completed: ${result}`;
122
+ })
123
+ .build());
124
+ tools.push(tool('report_error')
125
+ .description('Report an error that prevents task completion')
126
+ .category('control')
127
+ .constraints({ priority: 1 })
128
+ .hasSideEffects()
129
+ .string('error', 'Error description')
130
+ .string('context', 'Error context', false)
131
+ .implement(async ({ error, context }) => {
132
+ if (handlers.onError) {
133
+ handlers.onError({ error, context });
134
+ }
135
+ return `Error reported: ${error}`;
136
+ })
137
+ .build());
138
+ if (handlers.onClarification) {
139
+ tools.push(tool('request_clarification')
140
+ .description('Request clarification from the user')
141
+ .category('control')
142
+ .constraints({ priority: 2 })
143
+ .string('question', 'Clarification question')
144
+ .array('options', 'string', 'Suggested options', false)
145
+ .implement(async ({ question, options }) => {
146
+ handlers.onClarification(question, options);
147
+ return 'Clarification requested';
148
+ })
149
+ .build());
150
+ }
151
+ return tools;
152
+ }
153
+ export function createToolBatch(baseConfig, tools) {
154
+ return tools.map(toolConfig => {
155
+ const builder = tool(baseConfig.prefix ? `${baseConfig.prefix}_${toolConfig.name}` : toolConfig.name)
156
+ .description(toolConfig.description)
157
+ .category(baseConfig.category || 'utility')
158
+ .constraints({ priority: baseConfig.priority });
159
+ if (toolConfig.params) {
160
+ Object.entries(toolConfig.params).forEach(([name, schema]) => {
161
+ builder.param(name, schema, true);
162
+ });
163
+ }
164
+ return builder.implement(toolConfig.implement).build();
165
+ });
166
+ }
167
+ //# sourceMappingURL=tool_builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool_builder.js","sourceRoot":"","sources":["../../utils/tool_builder.ts"],"names":[],"mappings":"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"}
@@ -1516,8 +1516,6 @@ export declare const RequestOptionsSchema: z.ZodObject<{
1516
1516
  };
1517
1517
  type?: "function";
1518
1518
  };
1519
- max_tokens?: number;
1520
- top_p?: number;
1521
1519
  messages?: ({
1522
1520
  model?: string;
1523
1521
  type?: "message";
@@ -1614,7 +1612,6 @@ export declare const RequestOptionsSchema: z.ZodObject<{
1614
1612
  timestamp?: number;
1615
1613
  output?: string;
1616
1614
  })[];
1617
- stream?: boolean;
1618
1615
  tools?: {
1619
1616
  function?: {
1620
1617
  parameters?: {
@@ -1627,6 +1624,9 @@ export declare const RequestOptionsSchema: z.ZodObject<{
1627
1624
  };
1628
1625
  type?: "function";
1629
1626
  }[];
1627
+ max_tokens?: number;
1628
+ top_p?: number;
1629
+ stream?: boolean;
1630
1630
  }, {
1631
1631
  model?: string;
1632
1632
  temperature?: number;
@@ -1636,8 +1636,6 @@ export declare const RequestOptionsSchema: z.ZodObject<{
1636
1636
  };
1637
1637
  type?: "function";
1638
1638
  };
1639
- max_tokens?: number;
1640
- top_p?: number;
1641
1639
  messages?: ({
1642
1640
  model?: string;
1643
1641
  type?: "message";
@@ -1734,7 +1732,6 @@ export declare const RequestOptionsSchema: z.ZodObject<{
1734
1732
  timestamp?: number;
1735
1733
  output?: string;
1736
1734
  })[];
1737
- stream?: boolean;
1738
1735
  tools?: {
1739
1736
  function?: {
1740
1737
  parameters?: {
@@ -1747,6 +1744,9 @@ export declare const RequestOptionsSchema: z.ZodObject<{
1747
1744
  };
1748
1745
  type?: "function";
1749
1746
  }[];
1747
+ max_tokens?: number;
1748
+ top_p?: number;
1749
+ stream?: boolean;
1750
1750
  }>;
1751
1751
  export declare const validateAPIResponse: <T>(schema: z.ZodSchema<T>, data: unknown, context: string) => T;
1752
1752
  export declare const StreamEventTypeSchema: z.ZodEnum<["connected", "command_start", "command_done", "project_create", "project_update", "process_start", "process_running", "process_updated", "process_done", "process_failed", "process_waiting", "process_terminated", "agent_start", "agent_updated", "agent_done", "agent_status", "message_start", "message_delta", "message_complete", "talk_start", "talk_delta", "talk_complete", "audio_stream", "tool_start", "tool_delta", "tool_done", "file_start", "file_delta", "file_complete", "cost_update", "system_status", "system_update", "quota_update", "screenshot", "design_grid", "console", "error", "tool_wait_start", "tool_waiting", "tool_wait_complete", "task_wait_start", "task_waiting", "task_wait_complete", "git_pull_request", "stream_end"]>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@just-every/ensemble",
3
- "version": "0.1.25",
3
+ "version": "0.1.26",
4
4
  "description": "LLM provider abstraction layer with unified streaming interface",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +0,0 @@
1
- import { EnsembleStreamEvent, ResponseInput, RequestOptions as BaseRequestOptions } from '../types.js';
2
- import { EnhancedRequestOptions, RequestContext } from '../types/tool_types.js';
3
- export interface RequestOptions extends BaseRequestOptions, EnhancedRequestOptions {
4
- }
5
- export declare function enhancedRequest(model: string, messages: ResponseInput, options?: RequestOptions, context?: RequestContext): AsyncGenerator<EnsembleStreamEvent>;
6
- //# sourceMappingURL=enhanced_request.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"enhanced_request.d.ts","sourceRoot":"","sources":["../../utils/enhanced_request.ts"],"names":[],"mappings":"AAIA,OAAO,EACH,mBAAmB,EACnB,aAAa,EAGb,cAAc,IAAI,kBAAkB,EAEvC,MAAM,aAAa,CAAC;AACrB,OAAO,EACH,sBAAsB,EACtB,cAAc,EAMjB,MAAM,wBAAwB,CAAC;AAOhC,MAAM,WAAW,cAAe,SAAQ,kBAAkB,EAAE,sBAAsB;CAAG;AAerF,wBAAuB,eAAe,CAClC,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,aAAa,EACvB,OAAO,GAAE,cAAmB,EAC5B,OAAO,CAAC,EAAE,cAAc,GACzB,cAAc,CAAC,mBAAmB,CAAC,CA2WrC"}
@@ -1,325 +0,0 @@
1
- import { ToolCallAction, createRequestContext, isLoopConfig } from '../types/tool_types.js';
2
- import { getModelProvider } from '../model_providers/model_provider.js';
3
- import { RequestAgent } from '../index.js';
4
- export async function* enhancedRequest(model, messages, options = {}, context) {
5
- const ctx = context || createRequestContext({
6
- messages: [...messages]
7
- });
8
- const { toolHandler, toolCategories, toolFilter, toolPriority, loop = false, maxToolCalls = 10, maxToolCallsPerTurn, toolChoiceStrategy, toolResultTransformer, allowedEvents, eventEmitter, onStreamComplete, cacheToolResults = false, parallelExecution = 1, debug = false, ...baseOptions } = options;
9
- const executionState = {
10
- executions: new Map(),
11
- lastExecution: new Map(),
12
- metrics: {
13
- duration: 0,
14
- tokenCount: 0,
15
- toolCallCount: 0,
16
- modelCalls: 0,
17
- errors: 0,
18
- timestamp: Date.now()
19
- },
20
- cache: new Map()
21
- };
22
- let availableTools = baseOptions.tools || [];
23
- if (toolCategories && toolCategories.length > 0) {
24
- availableTools = availableTools.filter(tool => toolCategories.includes(tool.category || 'custom'));
25
- }
26
- if (toolFilter) {
27
- availableTools = availableTools.filter(toolFilter);
28
- }
29
- if (toolPriority) {
30
- availableTools = toolPriority(availableTools);
31
- }
32
- let iteration = 0;
33
- const loopConfig = isLoopConfig(loop) ? loop : { maxIterations: loop ? Infinity : 1 };
34
- while (ctx.shouldContinue && iteration < (loopConfig.maxIterations || 1)) {
35
- if (loopConfig.maxDuration && Date.now() - ctx.startTime > loopConfig.maxDuration) {
36
- yield createEvent('error', { error: 'Loop duration exceeded' });
37
- break;
38
- }
39
- if (loopConfig.onIteration) {
40
- await loopConfig.onIteration(iteration, ctx);
41
- }
42
- if (loopConfig.continueCondition) {
43
- const shouldContinue = await loopConfig.continueCondition(ctx);
44
- if (!shouldContinue) {
45
- break;
46
- }
47
- }
48
- const iterationMessages = ctx.getHistory();
49
- const collectedToolCalls = [];
50
- const toolResults = [];
51
- let hasMessage = false;
52
- let messageContent = '';
53
- executionState.metrics.modelCalls++;
54
- let toolChoice;
55
- if (toolChoiceStrategy) {
56
- toolChoice = toolChoiceStrategy(ctx.toolCallCount, ctx.turnCount, toolHandler?.context || ctx);
57
- }
58
- const provider = getModelProvider(model);
59
- const requestOptions = {
60
- ...baseOptions,
61
- tools: availableTools,
62
- modelSettings: {
63
- ...baseOptions.modelSettings,
64
- tool_choice: toolChoice
65
- }
66
- };
67
- const agent = new RequestAgent(requestOptions);
68
- const stream = provider.createResponseStream(model, iterationMessages, agent);
69
- try {
70
- for await (const event of stream) {
71
- if (allowedEvents && !allowedEvents.includes(event.type)) {
72
- continue;
73
- }
74
- if (eventEmitter) {
75
- await eventEmitter(event, toolHandler?.context || ctx);
76
- }
77
- yield event;
78
- switch (event.type) {
79
- case 'message_complete':
80
- if ('content' in event) {
81
- messageContent = event.content;
82
- hasMessage = true;
83
- ctx.addMessage({
84
- type: 'message',
85
- role: 'assistant',
86
- content: event.content,
87
- status: 'completed'
88
- });
89
- }
90
- break;
91
- case 'tool_start':
92
- if ('tool_calls' in event && event.tool_calls) {
93
- for (const toolCall of event.tool_calls) {
94
- const tool = availableTools.find(t => t.definition.function.name === toolCall.function.name);
95
- if (tool) {
96
- if (!checkToolConstraints(tool, executionState)) {
97
- toolResults.push({
98
- id: toolCall.id,
99
- call_id: toolCall.call_id || toolCall.id,
100
- output: JSON.stringify({
101
- error: 'Tool execution constraints violated'
102
- })
103
- });
104
- continue;
105
- }
106
- let action = ToolCallAction.EXECUTE;
107
- if (toolHandler?.onToolCall) {
108
- const result = await toolHandler.onToolCall(toolCall, toolHandler.context || ctx);
109
- if (typeof result === 'object' && 'action' in result) {
110
- action = result.action;
111
- if (result.replacement) {
112
- toolResults.push({
113
- id: toolCall.id,
114
- call_id: toolCall.call_id || toolCall.id,
115
- output: typeof result.replacement === 'string'
116
- ? result.replacement
117
- : JSON.stringify(result.replacement)
118
- });
119
- }
120
- }
121
- else {
122
- action = result;
123
- }
124
- }
125
- switch (action) {
126
- case ToolCallAction.EXECUTE:
127
- collectedToolCalls.push(toolCall);
128
- const result = await executeToolCall(tool, toolCall, toolHandler, executionState, ctx);
129
- toolResults.push(result);
130
- break;
131
- case ToolCallAction.SKIP:
132
- break;
133
- case ToolCallAction.HALT:
134
- ctx.halt();
135
- break;
136
- case ToolCallAction.REPLACE:
137
- break;
138
- }
139
- }
140
- }
141
- }
142
- break;
143
- case 'cost_update':
144
- if ('usage' in event && event.usage) {
145
- executionState.metrics.tokenCount +=
146
- (event.usage.input_tokens || 0) +
147
- (event.usage.output_tokens || 0);
148
- }
149
- break;
150
- case 'error':
151
- executionState.metrics.errors++;
152
- if (loopConfig.breakOnError) {
153
- ctx.halt();
154
- }
155
- break;
156
- }
157
- if (ctx.isHalted) {
158
- break;
159
- }
160
- }
161
- }
162
- catch (error) {
163
- executionState.metrics.errors++;
164
- yield createEvent('error', {
165
- error: error instanceof Error ? error.message : String(error)
166
- });
167
- if (loopConfig.breakOnError) {
168
- break;
169
- }
170
- }
171
- if (collectedToolCalls.length > 0) {
172
- if (!hasMessage) {
173
- ctx.addMessage({
174
- type: 'message',
175
- role: 'assistant',
176
- content: '',
177
- status: 'completed'
178
- });
179
- }
180
- for (const toolCall of collectedToolCalls) {
181
- ctx.addMessage({
182
- type: 'function_call',
183
- id: toolCall.id,
184
- call_id: toolCall.call_id || toolCall.id,
185
- name: toolCall.function.name,
186
- arguments: toolCall.function.arguments
187
- });
188
- const result = toolResults.find(r => r.call_id === (toolCall.call_id || toolCall.id));
189
- if (result) {
190
- let output = result.output;
191
- if (toolResultTransformer) {
192
- if (toolResultTransformer.transform) {
193
- output = toolResultTransformer.transform(toolCall.function.name, output, toolHandler?.context || ctx);
194
- }
195
- if (toolResultTransformer.augment) {
196
- output = toolResultTransformer.augment(toolCall.function.name, output, executionState.metrics);
197
- }
198
- if (toolResultTransformer.format) {
199
- output = toolResultTransformer.format(toolCall.function.name, output);
200
- }
201
- }
202
- ctx.addMessage({
203
- type: 'function_call_output',
204
- id: toolCall.id,
205
- call_id: toolCall.call_id || toolCall.id,
206
- name: toolCall.function.name,
207
- output: typeof output === 'string' ? output : JSON.stringify(output)
208
- });
209
- }
210
- }
211
- ctx.toolCallCount += collectedToolCalls.length;
212
- executionState.metrics.toolCallCount += collectedToolCalls.length;
213
- }
214
- if (maxToolCallsPerTurn && collectedToolCalls.length >= maxToolCallsPerTurn) {
215
- ctx.turnCount++;
216
- }
217
- if (ctx.toolCallCount >= maxToolCalls) {
218
- yield createEvent('error', {
219
- error: `Maximum tool calls (${maxToolCalls}) reached`
220
- });
221
- break;
222
- }
223
- if (onStreamComplete) {
224
- const shouldContinue = await onStreamComplete({ messageContent, toolCalls: collectedToolCalls }, toolHandler?.context || ctx);
225
- if (!shouldContinue) {
226
- break;
227
- }
228
- }
229
- if (collectedToolCalls.length === 0 && !loop) {
230
- break;
231
- }
232
- iteration++;
233
- }
234
- executionState.metrics.duration = Date.now() - executionState.metrics.timestamp;
235
- if (debug && (typeof debug === 'object' ? debug.logMetrics : true)) {
236
- yield createEvent('system_update', {
237
- type: 'metrics',
238
- data: executionState.metrics
239
- });
240
- }
241
- yield createEvent('stream_end', {});
242
- }
243
- async function executeToolCall(tool, toolCall, toolHandler, executionState, ctx) {
244
- const startTime = Date.now();
245
- try {
246
- const args = toolCall.function.arguments
247
- ? JSON.parse(toolCall.function.arguments)
248
- : {};
249
- const cacheKey = `${tool.definition.function.name}:${JSON.stringify(args)}`;
250
- if (executionState.cache.has(cacheKey)) {
251
- return {
252
- id: toolCall.id,
253
- call_id: toolCall.call_id || toolCall.id,
254
- output: executionState.cache.get(cacheKey)
255
- };
256
- }
257
- let result;
258
- if (toolHandler?.executor) {
259
- result = await toolHandler.executor(tool, args, toolHandler.context || ctx);
260
- }
261
- else if ('function' in tool) {
262
- result = await tool.function(args);
263
- }
264
- else {
265
- throw new Error('No executor available for tool');
266
- }
267
- executionState.executions.set(tool.definition.function.name, (executionState.executions.get(tool.definition.function.name) || 0) + 1);
268
- executionState.lastExecution.set(tool.definition.function.name, Date.now());
269
- if (executionState.cache) {
270
- executionState.cache.set(cacheKey, result);
271
- }
272
- if (toolHandler?.onToolComplete) {
273
- await toolHandler.onToolComplete(toolCall, result, toolHandler.context || ctx);
274
- }
275
- return {
276
- id: toolCall.id,
277
- call_id: toolCall.call_id || toolCall.id,
278
- output: typeof result === 'string' ? result : JSON.stringify(result)
279
- };
280
- }
281
- catch (error) {
282
- if (toolHandler?.onToolError) {
283
- const errorResult = await toolHandler.onToolError(toolCall, error, toolHandler.context || ctx);
284
- if (errorResult !== undefined) {
285
- return {
286
- id: toolCall.id,
287
- call_id: toolCall.call_id || toolCall.id,
288
- output: typeof errorResult === 'string'
289
- ? errorResult
290
- : JSON.stringify(errorResult)
291
- };
292
- }
293
- }
294
- return {
295
- id: toolCall.id,
296
- call_id: toolCall.call_id || toolCall.id,
297
- output: JSON.stringify({
298
- error: `Tool execution failed: ${error instanceof Error ? error.message : String(error)}`
299
- })
300
- };
301
- }
302
- }
303
- function checkToolConstraints(tool, state) {
304
- if (tool.maxExecutions) {
305
- const execCount = state.executions.get(tool.definition.function.name) || 0;
306
- if (execCount >= tool.maxExecutions) {
307
- return false;
308
- }
309
- }
310
- if (tool.cooldown) {
311
- const lastExec = state.lastExecution.get(tool.definition.function.name);
312
- if (lastExec && Date.now() - lastExec < tool.cooldown) {
313
- return false;
314
- }
315
- }
316
- return true;
317
- }
318
- function createEvent(type, data) {
319
- return {
320
- type: type,
321
- timestamp: new Date().toISOString(),
322
- ...data
323
- };
324
- }
325
- //# sourceMappingURL=enhanced_request.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"enhanced_request.js","sourceRoot":"","sources":["../../utils/enhanced_request.ts"],"names":[],"mappings":"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"}