From 4ffa7215cacb24d2318ad34df44d4b6dbbab11a2 Mon Sep 17 00:00:00 2001 From: nerfZael Date: Mon, 21 Aug 2023 12:15:59 +0200 Subject: [PATCH] caller now defines agent package --- apps/browser/package.json | 1 + apps/browser/src/pages/Dojo.tsx | 18 ++++++++++++- apps/cli/package.json | 1 + apps/cli/src/cli.ts | 20 +++++++++++++- packages/core/src/agents/evo/Evo.ts | 7 +++-- .../src/agents/script-writer/ScriptWriter.ts | 2 +- packages/core/src/wrap/WrapClient.ts | 26 +++++++------------ 7 files changed, 53 insertions(+), 22 deletions(-) diff --git a/apps/browser/package.json b/apps/browser/package.json index 59767ac7..b86e2baf 100644 --- a/apps/browser/package.json +++ b/apps/browser/package.json @@ -9,6 +9,7 @@ }, "dependencies": { "@evo-ninja/core": "0.1.0", + "@polywrap/client-js": "~0.12.0", "@fortawesome/fontawesome-svg-core": "^6.4.2", "@fortawesome/free-brands-svg-icons": "^6.4.2", "@fortawesome/free-solid-svg-icons": "^6.4.2", diff --git a/apps/browser/src/pages/Dojo.tsx b/apps/browser/src/pages/Dojo.tsx index b4e42227..c1cad133 100644 --- a/apps/browser/src/pages/Dojo.tsx +++ b/apps/browser/src/pages/Dojo.tsx @@ -2,6 +2,7 @@ import React, { useState, useEffect } from 'react'; import * as EvoCore from "@evo-ninja/core"; import cl100k_base from "gpt-tokenizer/esm/encoding/cl100k_base"; +import { PluginPackage } from "@polywrap/plugin-js"; import './Dojo.css'; @@ -127,13 +128,28 @@ function Dojo() { cl100k_base, logger ); + const agentPackage = PluginPackage.from(module => ({ + "onGoalAchieved": async (args: any) => { + logger.success("Goal has been achieved!!!!!"); + }, + "speak": async (args: any) => { + logger.success("Agent: " + args.message); + return "User has been informed! If you think you've achieved the goal, execute onGoalAchieved."; + }, + "ask": async (args: any) => { + logger.error("Agent: " + args.message); + const response = await prompt(""); + return "User: " + response; + }, + })); setEvo(new EvoCore.Evo( userWorkspace, scripts, llm, chat, - logger + logger, + agentPackage )); } catch (err) { setDojoError(err); diff --git a/apps/cli/package.json b/apps/cli/package.json index 0390d9f5..63e7b883 100644 --- a/apps/cli/package.json +++ b/apps/cli/package.json @@ -15,6 +15,7 @@ }, "dependencies": { "@evo-ninja/core": "0.1.0", + "@polywrap/client-js": "~0.12.0", "chalk": "^4.1.2", "clui": "~0.3.6", "dotenv": "~16.3.1", diff --git a/apps/cli/src/cli.ts b/apps/cli/src/cli.ts index 6e2bb983..d8caf410 100644 --- a/apps/cli/src/cli.ts +++ b/apps/cli/src/cli.ts @@ -13,6 +13,7 @@ import dotenv from "dotenv"; import readline from "readline"; import path from "path"; import cl100k_base from "gpt-tokenizer/cjs/encoding/cl100k_base"; +import { PluginPackage } from "@polywrap/plugin-js"; dotenv.config({ path: path.join(__dirname, "../../../.env") @@ -78,13 +79,30 @@ export async function cli(): Promise { logger ); + const agentPackage = PluginPackage.from(module => ({ + "onGoalAchieved": async (args: any) => { + logger.success("Goal has been achieved!"); + process.exit(0); + }, + "speak": async (args: any) => { + logger.success("Agent: " + args.message); + return "User has been informed! If you think you've achieved the goal, execute onGoalAchieved."; + }, + "ask": async (args: any) => { + logger.error("Agent: " + args.message); + const response = await prompt(""); + return "User: " + response; + }, + })); + // Create Evo const evo = new Evo( userWorkspace, scripts, llm, chat, - logger + logger, + agentPackage ); await logger.logHeader(); diff --git a/packages/core/src/agents/evo/Evo.ts b/packages/core/src/agents/evo/Evo.ts index 8b0ab804..a784f0b7 100644 --- a/packages/core/src/agents/evo/Evo.ts +++ b/packages/core/src/agents/evo/Evo.ts @@ -7,6 +7,7 @@ import { LlmApi, Chat } from "../../llm"; import { WrapClient } from "../../wrap"; import { Scripts } from "../../Scripts"; import { InMemoryWorkspace, Workspace, Logger } from "../../sys"; +import { IWrapPackage } from "@polywrap/client-js"; export class Evo implements Agent { private client: WrapClient; @@ -17,11 +18,13 @@ export class Evo implements Agent { private readonly scripts: Scripts, private readonly llm: LlmApi, private readonly chat: Chat, - private readonly logger: Logger + private readonly logger: Logger, + private readonly agentPackage: IWrapPackage ) { this.client = new WrapClient( this.workspace, - this.logger + this.logger, + this.agentPackage ); this.globals = {}; diff --git a/packages/core/src/agents/script-writer/ScriptWriter.ts b/packages/core/src/agents/script-writer/ScriptWriter.ts index 08430eae..75883a8b 100644 --- a/packages/core/src/agents/script-writer/ScriptWriter.ts +++ b/packages/core/src/agents/script-writer/ScriptWriter.ts @@ -20,7 +20,7 @@ export class ScriptWriter implements Agent { ) { this.client = new WrapClient( this.workspace, - this.logger + this.logger, ); this.globals = {}; diff --git a/packages/core/src/wrap/WrapClient.ts b/packages/core/src/wrap/WrapClient.ts index 7984c642..31b8af4b 100644 --- a/packages/core/src/wrap/WrapClient.ts +++ b/packages/core/src/wrap/WrapClient.ts @@ -2,7 +2,8 @@ import { PolywrapClient, PolywrapClientConfigBuilder, Uri, - InvokeResult + InvokeResult, + IWrapPackage } from "@polywrap/client-js"; import { PluginPackage } from "@polywrap/plugin-js"; import axios from "axios"; @@ -16,7 +17,8 @@ export class WrapClient extends PolywrapClient { constructor( workspace: Workspace, - logger: Logger + logger: Logger, + agentPlugin: IWrapPackage | undefined = undefined, ) { const jsPromiseOutput = { result: undefined }; @@ -104,23 +106,13 @@ export class WrapClient extends PolywrapClient { logger.notice(`AXIOS.HEAD = ${args.url}`); return await axios.head(args.url, args.config); }, - }))) - .setPackage("plugin/agent", PluginPackage.from(module => ({ - "onGoalAchieved": async (args: any) => { - logger.success("Goal has been achieved!"); - process.exit(0); - }, - "speak": async (args: any) => { - logger.success("Agent: " + args.message); - return "User has been informed! If you think you've achieved the goal, execute onGoalAchieved."; - }, - "ask": async (args: any) => { - logger.error("Agent: " + args.message); - const response = await prompt(""); - return "User: " + response; - }, }))); + if (agentPlugin) { + builder + .setPackage("plugin/agent", agentPlugin); + } + super(builder.build()); this.jsPromiseOutput = jsPromiseOutput;