@eko-ai/eko 1.0.6 → 1.0.7
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/dist/core/eko.d.ts
CHANGED
|
@@ -6,9 +6,11 @@ export declare class Eko {
|
|
|
6
6
|
static tools: Map<string, Tool<any, any>>;
|
|
7
7
|
private llmProvider;
|
|
8
8
|
private toolRegistry;
|
|
9
|
+
private workflowGeneratorMap;
|
|
9
10
|
constructor(config: EkoConfig);
|
|
10
11
|
generate(prompt: string, param?: EkoInvokeParam): Promise<Workflow>;
|
|
11
12
|
execute(workflow: Workflow, callback?: WorkflowCallback): Promise<void>;
|
|
13
|
+
modify(workflow: Workflow, prompt: string): Promise<Workflow>;
|
|
12
14
|
private getTool;
|
|
13
15
|
callTool(toolName: string, input: object, callback?: WorkflowCallback): Promise<any>;
|
|
14
16
|
callTool(tool: Tool<any, any>, input: object, callback?: WorkflowCallback): Promise<any>;
|
package/dist/index.cjs.js
CHANGED
|
@@ -243,6 +243,16 @@ class ActionImpl {
|
|
|
243
243
|
}
|
|
244
244
|
}
|
|
245
245
|
if (context.__skip || context.__abort) {
|
|
246
|
+
toolResultMessage = {
|
|
247
|
+
role: 'user',
|
|
248
|
+
content: [
|
|
249
|
+
{
|
|
250
|
+
type: 'tool_result',
|
|
251
|
+
tool_use_id: toolCall.id,
|
|
252
|
+
content: 'skip',
|
|
253
|
+
},
|
|
254
|
+
],
|
|
255
|
+
};
|
|
246
256
|
return;
|
|
247
257
|
}
|
|
248
258
|
// Execute the tool
|
|
@@ -466,6 +476,7 @@ Generate a complete workflow that:
|
|
|
466
476
|
5. Includes detailed descriptions for each action, ensuring that the actions, when combined, is a complete solution to the user's problem`;
|
|
467
477
|
},
|
|
468
478
|
formatUserPrompt: (requirement) => `Create a workflow for the following requirement: ${requirement}`,
|
|
479
|
+
modifyUserPrompt: (prompt) => `Modify workflow: ${prompt}`,
|
|
469
480
|
};
|
|
470
481
|
}
|
|
471
482
|
function createWorkflowGenerationTool(registry) {
|
|
@@ -540,30 +551,68 @@ class WorkflowGenerator {
|
|
|
540
551
|
constructor(llmProvider, toolRegistry) {
|
|
541
552
|
this.llmProvider = llmProvider;
|
|
542
553
|
this.toolRegistry = toolRegistry;
|
|
554
|
+
this.message_history = [];
|
|
543
555
|
}
|
|
544
556
|
async generateWorkflow(prompt) {
|
|
557
|
+
return this.doGenerateWorkflow(prompt, false);
|
|
558
|
+
}
|
|
559
|
+
async modifyWorkflow(prompt) {
|
|
560
|
+
return this.doGenerateWorkflow(prompt, true);
|
|
561
|
+
}
|
|
562
|
+
async doGenerateWorkflow(prompt, modify) {
|
|
545
563
|
// Create prompts with current set of tools
|
|
546
564
|
const prompts = createWorkflowPrompts(this.toolRegistry.getToolDefinitions());
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
},
|
|
552
|
-
{
|
|
565
|
+
let messages = [];
|
|
566
|
+
if (modify) {
|
|
567
|
+
messages = this.message_history;
|
|
568
|
+
messages.push({
|
|
553
569
|
role: 'user',
|
|
554
|
-
content: prompts.
|
|
555
|
-
}
|
|
556
|
-
|
|
570
|
+
content: prompts.modifyUserPrompt(prompt),
|
|
571
|
+
});
|
|
572
|
+
}
|
|
573
|
+
else {
|
|
574
|
+
messages = this.message_history = [
|
|
575
|
+
{
|
|
576
|
+
role: 'system',
|
|
577
|
+
content: prompts.formatSystemPrompt(),
|
|
578
|
+
},
|
|
579
|
+
{
|
|
580
|
+
role: 'user',
|
|
581
|
+
content: prompts.formatUserPrompt(prompt),
|
|
582
|
+
},
|
|
583
|
+
];
|
|
584
|
+
}
|
|
557
585
|
const params = {
|
|
558
586
|
temperature: 0.7,
|
|
559
587
|
maxTokens: 8192,
|
|
560
588
|
tools: [createWorkflowGenerationTool(this.toolRegistry)],
|
|
561
|
-
toolChoice: { type: 'tool', name: 'generate_workflow' }
|
|
589
|
+
toolChoice: { type: 'tool', name: 'generate_workflow' },
|
|
562
590
|
};
|
|
563
591
|
const response = await this.llmProvider.generateText(messages, params);
|
|
564
592
|
if (!response.toolCalls.length || !response.toolCalls[0].input.workflow) {
|
|
593
|
+
messages.pop();
|
|
565
594
|
throw new Error('Failed to generate workflow: Invalid response from LLM');
|
|
566
595
|
}
|
|
596
|
+
messages.push({
|
|
597
|
+
role: 'assistant',
|
|
598
|
+
content: [
|
|
599
|
+
{
|
|
600
|
+
type: 'tool_use',
|
|
601
|
+
id: response.toolCalls[0].id,
|
|
602
|
+
name: response.toolCalls[0].name,
|
|
603
|
+
input: response.toolCalls[0].input,
|
|
604
|
+
},
|
|
605
|
+
],
|
|
606
|
+
}, {
|
|
607
|
+
role: 'user',
|
|
608
|
+
content: [
|
|
609
|
+
{
|
|
610
|
+
type: 'tool_result',
|
|
611
|
+
tool_use_id: response.toolCalls[0].id,
|
|
612
|
+
content: 'ok',
|
|
613
|
+
},
|
|
614
|
+
],
|
|
615
|
+
});
|
|
567
616
|
const workflowData = response.toolCalls[0].input.workflow;
|
|
568
617
|
// Validate all tools exist
|
|
569
618
|
for (const node of workflowData.nodes) {
|
|
@@ -590,16 +639,13 @@ class WorkflowGenerator {
|
|
|
590
639
|
input: nodeData.input || { type: 'any', schema: {}, value: undefined },
|
|
591
640
|
output: nodeData.output || { type: 'any', schema: {}, value: undefined },
|
|
592
641
|
action: action,
|
|
593
|
-
dependencies: nodeData.dependencies || []
|
|
642
|
+
dependencies: nodeData.dependencies || [],
|
|
594
643
|
};
|
|
595
644
|
workflow.addNode(node);
|
|
596
645
|
});
|
|
597
646
|
}
|
|
598
647
|
return workflow;
|
|
599
648
|
}
|
|
600
|
-
async modifyWorkflow(workflow, prompt) {
|
|
601
|
-
throw new Error('Not implemented');
|
|
602
|
-
}
|
|
603
649
|
}
|
|
604
650
|
|
|
605
651
|
const VERSION$1 = '0.33.1'; // x-release-please-version
|
|
@@ -9112,6 +9158,7 @@ class ToolRegistry {
|
|
|
9112
9158
|
class Eko {
|
|
9113
9159
|
constructor(config) {
|
|
9114
9160
|
this.toolRegistry = new ToolRegistry();
|
|
9161
|
+
this.workflowGeneratorMap = new Map();
|
|
9115
9162
|
if (typeof config == 'string') {
|
|
9116
9163
|
this.llmProvider = new ClaudeProvider(config);
|
|
9117
9164
|
}
|
|
@@ -9148,11 +9195,19 @@ class Eko {
|
|
|
9148
9195
|
}
|
|
9149
9196
|
}
|
|
9150
9197
|
const generator = new WorkflowGenerator(this.llmProvider, toolRegistry);
|
|
9151
|
-
|
|
9198
|
+
const workflow = await generator.generateWorkflow(prompt);
|
|
9199
|
+
this.workflowGeneratorMap.set(workflow, generator);
|
|
9200
|
+
return workflow;
|
|
9152
9201
|
}
|
|
9153
9202
|
async execute(workflow, callback) {
|
|
9154
9203
|
return await workflow.execute(callback);
|
|
9155
9204
|
}
|
|
9205
|
+
async modify(workflow, prompt) {
|
|
9206
|
+
const generator = this.workflowGeneratorMap.get(workflow);
|
|
9207
|
+
workflow = await generator.modifyWorkflow(prompt);
|
|
9208
|
+
this.workflowGeneratorMap.set(workflow, generator);
|
|
9209
|
+
return workflow;
|
|
9210
|
+
}
|
|
9156
9211
|
getTool(toolName) {
|
|
9157
9212
|
let tool;
|
|
9158
9213
|
if (this.toolRegistry.hasTools([toolName])) {
|
package/dist/index.esm.js
CHANGED
|
@@ -239,6 +239,16 @@ class ActionImpl {
|
|
|
239
239
|
}
|
|
240
240
|
}
|
|
241
241
|
if (context.__skip || context.__abort) {
|
|
242
|
+
toolResultMessage = {
|
|
243
|
+
role: 'user',
|
|
244
|
+
content: [
|
|
245
|
+
{
|
|
246
|
+
type: 'tool_result',
|
|
247
|
+
tool_use_id: toolCall.id,
|
|
248
|
+
content: 'skip',
|
|
249
|
+
},
|
|
250
|
+
],
|
|
251
|
+
};
|
|
242
252
|
return;
|
|
243
253
|
}
|
|
244
254
|
// Execute the tool
|
|
@@ -462,6 +472,7 @@ Generate a complete workflow that:
|
|
|
462
472
|
5. Includes detailed descriptions for each action, ensuring that the actions, when combined, is a complete solution to the user's problem`;
|
|
463
473
|
},
|
|
464
474
|
formatUserPrompt: (requirement) => `Create a workflow for the following requirement: ${requirement}`,
|
|
475
|
+
modifyUserPrompt: (prompt) => `Modify workflow: ${prompt}`,
|
|
465
476
|
};
|
|
466
477
|
}
|
|
467
478
|
function createWorkflowGenerationTool(registry) {
|
|
@@ -536,30 +547,68 @@ class WorkflowGenerator {
|
|
|
536
547
|
constructor(llmProvider, toolRegistry) {
|
|
537
548
|
this.llmProvider = llmProvider;
|
|
538
549
|
this.toolRegistry = toolRegistry;
|
|
550
|
+
this.message_history = [];
|
|
539
551
|
}
|
|
540
552
|
async generateWorkflow(prompt) {
|
|
553
|
+
return this.doGenerateWorkflow(prompt, false);
|
|
554
|
+
}
|
|
555
|
+
async modifyWorkflow(prompt) {
|
|
556
|
+
return this.doGenerateWorkflow(prompt, true);
|
|
557
|
+
}
|
|
558
|
+
async doGenerateWorkflow(prompt, modify) {
|
|
541
559
|
// Create prompts with current set of tools
|
|
542
560
|
const prompts = createWorkflowPrompts(this.toolRegistry.getToolDefinitions());
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
},
|
|
548
|
-
{
|
|
561
|
+
let messages = [];
|
|
562
|
+
if (modify) {
|
|
563
|
+
messages = this.message_history;
|
|
564
|
+
messages.push({
|
|
549
565
|
role: 'user',
|
|
550
|
-
content: prompts.
|
|
551
|
-
}
|
|
552
|
-
|
|
566
|
+
content: prompts.modifyUserPrompt(prompt),
|
|
567
|
+
});
|
|
568
|
+
}
|
|
569
|
+
else {
|
|
570
|
+
messages = this.message_history = [
|
|
571
|
+
{
|
|
572
|
+
role: 'system',
|
|
573
|
+
content: prompts.formatSystemPrompt(),
|
|
574
|
+
},
|
|
575
|
+
{
|
|
576
|
+
role: 'user',
|
|
577
|
+
content: prompts.formatUserPrompt(prompt),
|
|
578
|
+
},
|
|
579
|
+
];
|
|
580
|
+
}
|
|
553
581
|
const params = {
|
|
554
582
|
temperature: 0.7,
|
|
555
583
|
maxTokens: 8192,
|
|
556
584
|
tools: [createWorkflowGenerationTool(this.toolRegistry)],
|
|
557
|
-
toolChoice: { type: 'tool', name: 'generate_workflow' }
|
|
585
|
+
toolChoice: { type: 'tool', name: 'generate_workflow' },
|
|
558
586
|
};
|
|
559
587
|
const response = await this.llmProvider.generateText(messages, params);
|
|
560
588
|
if (!response.toolCalls.length || !response.toolCalls[0].input.workflow) {
|
|
589
|
+
messages.pop();
|
|
561
590
|
throw new Error('Failed to generate workflow: Invalid response from LLM');
|
|
562
591
|
}
|
|
592
|
+
messages.push({
|
|
593
|
+
role: 'assistant',
|
|
594
|
+
content: [
|
|
595
|
+
{
|
|
596
|
+
type: 'tool_use',
|
|
597
|
+
id: response.toolCalls[0].id,
|
|
598
|
+
name: response.toolCalls[0].name,
|
|
599
|
+
input: response.toolCalls[0].input,
|
|
600
|
+
},
|
|
601
|
+
],
|
|
602
|
+
}, {
|
|
603
|
+
role: 'user',
|
|
604
|
+
content: [
|
|
605
|
+
{
|
|
606
|
+
type: 'tool_result',
|
|
607
|
+
tool_use_id: response.toolCalls[0].id,
|
|
608
|
+
content: 'ok',
|
|
609
|
+
},
|
|
610
|
+
],
|
|
611
|
+
});
|
|
563
612
|
const workflowData = response.toolCalls[0].input.workflow;
|
|
564
613
|
// Validate all tools exist
|
|
565
614
|
for (const node of workflowData.nodes) {
|
|
@@ -586,16 +635,13 @@ class WorkflowGenerator {
|
|
|
586
635
|
input: nodeData.input || { type: 'any', schema: {}, value: undefined },
|
|
587
636
|
output: nodeData.output || { type: 'any', schema: {}, value: undefined },
|
|
588
637
|
action: action,
|
|
589
|
-
dependencies: nodeData.dependencies || []
|
|
638
|
+
dependencies: nodeData.dependencies || [],
|
|
590
639
|
};
|
|
591
640
|
workflow.addNode(node);
|
|
592
641
|
});
|
|
593
642
|
}
|
|
594
643
|
return workflow;
|
|
595
644
|
}
|
|
596
|
-
async modifyWorkflow(workflow, prompt) {
|
|
597
|
-
throw new Error('Not implemented');
|
|
598
|
-
}
|
|
599
645
|
}
|
|
600
646
|
|
|
601
647
|
const VERSION$1 = '0.33.1'; // x-release-please-version
|
|
@@ -9108,6 +9154,7 @@ class ToolRegistry {
|
|
|
9108
9154
|
class Eko {
|
|
9109
9155
|
constructor(config) {
|
|
9110
9156
|
this.toolRegistry = new ToolRegistry();
|
|
9157
|
+
this.workflowGeneratorMap = new Map();
|
|
9111
9158
|
if (typeof config == 'string') {
|
|
9112
9159
|
this.llmProvider = new ClaudeProvider(config);
|
|
9113
9160
|
}
|
|
@@ -9144,11 +9191,19 @@ class Eko {
|
|
|
9144
9191
|
}
|
|
9145
9192
|
}
|
|
9146
9193
|
const generator = new WorkflowGenerator(this.llmProvider, toolRegistry);
|
|
9147
|
-
|
|
9194
|
+
const workflow = await generator.generateWorkflow(prompt);
|
|
9195
|
+
this.workflowGeneratorMap.set(workflow, generator);
|
|
9196
|
+
return workflow;
|
|
9148
9197
|
}
|
|
9149
9198
|
async execute(workflow, callback) {
|
|
9150
9199
|
return await workflow.execute(callback);
|
|
9151
9200
|
}
|
|
9201
|
+
async modify(workflow, prompt) {
|
|
9202
|
+
const generator = this.workflowGeneratorMap.get(workflow);
|
|
9203
|
+
workflow = await generator.modifyWorkflow(prompt);
|
|
9204
|
+
this.workflowGeneratorMap.set(workflow, generator);
|
|
9205
|
+
return workflow;
|
|
9206
|
+
}
|
|
9152
9207
|
getTool(toolName) {
|
|
9153
9208
|
let tool;
|
|
9154
9209
|
if (this.toolRegistry.hasTools([toolName])) {
|
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
import { LLMProvider } from '../../types/llm.types';
|
|
1
|
+
import { LLMProvider, Message } from '../../types/llm.types';
|
|
2
2
|
import { Workflow } from '../../types/workflow.types';
|
|
3
3
|
import { ToolRegistry } from '../../core/tool-registry';
|
|
4
4
|
export declare class WorkflowGenerator {
|
|
5
5
|
private llmProvider;
|
|
6
6
|
private toolRegistry;
|
|
7
|
+
message_history: Message[];
|
|
7
8
|
constructor(llmProvider: LLMProvider, toolRegistry: ToolRegistry);
|
|
8
9
|
generateWorkflow(prompt: string): Promise<Workflow>;
|
|
10
|
+
modifyWorkflow(prompt: string): Promise<Workflow>;
|
|
11
|
+
private doGenerateWorkflow;
|
|
9
12
|
private createWorkflowFromData;
|
|
10
|
-
modifyWorkflow(workflow: Workflow, prompt: string): Promise<Workflow>;
|
|
11
13
|
}
|
|
@@ -3,5 +3,6 @@ import { ToolRegistry } from '../../core/tool-registry';
|
|
|
3
3
|
export declare function createWorkflowPrompts(tools: ToolDefinition[]): {
|
|
4
4
|
formatSystemPrompt: () => string;
|
|
5
5
|
formatUserPrompt: (requirement: string) => string;
|
|
6
|
+
modifyUserPrompt: (prompt: string) => string;
|
|
6
7
|
};
|
|
7
8
|
export declare function createWorkflowGenerationTool(registry: ToolRegistry): ToolDefinition;
|
package/dist/types/index.d.ts
CHANGED