@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.
@@ -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
- const messages = [
548
- {
549
- role: 'system',
550
- content: prompts.formatSystemPrompt()
551
- },
552
- {
565
+ let messages = [];
566
+ if (modify) {
567
+ messages = this.message_history;
568
+ messages.push({
553
569
  role: 'user',
554
- content: prompts.formatUserPrompt(prompt)
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
- return await generator.generateWorkflow(prompt);
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
- const messages = [
544
- {
545
- role: 'system',
546
- content: prompts.formatSystemPrompt()
547
- },
548
- {
561
+ let messages = [];
562
+ if (modify) {
563
+ messages = this.message_history;
564
+ messages.push({
549
565
  role: 'user',
550
- content: prompts.formatUserPrompt(prompt)
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
- return await generator.generateWorkflow(prompt);
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;
@@ -3,4 +3,3 @@ export * from './workflow.types';
3
3
  export * from './eko.types';
4
4
  export * from './llm.types';
5
5
  export * from './tools.types';
6
- export * from './framework.types';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eko-ai/eko",
3
- "version": "1.0.6",
3
+ "version": "1.0.7",
4
4
  "description": "Empowering language to transform human words into action.",
5
5
  "main": "dist/index.cjs.js",
6
6
  "module": "dist/index.esm.js",