1.12.6 • Published 4 months ago

@aigne/example-workflow-code-execution v1.12.6

Weekly downloads
-
License
MIT
Repository
github
Last release
4 months ago

Workflow code-execution Demo

This is a demonstration of using AIGNE Framework to build a code-execution workflow. The example now supports both one-shot and interactive chat modes, along with customizable model settings and pipeline input/output.

flowchart LR

in(In)
out(Out)
coder(Coder)
sandbox(Sandbox)

coder -.-> sandbox
sandbox -.-> coder
in ==> coder ==> out


classDef inputOutput fill:#f9f0ed,stroke:#debbae,stroke-width:2px,color:#b35b39,font-weight:bolder;
classDef processing fill:#F0F4EB,stroke:#C2D7A7,stroke-width:2px,color:#6B8F3C,font-weight:bolder;

class in inputOutput
class out inputOutput
class coder processing
class sandbox processing

Workflow of a code-execution between user and coder using a sandbox:

sequenceDiagram

participant User
participant Coder as Agent Coder
participant Sandbox as Agent Sandbox

User ->> Coder: 10! = ?
Coder ->> Sandbox: "function factorial(n) { return n <= 1 ? 1 : n * factorial(n - 1) } factorial(10)"
Sandbox ->> Coder: { result: 3628800 }
Coder ->> User: The value of \(10!\) (10 factorial) is 3,628,800.

Prerequisites

  • Node.js and npm installed on your machine
  • An OpenAI API key for interacting with OpenAI's services
  • Optional dependencies (if running the example from source code):
    • Bun for running unit tests & examples
    • Pnpm for package management

Quick Start (No Installation Required)

export OPENAI_API_KEY=YOUR_OPENAI_API_KEY # Set your OpenAI API key

# Run in one-shot mode (default)
npx -y @aigne/example-workflow-code-execution

# Run in interactive chat mode
npx -y @aigne/example-workflow-code-execution --chat

# Use pipeline input
echo "Calculate 15!" | npx -y @aigne/example-workflow-code-execution

Installation

Clone the Repository

git clone https://github.com/AIGNE-io/aigne-framework

Install Dependencies

cd aigne-framework/examples/workflow-code-execution

pnpm install

Setup Environment Variables

Setup your OpenAI API key in the .env.local file:

OPENAI_API_KEY="" # Set your OpenAI API key here

Run the Example

pnpm start # Run in one-shot mode (default)

# Run in interactive chat mode
pnpm start -- --chat

# Use pipeline input
echo "Calculate 15!" | pnpm start

Run Options

The example supports the following command-line parameters:

ParameterDescriptionDefault
--chatRun in interactive chat modeDisabled (one-shot mode)
--model <provider[:model]>AI model to use in format 'provider:model' where model is optional. Examples: 'openai' or 'openai:gpt-4o-mini'openai
--temperature <value>Temperature for model generationProvider default
--top-p <value>Top-p sampling valueProvider default
--presence-penalty <value>Presence penalty valueProvider default
--frequency-penalty <value>Frequency penalty valueProvider default
--log-level <level>Set logging level (ERROR, WARN, INFO, DEBUG, TRACE)INFO
--input, -i <input>Specify input directlyNone

Examples

# Run in chat mode (interactive)
pnpm start -- --chat

# Set logging level
pnpm start -- --log-level DEBUG

# Use pipeline input
echo "Calculate 15!" | pnpm start

Example

The following example demonstrates how to build a code-execution workflow:

import assert from "node:assert";
import { AIAgent, AIGNE, FunctionAgent } from "@aigne/core";
import { OpenAIChatModel } from "@aigne/core/models/openai-chat-model.js";
import { z } from "zod";

const { OPENAI_API_KEY } = process.env;
assert(OPENAI_API_KEY, "Please set the OPENAI_API_KEY environment variable");

const model = new OpenAIChatModel({
  apiKey: OPENAI_API_KEY,
});

const sandbox = FunctionAgent.from({
  name: "evaluateJs",
  description: "A js sandbox for running javascript code",
  inputSchema: z.object({
    code: z.string().describe("The code to run"),
  }),
  process: async (input: { code: string }) => {
    const { code } = input;
    // biome-ignore lint/security/noGlobalEval: <explanation>
    const result = eval(code);
    return { result };
  },
});

const coder = AIAgent.from({
  name: "coder",
  instructions: `\
You are a proficient coder. You write code to solve problems.
Work with the sandbox to execute your code.
`,
  skills: [sandbox],
});

const aigne = new AIGNE({ model });

const result = await aigne.invoke(coder, "10! = ?");
console.log(result);
// Output:
// {
//   $message: "The value of \\(10!\\) (10 factorial) is 3,628,800.",
// }

License

This project is licensed under the MIT License.

1.12.6

4 months ago

1.12.5

4 months ago

1.12.4

4 months ago

1.12.3

4 months ago

1.12.2

4 months ago

1.12.1

4 months ago

1.12.0

4 months ago

1.11.1

4 months ago

1.11.0

5 months ago

1.10.1

5 months ago

1.10.0

5 months ago

1.9.0

5 months ago

1.8.0

5 months ago

1.7.0

6 months ago

1.6.2

6 months ago

1.6.1

6 months ago

1.5.0

6 months ago

1.4.0

6 months ago

1.3.0

6 months ago

1.2.1

6 months ago

1.2.0

7 months ago

1.1.0

7 months ago

1.1.0-beta.17

7 months ago

1.1.0-beta.16

7 months ago

1.1.0-beta.15

7 months ago

1.1.0-beta.14

7 months ago

1.1.0-beta.13

7 months ago