From 0380070e98e8d59efa411fc74dd95aa49f0ea752 Mon Sep 17 00:00:00 2001 From: Xingyao Wang Date: Thu, 21 Mar 2024 03:09:29 +0800 Subject: [PATCH] Abstraction that allows us to develop different agents, frontend, backend, and evaluation in parallel (#68) * move agent to langchains_agent * remove old .env * remove the old agent folder * add preliminary version of Agent abstraction * add preliminary version of the main.py * merge controlloop and main into a Agent class * add init * fix json import * fix missing arg * get langchains_agent working after abstraction * rename `research` to `agenthub` * rename: rename research to agenthub --------- Co-authored-by: huybery --- agent/build-and-run.sh | 9 -- agent/lib/actions/__init__.py | 6 - agent/lib/controlloop.py | 18 --- agent/main.py | 83 ------------ agenthub/README.md | 6 + agenthub/__init__.py | 1 + .../langchains_agent}/.dockerignore | 0 .../langchains_agent}/Dockerfile | 5 +- .../langchains_agent}/README.md | 3 +- {agent => agenthub/langchains_agent}/TODO.md | 0 agenthub/langchains_agent/__init__.py | 111 ++++++++++++++++ agenthub/langchains_agent/build-and-run.sh | 19 +++ .../langchains_agent}/regression/.gitignore | 0 .../langchains_agent}/regression/README.md | 0 .../regression/cases/client-server/logs.txt | 0 .../regression/cases/client-server/task.txt | 0 .../cases/client-server/workspace/client/.env | 0 .../client-server/workspace/client/.gitignore | 0 .../client-server/workspace/client/README.md | 0 .../workspace/client/package-lock.json | 0 .../workspace/client/package.json | 0 .../workspace/client/public/favicon.ico | Bin .../workspace/client/public/index.html | 0 .../workspace/client/public/logo192.png | Bin .../workspace/client/public/logo512.png | Bin .../workspace/client/public/manifest.json | 0 .../workspace/client/public/robots.txt | 0 .../workspace/client/src/App.css | 0 .../client-server/workspace/client/src/App.js | 0 .../workspace/client/src/App.test.js | 0 .../workspace/client/src/index.css | 0 .../workspace/client/src/index.js | 0 .../workspace/client/src/logo.svg | 0 .../workspace/client/src/reportWebVitals.js | 0 .../workspace/client/src/setupTests.js | 0 .../client-server/workspace/package-lock.json | 0 .../client-server/workspace/package.json | 0 .../cases/client-server/workspace/server.js | 0 .../regression/cases/express/logs.txt | 0 .../regression/cases/express/task.txt | 0 .../cases/express/workspace/index.js | 0 .../cases/express/workspace/package-lock.json | 0 .../cases/express/workspace/package.json | 0 .../regression/cases/hello-name/logs.txt | 0 .../cases/hello-name/start/hello_world.sh | 0 .../regression/cases/hello-name/task.txt | 0 .../cases/hello-name/workspace/hello_world.sh | 0 .../regression/cases/hello-world/logs.txt | 0 .../regression/cases/hello-world/task.txt | 0 .../hello-world/workspace/hello_world.sh | 0 .../cases/node-cli-rewrite/logs.txt | 0 .../node-cli-rewrite/start/commands/length.py | 0 .../start/commands/lowercase.py | 0 .../start/commands/reverse.py | 0 .../start/commands/scramble.py | 0 .../start/commands/spongebob.py | 0 .../start/commands/uppercase.py | 0 .../node-cli-rewrite/start/string_cli.py | 0 .../cases/node-cli-rewrite/task.txt | 0 .../cases/node-cli-rewrite/workspace/cli.js | 0 .../workspace/commands/index.js | 0 .../workspace/commands/length.js | 0 .../workspace/commands/length.py | 0 .../workspace/commands/lowercase.js | 0 .../workspace/commands/lowercase.py | 0 .../workspace/commands/reverse.js | 0 .../workspace/commands/reverse.py | 0 .../workspace/commands/scramble.js | 0 .../workspace/commands/scramble.py | 0 .../workspace/commands/spongebob.js | 0 .../workspace/commands/spongebob.py | 0 .../workspace/commands/uppercase.js | 0 .../workspace/commands/uppercase.py | 0 .../node-cli-rewrite/workspace/string_cli.py | 0 .../regression/cases/python-cli-help/logs.txt | 0 .../python-cli-help/start/commands/length.py | 0 .../start/commands/lowercase.py | 0 .../python-cli-help/start/commands/reverse.py | 0 .../start/commands/scramble.py | 0 .../start/commands/spongebob.py | 0 .../start/commands/uppercase.py | 0 .../cases/python-cli-help/start/string_cli.py | 0 .../regression/cases/python-cli-help/task.txt | 0 .../workspace/commands/length.py | 0 .../workspace/commands/lowercase.py | 0 .../workspace/commands/reverse.py | 0 .../workspace/commands/scramble.py | 0 .../workspace/commands/spongebob.py | 0 .../workspace/commands/uppercase.py | 0 .../python-cli-help/workspace/string_cli.py | 0 .../regression/cases/python-cli/logs.txt | 0 .../regression/cases/python-cli/task.txt | 0 .../python-cli/workspace/commands/length.py | 0 .../workspace/commands/lowercase.py | 0 .../python-cli/workspace/commands/reverse.py | 0 .../python-cli/workspace/commands/scramble.py | 0 .../workspace/commands/spongebob.py | 0 .../workspace/commands/uppercase.py | 0 .../cases/python-cli/workspace/string_cli.py | 0 .../regression/cases/react-todo/logs.txt | 0 .../regression/cases/react-todo/task.txt | 0 .../react-todo/workspace/todo-app/.gitignore | 0 .../react-todo/workspace/todo-app/README.md | 0 .../workspace/todo-app/package-lock.json | 0 .../workspace/todo-app/package.json | 0 .../workspace/todo-app/public/favicon.ico | Bin .../workspace/todo-app/public/index.html | 0 .../workspace/todo-app/public/logo192.png | Bin .../workspace/todo-app/public/logo512.png | Bin .../workspace/todo-app/public/manifest.json | 0 .../workspace/todo-app/public/robots.txt | 0 .../react-todo/workspace/todo-app/src/App.css | 0 .../react-todo/workspace/todo-app/src/App.js | 0 .../workspace/todo-app/src/App.test.js | 0 .../workspace/todo-app/src/index.css | 0 .../workspace/todo-app/src/index.js | 0 .../workspace/todo-app/src/logo.svg | 0 .../workspace/todo-app/src/reportWebVitals.js | 0 .../workspace/todo-app/src/setupTests.js | 0 .../regression/cases/server-test/logs.txt | 0 .../cases/server-test/start/server.py | 0 .../regression/cases/server-test/task.txt | 0 .../cases/server-test/workspace/README.md | 0 .../cases/server-test/workspace/server.py | 0 .../langchains_agent}/regression/run.sh | 0 .../langchains_agent}/requirements.txt | 0 .../utils/actions/__init__.py | 6 + .../langchains_agent/utils}/actions/browse.py | 0 .../langchains_agent/utils}/actions/kill.py | 0 .../langchains_agent/utils}/actions/read.py | 0 .../langchains_agent/utils}/actions/run.py | 0 .../langchains_agent/utils}/actions/write.py | 0 .../langchains_agent/utils}/agent.py | 8 +- .../langchains_agent/utils}/event.py | 2 +- .../langchains_agent/utils}/json.py | 0 .../langchains_agent/utils}/llm.py | 2 +- .../langchains_agent/utils}/memory.py | 2 +- .../langchains_agent/utils}/monologue.py | 6 +- opendevin/agent.py | 122 ++++++++++++++++++ opendevin/main.py | 18 +++ 140 files changed, 296 insertions(+), 131 deletions(-) delete mode 100755 agent/build-and-run.sh delete mode 100644 agent/lib/actions/__init__.py delete mode 100644 agent/lib/controlloop.py delete mode 100644 agent/main.py create mode 100644 agenthub/README.md create mode 100644 agenthub/__init__.py rename {agent => agenthub/langchains_agent}/.dockerignore (100%) rename {agent => agenthub/langchains_agent}/Dockerfile (81%) rename {agent => agenthub/langchains_agent}/README.md (53%) rename {agent => agenthub/langchains_agent}/TODO.md (100%) create mode 100644 agenthub/langchains_agent/__init__.py create mode 100755 agenthub/langchains_agent/build-and-run.sh rename {agent => agenthub/langchains_agent}/regression/.gitignore (100%) rename {agent => agenthub/langchains_agent}/regression/README.md (100%) rename {agent => agenthub/langchains_agent}/regression/cases/client-server/logs.txt (100%) rename {agent => agenthub/langchains_agent}/regression/cases/client-server/task.txt (100%) rename {agent => agenthub/langchains_agent}/regression/cases/client-server/workspace/client/.env (100%) rename {agent => agenthub/langchains_agent}/regression/cases/client-server/workspace/client/.gitignore (100%) rename {agent => agenthub/langchains_agent}/regression/cases/client-server/workspace/client/README.md (100%) rename {agent => agenthub/langchains_agent}/regression/cases/client-server/workspace/client/package-lock.json (100%) rename {agent => agenthub/langchains_agent}/regression/cases/client-server/workspace/client/package.json (100%) rename {agent => agenthub/langchains_agent}/regression/cases/client-server/workspace/client/public/favicon.ico (100%) rename {agent => agenthub/langchains_agent}/regression/cases/client-server/workspace/client/public/index.html (100%) rename {agent => agenthub/langchains_agent}/regression/cases/client-server/workspace/client/public/logo192.png (100%) rename {agent => agenthub/langchains_agent}/regression/cases/client-server/workspace/client/public/logo512.png (100%) rename {agent => agenthub/langchains_agent}/regression/cases/client-server/workspace/client/public/manifest.json (100%) rename {agent => agenthub/langchains_agent}/regression/cases/client-server/workspace/client/public/robots.txt (100%) rename {agent => agenthub/langchains_agent}/regression/cases/client-server/workspace/client/src/App.css (100%) rename {agent => agenthub/langchains_agent}/regression/cases/client-server/workspace/client/src/App.js (100%) rename {agent => agenthub/langchains_agent}/regression/cases/client-server/workspace/client/src/App.test.js (100%) rename {agent => agenthub/langchains_agent}/regression/cases/client-server/workspace/client/src/index.css (100%) rename {agent => agenthub/langchains_agent}/regression/cases/client-server/workspace/client/src/index.js (100%) rename {agent => agenthub/langchains_agent}/regression/cases/client-server/workspace/client/src/logo.svg (100%) rename {agent => agenthub/langchains_agent}/regression/cases/client-server/workspace/client/src/reportWebVitals.js (100%) rename {agent => agenthub/langchains_agent}/regression/cases/client-server/workspace/client/src/setupTests.js (100%) rename {agent => agenthub/langchains_agent}/regression/cases/client-server/workspace/package-lock.json (100%) rename {agent => agenthub/langchains_agent}/regression/cases/client-server/workspace/package.json (100%) rename {agent => agenthub/langchains_agent}/regression/cases/client-server/workspace/server.js (100%) rename {agent => agenthub/langchains_agent}/regression/cases/express/logs.txt (100%) rename {agent => agenthub/langchains_agent}/regression/cases/express/task.txt (100%) rename {agent => agenthub/langchains_agent}/regression/cases/express/workspace/index.js (100%) rename {agent => agenthub/langchains_agent}/regression/cases/express/workspace/package-lock.json (100%) rename {agent => agenthub/langchains_agent}/regression/cases/express/workspace/package.json (100%) rename {agent => agenthub/langchains_agent}/regression/cases/hello-name/logs.txt (100%) rename {agent => agenthub/langchains_agent}/regression/cases/hello-name/start/hello_world.sh (100%) rename {agent => agenthub/langchains_agent}/regression/cases/hello-name/task.txt (100%) rename {agent => agenthub/langchains_agent}/regression/cases/hello-name/workspace/hello_world.sh (100%) rename {agent => agenthub/langchains_agent}/regression/cases/hello-world/logs.txt (100%) rename {agent => agenthub/langchains_agent}/regression/cases/hello-world/task.txt (100%) rename {agent => agenthub/langchains_agent}/regression/cases/hello-world/workspace/hello_world.sh (100%) rename {agent => agenthub/langchains_agent}/regression/cases/node-cli-rewrite/logs.txt (100%) rename {agent => agenthub/langchains_agent}/regression/cases/node-cli-rewrite/start/commands/length.py (100%) rename {agent => agenthub/langchains_agent}/regression/cases/node-cli-rewrite/start/commands/lowercase.py (100%) rename {agent => agenthub/langchains_agent}/regression/cases/node-cli-rewrite/start/commands/reverse.py (100%) rename {agent => agenthub/langchains_agent}/regression/cases/node-cli-rewrite/start/commands/scramble.py (100%) rename {agent => agenthub/langchains_agent}/regression/cases/node-cli-rewrite/start/commands/spongebob.py (100%) rename {agent => agenthub/langchains_agent}/regression/cases/node-cli-rewrite/start/commands/uppercase.py (100%) rename {agent => agenthub/langchains_agent}/regression/cases/node-cli-rewrite/start/string_cli.py (100%) rename {agent => agenthub/langchains_agent}/regression/cases/node-cli-rewrite/task.txt (100%) rename {agent => agenthub/langchains_agent}/regression/cases/node-cli-rewrite/workspace/cli.js (100%) rename {agent => agenthub/langchains_agent}/regression/cases/node-cli-rewrite/workspace/commands/index.js (100%) rename {agent => agenthub/langchains_agent}/regression/cases/node-cli-rewrite/workspace/commands/length.js (100%) rename {agent => agenthub/langchains_agent}/regression/cases/node-cli-rewrite/workspace/commands/length.py (100%) rename {agent => agenthub/langchains_agent}/regression/cases/node-cli-rewrite/workspace/commands/lowercase.js (100%) rename {agent => agenthub/langchains_agent}/regression/cases/node-cli-rewrite/workspace/commands/lowercase.py (100%) rename {agent => agenthub/langchains_agent}/regression/cases/node-cli-rewrite/workspace/commands/reverse.js (100%) rename {agent => agenthub/langchains_agent}/regression/cases/node-cli-rewrite/workspace/commands/reverse.py (100%) rename {agent => agenthub/langchains_agent}/regression/cases/node-cli-rewrite/workspace/commands/scramble.js (100%) rename {agent => agenthub/langchains_agent}/regression/cases/node-cli-rewrite/workspace/commands/scramble.py (100%) rename {agent => agenthub/langchains_agent}/regression/cases/node-cli-rewrite/workspace/commands/spongebob.js (100%) rename {agent => agenthub/langchains_agent}/regression/cases/node-cli-rewrite/workspace/commands/spongebob.py (100%) rename {agent => agenthub/langchains_agent}/regression/cases/node-cli-rewrite/workspace/commands/uppercase.js (100%) rename {agent => agenthub/langchains_agent}/regression/cases/node-cli-rewrite/workspace/commands/uppercase.py (100%) rename {agent => agenthub/langchains_agent}/regression/cases/node-cli-rewrite/workspace/string_cli.py (100%) rename {agent => agenthub/langchains_agent}/regression/cases/python-cli-help/logs.txt (100%) rename {agent => agenthub/langchains_agent}/regression/cases/python-cli-help/start/commands/length.py (100%) rename {agent => agenthub/langchains_agent}/regression/cases/python-cli-help/start/commands/lowercase.py (100%) rename {agent => agenthub/langchains_agent}/regression/cases/python-cli-help/start/commands/reverse.py (100%) rename {agent => agenthub/langchains_agent}/regression/cases/python-cli-help/start/commands/scramble.py (100%) rename {agent => agenthub/langchains_agent}/regression/cases/python-cli-help/start/commands/spongebob.py (100%) rename {agent => agenthub/langchains_agent}/regression/cases/python-cli-help/start/commands/uppercase.py (100%) rename {agent => agenthub/langchains_agent}/regression/cases/python-cli-help/start/string_cli.py (100%) rename {agent => agenthub/langchains_agent}/regression/cases/python-cli-help/task.txt (100%) rename {agent => agenthub/langchains_agent}/regression/cases/python-cli-help/workspace/commands/length.py (100%) rename {agent => agenthub/langchains_agent}/regression/cases/python-cli-help/workspace/commands/lowercase.py (100%) rename {agent => agenthub/langchains_agent}/regression/cases/python-cli-help/workspace/commands/reverse.py (100%) rename {agent => agenthub/langchains_agent}/regression/cases/python-cli-help/workspace/commands/scramble.py (100%) rename {agent => agenthub/langchains_agent}/regression/cases/python-cli-help/workspace/commands/spongebob.py (100%) rename {agent => agenthub/langchains_agent}/regression/cases/python-cli-help/workspace/commands/uppercase.py (100%) rename {agent => agenthub/langchains_agent}/regression/cases/python-cli-help/workspace/string_cli.py (100%) rename {agent => agenthub/langchains_agent}/regression/cases/python-cli/logs.txt (100%) rename {agent => agenthub/langchains_agent}/regression/cases/python-cli/task.txt (100%) rename {agent => agenthub/langchains_agent}/regression/cases/python-cli/workspace/commands/length.py (100%) rename {agent => agenthub/langchains_agent}/regression/cases/python-cli/workspace/commands/lowercase.py (100%) rename {agent => agenthub/langchains_agent}/regression/cases/python-cli/workspace/commands/reverse.py (100%) rename {agent => agenthub/langchains_agent}/regression/cases/python-cli/workspace/commands/scramble.py (100%) rename {agent => agenthub/langchains_agent}/regression/cases/python-cli/workspace/commands/spongebob.py (100%) rename {agent => agenthub/langchains_agent}/regression/cases/python-cli/workspace/commands/uppercase.py (100%) rename {agent => agenthub/langchains_agent}/regression/cases/python-cli/workspace/string_cli.py (100%) rename {agent => agenthub/langchains_agent}/regression/cases/react-todo/logs.txt (100%) rename {agent => agenthub/langchains_agent}/regression/cases/react-todo/task.txt (100%) rename {agent => agenthub/langchains_agent}/regression/cases/react-todo/workspace/todo-app/.gitignore (100%) rename {agent => agenthub/langchains_agent}/regression/cases/react-todo/workspace/todo-app/README.md (100%) rename {agent => agenthub/langchains_agent}/regression/cases/react-todo/workspace/todo-app/package-lock.json (100%) rename {agent => agenthub/langchains_agent}/regression/cases/react-todo/workspace/todo-app/package.json (100%) rename {agent => agenthub/langchains_agent}/regression/cases/react-todo/workspace/todo-app/public/favicon.ico (100%) rename {agent => agenthub/langchains_agent}/regression/cases/react-todo/workspace/todo-app/public/index.html (100%) rename {agent => agenthub/langchains_agent}/regression/cases/react-todo/workspace/todo-app/public/logo192.png (100%) rename {agent => agenthub/langchains_agent}/regression/cases/react-todo/workspace/todo-app/public/logo512.png (100%) rename {agent => agenthub/langchains_agent}/regression/cases/react-todo/workspace/todo-app/public/manifest.json (100%) rename {agent => agenthub/langchains_agent}/regression/cases/react-todo/workspace/todo-app/public/robots.txt (100%) rename {agent => agenthub/langchains_agent}/regression/cases/react-todo/workspace/todo-app/src/App.css (100%) rename {agent => agenthub/langchains_agent}/regression/cases/react-todo/workspace/todo-app/src/App.js (100%) rename {agent => agenthub/langchains_agent}/regression/cases/react-todo/workspace/todo-app/src/App.test.js (100%) rename {agent => agenthub/langchains_agent}/regression/cases/react-todo/workspace/todo-app/src/index.css (100%) rename {agent => agenthub/langchains_agent}/regression/cases/react-todo/workspace/todo-app/src/index.js (100%) rename {agent => agenthub/langchains_agent}/regression/cases/react-todo/workspace/todo-app/src/logo.svg (100%) rename {agent => agenthub/langchains_agent}/regression/cases/react-todo/workspace/todo-app/src/reportWebVitals.js (100%) rename {agent => agenthub/langchains_agent}/regression/cases/react-todo/workspace/todo-app/src/setupTests.js (100%) rename {agent => agenthub/langchains_agent}/regression/cases/server-test/logs.txt (100%) rename {agent => agenthub/langchains_agent}/regression/cases/server-test/start/server.py (100%) rename {agent => agenthub/langchains_agent}/regression/cases/server-test/task.txt (100%) rename {agent => agenthub/langchains_agent}/regression/cases/server-test/workspace/README.md (100%) rename {agent => agenthub/langchains_agent}/regression/cases/server-test/workspace/server.py (100%) rename {agent => agenthub/langchains_agent}/regression/run.sh (100%) rename {agent => agenthub/langchains_agent}/requirements.txt (100%) create mode 100644 agenthub/langchains_agent/utils/actions/__init__.py rename {agent/lib => agenthub/langchains_agent/utils}/actions/browse.py (100%) rename {agent/lib => agenthub/langchains_agent/utils}/actions/kill.py (100%) rename {agent/lib => agenthub/langchains_agent/utils}/actions/read.py (100%) rename {agent/lib => agenthub/langchains_agent/utils}/actions/run.py (100%) rename {agent/lib => agenthub/langchains_agent/utils}/actions/write.py (100%) rename {agent/lib => agenthub/langchains_agent/utils}/agent.py (92%) rename {agent/lib => agenthub/langchains_agent/utils}/event.py (95%) rename {agent/lib => agenthub/langchains_agent/utils}/json.py (100%) rename {agent/lib => agenthub/langchains_agent/utils}/llm.py (99%) rename {agent/lib => agenthub/langchains_agent/utils}/memory.py (98%) rename {agent/lib => agenthub/langchains_agent/utils}/monologue.py (75%) create mode 100644 opendevin/agent.py create mode 100644 opendevin/main.py diff --git a/agent/build-and-run.sh b/agent/build-and-run.sh deleted file mode 100755 index 8e29d82025..0000000000 --- a/agent/build-and-run.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/bash -set -eo pipefail - -rm -rf `pwd`/workspace -mkdir -p `pwd`/workspace - -docker build -t control-loop . -docker run -e DEBUG=$DEBUG -e OPENAI_API_KEY=$OPENAI_API_KEY -v `pwd`/workspace:/workspace control-loop python /app/main.py -d /workspace -t "${1}" - diff --git a/agent/lib/actions/__init__.py b/agent/lib/actions/__init__.py deleted file mode 100644 index dbc2889bb2..0000000000 --- a/agent/lib/actions/__init__.py +++ /dev/null @@ -1,6 +0,0 @@ -from lib.actions.run import run -from lib.actions.kill import kill -from lib.actions.browse import browse -from lib.actions.write import write -from lib.actions.read import read - diff --git a/agent/lib/controlloop.py b/agent/lib/controlloop.py deleted file mode 100644 index de24c8fac3..0000000000 --- a/agent/lib/controlloop.py +++ /dev/null @@ -1,18 +0,0 @@ -def run_loop(agent, max_iterations=100): - for i in range(max_iterations): - print("STEP", i, flush=True) - log_events = agent.get_background_logs() - for event in log_events: - print(event, flush=True) - action = agent.get_next_action() - if action.action == 'finish': - print("Done!", flush=True) - break - print(action, flush=True) - print("---", flush=True) - out = agent.maybe_perform_latest_action() - print(out, flush=True) - print("==============", flush=True) - - - diff --git a/agent/main.py b/agent/main.py deleted file mode 100644 index a8c34f92ef..0000000000 --- a/agent/main.py +++ /dev/null @@ -1,83 +0,0 @@ -import os -import argparse - -from lib.agent import Agent -from lib.event import Event -from lib.controlloop import run_loop - -INITIAL_THOUGHTS = [ -"I exist!", -"Hmm...looks like I can type in a command line prompt", -"Looks like I have a web browser too!", -"Here's what I want to do: $TASK", -"How am I going to get there though?", -"It seems like I have some kind of short term memory.", -"Each of my thoughts seems to be stored in a numbered list.", -"It seems whatever I say next will be added to the list.", -"But no one has perfect short-term memory. My list of thoughts will be summarized and condensed over time, losing information in the process.", -"Fortunately I have long term memory!", -"I can just say RECALL, followed by the thing I want to remember. And then related thoughts just spill out!", -"Sometimes they're random thoughts that don't really have to do with what I wanted to remember. But usually they're exactly what I need!", -"Let's try it out!", -"RECALL what it is I want to do", -"Here's what I want to do: $TASK", -"How am I going to get there though?", -"Neat! And it looks like it's easy for me to use the command line too! I just have to say RUN followed by the command I want to run. The command output just jumps into my head!", -"RUN echo \"hello world\"", -"hello world", -"Cool! I bet I can read and edit files too.", -"RUN echo \"console.log('hello world')\" > test.js", -"", -"I just created test.js. I'll try and run it now.", -"RUN node test.js", -"hello world", -"it works!", -"And if I want to use the browser, I just need to say BROWSE, followed by a website I want to visit, or an action I want to take on the current site", -"Let's try that...", -"BROWSE google.com", -"
", -"Very cool. Now to accomplish my task.", -"I'll need a strategy. And as I make progress, I'll need to keep refining that strategy. I'll need to set goals, and break them into sub-goals.", -"In between actions, I must always take some time to think, strategize, and set new goals. I should never take two actions in a row.", -"OK so my task is to $TASK. I haven't made any progress yet. Where should I start?", -"It seems like there might be an existing project here. I should probably start by running `ls` to see what's here.", -] - -def main(): - parser = argparse.ArgumentParser(description="Run an agent with a specific task") - parser.add_argument("-d", "--directory", required=True, type=str, help="The working directory for the agent") - parser.add_argument("-t", "--task", required=True, type=str, help="The task for the agent to perform") - args = parser.parse_args() - - print("Working in directory:", args.directory) - os.chdir(args.directory) - - agent = Agent(args.task) - next_is_output = False - for thought in INITIAL_THOUGHTS: - thought = thought.replace("$TASK", args.task) - if next_is_output: - event = Event('output', {'output': thought}) - next_is_output = False - else: - if thought.startswith("RUN"): - command = thought.split("RUN ")[1] - event = Event('run', {'command': command}) - next_is_output = True - elif thought.startswith("RECALL"): - query = thought.split("RECALL ")[1] - event = Event('recall', {'query': query}) - next_is_output = True - elif thought.startswith("BROWSE"): - url = thought.split("BROWSE ")[1] - event = Event('browse', {'url': url}) - next_is_output = True - else: - event = Event('think', {'thought': thought}) - - agent.add_event(event) - run_loop(agent) - -if __name__ == "__main__": - main() - diff --git a/agenthub/README.md b/agenthub/README.md new file mode 100644 index 0000000000..2ec672c663 --- /dev/null +++ b/agenthub/README.md @@ -0,0 +1,6 @@ +# Agent Framework Research + +In this folder, there may exist multiple implementations of `Agent` that will be used by the + +For example, `agenthub/langchain_agent`, `agenthub/metagpt_agent`, `agenthub/codeact_agent`, etc. +Contributors from different backgrounds and interests can choose to contribute to any (or all!) of these directions. diff --git a/agenthub/__init__.py b/agenthub/__init__.py new file mode 100644 index 0000000000..ced5095ca3 --- /dev/null +++ b/agenthub/__init__.py @@ -0,0 +1 @@ +from . import langchains_agent diff --git a/agent/.dockerignore b/agenthub/langchains_agent/.dockerignore similarity index 100% rename from agent/.dockerignore rename to agenthub/langchains_agent/.dockerignore diff --git a/agent/Dockerfile b/agenthub/langchains_agent/Dockerfile similarity index 81% rename from agent/Dockerfile rename to agenthub/langchains_agent/Dockerfile index 9496e2d44b..16a397c691 100644 --- a/agent/Dockerfile +++ b/agenthub/langchains_agent/Dockerfile @@ -14,10 +14,7 @@ WORKDIR /app COPY requirements.txt ./requirements.txt RUN python -m pip install -r requirements.txt -COPY lib ./lib -COPY main.py ./main.py - WORKDIR /workspace -CMD ["python", "/app/main.py", "/workspace"] +CMD ["python", "/app/opendevin/main.py", "/workspace"] diff --git a/agent/README.md b/agenthub/langchains_agent/README.md similarity index 53% rename from agent/README.md rename to agenthub/langchains_agent/README.md index 74ffadf0b7..94d177ff62 100644 --- a/agent/README.md +++ b/agenthub/langchains_agent/README.md @@ -3,5 +3,6 @@ This is currently a standalone utility. It will need to be integrated into OpenD ## Usage ```bash -./build-and-run.sh "write a bash script that prints 'hello world'" +# Run this in project root +./agenthub/langchains_agent/build-and-run.sh "write a bash script that prints 'hello world'" ``` diff --git a/agent/TODO.md b/agenthub/langchains_agent/TODO.md similarity index 100% rename from agent/TODO.md rename to agenthub/langchains_agent/TODO.md diff --git a/agenthub/langchains_agent/__init__.py b/agenthub/langchains_agent/__init__.py new file mode 100644 index 0000000000..aa72d80351 --- /dev/null +++ b/agenthub/langchains_agent/__init__.py @@ -0,0 +1,111 @@ +import os +import argparse + +from opendevin.agent import Agent, Message + +from agenthub.langchains_agent.utils.agent import Agent as LangchainsAgentImpl +from agenthub.langchains_agent.utils.event import Event + +INITIAL_THOUGHTS = [ + "I exist!", + "Hmm...looks like I can type in a command line prompt", + "Looks like I have a web browser too!", + "Here's what I want to do: $TASK", + "How am I going to get there though?", + "It seems like I have some kind of short term memory.", + "Each of my thoughts seems to be stored in a numbered list.", + "It seems whatever I say next will be added to the list.", + "But no one has perfect short-term memory. My list of thoughts will be summarized and condensed over time, losing information in the process.", + "Fortunately I have long term memory!", + "I can just say RECALL, followed by the thing I want to remember. And then related thoughts just spill out!", + "Sometimes they're random thoughts that don't really have to do with what I wanted to remember. But usually they're exactly what I need!", + "Let's try it out!", + "RECALL what it is I want to do", + "Here's what I want to do: $TASK", + "How am I going to get there though?", + "Neat! And it looks like it's easy for me to use the command line too! I just have to say RUN followed by the command I want to run. The command output just jumps into my head!", + 'RUN echo "hello world"', + "hello world", + "Cool! I bet I can read and edit files too.", + "RUN echo \"console.log('hello world')\" > test.js", + "", + "I just created test.js. I'll try and run it now.", + "RUN node test.js", + "hello world", + "it works!", + "And if I want to use the browser, I just need to say BROWSE, followed by a website I want to visit, or an action I want to take on the current site", + "Let's try that...", + "BROWSE google.com", + '
', + "Very cool. Now to accomplish my task.", + "I'll need a strategy. And as I make progress, I'll need to keep refining that strategy. I'll need to set goals, and break them into sub-goals.", + "In between actions, I must always take some time to think, strategize, and set new goals. I should never take two actions in a row.", + "OK so my task is to $TASK. I haven't made any progress yet. Where should I start?", + "It seems like there might be an existing project here. I should probably start by running `ls` to see what's here.", +] + + +class LangchainsAgent(Agent): + + def _run_loop(self, agent: LangchainsAgentImpl, max_iterations=100): + # TODO: make it add a Message to the history for each turn / event + for i in range(max_iterations): + print("STEP", i, flush=True) + log_events = agent.get_background_logs() + for event in log_events: + print(event, flush=True) + action = agent.get_next_action() + if action.action == "finish": + print("Done!", flush=True) + break + print(action, flush=True) + print("---", flush=True) + out = agent.maybe_perform_latest_action() + print(out, flush=True) + print("==============", flush=True) + + def run(self) -> None: + """ + Starts the execution of the assigned instruction. This method should + be implemented by subclasses to define the specific execution logic. + """ + agent = LangchainsAgentImpl(self.instruction) + next_is_output = False + for thought in INITIAL_THOUGHTS: + thought = thought.replace("$TASK", self.instruction) + if next_is_output: + event = Event("output", {"output": thought}) + next_is_output = False + else: + if thought.startswith("RUN"): + command = thought.split("RUN ")[1] + event = Event("run", {"command": command}) + next_is_output = True + elif thought.startswith("RECALL"): + query = thought.split("RECALL ")[1] + event = Event("recall", {"query": query}) + next_is_output = True + elif thought.startswith("BROWSE"): + url = thought.split("BROWSE ")[1] + event = Event("browse", {"url": url}) + next_is_output = True + else: + event = Event("think", {"thought": thought}) + + agent.add_event(event) + self._run_loop(agent, self.max_steps) + + # Set the agent's completion status to True + self._complete = True + + def chat(self, message: str) -> None: + """ + Optional method for interactive communication with the agent during its execution. Implementations + can use this method to modify the agent's behavior or state based on chat inputs. + + Parameters: + - message (str): The chat message or command. + """ + raise NotImplementedError + +Agent.register("LangchainsAgent", LangchainsAgent) diff --git a/agenthub/langchains_agent/build-and-run.sh b/agenthub/langchains_agent/build-and-run.sh new file mode 100755 index 0000000000..bf0058e097 --- /dev/null +++ b/agenthub/langchains_agent/build-and-run.sh @@ -0,0 +1,19 @@ +#!/bin/bash +set -eo pipefail + +rm -rf `pwd`/workspace +mkdir -p `pwd`/workspace + +pushd agenthub/langchains_agent +docker build -t control-loop . +popd +docker run \ + -e DEBUG=$DEBUG \ + -e OPENAI_API_KEY=$OPENAI_API_KEY \ + -u `id -u`:`id -g` \ + -v `pwd`/workspace:/workspace \ + -v `pwd`:/app:ro \ + -e PYTHONPATH=/app \ + control-loop \ + python /app/opendevin/main.py -d /workspace -t "${1}" + diff --git a/agent/regression/.gitignore b/agenthub/langchains_agent/regression/.gitignore similarity index 100% rename from agent/regression/.gitignore rename to agenthub/langchains_agent/regression/.gitignore diff --git a/agent/regression/README.md b/agenthub/langchains_agent/regression/README.md similarity index 100% rename from agent/regression/README.md rename to agenthub/langchains_agent/regression/README.md diff --git a/agent/regression/cases/client-server/logs.txt b/agenthub/langchains_agent/regression/cases/client-server/logs.txt similarity index 100% rename from agent/regression/cases/client-server/logs.txt rename to agenthub/langchains_agent/regression/cases/client-server/logs.txt diff --git a/agent/regression/cases/client-server/task.txt b/agenthub/langchains_agent/regression/cases/client-server/task.txt similarity index 100% rename from agent/regression/cases/client-server/task.txt rename to agenthub/langchains_agent/regression/cases/client-server/task.txt diff --git a/agent/regression/cases/client-server/workspace/client/.env b/agenthub/langchains_agent/regression/cases/client-server/workspace/client/.env similarity index 100% rename from agent/regression/cases/client-server/workspace/client/.env rename to agenthub/langchains_agent/regression/cases/client-server/workspace/client/.env diff --git a/agent/regression/cases/client-server/workspace/client/.gitignore b/agenthub/langchains_agent/regression/cases/client-server/workspace/client/.gitignore similarity index 100% rename from agent/regression/cases/client-server/workspace/client/.gitignore rename to agenthub/langchains_agent/regression/cases/client-server/workspace/client/.gitignore diff --git a/agent/regression/cases/client-server/workspace/client/README.md b/agenthub/langchains_agent/regression/cases/client-server/workspace/client/README.md similarity index 100% rename from agent/regression/cases/client-server/workspace/client/README.md rename to agenthub/langchains_agent/regression/cases/client-server/workspace/client/README.md diff --git a/agent/regression/cases/client-server/workspace/client/package-lock.json b/agenthub/langchains_agent/regression/cases/client-server/workspace/client/package-lock.json similarity index 100% rename from agent/regression/cases/client-server/workspace/client/package-lock.json rename to agenthub/langchains_agent/regression/cases/client-server/workspace/client/package-lock.json diff --git a/agent/regression/cases/client-server/workspace/client/package.json b/agenthub/langchains_agent/regression/cases/client-server/workspace/client/package.json similarity index 100% rename from agent/regression/cases/client-server/workspace/client/package.json rename to agenthub/langchains_agent/regression/cases/client-server/workspace/client/package.json diff --git a/agent/regression/cases/client-server/workspace/client/public/favicon.ico b/agenthub/langchains_agent/regression/cases/client-server/workspace/client/public/favicon.ico similarity index 100% rename from agent/regression/cases/client-server/workspace/client/public/favicon.ico rename to agenthub/langchains_agent/regression/cases/client-server/workspace/client/public/favicon.ico diff --git a/agent/regression/cases/client-server/workspace/client/public/index.html b/agenthub/langchains_agent/regression/cases/client-server/workspace/client/public/index.html similarity index 100% rename from agent/regression/cases/client-server/workspace/client/public/index.html rename to agenthub/langchains_agent/regression/cases/client-server/workspace/client/public/index.html diff --git a/agent/regression/cases/client-server/workspace/client/public/logo192.png b/agenthub/langchains_agent/regression/cases/client-server/workspace/client/public/logo192.png similarity index 100% rename from agent/regression/cases/client-server/workspace/client/public/logo192.png rename to agenthub/langchains_agent/regression/cases/client-server/workspace/client/public/logo192.png diff --git a/agent/regression/cases/client-server/workspace/client/public/logo512.png b/agenthub/langchains_agent/regression/cases/client-server/workspace/client/public/logo512.png similarity index 100% rename from agent/regression/cases/client-server/workspace/client/public/logo512.png rename to agenthub/langchains_agent/regression/cases/client-server/workspace/client/public/logo512.png diff --git a/agent/regression/cases/client-server/workspace/client/public/manifest.json b/agenthub/langchains_agent/regression/cases/client-server/workspace/client/public/manifest.json similarity index 100% rename from agent/regression/cases/client-server/workspace/client/public/manifest.json rename to agenthub/langchains_agent/regression/cases/client-server/workspace/client/public/manifest.json diff --git a/agent/regression/cases/client-server/workspace/client/public/robots.txt b/agenthub/langchains_agent/regression/cases/client-server/workspace/client/public/robots.txt similarity index 100% rename from agent/regression/cases/client-server/workspace/client/public/robots.txt rename to agenthub/langchains_agent/regression/cases/client-server/workspace/client/public/robots.txt diff --git a/agent/regression/cases/client-server/workspace/client/src/App.css b/agenthub/langchains_agent/regression/cases/client-server/workspace/client/src/App.css similarity index 100% rename from agent/regression/cases/client-server/workspace/client/src/App.css rename to agenthub/langchains_agent/regression/cases/client-server/workspace/client/src/App.css diff --git a/agent/regression/cases/client-server/workspace/client/src/App.js b/agenthub/langchains_agent/regression/cases/client-server/workspace/client/src/App.js similarity index 100% rename from agent/regression/cases/client-server/workspace/client/src/App.js rename to agenthub/langchains_agent/regression/cases/client-server/workspace/client/src/App.js diff --git a/agent/regression/cases/client-server/workspace/client/src/App.test.js b/agenthub/langchains_agent/regression/cases/client-server/workspace/client/src/App.test.js similarity index 100% rename from agent/regression/cases/client-server/workspace/client/src/App.test.js rename to agenthub/langchains_agent/regression/cases/client-server/workspace/client/src/App.test.js diff --git a/agent/regression/cases/client-server/workspace/client/src/index.css b/agenthub/langchains_agent/regression/cases/client-server/workspace/client/src/index.css similarity index 100% rename from agent/regression/cases/client-server/workspace/client/src/index.css rename to agenthub/langchains_agent/regression/cases/client-server/workspace/client/src/index.css diff --git a/agent/regression/cases/client-server/workspace/client/src/index.js b/agenthub/langchains_agent/regression/cases/client-server/workspace/client/src/index.js similarity index 100% rename from agent/regression/cases/client-server/workspace/client/src/index.js rename to agenthub/langchains_agent/regression/cases/client-server/workspace/client/src/index.js diff --git a/agent/regression/cases/client-server/workspace/client/src/logo.svg b/agenthub/langchains_agent/regression/cases/client-server/workspace/client/src/logo.svg similarity index 100% rename from agent/regression/cases/client-server/workspace/client/src/logo.svg rename to agenthub/langchains_agent/regression/cases/client-server/workspace/client/src/logo.svg diff --git a/agent/regression/cases/client-server/workspace/client/src/reportWebVitals.js b/agenthub/langchains_agent/regression/cases/client-server/workspace/client/src/reportWebVitals.js similarity index 100% rename from agent/regression/cases/client-server/workspace/client/src/reportWebVitals.js rename to agenthub/langchains_agent/regression/cases/client-server/workspace/client/src/reportWebVitals.js diff --git a/agent/regression/cases/client-server/workspace/client/src/setupTests.js b/agenthub/langchains_agent/regression/cases/client-server/workspace/client/src/setupTests.js similarity index 100% rename from agent/regression/cases/client-server/workspace/client/src/setupTests.js rename to agenthub/langchains_agent/regression/cases/client-server/workspace/client/src/setupTests.js diff --git a/agent/regression/cases/client-server/workspace/package-lock.json b/agenthub/langchains_agent/regression/cases/client-server/workspace/package-lock.json similarity index 100% rename from agent/regression/cases/client-server/workspace/package-lock.json rename to agenthub/langchains_agent/regression/cases/client-server/workspace/package-lock.json diff --git a/agent/regression/cases/client-server/workspace/package.json b/agenthub/langchains_agent/regression/cases/client-server/workspace/package.json similarity index 100% rename from agent/regression/cases/client-server/workspace/package.json rename to agenthub/langchains_agent/regression/cases/client-server/workspace/package.json diff --git a/agent/regression/cases/client-server/workspace/server.js b/agenthub/langchains_agent/regression/cases/client-server/workspace/server.js similarity index 100% rename from agent/regression/cases/client-server/workspace/server.js rename to agenthub/langchains_agent/regression/cases/client-server/workspace/server.js diff --git a/agent/regression/cases/express/logs.txt b/agenthub/langchains_agent/regression/cases/express/logs.txt similarity index 100% rename from agent/regression/cases/express/logs.txt rename to agenthub/langchains_agent/regression/cases/express/logs.txt diff --git a/agent/regression/cases/express/task.txt b/agenthub/langchains_agent/regression/cases/express/task.txt similarity index 100% rename from agent/regression/cases/express/task.txt rename to agenthub/langchains_agent/regression/cases/express/task.txt diff --git a/agent/regression/cases/express/workspace/index.js b/agenthub/langchains_agent/regression/cases/express/workspace/index.js similarity index 100% rename from agent/regression/cases/express/workspace/index.js rename to agenthub/langchains_agent/regression/cases/express/workspace/index.js diff --git a/agent/regression/cases/express/workspace/package-lock.json b/agenthub/langchains_agent/regression/cases/express/workspace/package-lock.json similarity index 100% rename from agent/regression/cases/express/workspace/package-lock.json rename to agenthub/langchains_agent/regression/cases/express/workspace/package-lock.json diff --git a/agent/regression/cases/express/workspace/package.json b/agenthub/langchains_agent/regression/cases/express/workspace/package.json similarity index 100% rename from agent/regression/cases/express/workspace/package.json rename to agenthub/langchains_agent/regression/cases/express/workspace/package.json diff --git a/agent/regression/cases/hello-name/logs.txt b/agenthub/langchains_agent/regression/cases/hello-name/logs.txt similarity index 100% rename from agent/regression/cases/hello-name/logs.txt rename to agenthub/langchains_agent/regression/cases/hello-name/logs.txt diff --git a/agent/regression/cases/hello-name/start/hello_world.sh b/agenthub/langchains_agent/regression/cases/hello-name/start/hello_world.sh similarity index 100% rename from agent/regression/cases/hello-name/start/hello_world.sh rename to agenthub/langchains_agent/regression/cases/hello-name/start/hello_world.sh diff --git a/agent/regression/cases/hello-name/task.txt b/agenthub/langchains_agent/regression/cases/hello-name/task.txt similarity index 100% rename from agent/regression/cases/hello-name/task.txt rename to agenthub/langchains_agent/regression/cases/hello-name/task.txt diff --git a/agent/regression/cases/hello-name/workspace/hello_world.sh b/agenthub/langchains_agent/regression/cases/hello-name/workspace/hello_world.sh similarity index 100% rename from agent/regression/cases/hello-name/workspace/hello_world.sh rename to agenthub/langchains_agent/regression/cases/hello-name/workspace/hello_world.sh diff --git a/agent/regression/cases/hello-world/logs.txt b/agenthub/langchains_agent/regression/cases/hello-world/logs.txt similarity index 100% rename from agent/regression/cases/hello-world/logs.txt rename to agenthub/langchains_agent/regression/cases/hello-world/logs.txt diff --git a/agent/regression/cases/hello-world/task.txt b/agenthub/langchains_agent/regression/cases/hello-world/task.txt similarity index 100% rename from agent/regression/cases/hello-world/task.txt rename to agenthub/langchains_agent/regression/cases/hello-world/task.txt diff --git a/agent/regression/cases/hello-world/workspace/hello_world.sh b/agenthub/langchains_agent/regression/cases/hello-world/workspace/hello_world.sh similarity index 100% rename from agent/regression/cases/hello-world/workspace/hello_world.sh rename to agenthub/langchains_agent/regression/cases/hello-world/workspace/hello_world.sh diff --git a/agent/regression/cases/node-cli-rewrite/logs.txt b/agenthub/langchains_agent/regression/cases/node-cli-rewrite/logs.txt similarity index 100% rename from agent/regression/cases/node-cli-rewrite/logs.txt rename to agenthub/langchains_agent/regression/cases/node-cli-rewrite/logs.txt diff --git a/agent/regression/cases/node-cli-rewrite/start/commands/length.py b/agenthub/langchains_agent/regression/cases/node-cli-rewrite/start/commands/length.py similarity index 100% rename from agent/regression/cases/node-cli-rewrite/start/commands/length.py rename to agenthub/langchains_agent/regression/cases/node-cli-rewrite/start/commands/length.py diff --git a/agent/regression/cases/node-cli-rewrite/start/commands/lowercase.py b/agenthub/langchains_agent/regression/cases/node-cli-rewrite/start/commands/lowercase.py similarity index 100% rename from agent/regression/cases/node-cli-rewrite/start/commands/lowercase.py rename to agenthub/langchains_agent/regression/cases/node-cli-rewrite/start/commands/lowercase.py diff --git a/agent/regression/cases/node-cli-rewrite/start/commands/reverse.py b/agenthub/langchains_agent/regression/cases/node-cli-rewrite/start/commands/reverse.py similarity index 100% rename from agent/regression/cases/node-cli-rewrite/start/commands/reverse.py rename to agenthub/langchains_agent/regression/cases/node-cli-rewrite/start/commands/reverse.py diff --git a/agent/regression/cases/node-cli-rewrite/start/commands/scramble.py b/agenthub/langchains_agent/regression/cases/node-cli-rewrite/start/commands/scramble.py similarity index 100% rename from agent/regression/cases/node-cli-rewrite/start/commands/scramble.py rename to agenthub/langchains_agent/regression/cases/node-cli-rewrite/start/commands/scramble.py diff --git a/agent/regression/cases/node-cli-rewrite/start/commands/spongebob.py b/agenthub/langchains_agent/regression/cases/node-cli-rewrite/start/commands/spongebob.py similarity index 100% rename from agent/regression/cases/node-cli-rewrite/start/commands/spongebob.py rename to agenthub/langchains_agent/regression/cases/node-cli-rewrite/start/commands/spongebob.py diff --git a/agent/regression/cases/node-cli-rewrite/start/commands/uppercase.py b/agenthub/langchains_agent/regression/cases/node-cli-rewrite/start/commands/uppercase.py similarity index 100% rename from agent/regression/cases/node-cli-rewrite/start/commands/uppercase.py rename to agenthub/langchains_agent/regression/cases/node-cli-rewrite/start/commands/uppercase.py diff --git a/agent/regression/cases/node-cli-rewrite/start/string_cli.py b/agenthub/langchains_agent/regression/cases/node-cli-rewrite/start/string_cli.py similarity index 100% rename from agent/regression/cases/node-cli-rewrite/start/string_cli.py rename to agenthub/langchains_agent/regression/cases/node-cli-rewrite/start/string_cli.py diff --git a/agent/regression/cases/node-cli-rewrite/task.txt b/agenthub/langchains_agent/regression/cases/node-cli-rewrite/task.txt similarity index 100% rename from agent/regression/cases/node-cli-rewrite/task.txt rename to agenthub/langchains_agent/regression/cases/node-cli-rewrite/task.txt diff --git a/agent/regression/cases/node-cli-rewrite/workspace/cli.js b/agenthub/langchains_agent/regression/cases/node-cli-rewrite/workspace/cli.js similarity index 100% rename from agent/regression/cases/node-cli-rewrite/workspace/cli.js rename to agenthub/langchains_agent/regression/cases/node-cli-rewrite/workspace/cli.js diff --git a/agent/regression/cases/node-cli-rewrite/workspace/commands/index.js b/agenthub/langchains_agent/regression/cases/node-cli-rewrite/workspace/commands/index.js similarity index 100% rename from agent/regression/cases/node-cli-rewrite/workspace/commands/index.js rename to agenthub/langchains_agent/regression/cases/node-cli-rewrite/workspace/commands/index.js diff --git a/agent/regression/cases/node-cli-rewrite/workspace/commands/length.js b/agenthub/langchains_agent/regression/cases/node-cli-rewrite/workspace/commands/length.js similarity index 100% rename from agent/regression/cases/node-cli-rewrite/workspace/commands/length.js rename to agenthub/langchains_agent/regression/cases/node-cli-rewrite/workspace/commands/length.js diff --git a/agent/regression/cases/node-cli-rewrite/workspace/commands/length.py b/agenthub/langchains_agent/regression/cases/node-cli-rewrite/workspace/commands/length.py similarity index 100% rename from agent/regression/cases/node-cli-rewrite/workspace/commands/length.py rename to agenthub/langchains_agent/regression/cases/node-cli-rewrite/workspace/commands/length.py diff --git a/agent/regression/cases/node-cli-rewrite/workspace/commands/lowercase.js b/agenthub/langchains_agent/regression/cases/node-cli-rewrite/workspace/commands/lowercase.js similarity index 100% rename from agent/regression/cases/node-cli-rewrite/workspace/commands/lowercase.js rename to agenthub/langchains_agent/regression/cases/node-cli-rewrite/workspace/commands/lowercase.js diff --git a/agent/regression/cases/node-cli-rewrite/workspace/commands/lowercase.py b/agenthub/langchains_agent/regression/cases/node-cli-rewrite/workspace/commands/lowercase.py similarity index 100% rename from agent/regression/cases/node-cli-rewrite/workspace/commands/lowercase.py rename to agenthub/langchains_agent/regression/cases/node-cli-rewrite/workspace/commands/lowercase.py diff --git a/agent/regression/cases/node-cli-rewrite/workspace/commands/reverse.js b/agenthub/langchains_agent/regression/cases/node-cli-rewrite/workspace/commands/reverse.js similarity index 100% rename from agent/regression/cases/node-cli-rewrite/workspace/commands/reverse.js rename to agenthub/langchains_agent/regression/cases/node-cli-rewrite/workspace/commands/reverse.js diff --git a/agent/regression/cases/node-cli-rewrite/workspace/commands/reverse.py b/agenthub/langchains_agent/regression/cases/node-cli-rewrite/workspace/commands/reverse.py similarity index 100% rename from agent/regression/cases/node-cli-rewrite/workspace/commands/reverse.py rename to agenthub/langchains_agent/regression/cases/node-cli-rewrite/workspace/commands/reverse.py diff --git a/agent/regression/cases/node-cli-rewrite/workspace/commands/scramble.js b/agenthub/langchains_agent/regression/cases/node-cli-rewrite/workspace/commands/scramble.js similarity index 100% rename from agent/regression/cases/node-cli-rewrite/workspace/commands/scramble.js rename to agenthub/langchains_agent/regression/cases/node-cli-rewrite/workspace/commands/scramble.js diff --git a/agent/regression/cases/node-cli-rewrite/workspace/commands/scramble.py b/agenthub/langchains_agent/regression/cases/node-cli-rewrite/workspace/commands/scramble.py similarity index 100% rename from agent/regression/cases/node-cli-rewrite/workspace/commands/scramble.py rename to agenthub/langchains_agent/regression/cases/node-cli-rewrite/workspace/commands/scramble.py diff --git a/agent/regression/cases/node-cli-rewrite/workspace/commands/spongebob.js b/agenthub/langchains_agent/regression/cases/node-cli-rewrite/workspace/commands/spongebob.js similarity index 100% rename from agent/regression/cases/node-cli-rewrite/workspace/commands/spongebob.js rename to agenthub/langchains_agent/regression/cases/node-cli-rewrite/workspace/commands/spongebob.js diff --git a/agent/regression/cases/node-cli-rewrite/workspace/commands/spongebob.py b/agenthub/langchains_agent/regression/cases/node-cli-rewrite/workspace/commands/spongebob.py similarity index 100% rename from agent/regression/cases/node-cli-rewrite/workspace/commands/spongebob.py rename to agenthub/langchains_agent/regression/cases/node-cli-rewrite/workspace/commands/spongebob.py diff --git a/agent/regression/cases/node-cli-rewrite/workspace/commands/uppercase.js b/agenthub/langchains_agent/regression/cases/node-cli-rewrite/workspace/commands/uppercase.js similarity index 100% rename from agent/regression/cases/node-cli-rewrite/workspace/commands/uppercase.js rename to agenthub/langchains_agent/regression/cases/node-cli-rewrite/workspace/commands/uppercase.js diff --git a/agent/regression/cases/node-cli-rewrite/workspace/commands/uppercase.py b/agenthub/langchains_agent/regression/cases/node-cli-rewrite/workspace/commands/uppercase.py similarity index 100% rename from agent/regression/cases/node-cli-rewrite/workspace/commands/uppercase.py rename to agenthub/langchains_agent/regression/cases/node-cli-rewrite/workspace/commands/uppercase.py diff --git a/agent/regression/cases/node-cli-rewrite/workspace/string_cli.py b/agenthub/langchains_agent/regression/cases/node-cli-rewrite/workspace/string_cli.py similarity index 100% rename from agent/regression/cases/node-cli-rewrite/workspace/string_cli.py rename to agenthub/langchains_agent/regression/cases/node-cli-rewrite/workspace/string_cli.py diff --git a/agent/regression/cases/python-cli-help/logs.txt b/agenthub/langchains_agent/regression/cases/python-cli-help/logs.txt similarity index 100% rename from agent/regression/cases/python-cli-help/logs.txt rename to agenthub/langchains_agent/regression/cases/python-cli-help/logs.txt diff --git a/agent/regression/cases/python-cli-help/start/commands/length.py b/agenthub/langchains_agent/regression/cases/python-cli-help/start/commands/length.py similarity index 100% rename from agent/regression/cases/python-cli-help/start/commands/length.py rename to agenthub/langchains_agent/regression/cases/python-cli-help/start/commands/length.py diff --git a/agent/regression/cases/python-cli-help/start/commands/lowercase.py b/agenthub/langchains_agent/regression/cases/python-cli-help/start/commands/lowercase.py similarity index 100% rename from agent/regression/cases/python-cli-help/start/commands/lowercase.py rename to agenthub/langchains_agent/regression/cases/python-cli-help/start/commands/lowercase.py diff --git a/agent/regression/cases/python-cli-help/start/commands/reverse.py b/agenthub/langchains_agent/regression/cases/python-cli-help/start/commands/reverse.py similarity index 100% rename from agent/regression/cases/python-cli-help/start/commands/reverse.py rename to agenthub/langchains_agent/regression/cases/python-cli-help/start/commands/reverse.py diff --git a/agent/regression/cases/python-cli-help/start/commands/scramble.py b/agenthub/langchains_agent/regression/cases/python-cli-help/start/commands/scramble.py similarity index 100% rename from agent/regression/cases/python-cli-help/start/commands/scramble.py rename to agenthub/langchains_agent/regression/cases/python-cli-help/start/commands/scramble.py diff --git a/agent/regression/cases/python-cli-help/start/commands/spongebob.py b/agenthub/langchains_agent/regression/cases/python-cli-help/start/commands/spongebob.py similarity index 100% rename from agent/regression/cases/python-cli-help/start/commands/spongebob.py rename to agenthub/langchains_agent/regression/cases/python-cli-help/start/commands/spongebob.py diff --git a/agent/regression/cases/python-cli-help/start/commands/uppercase.py b/agenthub/langchains_agent/regression/cases/python-cli-help/start/commands/uppercase.py similarity index 100% rename from agent/regression/cases/python-cli-help/start/commands/uppercase.py rename to agenthub/langchains_agent/regression/cases/python-cli-help/start/commands/uppercase.py diff --git a/agent/regression/cases/python-cli-help/start/string_cli.py b/agenthub/langchains_agent/regression/cases/python-cli-help/start/string_cli.py similarity index 100% rename from agent/regression/cases/python-cli-help/start/string_cli.py rename to agenthub/langchains_agent/regression/cases/python-cli-help/start/string_cli.py diff --git a/agent/regression/cases/python-cli-help/task.txt b/agenthub/langchains_agent/regression/cases/python-cli-help/task.txt similarity index 100% rename from agent/regression/cases/python-cli-help/task.txt rename to agenthub/langchains_agent/regression/cases/python-cli-help/task.txt diff --git a/agent/regression/cases/python-cli-help/workspace/commands/length.py b/agenthub/langchains_agent/regression/cases/python-cli-help/workspace/commands/length.py similarity index 100% rename from agent/regression/cases/python-cli-help/workspace/commands/length.py rename to agenthub/langchains_agent/regression/cases/python-cli-help/workspace/commands/length.py diff --git a/agent/regression/cases/python-cli-help/workspace/commands/lowercase.py b/agenthub/langchains_agent/regression/cases/python-cli-help/workspace/commands/lowercase.py similarity index 100% rename from agent/regression/cases/python-cli-help/workspace/commands/lowercase.py rename to agenthub/langchains_agent/regression/cases/python-cli-help/workspace/commands/lowercase.py diff --git a/agent/regression/cases/python-cli-help/workspace/commands/reverse.py b/agenthub/langchains_agent/regression/cases/python-cli-help/workspace/commands/reverse.py similarity index 100% rename from agent/regression/cases/python-cli-help/workspace/commands/reverse.py rename to agenthub/langchains_agent/regression/cases/python-cli-help/workspace/commands/reverse.py diff --git a/agent/regression/cases/python-cli-help/workspace/commands/scramble.py b/agenthub/langchains_agent/regression/cases/python-cli-help/workspace/commands/scramble.py similarity index 100% rename from agent/regression/cases/python-cli-help/workspace/commands/scramble.py rename to agenthub/langchains_agent/regression/cases/python-cli-help/workspace/commands/scramble.py diff --git a/agent/regression/cases/python-cli-help/workspace/commands/spongebob.py b/agenthub/langchains_agent/regression/cases/python-cli-help/workspace/commands/spongebob.py similarity index 100% rename from agent/regression/cases/python-cli-help/workspace/commands/spongebob.py rename to agenthub/langchains_agent/regression/cases/python-cli-help/workspace/commands/spongebob.py diff --git a/agent/regression/cases/python-cli-help/workspace/commands/uppercase.py b/agenthub/langchains_agent/regression/cases/python-cli-help/workspace/commands/uppercase.py similarity index 100% rename from agent/regression/cases/python-cli-help/workspace/commands/uppercase.py rename to agenthub/langchains_agent/regression/cases/python-cli-help/workspace/commands/uppercase.py diff --git a/agent/regression/cases/python-cli-help/workspace/string_cli.py b/agenthub/langchains_agent/regression/cases/python-cli-help/workspace/string_cli.py similarity index 100% rename from agent/regression/cases/python-cli-help/workspace/string_cli.py rename to agenthub/langchains_agent/regression/cases/python-cli-help/workspace/string_cli.py diff --git a/agent/regression/cases/python-cli/logs.txt b/agenthub/langchains_agent/regression/cases/python-cli/logs.txt similarity index 100% rename from agent/regression/cases/python-cli/logs.txt rename to agenthub/langchains_agent/regression/cases/python-cli/logs.txt diff --git a/agent/regression/cases/python-cli/task.txt b/agenthub/langchains_agent/regression/cases/python-cli/task.txt similarity index 100% rename from agent/regression/cases/python-cli/task.txt rename to agenthub/langchains_agent/regression/cases/python-cli/task.txt diff --git a/agent/regression/cases/python-cli/workspace/commands/length.py b/agenthub/langchains_agent/regression/cases/python-cli/workspace/commands/length.py similarity index 100% rename from agent/regression/cases/python-cli/workspace/commands/length.py rename to agenthub/langchains_agent/regression/cases/python-cli/workspace/commands/length.py diff --git a/agent/regression/cases/python-cli/workspace/commands/lowercase.py b/agenthub/langchains_agent/regression/cases/python-cli/workspace/commands/lowercase.py similarity index 100% rename from agent/regression/cases/python-cli/workspace/commands/lowercase.py rename to agenthub/langchains_agent/regression/cases/python-cli/workspace/commands/lowercase.py diff --git a/agent/regression/cases/python-cli/workspace/commands/reverse.py b/agenthub/langchains_agent/regression/cases/python-cli/workspace/commands/reverse.py similarity index 100% rename from agent/regression/cases/python-cli/workspace/commands/reverse.py rename to agenthub/langchains_agent/regression/cases/python-cli/workspace/commands/reverse.py diff --git a/agent/regression/cases/python-cli/workspace/commands/scramble.py b/agenthub/langchains_agent/regression/cases/python-cli/workspace/commands/scramble.py similarity index 100% rename from agent/regression/cases/python-cli/workspace/commands/scramble.py rename to agenthub/langchains_agent/regression/cases/python-cli/workspace/commands/scramble.py diff --git a/agent/regression/cases/python-cli/workspace/commands/spongebob.py b/agenthub/langchains_agent/regression/cases/python-cli/workspace/commands/spongebob.py similarity index 100% rename from agent/regression/cases/python-cli/workspace/commands/spongebob.py rename to agenthub/langchains_agent/regression/cases/python-cli/workspace/commands/spongebob.py diff --git a/agent/regression/cases/python-cli/workspace/commands/uppercase.py b/agenthub/langchains_agent/regression/cases/python-cli/workspace/commands/uppercase.py similarity index 100% rename from agent/regression/cases/python-cli/workspace/commands/uppercase.py rename to agenthub/langchains_agent/regression/cases/python-cli/workspace/commands/uppercase.py diff --git a/agent/regression/cases/python-cli/workspace/string_cli.py b/agenthub/langchains_agent/regression/cases/python-cli/workspace/string_cli.py similarity index 100% rename from agent/regression/cases/python-cli/workspace/string_cli.py rename to agenthub/langchains_agent/regression/cases/python-cli/workspace/string_cli.py diff --git a/agent/regression/cases/react-todo/logs.txt b/agenthub/langchains_agent/regression/cases/react-todo/logs.txt similarity index 100% rename from agent/regression/cases/react-todo/logs.txt rename to agenthub/langchains_agent/regression/cases/react-todo/logs.txt diff --git a/agent/regression/cases/react-todo/task.txt b/agenthub/langchains_agent/regression/cases/react-todo/task.txt similarity index 100% rename from agent/regression/cases/react-todo/task.txt rename to agenthub/langchains_agent/regression/cases/react-todo/task.txt diff --git a/agent/regression/cases/react-todo/workspace/todo-app/.gitignore b/agenthub/langchains_agent/regression/cases/react-todo/workspace/todo-app/.gitignore similarity index 100% rename from agent/regression/cases/react-todo/workspace/todo-app/.gitignore rename to agenthub/langchains_agent/regression/cases/react-todo/workspace/todo-app/.gitignore diff --git a/agent/regression/cases/react-todo/workspace/todo-app/README.md b/agenthub/langchains_agent/regression/cases/react-todo/workspace/todo-app/README.md similarity index 100% rename from agent/regression/cases/react-todo/workspace/todo-app/README.md rename to agenthub/langchains_agent/regression/cases/react-todo/workspace/todo-app/README.md diff --git a/agent/regression/cases/react-todo/workspace/todo-app/package-lock.json b/agenthub/langchains_agent/regression/cases/react-todo/workspace/todo-app/package-lock.json similarity index 100% rename from agent/regression/cases/react-todo/workspace/todo-app/package-lock.json rename to agenthub/langchains_agent/regression/cases/react-todo/workspace/todo-app/package-lock.json diff --git a/agent/regression/cases/react-todo/workspace/todo-app/package.json b/agenthub/langchains_agent/regression/cases/react-todo/workspace/todo-app/package.json similarity index 100% rename from agent/regression/cases/react-todo/workspace/todo-app/package.json rename to agenthub/langchains_agent/regression/cases/react-todo/workspace/todo-app/package.json diff --git a/agent/regression/cases/react-todo/workspace/todo-app/public/favicon.ico b/agenthub/langchains_agent/regression/cases/react-todo/workspace/todo-app/public/favicon.ico similarity index 100% rename from agent/regression/cases/react-todo/workspace/todo-app/public/favicon.ico rename to agenthub/langchains_agent/regression/cases/react-todo/workspace/todo-app/public/favicon.ico diff --git a/agent/regression/cases/react-todo/workspace/todo-app/public/index.html b/agenthub/langchains_agent/regression/cases/react-todo/workspace/todo-app/public/index.html similarity index 100% rename from agent/regression/cases/react-todo/workspace/todo-app/public/index.html rename to agenthub/langchains_agent/regression/cases/react-todo/workspace/todo-app/public/index.html diff --git a/agent/regression/cases/react-todo/workspace/todo-app/public/logo192.png b/agenthub/langchains_agent/regression/cases/react-todo/workspace/todo-app/public/logo192.png similarity index 100% rename from agent/regression/cases/react-todo/workspace/todo-app/public/logo192.png rename to agenthub/langchains_agent/regression/cases/react-todo/workspace/todo-app/public/logo192.png diff --git a/agent/regression/cases/react-todo/workspace/todo-app/public/logo512.png b/agenthub/langchains_agent/regression/cases/react-todo/workspace/todo-app/public/logo512.png similarity index 100% rename from agent/regression/cases/react-todo/workspace/todo-app/public/logo512.png rename to agenthub/langchains_agent/regression/cases/react-todo/workspace/todo-app/public/logo512.png diff --git a/agent/regression/cases/react-todo/workspace/todo-app/public/manifest.json b/agenthub/langchains_agent/regression/cases/react-todo/workspace/todo-app/public/manifest.json similarity index 100% rename from agent/regression/cases/react-todo/workspace/todo-app/public/manifest.json rename to agenthub/langchains_agent/regression/cases/react-todo/workspace/todo-app/public/manifest.json diff --git a/agent/regression/cases/react-todo/workspace/todo-app/public/robots.txt b/agenthub/langchains_agent/regression/cases/react-todo/workspace/todo-app/public/robots.txt similarity index 100% rename from agent/regression/cases/react-todo/workspace/todo-app/public/robots.txt rename to agenthub/langchains_agent/regression/cases/react-todo/workspace/todo-app/public/robots.txt diff --git a/agent/regression/cases/react-todo/workspace/todo-app/src/App.css b/agenthub/langchains_agent/regression/cases/react-todo/workspace/todo-app/src/App.css similarity index 100% rename from agent/regression/cases/react-todo/workspace/todo-app/src/App.css rename to agenthub/langchains_agent/regression/cases/react-todo/workspace/todo-app/src/App.css diff --git a/agent/regression/cases/react-todo/workspace/todo-app/src/App.js b/agenthub/langchains_agent/regression/cases/react-todo/workspace/todo-app/src/App.js similarity index 100% rename from agent/regression/cases/react-todo/workspace/todo-app/src/App.js rename to agenthub/langchains_agent/regression/cases/react-todo/workspace/todo-app/src/App.js diff --git a/agent/regression/cases/react-todo/workspace/todo-app/src/App.test.js b/agenthub/langchains_agent/regression/cases/react-todo/workspace/todo-app/src/App.test.js similarity index 100% rename from agent/regression/cases/react-todo/workspace/todo-app/src/App.test.js rename to agenthub/langchains_agent/regression/cases/react-todo/workspace/todo-app/src/App.test.js diff --git a/agent/regression/cases/react-todo/workspace/todo-app/src/index.css b/agenthub/langchains_agent/regression/cases/react-todo/workspace/todo-app/src/index.css similarity index 100% rename from agent/regression/cases/react-todo/workspace/todo-app/src/index.css rename to agenthub/langchains_agent/regression/cases/react-todo/workspace/todo-app/src/index.css diff --git a/agent/regression/cases/react-todo/workspace/todo-app/src/index.js b/agenthub/langchains_agent/regression/cases/react-todo/workspace/todo-app/src/index.js similarity index 100% rename from agent/regression/cases/react-todo/workspace/todo-app/src/index.js rename to agenthub/langchains_agent/regression/cases/react-todo/workspace/todo-app/src/index.js diff --git a/agent/regression/cases/react-todo/workspace/todo-app/src/logo.svg b/agenthub/langchains_agent/regression/cases/react-todo/workspace/todo-app/src/logo.svg similarity index 100% rename from agent/regression/cases/react-todo/workspace/todo-app/src/logo.svg rename to agenthub/langchains_agent/regression/cases/react-todo/workspace/todo-app/src/logo.svg diff --git a/agent/regression/cases/react-todo/workspace/todo-app/src/reportWebVitals.js b/agenthub/langchains_agent/regression/cases/react-todo/workspace/todo-app/src/reportWebVitals.js similarity index 100% rename from agent/regression/cases/react-todo/workspace/todo-app/src/reportWebVitals.js rename to agenthub/langchains_agent/regression/cases/react-todo/workspace/todo-app/src/reportWebVitals.js diff --git a/agent/regression/cases/react-todo/workspace/todo-app/src/setupTests.js b/agenthub/langchains_agent/regression/cases/react-todo/workspace/todo-app/src/setupTests.js similarity index 100% rename from agent/regression/cases/react-todo/workspace/todo-app/src/setupTests.js rename to agenthub/langchains_agent/regression/cases/react-todo/workspace/todo-app/src/setupTests.js diff --git a/agent/regression/cases/server-test/logs.txt b/agenthub/langchains_agent/regression/cases/server-test/logs.txt similarity index 100% rename from agent/regression/cases/server-test/logs.txt rename to agenthub/langchains_agent/regression/cases/server-test/logs.txt diff --git a/agent/regression/cases/server-test/start/server.py b/agenthub/langchains_agent/regression/cases/server-test/start/server.py similarity index 100% rename from agent/regression/cases/server-test/start/server.py rename to agenthub/langchains_agent/regression/cases/server-test/start/server.py diff --git a/agent/regression/cases/server-test/task.txt b/agenthub/langchains_agent/regression/cases/server-test/task.txt similarity index 100% rename from agent/regression/cases/server-test/task.txt rename to agenthub/langchains_agent/regression/cases/server-test/task.txt diff --git a/agent/regression/cases/server-test/workspace/README.md b/agenthub/langchains_agent/regression/cases/server-test/workspace/README.md similarity index 100% rename from agent/regression/cases/server-test/workspace/README.md rename to agenthub/langchains_agent/regression/cases/server-test/workspace/README.md diff --git a/agent/regression/cases/server-test/workspace/server.py b/agenthub/langchains_agent/regression/cases/server-test/workspace/server.py similarity index 100% rename from agent/regression/cases/server-test/workspace/server.py rename to agenthub/langchains_agent/regression/cases/server-test/workspace/server.py diff --git a/agent/regression/run.sh b/agenthub/langchains_agent/regression/run.sh similarity index 100% rename from agent/regression/run.sh rename to agenthub/langchains_agent/regression/run.sh diff --git a/agent/requirements.txt b/agenthub/langchains_agent/requirements.txt similarity index 100% rename from agent/requirements.txt rename to agenthub/langchains_agent/requirements.txt diff --git a/agenthub/langchains_agent/utils/actions/__init__.py b/agenthub/langchains_agent/utils/actions/__init__.py new file mode 100644 index 0000000000..656273e1a2 --- /dev/null +++ b/agenthub/langchains_agent/utils/actions/__init__.py @@ -0,0 +1,6 @@ +from .run import run +from .kill import kill +from .browse import browse +from .write import write +from .read import read + diff --git a/agent/lib/actions/browse.py b/agenthub/langchains_agent/utils/actions/browse.py similarity index 100% rename from agent/lib/actions/browse.py rename to agenthub/langchains_agent/utils/actions/browse.py diff --git a/agent/lib/actions/kill.py b/agenthub/langchains_agent/utils/actions/kill.py similarity index 100% rename from agent/lib/actions/kill.py rename to agenthub/langchains_agent/utils/actions/kill.py diff --git a/agent/lib/actions/read.py b/agenthub/langchains_agent/utils/actions/read.py similarity index 100% rename from agent/lib/actions/read.py rename to agenthub/langchains_agent/utils/actions/read.py diff --git a/agent/lib/actions/run.py b/agenthub/langchains_agent/utils/actions/run.py similarity index 100% rename from agent/lib/actions/run.py rename to agenthub/langchains_agent/utils/actions/run.py diff --git a/agent/lib/actions/write.py b/agenthub/langchains_agent/utils/actions/write.py similarity index 100% rename from agent/lib/actions/write.py rename to agenthub/langchains_agent/utils/actions/write.py diff --git a/agent/lib/agent.py b/agenthub/langchains_agent/utils/agent.py similarity index 92% rename from agent/lib/agent.py rename to agenthub/langchains_agent/utils/agent.py index d7072bb795..583120202c 100644 --- a/agent/lib/agent.py +++ b/agenthub/langchains_agent/utils/agent.py @@ -1,9 +1,9 @@ import select -from lib.monologue import Monologue -from lib.memory import LongTermMemory -from lib.event import Event -import lib.llm as llm +from agenthub.langchains_agent.utils.monologue import Monologue +from agenthub.langchains_agent.utils.memory import LongTermMemory +from agenthub.langchains_agent.utils.event import Event +import agenthub.langchains_agent.utils.llm as llm MAX_OUTPUT_LENGTH = 5000 MAX_MONOLOGUE_LENGTH = 20000 diff --git a/agent/lib/event.py b/agenthub/langchains_agent/utils/event.py similarity index 95% rename from agent/lib/event.py rename to agenthub/langchains_agent/utils/event.py index 0ed7bc49af..df105fd360 100644 --- a/agent/lib/event.py +++ b/agenthub/langchains_agent/utils/event.py @@ -1,6 +1,6 @@ import os import json -import lib.actions as actions +import agenthub.langchains_agent.utils.actions as actions class Event: def __init__(self, action, args): diff --git a/agent/lib/json.py b/agenthub/langchains_agent/utils/json.py similarity index 100% rename from agent/lib/json.py rename to agenthub/langchains_agent/utils/json.py diff --git a/agent/lib/llm.py b/agenthub/langchains_agent/utils/llm.py similarity index 99% rename from agent/lib/llm.py rename to agenthub/langchains_agent/utils/llm.py index 4713f295f3..fc85089293 100644 --- a/agent/lib/llm.py +++ b/agenthub/langchains_agent/utils/llm.py @@ -1,6 +1,6 @@ import os -import lib.json as json +from . import json if os.getenv("DEBUG"): from langchain.globals import set_debug diff --git a/agent/lib/memory.py b/agenthub/langchains_agent/utils/memory.py similarity index 98% rename from agent/lib/memory.py rename to agenthub/langchains_agent/utils/memory.py index c001d6e75e..ed0f1713d7 100644 --- a/agent/lib/memory.py +++ b/agenthub/langchains_agent/utils/memory.py @@ -1,5 +1,5 @@ import os -import lib.json as json +from . import json import chromadb diff --git a/agent/lib/monologue.py b/agenthub/langchains_agent/utils/monologue.py similarity index 75% rename from agent/lib/monologue.py rename to agenthub/langchains_agent/utils/monologue.py index 2449d768ef..18729b4a17 100644 --- a/agent/lib/monologue.py +++ b/agenthub/langchains_agent/utils/monologue.py @@ -1,7 +1,7 @@ -import lib.json as json -from lib.event import Event +import agenthub.langchains_agent.utils.json as json +from agenthub.langchains_agent.utils.event import Event -import lib.llm as llm +import agenthub.langchains_agent.utils.llm as llm class Monologue: def __init__(self): diff --git a/opendevin/agent.py b/opendevin/agent.py new file mode 100644 index 0000000000..41fa969997 --- /dev/null +++ b/opendevin/agent.py @@ -0,0 +1,122 @@ +from abc import ABC, abstractmethod +from typing import List, Dict, Type +from dataclasses import dataclass +from enum import Enum + + +class Role(Enum): + USER = "user" # the user + ASSISTANT = "assistant" # the agent + ENVIRONMENT = "environment" # the environment (e.g., bash shell, web browser, etc.) + + +@dataclass +class Message: + """ + This data class represents a message sent by an agent to another agent or user. + """ + + role: Role + content: str + # TODO: add more fields as needed + + +class Agent(ABC): + """ + This abstract base class is an general interface for an agent dedicated to + executing a specific instruction and allowing human interaction with the + agent during execution. + It tracks the execution status and maintains a history of interactions. + """ + + _registry: Dict[str, Type['Agent']] = {} + + def __init__( + self, + instruction: str, + max_steps: int = 100 + ): + self.instruction = instruction + self.max_steps = max_steps + + self._complete = False + self._history: List[Message] = [Message(Role.USER, instruction)] + + @property + def complete(self) -> bool: + """ + Indicates whether the current instruction execution is complete. + + Returns: + - complete (bool): True if execution is complete; False otherwise. + """ + return self._complete + + @property + def history(self) -> List[str]: + """ + Provides the history of interactions or state changes since the instruction was initiated. + + Returns: + - history (List[str]): A list of strings representing the history. + """ + return self._history + + @abstractmethod + def run(self) -> None: + """ + Starts the execution of the assigned instruction. This method should + be implemented by subclasses to define the specific execution logic. + """ + pass + + @abstractmethod + def chat(self, message: str) -> None: + """ + Optional method for interactive communication with the agent during its execution. Implementations + can use this method to modify the agent's behavior or state based on chat inputs. + + Parameters: + - message (str): The chat message or command. + """ + pass + + def reset(self) -> None: + """ + Resets the agent's execution status and clears the history. This method can be used + to prepare the agent for restarting the instruction or cleaning up before destruction. + + """ + self.instruction = None + self._complete = False + self._history = [] + + @classmethod + def register(cls, name: str, agent_cls: Type['Agent']): + """ + Registers an agent class in the registry. + + Parameters: + - name (str): The name to register the class under. + - agent_cls (Type['Agent']): The class to register. + """ + if name in cls._registry: + raise ValueError(f"Agent class already registered under '{name}'.") + cls._registry[name] = agent_cls + + @classmethod + def create_instance(cls, name: str, instruction: str) -> 'Agent': + """ + Creates an instance of a registered agent class based on the given name. + + Parameters: + - name (str): The name of the agent class to instantiate. + - instruction (str): The instruction for the new agent instance. + + Returns: + - An instance of the specified agent class. + """ + if name not in cls._registry: + raise ValueError(f"No agent class registered under '{name}'.") + agent_cls = cls._registry[name] + return agent_cls(instruction) diff --git a/opendevin/main.py b/opendevin/main.py new file mode 100644 index 0000000000..10c4dba75d --- /dev/null +++ b/opendevin/main.py @@ -0,0 +1,18 @@ +import os +import argparse + +import agenthub # for the agent registry +from opendevin.agent import Agent + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description="Run an agent with a specific task") + parser.add_argument("-d", "--directory", required=True, type=str, help="The working directory for the agent") + parser.add_argument("-t", "--task", required=True, type=str, help="The task for the agent to perform") + parser.add_argument("-c", "--agent-cls", default="LangchainsAgent", type=str, help="The agent class to use") + args = parser.parse_args() + + print("Working in directory:", args.directory) + os.chdir(args.directory) + + agent = Agent.create_instance(args.agent_cls, args.task) + agent.run()