From d415faf1ac0905b8dffc3c2841dd22ad228d8caf Mon Sep 17 00:00:00 2001 From: Mike Grabowski Date: Sat, 7 Dec 2024 11:51:46 +0100 Subject: [PATCH] feat: add very rough wikipedia example --- README.md | 14 ------- bun.lockb | Bin 258740 -> 304924 bytes example/package.json | 11 +++++ {examples => example}/surprise_trip.ts | 29 ++++++++++++- example/tsconfig.json | 3 ++ package.json | 16 +++---- packages/framework/package.json | 17 ++++++++ {src => packages/framework/src}/index.ts | 51 +++++++++++------------ packages/framework/tsconfig.json | 3 ++ tsconfig.json | 2 +- 10 files changed, 91 insertions(+), 55 deletions(-) create mode 100644 example/package.json rename {examples => example}/surprise_trip.ts (68%) create mode 100644 example/tsconfig.json create mode 100644 packages/framework/package.json rename {src => packages/framework/src}/index.ts (90%) create mode 100644 packages/framework/tsconfig.json diff --git a/README.md b/README.md index 673e8b6..284e5e9 100644 --- a/README.md +++ b/README.md @@ -1,15 +1 @@ # dead-simple-ai-agent - -To install dependencies: - -```bash -bun install -``` - -To run: - -```bash -bun run index.ts -``` - -This project was created using `bun init` in bun v1.1.38. [Bun](https://bun.sh) is a fast all-in-one JavaScript runtime. diff --git a/bun.lockb b/bun.lockb index 69845dd33e63fc6d3c2ac3bb6404ec13ad39fdd7..22a867f000bde6e9b342c2f0c5adb6e57efed15f 100755 GIT binary patch delta 84600 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 ad5t}LR`525=MTVh`-43ycC$NvCA%Qnpb delta 54643 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 sWD%z9p*tI", + "type": "module", + "dependencies": { + "@dead-simple-ai-agent/framework": "0.0.1", + "@dead-simple-ai-agent/tools": "0.0.1", + "@langchain/community": "^0.3.17" + } +} diff --git a/examples/surprise_trip.ts b/example/surprise_trip.ts similarity index 68% rename from examples/surprise_trip.ts rename to example/surprise_trip.ts index 73ba1bc..fe35224 100644 --- a/examples/surprise_trip.ts +++ b/example/surprise_trip.ts @@ -1,8 +1,23 @@ /** * Example borrowed from CrewAI. */ +import { Agent, Team } from '@dead-simple-ai-agent/framework' +import { WikipediaQueryRun } from '@langchain/community/tools/wikipedia_query_run' +import { z } from 'zod' -import { Agent, Team } from '../src/index.js' +const wikipedia = new WikipediaQueryRun({ + topKResults: 3, + maxDocContentLength: 4000, +}) + +const wikipediaTool = { + name: 'wikipedia', + description: 'Tool for querying Wikipedia', + parameters: z.object({ + query: z.string().describe('The query to search Wikipedia with'), + }), + function: ({ query }) => wikipedia.invoke(query), +} const personalizedActivityPlanner = new Agent({ role: 'Activity Planner', @@ -14,6 +29,15 @@ const personalizedActivityPlanner = new Agent({ `, }) +const landmarkScout = new Agent({ + role: 'Landmark Scout', + description: ` + You are skilled at researching and finding interesting landmarks at the destination. + Your goal is to find historical landmarks, museums, and other interesting places. + `, + tools: [wikipediaTool], +}) + const restaurantScout = new Agent({ role: 'Restaurant Scout', description: ` @@ -36,13 +60,14 @@ const itineraryCompiler = new Agent({ const team = new Team() const result = await team.execute({ - members: [personalizedActivityPlanner, restaurantScout, itineraryCompiler], + members: [personalizedActivityPlanner, restaurantScout, landmarkScout, itineraryCompiler], description: ` Research and find cool things to do in Wrocław, Poland. Focus: - activities and events that match the traveler's interests and age group. - highly-rated restaurants and dining experiences. + - landmarks with historic context. - picturesque and entertaining locations. Traveler's information: diff --git a/example/tsconfig.json b/example/tsconfig.json new file mode 100644 index 0000000..3c43903 --- /dev/null +++ b/example/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "../tsconfig.json" +} diff --git a/package.json b/package.json index 51c99c3..1093980 100644 --- a/package.json +++ b/package.json @@ -1,8 +1,10 @@ { "name": "dead-simple-ai-agent", - "description": "A dead simple AI agent framework", - "author": "Mike Grabowski ", - "type": "module", + "private": true, + "workspaces": [ + "packages/*", + "example" + ], "devDependencies": { "@release-it-plugins/workspaces": "^4.2.0", "@release-it/conventional-changelog": "^9.0.3", @@ -21,14 +23,6 @@ "typescript": "^5.1.3", "vitest": "^2.1.1" }, - "peerDependencies": { - "typescript": "^5.0.0" - }, - "dependencies": { - "dedent": "^1.5.3", - "openai": "^4.76.0", - "zod": "^3.23.8" - }, "trustedDependencies": [ "core-js" ] diff --git a/packages/framework/package.json b/packages/framework/package.json new file mode 100644 index 0000000..9aee63d --- /dev/null +++ b/packages/framework/package.json @@ -0,0 +1,17 @@ +{ + "name": "@dead-simple-ai-agent/framework", + "version": "0.0.1", + "description": "A dead simple AI agent framework", + "author": "Mike Grabowski ", + "exports": { + ".": { + "bun": "./src/index.ts" + } + }, + "type": "module", + "dependencies": { + "dedent": "^1.5.3", + "openai": "^4.76.0", + "zod": "^3.23.8" + } +} diff --git a/src/index.ts b/packages/framework/src/index.ts similarity index 90% rename from src/index.ts rename to packages/framework/src/index.ts index 4ca891d..fb37ea1 100644 --- a/src/index.ts +++ b/packages/framework/src/index.ts @@ -29,7 +29,7 @@ type ToolDefinition> = { name: string description: string parameters: T - execute: (parameters: z.infer) => Promise + function: (parameters: z.infer) => Promise } interface AgentConfig { @@ -123,7 +123,7 @@ export class Agent { // tbd: add other tools // tbd: should we include agent description in the prompt too? we need to list responsibilities // but keep context window in mind - // tools: tools.map(zodFunction), + tools: this.tools.length > 0 ? this.tools.map(zodFunction) : undefined, response_format: zodResponseFormat( z.object({ response: z.discriminatedUnion('kind', [ @@ -143,32 +143,29 @@ export class Agent { 'task_result' ), }) - // if (response.choices[0].message.tool_calls.length > 0) { - // const toolResults = await Promise.all( - // response.choices[0].message.tool_calls.map(async (toolCall) => { - // if (toolCall.type !== 'function') { - // throw new Error('Tool call is not a function') - // } - - // const tool = tools.find((t) => t.name === toolCall.function.name) - // if (!tool) { - // throw new Error(`Unknown tool: ${toolCall.function.name}`) - // } - // console.log('tool call', toolCall) - // const parameters = tool.parameters.parse(toolCall.function.arguments) - - // const content = await tool.function(parameters) - - // return { - // role: 'tool' as const, - // tool_call_id: toolCall.id, - // content: JSON.stringify(content), - // } - // }) - // ) + if (response.choices[0].message.tool_calls.length > 0) { + const toolResults = await Promise.all( + response.choices[0].message.tool_calls.map(async (toolCall) => { + if (toolCall.type !== 'function') { + throw new Error('Tool call is not a function') + } + + const tool = this.tools.find((t) => t.name === toolCall.function.name) + if (!tool) { + throw new Error(`Unknown tool: ${toolCall.function.name}`) + } + + const content = await tool.function(toolCall.function.parsed_arguments) + return { + role: 'tool' as const, + tool_call_id: toolCall.id, + content: JSON.stringify(content), + } + }) + ) - // return this.executeTask([...messages, response.choices[0].message, ...toolResults], agents) - // } + return this.executeTask([...messages, response.choices[0].message, ...toolResults], agents) + } // tbd: verify shape of response const result = response.choices[0].message.parsed diff --git a/packages/framework/tsconfig.json b/packages/framework/tsconfig.json new file mode 100644 index 0000000..4082f16 --- /dev/null +++ b/packages/framework/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "../../tsconfig.json" +} diff --git a/tsconfig.json b/tsconfig.json index ade9808..c34b06e 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -10,6 +10,6 @@ "esModuleInterop": true, "outDir": "dist", "resolveJsonModule": true, - "customConditions": ["source"] + "customConditions": ["bun"] } }