diff --git a/.gitignore b/.gitignore index 8415293..9d0eb56 100644 --- a/.gitignore +++ b/.gitignore @@ -175,4 +175,4 @@ dist .DS_Store last-run-id.txt -context-*.json \ No newline at end of file +context-*.json diff --git a/example/src/ecommerce_product_description.ts b/example/src/ecommerce_product_description.ts index 6921fb6..ed33c63 100644 --- a/example/src/ecommerce_product_description.ts +++ b/example/src/ecommerce_product_description.ts @@ -5,7 +5,7 @@ import { agent } from '@dead-simple-ai-agent/framework/agent' import { teamwork } from '@dead-simple-ai-agent/framework/teamwork' import { workflow } from '@dead-simple-ai-agent/framework/workflow' -import { visionTool } from '@dead-simple-ai-agent/tools' +import { visionTool } from '@dead-simple-ai-agent/tools/vision' const techExpert = agent({ role: 'Technical expert', diff --git a/package.json b/package.json index f45c5e7..d581426 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,5 @@ "trustedDependencies": [ "core-js" ], - "dependencies": { - "nanoid": "^5.0.9" - } + "version": "0.0.1" } diff --git a/packages/framework/README.md b/packages/framework/README.md new file mode 100644 index 0000000..482df72 --- /dev/null +++ b/packages/framework/README.md @@ -0,0 +1,3 @@ +@dead-simple-ai-agent/framework +==== + diff --git a/packages/framework/package.json b/packages/framework/package.json index bf1200e..60d6c31 100644 --- a/packages/framework/package.json +++ b/packages/framework/package.json @@ -1,14 +1,22 @@ { "name": "@dead-simple-ai-agent/framework", - "version": "0.0.1", "description": "A dead simple AI agent framework", "author": "Mike Grabowski ", + "contributors": [ + "Piotr Karwatka " + ], + "scripts": { + "clean": "rm -rf dist", + "build": "bun run clean && bun run build:lib && bun run build:types", + "build:lib": "rslib build", + "build:types": "tsc --emitDeclarationOnly --declaration --outdir dist/types" + }, "exports": { "./*": { - "bun": "./src/*.ts" - }, - "./models/*": { - "bun": "./src/models/*.ts" + "bun": "./src/*.ts", + "types": "./dist/types/*.d.ts", + "require": "./dist/*.cjs", + "import": "./dist/*.js" } }, "type": "module", @@ -16,5 +24,24 @@ "dedent": "^1.5.3", "openai": "^4.76.0", "zod": "^3.23.8" - } + }, + "license": "MIT", + "repository": { + "type": "git", + "url": "git+https://github.com/callstackincubator/ai-agent-framework.git" + }, + "keywords": [ + "ai", + "ai agents", + "ai tools" + ], + "files": [ + "dist", + "src", + "README.md" + ], + "engines": { + "node": ">=22" + }, + "version": "0.0.1" } diff --git a/packages/framework/rslib.config.ts b/packages/framework/rslib.config.ts new file mode 100644 index 0000000..d09ea5e --- /dev/null +++ b/packages/framework/rslib.config.ts @@ -0,0 +1,39 @@ +import { defineConfig } from '@rslib/core' + +const entry = { + agent: './src/agent.ts', + models: './src/models.ts', + teamwork: './src/teamwork.ts', + telemetry: './src/telemetry.ts', + tool: './src/tool.ts', + workflow: './src/workflow.ts', +} + +export default defineConfig({ + lib: [ + { + source: { + entry, + }, + format: 'esm', + bundle: false, + output: { + distPath: { + root: 'dist', + }, + }, + }, + { + source: { + entry, + }, + format: 'cjs', + bundle: false, + output: { + distPath: { + root: 'dist', + }, + }, + }, + ], +}) diff --git a/packages/framework/src/agent.ts b/packages/framework/src/agent.ts index 834b7f6..a386911 100644 --- a/packages/framework/src/agent.ts +++ b/packages/framework/src/agent.ts @@ -1,4 +1,4 @@ -import { openai, Provider } from './models/openai.js' +import { openai, Provider } from './models.js' import { Tool } from './tool.js' import { RequiredOptionals } from './types.js' diff --git a/packages/framework/src/models/openai.ts b/packages/framework/src/models.ts similarity index 95% rename from packages/framework/src/models/openai.ts rename to packages/framework/src/models.ts index a7c7412..20bb9c1 100644 --- a/packages/framework/src/models/openai.ts +++ b/packages/framework/src/models.ts @@ -1,7 +1,7 @@ import OpenAI, { ClientOptions } from 'openai' import { ChatCompletionCreateParamsNonStreaming } from 'openai/resources/index.mjs' -import { RequiredOptionals } from '../types.js' +import { RequiredOptionals } from './types.js' type OpenAIOptions = { model?: string diff --git a/packages/framework/src/supervisor/finalizeWorkflow.ts b/packages/framework/src/supervisor/finalizeWorkflow.ts index 65a2bd7..0ddbad3 100644 --- a/packages/framework/src/supervisor/finalizeWorkflow.ts +++ b/packages/framework/src/supervisor/finalizeWorkflow.ts @@ -2,7 +2,7 @@ import s from 'dedent' import { zodResponseFormat } from 'openai/helpers/zod.mjs' import { z } from 'zod' -import { Provider } from '../models/openai.js' +import { Provider } from '../models.js' import { Message } from '../types.js' export async function finalizeWorkflow(provider: Provider, messages: Message[]): Promise { diff --git a/packages/framework/src/supervisor/nextTask.ts b/packages/framework/src/supervisor/nextTask.ts index 02ceee7..0c0c24d 100644 --- a/packages/framework/src/supervisor/nextTask.ts +++ b/packages/framework/src/supervisor/nextTask.ts @@ -2,7 +2,7 @@ import s from 'dedent' import { zodResponseFormat } from 'openai/helpers/zod.mjs' import { z } from 'zod' -import { Provider } from '../models/openai.js' +import { Provider } from '../models.js' import { Message } from '../types.js' export async function nextTask(provider: Provider, history: Message[]): Promise { diff --git a/packages/framework/src/supervisor/selectAgent.ts b/packages/framework/src/supervisor/selectAgent.ts index ad466a1..cc75971 100644 --- a/packages/framework/src/supervisor/selectAgent.ts +++ b/packages/framework/src/supervisor/selectAgent.ts @@ -3,7 +3,7 @@ import { zodResponseFormat } from 'openai/helpers/zod.mjs' import { z } from 'zod' import { Agent } from '../agent.js' -import { Provider } from '../models/openai.js' +import { Provider } from '../models.js' import { Message } from '../types.js' export async function selectAgent( diff --git a/packages/framework/src/tool.ts b/packages/framework/src/tool.ts index 2afd5e7..4d8431a 100644 --- a/packages/framework/src/tool.ts +++ b/packages/framework/src/tool.ts @@ -1,6 +1,6 @@ import z, { ZodTypeAny } from 'zod' -import { Provider } from './models/openai.js' +import { Provider } from './models.js' import { Message } from './types.js' export type Tool

= { diff --git a/packages/framework/src/workflow.ts b/packages/framework/src/workflow.ts index da16d28..77f2a84 100644 --- a/packages/framework/src/workflow.ts +++ b/packages/framework/src/workflow.ts @@ -3,7 +3,7 @@ import { randomUUID } from 'node:crypto' import s from 'dedent' import { Agent } from './agent.js' -import { openai, Provider } from './models/openai.js' +import { openai, Provider } from './models.js' import { noop, Telemetry } from './telemetry.js' import { Message } from './types.js' diff --git a/packages/framework/tsconfig.json b/packages/framework/tsconfig.json index 4082f16..7513033 100644 --- a/packages/framework/tsconfig.json +++ b/packages/framework/tsconfig.json @@ -1,3 +1,4 @@ { - "extends": "../../tsconfig.json" + "extends": "../../tsconfig.json", + "include": ["./src"] } diff --git a/packages/tools/README.md b/packages/tools/README.md new file mode 100644 index 0000000..f918da0 --- /dev/null +++ b/packages/tools/README.md @@ -0,0 +1,3 @@ +@dead-simple-ai-agent/tools +==== + diff --git a/packages/tools/package.json b/packages/tools/package.json index 5ba7426..f27007d 100644 --- a/packages/tools/package.json +++ b/packages/tools/package.json @@ -1,20 +1,43 @@ { "name": "@dead-simple-ai-agent/tools", - "version": "0.0.1", "description": "A dead simple AI agent tools", "author": "Piotr Karwatka ", + "scripts": { + "clean": "rm -rf dist", + "build": "bun run clean && bun run build:lib && bun run build:types", + "build:lib": "rslib build", + "build:types": "tsc --emitDeclarationOnly --declaration --outdir dist/types" + }, "exports": { - ".": { - "bun": "./src/index.ts" - }, - "./tools": { - "bun": "./src/index.ts" + "./*": { + "bun": "./src/*.ts", + "types": "./dist/types/*.d.ts", + "require": "./dist/*.cjs", + "import": "./dist/*.js" } }, "type": "module", "dependencies": { - "dedent": "^1.5.3", - "openai": "^4.76.0", + "@dead-simple-ai-agent/framework": "0.0.1", "zod": "^3.23.8" - } + }, + "license": "MIT", + "repository": { + "type": "git", + "url": "git+https://github.com/callstackincubator/ai-agent-framework.git" + }, + "keywords": [ + "ai", + "ai agents", + "ai tools" + ], + "files": [ + "dist", + "src", + "README.md" + ], + "engines": { + "node": ">=22" + }, + "version": "0.0.1" } diff --git a/packages/tools/rslib.config.ts b/packages/tools/rslib.config.ts new file mode 100644 index 0000000..74dd6da --- /dev/null +++ b/packages/tools/rslib.config.ts @@ -0,0 +1,34 @@ +import { defineConfig } from '@rslib/core' + +const entry = { + vision: './src/vision.ts', +} + +export default defineConfig({ + lib: [ + { + source: { + entry, + }, + format: 'esm', + bundle: false, + output: { + distPath: { + root: 'dist', + }, + }, + }, + { + source: { + entry, + }, + format: 'cjs', + bundle: false, + output: { + distPath: { + root: 'dist', + }, + }, + }, + ], +}) diff --git a/packages/tools/src/index.ts b/packages/tools/src/index.ts deleted file mode 100644 index c0d4b73..0000000 --- a/packages/tools/src/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { visionTool } from './vision/index.js' diff --git a/packages/tools/src/vision/index.ts b/packages/tools/src/vision.ts similarity index 89% rename from packages/tools/src/vision/index.ts rename to packages/tools/src/vision.ts index f8d559b..04bee1e 100644 --- a/packages/tools/src/vision/index.ts +++ b/packages/tools/src/vision.ts @@ -1,7 +1,4 @@ -/** - * Example borrowed from CrewAI. - */ -import { Provider } from '@dead-simple-ai-agent/framework/models/openai' +import { Provider } from '@dead-simple-ai-agent/framework/models' import { tool } from '@dead-simple-ai-agent/framework/tool' import * as fs from 'fs' import { z } from 'zod' @@ -48,15 +45,11 @@ const runWebHostedImages = async (provider: Provider, imagePathUrl: string): Pro } export const visionTool = tool({ - description: 'Tool for analyzing and OCR the pitures', + description: 'Tool for analyzing and OCR the pictures', parameters: z.object({ imagePathUrl: z.string().describe('The image path or URL'), }), execute: ({ imagePathUrl }, { provider }) => { - if (!imagePathUrl) { - throw new Error('Image Path or URL is required.') - } - if (imagePathUrl.startsWith('http')) { return runWebHostedImages(provider, imagePathUrl) } else { diff --git a/packages/tools/tsconfig.json b/packages/tools/tsconfig.json index 4082f16..7513033 100644 --- a/packages/tools/tsconfig.json +++ b/packages/tools/tsconfig.json @@ -1,3 +1,4 @@ { - "extends": "../../tsconfig.json" + "extends": "../../tsconfig.json", + "include": ["./src"] } diff --git a/website/package.json b/website/package.json index bf1f041..dc52022 100644 --- a/website/package.json +++ b/website/package.json @@ -1,7 +1,7 @@ { "name": "@dead-simple-ai-agent/website", - "version": "1.0.0", "private": true, + "type": "module", "scripts": { "dev": "rspress dev", "build": "rspress build", diff --git a/website/rspress.config.ts b/website/rspress.config.ts index 97505e2..0748e55 100644 --- a/website/rspress.config.ts +++ b/website/rspress.config.ts @@ -1,11 +1,11 @@ import * as path from 'node:path' -import { pluginTypeDoc } from '@rspress/plugin-typedoc' import { defineConfig } from 'rspress/config' +// import { pluginTypeDoc } from '@rspress/plugin-typedoc' export default defineConfig({ root: path.join(__dirname, 'docs'), - title: 'My Site', + title: 'Dead Simple AI Agent', icon: '/rspress-icon.png', logo: { light: '/rspress-light-logo.png', @@ -16,20 +16,20 @@ export default defineConfig({ { icon: 'github', mode: 'link', - content: 'https://github.com/web-infra-dev/rspress', + content: 'https://github.com/callstackincubator/ai-agent-framework', }, ], }, plugins: [ - pluginTypeDoc({ - entryPoints: [ - path.join(__dirname, '../packages/framework/src/agent.ts'), - path.join(__dirname, '../packages/framework/src/teamwork.ts'), - path.join(__dirname, '../packages/framework/src/tool.ts'), - path.join(__dirname, '../packages/framework/src/workflow.ts'), - path.join(__dirname, '../packages/framework/src/models/openai.ts'), - path.join(__dirname, '../packages/framework/src/telemetry.ts'), - ], - }), + // pluginTypeDoc({ + // entryPoints: [ + // path.join(__dirname, '../packages/framework/src/agent.ts'), + // path.join(__dirname, '../packages/framework/src/teamwork.ts'), + // path.join(__dirname, '../packages/framework/src/tool.ts'), + // path.join(__dirname, '../packages/framework/src/workflow.ts'), + // path.join(__dirname, '../packages/framework/src/models/openai.ts'), + // path.join(__dirname, '../packages/framework/src/telemetry.ts'), + // ], + // }), ], })