Compare commits

..

236 Commits

Author SHA1 Message Date
huybery 31ba53f9fe fix: Error: EACCES: permission denied for corepack 2024-04-05 13:56:23 +08:00
iFurySt dcaf51bc9e fix: add the community-maintained model list (#654) 2024-04-04 23:21:17 -04:00
Engel Nyst 12ddd973b5 Remove md around json (#685) 2024-04-04 23:04:34 -04:00
Anas DORBANI c834aa7275 enable build & run tests for the pull_requests (#745) 2024-04-05 02:24:27 +00:00
Anas DORBANI 8c2b4f5fde Update and fix Makefile (#743) 2024-04-05 02:08:23 +00:00
Alex Bäuerle 8ec24ab7ea feat: start implementing new frontend layout (#737) 2024-04-04 21:45:28 -04:00
Anas DORBANI 5ec0e5b7ec Switch to Poetry (#378)
* create the pyproject file

* Fix the pyproject.toml file

* Update Makefile

* adapt makefile

* fix some execution issues

* Untrack lock files and wait for the backend to get start before frontend

* Remove LangChain dependencies

* Add github action for pytest

* add missing dependency

* rebase and fix the versions adding lock file

* add torch and pymupdfb deps

* some conflicts fixes

* Add dependencies evaluation group

* add poetry.lock

* Fix unexpected operator

---------

Co-authored-by: Robert Brennan <contact@rbren.io>
2024-04-05 00:27:29 +00:00
Vincent a0928ae590 Updating MakeFile and fixing monologue memory parameter issue (#692)
* Updating memory for monologue agent to fix base_url being used with OpenAIEmbedding by accident, added default text-embedding-ada-002 to monologue agent memory for OpenAIEmbeddings, added more enviroment variable configurations to setup-config in make file

* adding indent
2024-04-04 17:47:31 -05:00
Udbhav Ram 7680ff7dec Update README.md to include docker configuration (#731) 2024-04-04 17:45:57 -05:00
RaGe 17ea9a7849 (fix) Do not reset backend for only language change (#736) 2024-04-04 18:23:49 -04:00
Engel Nyst e70767c226 clean up (#721) 2024-04-04 17:02:44 -05:00
mashiro 0534c14279 feat: i18n (#723)
* feat: i18n

* fix: ci lint error

* fix: pnpm run pre script not trigger

---------

Co-authored-by: Jim Su <jimsu@protonmail.com>
2024-04-04 16:38:19 -04:00
mashiro baa981cda7 fix: block input send event while ime composition (#701)
* fix: trigger send event while ime composition & separate input element & disable input event while initializing

* fix: eslint react plugin setting

---------

Co-authored-by: Jim Su <jimsu@protonmail.com>
2024-04-04 09:44:07 -04:00
Jack Quimby 0748f0b7ce Doc: Updated documentation for Ollama (#689)
* doc: Guide for using local LLM with Ollama

* forgot to delete print statement

* typos

* Updated guide - new working method

* Move to docs folder

* Fixed front end overwrite local model name

* Update llm.py

* Delete docs/examples/images/example.png

deleted example.png
2024-04-04 09:24:44 -04:00
mashiro 5bb7bdb9f8 fix: detect corepack node version need to equal minimize (#703) 2024-04-04 16:59:40 +08:00
mashiro 0fdc401f91 chore: use pnpm to manage frontend deps (#659)
* chore: use pnpm to manage frontend deps

* typo: change content of tips

* docs: update node.js require version & replacement installation link

* feat: detect the Node.js version to ensure corepack is supported

* typo: remove chinese comment

* fix: lint CI config, use pnpm to install dependencies

* fix: nextui style error when using pnpm

* fix: ci setup pnpm cwd

* fix: frontend lint ci install deps crash

* fix: ci lint frontend missing package.json path

* fix: frontend lint ci add cache-dependency-path prop
2024-04-04 14:55:03 +08:00
xcodebuild 3adcb7ea56 fix: make run on Windows (#665)
* fix: make run on Windows

* Update Makefile

Co-authored-by: Graham Neubig <neubig@gmail.com>

---------

Co-authored-by: Graham Neubig <neubig@gmail.com>
2024-04-03 23:15:31 -04:00
808vita 398749fcd8 fix frontend : highlight active assistant text and maintain chat seq | for #476 (#598)
* highlight active assistant text and maintain seq

* adjust speed

* alter autoscrolll
2024-04-03 22:46:52 -04:00
Engel Nyst 66031a67ba Make max_iterations configurable (#676) 2024-04-03 16:28:56 -04:00
Anas DORBANI 78c196d95f Add the description about the LMs Support (#674) 2024-04-03 16:09:37 -04:00
Jim Su 0c00e84e77 Send initialization arguments only when stored in localStorage (#618)
* Send initialization arguments only when stored in localStorage

* Fix mock default-model path
2024-04-03 13:56:47 -04:00
Robert Brennan 310cd7017d Add link to LiteLLM to make-setup (#614)
* Update Makefile

* fix tab

* add note to readme
2024-04-03 10:22:08 -04:00
xcodebuild 1c6f046c84 Fix make vars (#641)
* fix: let BACKEND_HOST and FRONTEND_PORT works in markfile

* feat: let vite do not clear terminal to keep backend log
2024-04-03 08:58:01 -04:00
Jack Quimby 08a2dfb01a Guide for Ollama local LLM (#615)
* doc: Guide for using local LLM with Ollama
2024-04-02 23:20:25 -04:00
Jim Su d397a200bf Add playwright to pipenv (#625)
* Add playwright to Pipfile
2024-04-02 21:25:16 -04:00
Paweł Ciosek b672ac3632 Fix terminal output disappears after switching tabs (#604) 2024-04-02 20:57:30 -04:00
universea 5f29df088a Add playwright and show screenshoots on web browser (#547)
* add playwright and show screenshoots on web browser

* fix lints

* fix lint issues

* fix lint issues

* fix lint issues

* fix lint issues

* fix lint issues
2024-04-02 18:46:01 -04:00
Robert Brennan c3f95f049f Update Makefile (#609) 2024-04-02 18:36:10 -04:00
Yufan Song 324a00f477 refactor(config): make a single source of truth file (#524)
* refactor

* fix nits

* add get from env

* refactor logic
2024-04-02 18:01:23 -04:00
Yufan Song 1af287a24b optimize(sandbox): cleanup docker when disconnect to speed up restart speed (#557)
* clean docker when disconnect

* add check
2024-04-02 17:57:16 -04:00
ryanwclark1 b6b7272cdc Add default model option to setup-config reads echo and writes to conf if not provided by user (#585)
Co-authored-by: Ryan Clark <ryanc@accentservices.com>
2024-04-02 17:52:48 -04:00
Theodoros Aslanidis fdbcdb84ee Update README (#574) 2024-04-02 17:51:57 -04:00
Engel Nyst 8fef7495a9 Removed langchain (#586)
* Removed langchain

* Update README.md

---------

Co-authored-by: Robert Brennan <accounts@rbren.io>
2024-04-02 17:38:54 -04:00
ncrypted | Oliver 801417dcbf fix: make run conditional logs removal (#579)
* fix: make run conditional logs removal

* fix: make run fail-safe logs & pipe management
2024-04-02 16:50:13 -04:00
Robert Brennan 22a9a28e46 Update intro message (#569) 2024-04-02 10:02:09 -04:00
Jim Su 0a8a857d00 fix: apply settings without explicit change (#541)
* fix: apply settings without explicit change
* Change default model to gpt-4-0125-preview and don't print settings selection on startup
2024-04-02 09:49:43 -04:00
xcodebuild d64383a520 fix: let make run output both backend and frontend (#576)
* fix: let make run output both backend and frontend

* fix: delete pipe on run
2024-04-02 20:54:16 +08:00
Yufan Song 5e87c79838 refactor (#543) 2024-04-02 08:13:38 -04:00
Robert Brennan ddbe4fc604 Remove debug output (#572) 2024-04-02 08:12:26 -04:00
Yufan Song 93b0156f34 fix (#567) 2024-04-02 08:12:12 -04:00
Yufan Song 3e2045626a add max_iterations (#566) 2024-04-02 08:11:23 -04:00
xcodebuild c992a9f464 feat: add mock apis (#564) 2024-04-02 08:10:47 -04:00
Xingyao Wang 16fe8303e7 support disable color printing via environment variable in config.toml (#545) 2024-04-02 07:21:30 -04:00
xcodebuild 4c1d278d14 fix: use 127.0.0.1 for api proxy (#535) 2024-04-02 18:22:28 +08:00
Xingyao Wang c37124d740 Update README.md (#540) 2024-04-02 14:58:28 +08:00
Xingyao Wang fe736013cc Print with color in controller (#176)
* and color-coded printing action abd obs

* fix langchains agent's observation

* remove color printing from codeact agent

* fix mypy

* fix ruff

* resolve conflict

* fix ruff
2024-04-02 13:13:19 +08:00
Binyuan Hui 6d715c2ac7 fix: badges need to be centered (#538)
* fix: refine readme style

* fix: refine readme style

* fix: refine readme style

* fix: badges need to be centered

* fix: badges need to be centered

* fix: badges need to be centered

* fix: badges need to be centered

* fix: badges need to be centered
2024-04-02 11:45:20 +08:00
Alex Bäuerle 79237210f2 build(add-files-created-for-other-dev-envs-to-gitignore): Add files such as requirements.txt, .python-version, bun.lockb, and yarn.lock so that if anybody uses these systems, they don't accidentally push the files (#519) 2024-04-01 23:21:45 -04:00
Alex Bäuerle 774529887a Update README.md (#536) 2024-04-02 11:14:55 +08:00
Robert Brennan e5db7b8855 Update bug report template (#395)
* Update bug report template

* Update bug_report.md

* Update bug_report.md

* Update .github/ISSUE_TEMPLATE/bug_report.md
2024-04-01 23:08:37 -04:00
Graham Neubig c15fa3e768 Add a host command to the makefile (#534) 2024-04-01 23:06:53 -04:00
George Balch a9f469f0e7 fix: Handle api key error (#488)
* Propagate exception up to task coroutine instead of breaking the for loop manually, await coroutine so exception is returned to caller

* Remove redundant traceback as is already called in step function lower on the stack

* Change message as error could occur in middle of task also

* Fix linter errors

* Raise exception only on api key error

* Add TODO
2024-04-01 22:49:06 -04:00
Anas DORBANI fa40d379de Update README file (#472)
* Update README file

* add the requirements section

* Revert the project description
2024-04-01 21:18:10 -04:00
Devin abe0b9fd79 fix: Add numpy to Pipfile dependencies for issue #520 (#533)
Co-authored-by: Ubuntu <ubuntu@ip-10-240-235-229.us-west-2.compute.internal>
2024-04-01 20:55:20 -04:00
Joo-Won Jung b609f0681b Add an Pipfile example for AMD GPU or CPU only users (#510)
* refactor: add Pipfile example to select various PyTorch package

* Update README.md

---------

Co-authored-by: Robert Brennan <accounts@rbren.io>
2024-04-01 13:51:50 -04:00
Robert Brennan 511afa12fe fix old references to langchains (#513) 2024-04-01 13:33:20 -04:00
Binyuan Hui d97602d071 add: .gitattributes (#511)
* add: .gitattributes

* fix: change ipynb as vendored
2024-04-02 01:24:28 +08:00
Alex Bäuerle 6d43b0ae88 fix: set the input to be empty after pressing enter instead of showing a newline (#506) 2024-04-02 01:07:06 +08:00
Robert Brennan dac89a9720 Update README.md (#505) 2024-04-01 11:54:45 -04:00
Robert Brennan 3e6508b7f1 Update Langchains Agent, rename to Monologue (#402)
* standardize on content vs contents

* remove langchain dep

* rename langchains to monologue

* unused imports

* Update agenthub/planner_agent/prompt.py

* update locks

* fix code editor

* fix agent list in frontend
2024-04-01 11:33:39 -04:00
Aravind Somaraj 26c9ce132b style: Moved argument parsing statements into a separate function (#503)
* style: moved argument parsing into a separate function

* commito

* Update evaluation/regression/conftest.py

---------

Co-authored-by: Robert Brennan <accounts@rbren.io>
2024-04-01 10:47:58 -04:00
Patrick Nercessian 64281c4cc4 Transitioned to use LiteLLM Router to support retries and backoffs (#501) 2024-04-01 10:42:52 -04:00
Tess 8796a690d5 doc - Added code documentation for clarity (#434)
* doc - Added code documentaion to 'plan.py'

* doc - Added code documentation to 'session.py'

* doc - added code documentation for clarity

* doc - added documentation to 'conftest.py'

* doc - added code documentation to 'run_tests.pt'

* Update evaluation/regression/conftest.py

---------

Co-authored-by: Robert Brennan <accounts@rbren.io>
2024-04-01 10:22:09 -04:00
xcodebuild 1ae3f1bf6a Fix API with vite proxy (#454)
* fix: use vite proxy for API and ws

* feat: add env var BACKEND_HOST

* feat: mock api for /litellm-models
2024-04-01 13:17:20 +08:00
Erik Nilsson 4404b9af24 Automatic repair of json for langchains agent (#444)
* Added json_repair to Pipfile

* Automatic repair of json for langchains agent
2024-03-31 22:52:59 -04:00
808vita 0e3c86ad59 fix typing jsx ChatInterface.tsx (#468)
wrapped with fragment
2024-03-31 22:46:08 -04:00
Alex Bäuerle 15ab5e1617 feat: make input for message autoresize (#466) 2024-04-01 04:25:44 +08:00
Alex Bäuerle 838ca200a8 fix: fix chat bubble width (#464) 2024-04-01 03:33:26 +08:00
808vita a00f604995 feat(frontend): typing chat feature | for #187 (#353)
* feat(frontend): typing chat

* fix linting

* typo corrections - ChatInterface.tsx

typo corrections in comments

* refactor and fix typing
2024-04-01 03:10:37 +08:00
Anas DORBANI c6cc5f6b5a Add Makefile (#432) 2024-03-31 14:46:42 -04:00
iFurySt a08c82d35e ci: check if the image exists in ghcr.io to avoid repeat building and pushing (#283)
* ci: check if the image exists in ghcr.io to avoid repeat building and pushing.

* feat: add push MAJOR and MINOR version to ghcr.io
2024-03-31 11:30:13 -04:00
Robert Brennan ec073834ad Send error response instead of crashing (#450) 2024-03-31 11:17:23 -04:00
808vita e9adc45276 doc: add mock server to list in CONTRIBUTING.md (#442)
Added mock server to "How to begin" section
2024-03-31 11:16:33 -04:00
Robert Brennan a73df88678 require 3.11 (#451) 2024-03-31 11:12:13 -04:00
Engel Nyst 6e4089fb75 Remove unexpected backticks from the LLM (#440) 2024-03-31 10:39:35 -04:00
Jayanth Parthsarathy 907da30320 doc: fix wrong link to server in contributing.md (#427)
* doc: fix wrong link to server in contributing.md

---------

Co-authored-by: jimsu <jimsu@protonmail.com>
2024-03-31 01:32:27 -04:00
Jim Su 7af57b3e1d Make user messages blue (#428) 2024-03-31 01:09:03 -04:00
Engel Nyst ddf27c0891 Fix Agent README.md (#422) 2024-03-31 00:55:24 -04:00
iFurySt dab86c4a77 Style improve fe layout and interaction (#385)
* style: improve FE layout and interaction, remove daisyui, switch to nextui; reduce the props of Workspace component; adjust style of chat bubble and workspace tabs.
2024-03-31 00:52:34 -04:00
Manal Arora 87d56d961f feat(frontend): adding functinality to get agents from backend server (#406)
* adding functinality to get agents from backend server

* dynamic selection of agents in backend

* adding the function listAgents

* Update opendevin/server/listen.py

* Update opendevin/agent.py

---------

Co-authored-by: Robert Brennan <accounts@rbren.io>
2024-03-30 19:45:55 -04:00
Robert Brennan fd5618202e Update sandbox.py (#390) 2024-03-30 19:35:59 -04:00
Robert Brennan 2a959a199b Update README.md (#396) 2024-03-30 19:28:58 -04:00
jannikwinghart da69bab11a Added instructions to update the backend architecture diagram (#413) 2024-03-30 19:24:52 -04:00
Robert Brennan 93cb5e0617 Update agent docs (#407)
* Update agent docs

* Update README.md

* Update README.md
2024-03-30 19:23:40 -04:00
Yufan Song 2d8cb973a8 add container image (#408) 2024-03-30 14:58:31 -04:00
Robert Brennan 4882cb6a66 Update README.md (#403) 2024-03-30 14:11:58 -04:00
jannikwinghart dd1ac82d15 Added architecture diagrams for system overview and backend (#391) 2024-03-30 12:03:56 -04:00
Zijian Han 838f79879b fix #375: update python version (#380) 2024-03-30 10:46:02 -04:00
Robert Brennan 6bd566d780 simplify readme (#366)
* simplify readme

* Update config.toml.template

* Update vite.config.ts (#372)

* Update vite.config.ts

* Update frontend/vite.config.ts

---------

Co-authored-by: Robert Brennan <accounts@rbren.io>

* remove old langchains infra

* remove refs to OPENAI_API_KEY

* simplify opendevin readme

---------

Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
2024-03-30 10:15:20 -04:00
Jim Su 11ed011b11 Update README.md (#379) 2024-03-30 10:15:08 -04:00
Robert Brennan effac868c1 Implement deserialization for actions and observations (#359)
* action deserializing

* add observation deserialization

* add tests

* refactor agents with serialization

* fix some errors

* fix lint

* fix json parser
2024-03-30 10:06:25 -04:00
Robert Brennan f68ee45761 output prompt debug before response (#348) 2024-03-30 20:08:05 +08:00
Renu 0a4f7de215 refactor(frontend): categorized css files into a separate folder (#298)
* Issue 294

* categorize css files

* cleanup

* formatted css
2024-03-30 20:01:39 +08:00
Jim Su 1be355436d Expose LiteLLM model names in backend (#370) 2024-03-29 19:34:32 -04:00
Robert Brennan 96af82ad6d Update README.md (#365) 2024-03-29 16:58:21 -04:00
Hesham 0e1ba56ef0 Support --task-file argument for main.py (#358)
* Update main.py

* Update main.py

* Update opendevin/main.py

Co-authored-by: Robert Brennan <accounts@rbren.io>

* Update main.py

* Update main.py

* Update main.py

* Update main.py

---------

Co-authored-by: Robert Brennan <accounts@rbren.io>
2024-03-29 16:54:26 -04:00
Anas DORBANI f5d07ad1b3 add more checks for the pre-commit config (#279) 2024-03-29 16:48:02 -04:00
Robert Brennan 3d7a86feb6 Fix TOML parser (#363)
* fix toml

* Update opendevin/config.py

* install types

* install types

* Revert "install types"

This reverts commit 820b38b1e2.

* fix install types

* non-interactive
2024-03-29 16:39:53 -04:00
Robert Brennan 248c39697e Remove extra install step (#361) 2024-03-29 16:13:29 -04:00
iFurySt 2286e73912 fix: change to use the latest docker image. (#290)
Co-authored-by: Robert Brennan <accounts@rbren.io>
2024-03-29 15:59:52 -04:00
Josh Hendershot 197e7fb2c0 fix(agenthub): update initial thoughts (#281)
* fix(agenthub): update initial thoughts

* edit langchains_agent
2024-03-29 15:57:10 -04:00
Yufan Song a7b4a7ca2f add byte order (#292) 2024-03-29 15:50:06 -04:00
Yufan Song 2def49e794 add (#355)
Co-authored-by: Robert Brennan <accounts@rbren.io>
2024-03-29 15:33:02 -04:00
Jim Su b1b96df8a8 Replace environment variables with configuration file (#339)
* Replace environment variables with configuration file

* Add config.toml to .gitignore

* Remove unused os imports

* Update README.md

* Update README.md

* Update README.md

* Fix merge conflict

* Fallback to environment variables

* Use template file for config.toml

* Update config.toml.template

* Update config.toml.template

---------

Co-authored-by: Robert Brennan <accounts@rbren.io>
2024-03-29 15:26:20 -04:00
George Balch b443c0af29 fix: Update requirements.txt with google-generativai (#315)
* Install google generativeai package and update requirements.txt using pip freeze

* Switch to pipenv for package management and add google-generateai package as well

* Update README with new installation instructions, refactor a little for better ordering of instructions

* Fix typo

---------

Co-authored-by: Robert Brennan <accounts@rbren.io>
2024-03-29 15:16:12 -04:00
808vita 98e7057d53 refactor(vite config) & doc (main readme) : Start Frontend with just "npm start" (#333)
* frontend : added vite --port 3001 | package.json

 "start" script : added "vite --port 3001" to frontend package.json

Just use npm start ; uses port 3001

* Updated installation section for frontend | README.md

With the addition of "start": "vite --port 3001" to the frontend's package.json, simply use "npm start" to initiate the frontend development environment.

* -modify vite config port to 3001
-Revert "frontend : added vite --port 3001 | package.json"
2024-03-29 15:13:42 -04:00
Raphaël Fleury-le veso f3fda42765 fix: Add claude-3-opus-20240229 option to settingsService.ts (#342)
* Added claude-3-opus-20240229 option to settingsService.ts

* Fix lint error

---------

Co-authored-by: Jim Su <jimsu@protonmail.com>
2024-03-29 12:23:18 -04:00
Robert Brennan a6f0c066b5 Implement Planning (#267)
* add outline of agent

* add plan class

* add initial prompt

* plumb plan through a bit

* refactor state management

* move task into state

* fix errors

* add prompt parsing

* add task actions

* better serialization

* more serialization hacks

* fix fn

* fix recursion error

* refine prompt

* better description of run

* update prompt

* tighter planning mechanism

* prompt tweaks

* fix merge

* fix lint issues

* add error handling for tasks

* add graphic for plans

* remove base_path from file actions

* rename subtask to task

* better planning

* prompt updates for verification

* remove verify field

* ruff

* mypy

* fix actions
2024-03-29 11:47:29 -04:00
Robert Brennan 32a3a0259a Serialization of Actions and Observations (#314)
* checkout geohotstan work

* merge session.py changes

* add observation ids

* ignore null actions and obs

* add back action messages

* fix lint
2024-03-29 10:49:40 -04:00
brzhang bbc51c858d feat: pref message send box style (#335)
Co-authored-by: brzhang <hoollyzhang@tencent.com>
2024-03-29 09:19:39 -04:00
Robert Brennan 0322693ec2 remove base_path from file actions (#320)
* remove base_path from file actions

* unused imports
2024-03-29 11:55:25 +08:00
Anas DORBANI 7c27e59918 feat: Ad/regression tests using pytest (#329)
* Remove all the unnecessary files

* Create finalize the regression testing framework and add hello world test case

* Update requirements.txt

* Update the test function to execute the generate script
2024-03-28 23:40:30 -04:00
Jim Su fa87352b45 Correctly change directory (#325)
* Correctly change directory

* Make pre-commit executable

* Fix lint issues
2024-03-28 20:49:37 -04:00
808vita 7448d9147b Update README.md (#323)
Frontend readme updated - for terminal section
2024-03-28 20:36:56 -04:00
Ashher Ali 33f67876d9 bug: #313 responsive width wrt size (#302)
* #294 refactor Browser.tsx and Browser.css

* #313 UI responsive

* husky issue resolved

* #313 UI responsive
2024-03-28 16:54:35 -04:00
Yufan Song e6633e6aae refactor (#318) 2024-03-28 15:51:28 -04:00
Yufan Song dedd09fdf5 add mkdir (#317) 2024-03-28 15:39:40 -04:00
Robert Brennan 94120f2b5d refactor state management (#258)
* refactor state management

* rm import

* move task into state

* revert change

* revert a few files
2024-03-28 15:23:47 -04:00
Yufan Song d993162801 feat(sandbox): add container process timeout kill machenism (#316)
* add timeout

* set timeout
2024-03-28 15:04:13 -04:00
Jim Su e249776e96 Force dark mode (#310) 2024-03-28 12:25:17 -04:00
Yashwanth S C f38bbf9261 feat(frontend): Add file picker to choose the working directory #221 (#289)
Add a file picker feature to top of the chat window.

Now a user can select the directory to work with.

Once a directory is chosen the user has the option to edit the directory also.(i.e choose another directory).
2024-03-28 10:53:33 -04:00
Yufan Song 256a04b307 fix(sandbox): add get pid code and kill the process (#274)
* add get pid code and kill

* remove print

* apply suggestion
2024-03-28 10:41:17 -04:00
808vita 2ff2cb5549 refactor (frontend) : for issue #294 frontend task : Clean up Browser.tsx & Browser.css (#296)
* Clean up comments from Browser.tsx

Clean up commented code from Browser.tsx

* clean up Browser.css and add mockup-browser class

clean up unused css classes in Browser.css and add "mockup-browser class"

* removed inline style-  Browser.tsx

Removed inline styles from the div in Browser.tsx ;  moved them to Browser.css under the class name "mockup-browser".
2024-03-28 21:30:03 +08:00
Kishore Chitrapu 73ea0e5803 Fix Docker container creation and error handling (#280)
* Fix Docker container creation and error handling

* updated patch based on the feedback

* add check docker message
2024-03-28 08:51:31 -04:00
Anas DORBANI 82c215ed5d Extract logic from init from langchains_agent and codeact_agent (#167) 2024-03-28 08:51:21 -04:00
Jim Su b1944a63ef Re-add banner to App and add change message (#282)
* Re-add banner to App and add change message

* feat: styling improvements for right panel

---------

Co-authored-by: huybery <huybery@gmail.com>
2024-03-28 20:35:17 +08:00
digger yu ed3bf194c7 fix typo (#286) 2024-03-28 19:27:50 +08:00
808vita 145d9e8041 Update CONTRIBUTING.md (#291)
typo correction
2024-03-28 19:23:36 +08:00
Robert Brennan 89e923679e API schema draft (#189)
* add api schema draft

* Update README.md

* Update opendevin/server/README.md
2024-03-27 22:03:55 -04:00
Binyuan Hui 658b860d04 feat: support tailwind and daisyUI (#266)
* feat: support tailwind and daisyUI

* feat: some styling improvements with daisyUI

* fix: remove flex in app.css and edit height in CodeEditor
2024-03-28 09:44:04 +08:00
Jim Su 2590570109 Add model and agent options in frontend (#271)
Add model and agent options in frontend
2024-03-27 21:09:22 -04:00
George Balch 16bf9d3cd2 Check for env var in parser argument default value or use hardcoded default (#276) 2024-03-27 20:55:16 -04:00
Robert Brennan a9102382f6 Update image registry in README.md (#265)
* Update image registry in README.md

* Update README.md

* Update README.md
2024-03-28 04:36:50 +08:00
Yufan Song 5db5acdaa3 add docker image docs (#263) 2024-03-27 16:08:53 -04:00
Robert Brennan 4304aceff3 remove openai key assertion, enable alternate embedding models (#231)
* remove openai key assertion

* support different embedding models

* add todo

* add local embeddings

* Make lint happy (#232)

* Include Azure AI embedding model (#239)

* Include Azure AI embedding model

* updated requirements

---------

Co-authored-by: Rohit Rushil <rohit.rushil@honeywell.com>

* Update agenthub/langchains_agent/utils/memory.py

* Update agenthub/langchains_agent/utils/memory.py

* add base url

* add docs

* Update requirements.txt

* default to local embeddings

* Update llm.py

* fix fn

---------

Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
Co-authored-by: RoHitRushil <43521824+RohitX0X@users.noreply.github.com>
Co-authored-by: Rohit Rushil <rohit.rushil@honeywell.com>
2024-03-27 14:58:47 -04:00
Vikramaditya Singh 9ae903697d Fixed terminal padding in addition to UI enhancement (#217)
* feat:enhanced layout

Signed-off-by: Vikramaditya <awesomevikram3@gmail.com>

* fixed:terminal padding

Signed-off-by: Vikramaditya <awesomevikram3@gmail.com>

* fixing lint issues

Signed-off-by: Vikramaditya <awesomevikram3@gmail.com>

* fixing lint issues

Signed-off-by: Vikramaditya <awesomevikram3@gmail.com>

---------

Signed-off-by: Vikramaditya <awesomevikram3@gmail.com>
2024-03-28 02:42:19 +08:00
George Balch 98919d15ae Scroll to bottom of messages on new messages state change (#230)
Co-authored-by: George Balch <george.balch@proton.me>
2024-03-27 14:42:02 -04:00
Ikko Eltociear Ashimine 7c69672301 Update listen.py (#264)
recieves -> receives
2024-03-27 14:40:08 -04:00
Robert Brennan 0403b460f1 remove auto-open from vite (#254) 2024-03-28 01:15:59 +08:00
Robert Brennan 895ed00d1a Update README.md (#256) 2024-03-28 00:41:43 +08:00
Robert Brennan 9bc1890d33 add debug dir for prompts (#205)
* add debug dir for prompts

* add indent to dumps

* only wrap completion in debug mode

* fix mypy
2024-03-27 12:40:08 -04:00
iFurySt 89abc5e253 fix: move the makefile to correct path. (#252) 2024-03-27 23:53:40 +08:00
Jim Su fcad0538fb Refactor socket to handle both action and observation types (#250) 2024-03-27 11:34:28 -04:00
Robert Brennan 15a4c0044b Update README.md 2024-03-27 11:12:15 -04:00
iFurySt 8b9fc3df28 feat: add workflow to ghcr (#237)
Co-authored-by: Xingyao Wang <xingyao6@illinois.edu>
2024-03-27 23:10:34 +08:00
George Balch 9b5190796e fix: Add eslint to package.json (#229)
* Add eslint to package.json

* Use npm to install instead of yarn, update package-lock.json

---------

Co-authored-by: George Balch <george.balch@proton.me>
2024-03-27 11:08:39 -04:00
iFurySt 1c5c84faea fix: delete the docker exec output prefix(8 bytes). (#247) 2024-03-27 11:05:07 -04:00
Robert Brennan 413f5b1c0b standardize on LLM_MODEL (#244) 2024-03-27 09:41:13 -04:00
Robert Brennan 6b4a613578 Update README.md (#243) 2024-03-27 21:27:59 +08:00
Binyuan Hui 0cbe95dd35 feat: update opendevin logo (#242)
* update opendevin logo

* update opendevin logo

* remove 'open' text in the logo
2024-03-27 21:26:50 +08:00
Robert Brennan ea10809a96 fix file write observations (#225)
* fix file write observations

* empty content for file write
2024-03-27 13:07:14 +08:00
Robert Brennan 95c128c3d6 Fix summaries (#223)
* fix summarization

* fix content vs contents issue
2024-03-26 16:55:00 -04:00
Robert Brennan 93656f3bb3 add error handling for action running (#212) 2024-03-26 16:42:27 -04:00
Yufan Song 9ab15b3287 add mock server (#214) 2024-03-26 16:15:20 -04:00
iFurySt 02a0367757 feat: add message related schema to FE and BE. (#195) 2024-03-26 12:06:30 -04:00
Robert Brennan 7cdfe63432 Add node version requirement to README (#206)
* Update README.md

* add engines to package.json
2024-03-26 12:05:48 -04:00
Robert Brennan a6aa2d88cc Fix messages in chat window (#185)
* fix messages from server

* fix observations

* fix file path arg

* revert session
2024-03-26 23:47:53 +08:00
Robert Brennan 134cc2bc84 fix summaries (#191) 2024-03-26 23:44:54 +08:00
Robert Brennan 9e924ab4b1 add error observations (#196) 2024-03-26 23:43:59 +08:00
Robert Brennan 4ee0ae9c4a fix readme env vars (#199) 2024-03-26 10:43:11 -04:00
Giacomo Rocchetti ecadff3442 Removed attach button (#197)
Co-authored-by: giacomo <Giacomo.Rocchetti@diatechpharmacogenetics.com>
2024-03-26 10:29:37 -04:00
Robert Brennan 983092c182 use utf8 encoding for file operations (#180) 2024-03-26 08:44:16 -04:00
Robert Brennan 0758db202c fix bad observation check (#184)
* fix bad observation check

* fix add_history call
2024-03-26 08:35:06 -04:00
Robert Brennan 5d75e23fa0 add model picking docs (#181) 2024-03-26 07:57:47 -04:00
Robert Brennan 397f3fbc78 Add rewrite logic to help with docker-in-docker scenarios (#146)
* add rewrite logic

* Update opendevin/sandbox/sandbox.py

* Update sandbox.py
2024-03-26 07:38:57 -04:00
Xingyao Wang 3cb1e05c8c update readme for new abstraction (#173) 2024-03-26 07:29:46 -04:00
Robert Brennan 486ec2d94a Minor fixes for new Agent framework (#158)
* add message if exit happens before finish

* fix kill command

* fix browse action

* fix sandbox

* update requirements

* add status code

* refactor controller

* add try to callbacks

* fix background log collection

* format logs a bit more nicely

* run background procs in same container

* fix close command

* rename sockt

* fix up kills

* fix lint issues

* fix ruff

---------

Co-authored-by: Xingyao Wang <xingyao6@illinois.edu>
2024-03-26 12:55:33 +08:00
Jim Su 430527680f Server: load environment variables from .env and document environment variables (#137)
Server: load environment variables from .env and document environment variables
2024-03-26 00:14:48 -04:00
Robert Brennan eb4a261880 Create generic LLM client using LiteLLM (#114)
* add generic llm client

* fix lint errors

* fix lint issues

* a potential suggestion for llm wrapper to keep all the function sigatures for ide

* use completion partial

* fix resp

* remove unused args

* add back truncation logic

* fix add_event

* fix merge issues

* more merge issues fixed

* fix codeact agent

* remove dead code

* remove import

* unused imports

* fix ruff

* update requirements

* mypy fixes

* more lint fixes

* fix browser errors

* fix up observation conversion

* fix format of error

* change max iter default back to 100

* fix kill action

* fix docker cleanup

* add RUN_AS_DEVIN flag

* fix condense

* revert some files

* unused imports

---------

Co-authored-by: Xingyao Wang <xingyao6@illinois.edu>
Co-authored-by: Robert Brennan <rbren@Roberts-MacBook-Pro.local>
2024-03-26 12:10:23 +08:00
Robert Brennan 815b78595a Fix sandbox user ID on windows (#170)
* set user id

* fix lint
2024-03-25 22:56:48 -04:00
Yufan Song df14ce6c72 add version info (#168) 2024-03-25 21:17:34 -04:00
Hesham 6a1197f5c0 improve monologue (#157)
* improve monologue

* Update monologue.py

---------

Co-authored-by: Hesham Haroon <heshamharoon@Heshams-MacBook-Pro.local>
2024-03-25 19:15:40 -04:00
Hesham 847c2148a6 update messages (#156)
* update messages

* Update opendevin/action/agent.py

Co-authored-by: Robert Brennan <accounts@rbren.io>

* Update opendevin/action/agent.py

Co-authored-by: Robert Brennan <accounts@rbren.io>

---------

Co-authored-by: Hesham Haroon <heshamharoon@Heshams-MacBook-Pro.local>
Co-authored-by: Robert Brennan <accounts@rbren.io>
2024-03-25 19:15:23 -04:00
geohotstan 0e090773e3 updated pre-commit so it works (#161) 2024-03-25 18:28:32 -04:00
Robert Brennan ad83a4d869 fix tag on sandbox (#164) 2024-03-25 18:24:30 -04:00
Robert Brennan dc1a1e6685 Update README.md (#160) 2024-03-25 18:15:25 -04:00
Xingyao Wang 82f934d4cd New Agent, Action, Observation Abstraction with updated Controller (#105)
* rearrange workspace_dir and max_step as arguments to controller

* remove unused output

* abstract each action into dataclass

* move actions

* fix action import

* move cmd manager and change method to private

* move controller

* rename action folder

* add state

* a draft of Controller & new agent abstraction

* add agent actions

* remove controller file

* add observation to perform a refractor on langchains agent

* revert to make this compatible via translation

* fix typo and translate error

* add error to observation

* index thought as dict

* refractor controller

* fix circular dependency caused by type hint

* add runnable attribute to agent

* add mixin to denote executable

* change baseclass

* make file read/write action compatible w/ docker directory

* remove event

* fix some merge issue

* fix sandbox w/ permission issue

* cleanup history abstraction since langchains agent is not really using it

* tweak to make langchains agent working

* make all actions return observation

* fix missing import

* add echo action for agent

* add error code to cmd output obs

* make cmd manager returns cmd output obs

* fix codeact agent to make it work

* fix all ruff issue

* fix mypy

* add import agenthub back

* add message for Action attribute (migrate from previous event)

* fix typo

* fix instruction setting

* fix instruction setting

* attempt to fix session

* ruff fix

* add .to_dict method for base and observation

* add message for recall

* try to simplify the state_updated_info with tuple of action and obs

* update_info to Tuple[Action, Observation]

* make codeact agent and langchains compatible with Tuple[Action, Observation]

* fix ruff

* fix ruff

* change to base path to fix minimal langchains agent

* add NullAction to potentially handle for chat scenario

* Update opendevin/controller/command_manager.py

Co-authored-by: Robert Brennan <accounts@rbren.io>

* fix event args

* set the default workspace to "workspace"

* make directory relative (so it does not show up to agent in File*Action)

* fix typo

* await to yield for sending observation

* fix message format

---------

Co-authored-by: Robert Brennan <accounts@rbren.io>
2024-03-26 01:56:58 +08:00
Ikko Eltociear Ashimine bc9c9198c4 docs: update CONTRIBUTING.md (#140)
offical -> official
2024-03-25 11:24:57 -04:00
Robert Brennan 8a64d7c912 Fix read and write operations when LLM asks for absolute path (#126)
* fix resolution of filepaths

* fix imports

* Update write.py
2024-03-25 08:53:26 -04:00
Engin Can Dinc e445f92281 Fix vertical layout for browser (#135) 2024-03-25 08:25:00 -04:00
Xingyao Wang 0c396d3bbd Update README.md (#134) 2024-03-25 08:07:41 -04:00
Jim Su 9f8b61666a Update README.md (#132)
Add demo video to README.md
2024-03-25 12:32:42 +08:00
Robert Brennan d9c1bee2aa Add instructions to README.md (#129)
* Update README.md

* add WORKSPACE_DIR env var

* Update README.md

* Update session.py

---------

Co-authored-by: Robert Brennan <rbren@Roberts-MacBook-Pro.local>
2024-03-25 11:35:12 +08:00
Jim Su 335a91610e Wire up frontend (#128) 2024-03-25 10:07:38 +08:00
Robert Brennan 0f4a11685e Add agenthub import to listen.py (#127) 2024-03-24 19:20:42 -04:00
Robert Brennan a023fcae64 fix truncation logic (#125) 2024-03-24 18:46:01 -04:00
Robert Brennan 8ce2ac7648 Fix agenthub import (#123)
* fix agenthub import

* add noqa
2024-03-24 18:29:09 -04:00
Sean Lim dfa98b334e fix typo (#122) 2024-03-24 17:15:29 -04:00
Robert Brennan 4aa24eb41d Server working with agent library (#97)
* server working with agent library

* update readme

* add messages to events

* factor out steps

* fix websocket messages

* allow user to run arbitrary actions

* allow user to run commands before a task is started

* fix main.py

* check JSON

* handle errors in controller better

* fix memory issue

* better error handling and task cancellation

* fix monologue len

* fix imports

* remove server from lint check

* fix lint issues

* fix lint errors
2024-03-24 22:24:44 +08:00
geohotstan fb1822123a Adding pre-commit and CI for ruff and mypy (#69)
* don't modify directories

* oops typo

* dev_config/python

* add config to CI

* bump CI python to 3.10

* 3.11?

* del actions/

* add suggestions

* delete unused code

* missed some

* oops missed another one

* remove a file
2024-03-23 19:41:49 -04:00
Yufan Song 642e1b3cd0 doc(sandbox): add more instructions for starting on sandbox work (#107)
* add doc

* fix

* remove requirement

* Update opendevin/README.md

Co-authored-by: Robert Brennan <accounts@rbren.io>

---------

Co-authored-by: Robert Brennan <accounts@rbren.io>
2024-03-23 17:44:48 -04:00
Jim Su a2f245e2fe Set up Redux, extract component state into Redux store, and break WebSocket out of Terminal component only (#85) 2024-03-23 17:40:43 -04:00
Yufan Song fabdddca21 fix(evaluation): solve graceful shutdown of docker containers (#106)
* add atexit

* remove print

* fix typo
2024-03-23 17:37:20 -04:00
Robert Brennan 78f8752246 minor fixes for langchain agent (#83)
* minor fixes

* set max output len

* truncate logs

* Update agenthub/langchains_agent/utils/agent.py
2024-03-23 17:34:35 -04:00
Xingyao Wang 0b5a531518 fix typo in README (#104) 2024-03-23 12:10:49 +08:00
Junyang Lin b0a8af6c99 update MVP roadmap (#100) 2024-03-23 09:10:52 +08:00
Yufan Song 5c68d82995 doc: add contribution docs (#101)
* add doc

* fix typo
2024-03-23 09:08:19 +08:00
zch-cc e5a28cba2f Evaluation: Fix bug on python path on run.sh (#98)
* Move regression tests to evaluation/

* use pythnon instead of docker in the script

* add model para

* change python to python3

* bug fix

* add python path

* add readme
2024-03-23 00:01:48 +08:00
zch-cc cfefc47439 Move regression tests to evaluation/ (#86)
* Move regression tests to evaluation/

* use pythnon instead of docker in the script

* add model para

* change python to python3

* bug fix
2024-03-22 23:26:37 +08:00
Xingyao Wang 2ba6fb1e7b Use main.py arguments to specify model_name instead of env var for Langchains Agent (#94)
* use model name from main.py arguments instead of env var

* set default model to gpt-4-0125-preview for langchains agent to work;
print model, dir, and task when started
2024-03-22 22:06:42 +08:00
Robert Brennan 3b2ed14ae7 Use Docker SDK for sandbox, integrate into CommandManager (#93)
* refactor command manager to use docker and move to docker sdk

* fix read and write actions

* actually run background cmd

* use bash for running cmds and fix logs

* keep logs in buffer file

* fix up background logs

* consolidate requirements

* fix docker imports

* add fixme

* add remove fixme

* fix sandbox.py path in README

* fix typo annotation and prompt

---------

Co-authored-by: Xingyao Wang <xingyao6@illinois.edu>
2024-03-22 21:54:00 +08:00
Aadya Madankar 4fda533b91 A starting point for SWE-Bench Evaluation with docker (#87) 2024-03-22 21:34:28 +08:00
libowen2121 40a3614e80 Add a roadmap for eval (#92) 2024-03-22 20:27:30 +08:00
Xingyao Wang 2d5c8f1060 change to OpenDevin fork (#89) 2024-03-22 18:30:12 +08:00
Xingyao Wang 5ff96111f0 A starting point for SWE-Bench Evaluation with docker (#60)
* a starting point for SWE-Bench evaluation with docker

* fix the swe-bench uid issue

* typo fixed

* fix conda missing issue

* move files based on new PR

* Update doc and gitignore using devin prediction file from #81

* fix typo

* add a sentence

* fix typo in path

* fix path

---------

Co-authored-by: Binyuan Hui <binyuan.hby@alibaba-inc.com>
2024-03-22 12:43:49 +08:00
Jiaxin Pei dc88dac296 adding a script to fetch and convert devin's output for evaluation (#81)
* adding code to fetch and convert devin's output for evaluation

* update README.md

* update code for fetching and processing devin's outputs

* update code for fetching and processing devin's outputs
2024-03-22 01:33:01 +08:00
Robert Brennan b84463f512 Refactor agent interface a bit (#74)
* start moving files

* initial refactor

* factor out command management

* fix command runner

* add workspace to gitignore

* factor out command manager

* remove dupe add_event

* update docs

* fix init

* fix langchain agent after merge
2024-03-21 23:35:28 +08:00
Xingyao Wang 2de75d4782 Minimal Docker Sandbox with GPT-3.5 Execution Example (#48)
* minimal docker sandbox

* make container_image as an argument (fall back to ubuntu);
increase timeout to avoid return too early for long running commands;

* add a minimal working (imperfect) example

* fix typo

* change default container name

* attempt to fix "Bad file descriptor" error

* handle ctrl+D

* add Python gitignore

* push sandbox to shared dockerhub for ease of use

* move codeact example into research folder

* add README for opendevin

* change container image name to opendevin dockerhub

* move folder; change example to a more general agent

* update Message and Role

* update docker sandbox to support mounting folder and switch to user with correct permission

* make network as host

* handle erorrs when attrs are not set yet

* convert codeact agent into a compatible agent

* add workspace to gitignore

* make sure the agent interface adjustment works for langchain_agent
2024-03-21 21:54:56 +08:00
Jim Su a722f5c0b1 Fix: Keypresses in Terminal throws exception (#71) 2024-03-21 06:36:48 -04:00
Xingyao Wang 0380070e98 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 <huybery@gmail.com>
2024-03-20 15:09:29 -04:00
Binyuan Hui f99f4ebdaa fix: typo in the evaluation folder name. (#66) 2024-03-20 23:00:09 +08:00
Binyuan Hui a94f3d81cb fix: merge multiple .gitignore to unify management (#61) 2024-03-20 21:35:51 +08:00
geohotstan fd277666f6 use argparse in main.py (#62)
* changed to argparse

* del useless import

* del print statement

* use shortened argument
2024-03-20 09:27:14 -04:00
Robert Brennan 6ff1e52c83 add websocket handshake to server (#57)
* add websocket handshake to server

* Update server/requirements.txt
2024-03-20 09:00:19 -04:00
Jiaxin Pei 60e043ed8b Creating the evaluation folder and adding initial analysis of Devin's evaluation outputs (#50)
* Creating the folder for experiments, adding initial analysis of Devin's outputs on SWE-bench

* typo fixed

* update devin's evaluation outputs analysis

* remove data files from commit

* add logistics for managing the experiment folder in README

* Change folder naming and update logistics.

---------

Co-authored-by: Bowen Li <libowen.ne@gmail.com>
2024-03-20 19:59:51 +08:00
Robert Brennan 1eade7d188 First pass at a control loop (#35)
* initialize control loop

* add todo

* more todo

* add dockerignore

* add notes to prompt

* encourage llm to finish

* add debug env

* update prompts a bit

* fix task prompts

* add basic regression framework

* add hello-world regression case

* add hello-name test case

* fix workspace ignore

* document regression script

* add python-cli test case

* add default git config

* add help regression test

* add node rewrite test case

* add react-todo test case

* fix dockerfile

* add ability to run background commands

* add client-server test case

* update regression readme

* better support for background commands

* update tests

* fix bug in command removal
2024-03-20 18:44:50 +08:00
Junyang Lin 3c18f22fb3 Update README.md 2024-03-20 16:20:58 +08:00
Xingyao Wang dcff11cd2f add Python gitignore (#59) 2024-03-20 16:17:16 +08:00
Jim Su b6699fa047 Bug Fix: UI layout changes as you switch between tabs (#58)
* Fix UI layout change bug

* Reword comment
2024-03-19 22:43:15 -04:00
Jim Su 34c76a52c8 Frontend: Implement browser tab (#51)
* Add browser tab

* Add comments for URL and screenshot state variables
2024-03-19 09:14:20 -04:00
Vikramaditya Singh 1e733b0c71 feat:modified user-message view (#54)
Signed-off-by: Vikramaditya <awesomevikram3@gmail.com>
2024-03-19 08:34:16 -04:00
Pekka Enberg d5c28a47bc Fix frontend index.html head section (#53)
Let's use "OpenDevin" as page title, but also use realfavicongenerator.net to
generate a proper favicon from OpenDevinLogo.jpg.
2024-03-19 07:38:21 -04:00
Suryavir Kapur 9e589731f0 frontend: adds attach button (#55) 2024-03-19 07:35:55 -04:00
Jim Su cdb83c72e2 Add code editor and separate tabs (#43) 2024-03-18 22:47:16 -04:00
Suryavir Kapur cac687508f cra -> vite (#47) 2024-03-18 21:31:51 -04:00
Jim Su cf97b66ff9 Frontend: Implement real terminal with xterm.js (#39)
* Add xterm terminal

* Remove unused code blocks

* Update README.md with terminal documentation

* Update frontend/README.md

Co-authored-by: Graham Neubig <neubig@gmail.com>

---------

Co-authored-by: Graham Neubig <neubig@gmail.com>
2024-03-17 23:33:48 -04:00
Robert Brennan 346e992276 add basic websocket server (#41) 2024-03-17 23:25:34 -04:00
Robert Brennan f0ef8203cf add issue templates (#40) 2024-03-17 23:18:29 -04:00
Jim Su 38628c106f Add formatting and linting for typescript components (#32)
* Add formatting and linting for typescript components

* Add lint GitHub Action

* Add push to GitHub action trigger

* Update GitHub action node version

* Add Husky

* Update husky settings

* Fix Husky settings

* Should not pass

* Test

* Test

* Finalize

* Add --legacy-peer-deps flag to npm ci

* Fix lint pre-commit hook

* Compile

* Remove eslint and prettier command quotes
2024-03-17 14:57:20 -04:00
Junyang Lin 2a12619f3a Update README.md 2024-03-17 10:37:02 +08:00
Xiang Yue 3b73809be9 Update README (Xiang) (#28) 2024-03-17 09:33:12 +08:00
Asad Memon 39add27f15 Create MIT LICENSE (#8) 2024-03-16 22:46:04 +08:00
Binyuan Hui f2680fd065 Merge pull request #17 from neubig/neubig/add_prototype_frontend
Add prototype OpenDevin frontend
2024-03-16 21:22:25 +08:00
Graham Neubig 788ba686c9 Add prototype frontend 2024-03-15 20:22:29 -04:00
出蛰 d7b8013472 update: readme 2024-03-13 11:47:10 +08:00
出蛰 7b63deba2d init: project 2024-03-13 11:36:30 +08:00
342 changed files with 35357 additions and 2201 deletions
+1
View File
@@ -0,0 +1 @@
*.ipynb linguist-vendored
+40
View File
@@ -0,0 +1,40 @@
---
name: Bug Report
about: Report a problem with OpenDevin
title: ''
labels: 'bug'
assignees: ''
---
<!-- You MUST fill out this template. We will close issues that don't include enough information to reproduce -->
#### Describe the bug
<!-- a short description of the problem -->
#### Setup and configuration
**Current version**:
<!-- run `git log -n 1` to see this -->
```bash
```
<!-- tell us everything about your environment -->
**My config.toml and environment vars** (be sure to redact API keys):
```toml
```
**My model and agent** (you can see these settings in the UI):
* Model:
* Agent:
**Commands I ran to install and run OpenDevin**:
```
```
**Steps to Reproduce**:
1.
2.
3.
**Logs, error messages, and screenshots**:
#### Additional Context
+18
View File
@@ -0,0 +1,18 @@
---
name: Feature Request
about: Suggest an idea for OpenDevin features
title: ''
labels: 'enhancement'
assignees: ''
---
**What problem or use case are you trying to solve?**
**Describe the UX of the solution you'd like**
**Do you have thoughts on the technical implementation?**
**Describe alternatives you've considered**
**Additional context**
@@ -0,0 +1,18 @@
---
name: Technical Proposal
about: Propose a new architecture or technology
title: ''
labels: 'proposal'
assignees: ''
---
**Summary**
**Motivation**
**Technical Design**
**Alternatives to Consider**
**Additional context**
+17
View File
@@ -0,0 +1,17 @@
name: Build & Run Tests
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: '3.11'
- name: Run tests
run: |
make build
poetry run pytest ./tests
+59
View File
@@ -0,0 +1,59 @@
name: Build and publish multi-arch container images
on:
push:
branches: [ main ]
workflow_dispatch:
inputs:
reason:
description: 'Reason for manual trigger'
required: true
default: ''
jobs:
ghcr_build_and_push:
runs-on: ubuntu-latest
if: github.event_name == 'push' || github.event.inputs.reason != ''
steps:
- name: checkout
uses: actions/checkout@v4
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
id: buildx
uses: docker/setup-buildx-action@v3
- name: Log-in to ghcr.io
run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin
- name: Build and push multi-arch container images
run: |
# set env for fork repo
DOCKER_BUILD_ORG=$(echo "${{ github.repository }}" | tr '[A-Z]' '[a-z]' | cut -d '/' -f 1)
# Find directories containing Dockerfile but not containing .dockerfileignore
while IFS= read -r dockerfile_dir; do
# Check if .dockerfileignore exists in the directory
if [ -f "$dockerfile_dir/.dockerfileignore" ]; then
echo "$dockerfile_dir/.dockerfileignore exists, skipping build and push"
continue
fi
# Check if image was already exist in ghcr.io
pushd "$dockerfile_dir" > /dev/null
FULL_IMAGE=$(make get-full-image DOCKER_BUILD_ORG=$DOCKER_BUILD_ORG)
popd > /dev/null
EXISTS=$(docker manifest inspect "$FULL_IMAGE" > /dev/null 2>&1 && echo "true" || echo "false")
if [ "$EXISTS" == "true" ]; then
echo "Image $FULL_IMAGE already exists in ghcr.io, skipping build and push"
continue
fi
# Build and push the image to ghcr.io
pushd "$dockerfile_dir" > /dev/null
make all DOCKER_BUILD_ORG=$DOCKER_BUILD_ORG
popd > /dev/null
done < <(find . -type f -name Dockerfile -exec dirname {} \; | sort -u)
+47
View File
@@ -0,0 +1,47 @@
name: Lint
on: [push, pull_request]
jobs:
lint-frontend:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Install PNPM
uses: pnpm/action-setup@v2
with:
package_json_file: frontend/package.json
- name: Install Node.js 20
uses: actions/setup-node@v2
with:
node-version: 20
cache: 'pnpm'
cache-dependency-path: 'frontend/pnpm-lock.yaml'
- name: Install dependencies
run: |
cd frontend
pnpm install --frozen-lockfile
- name: Lint
run: |
cd frontend
pnpm run lint
lint-python:
name: Lint python
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up python
uses: actions/setup-python@v2
with:
python-version: 3.11
- name: Install dependencies
run: pip install ruff mypy
- name: Run ruff
run: ruff check --config dev_config/python/ruff.toml opendevin/ agenthub/
- name: Run mypy
run: mypy --install-types --non-interactive --config-file dev_config/python/mypy.ini opendevin/ agenthub/
+203
View File
@@ -0,0 +1,203 @@
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# C extensions
*.so
# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
./lib/
lib64/
parts/
sdist/
var/
wheels/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST
requirements.txt
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.py,cover
.hypothesis/
.pytest_cache/
cover/
# Translations
*.mo
*.pot
# Django stuff:
*.log
local_settings.py
db.sqlite3
db.sqlite3-journal
# Flask stuff:
instance/
.webassets-cache
# Scrapy stuff:
.scrapy
# Sphinx documentation
docs/_build/
# PyBuilder
.pybuilder/
target/
# Jupyter Notebook
.ipynb_checkpoints
# IPython
profile_default/
ipython_config.py
# pyenv
# For a library or package, you might want to ignore these files since the code is
# intended to run in multiple environments; otherwise, check them in:
.python-version
# pipenv
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
# However, in case of collaboration, if having platform-specific dependencies or dependencies
# having no cross-platform support, pipenv may install dependencies that don't work, or not
# install all needed dependencies.
#Pipfile.lock
# poetry
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
# This is especially recommended for binary packages to ensure reproducibility, and is more
# commonly ignored for libraries.
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
# poetry.lock
# pdm
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
#pdm.lock
# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
# in version control.
# https://pdm.fming.dev/#use-with-ide
.pdm.toml
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
__pypackages__/
# Celery stuff
celerybeat-schedule
celerybeat.pid
# SageMath parsed files
*.sage.py
# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/
*venv/
# Spyder project settings
.spyderproject
.spyproject
# Rope project settings
.ropeproject
# mkdocs documentation
/site
# mypy
.mypy_cache/
.dmypy.json
dmypy.json
# Pyre type checker
.pyre/
# pytype static type analyzer
.pytype/
# Cython debug symbols
cython_debug/
# PyCharm
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
# and can be added to the global gitignore or merged into this file. For a more nuclear
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
.idea/
.vscode/
# evaluation
evaluation/SWE-bench/data
# frontend
# dependencies
frontend/node_modules
frontend/.pnp
frontend/bun.lockb
frontend/yarn.lock
.pnp.js
# testing
frontend/coverage
# production
frontend/build
frontend/dist
# misc
.DS_Store
.env.local
.env.development.local
.env.test.local
.env.production.local
npm-debug.log*
yarn-debug.log*
yarn-error.log*
logs
# agent
.envrc
/workspace
/debug
# configuration
config.toml
-13
View File
File diff suppressed because one or more lines are too long
+89
View File
@@ -0,0 +1,89 @@
# Contributing
Thanks for your interest in contributing to OpenDevin! We welcome and appreciate contributions.
To report bugs, create a [GitHub issue](https://github.com/OpenDevin/OpenDevin/issues/new/choose).
## Contribution Guide
### 1. Fork the Official Repository
Fork [OpenDevin repository](https://github.com/OpenDevin/OpenDevin) into your own account.
Clone your own forked repository into your local environment.
```shell
git clone git@github.com:<YOUR-USERNAME>/OpenDevin.git
```
### 2. Configure Git
Set the official repository as your [upstream](https://www.atlassian.com/git/tutorials/git-forks-and-upstreams) to synchronize with the latest update in the official repository.
Add the original repository as upstream
```shell
cd OpenDevin
git remote add upstream git@github.com:OpenDevin/OpenDevin.git
```
Verify that the remote is set.
```shell
git remote -v
```
You should see both `origin` and `upstream` in the output.
### 3. Synchronize with Official Repository
Synchronize latest commit with official repository before coding.
```shell
git fetch upstream
git checkout main
git merge upstream/main
git push origin main
```
### 4. Create a New Branch And Open a Pull Request
After you finish implementation, open forked repository. The source branch is your new branch, and the target branch is `OpenDevin/OpenDevin` `main` branch. Then PR should appears in [OpenDevin PRs](https://github.com/OpenDevin/OpenDevin/pulls).
Then OpenDevin team will review your code.
## PR Rules
### 1. Pull Request title
As described in [here](https://github.com/commitizen/conventional-commit-types/blob/master/index.json), a valid PR title should begin with one of the following prefixes:
- `feat`: A new feature
- `fix`: A bug fix
- `doc`: Documentation only changes
- `refactor`: A code change that neither fixes a bug nor adds a feature
- `style`: A refactoring that improves code style
- `perf`: A code change that improves performance
- `test`: Adding missing tests or correcting existing tests
- `ci`: Changes to CI configuration files and scripts (example scopes: `.github`, `ci` (Buildkite))
- `chore`: Other changes that don't modify src or test files
- `revert`: Reverts a previous commit
For example, a PR title could be:
- `refactor: modify package path`
- `feat(frontend): xxxx`, where `(frontend)` means that this PR mainly focuses on the frontend component.
You may also check out previous PRs in the [PR list](https://github.com/OpenDevin/OpenDevin/pulls).
As described in [here](https://github.com/OpenDevin/OpenDevin/labels), we create several labels. Every PR should be tagged with the corresponding labels.
### 2. Pull Request description
- If your PR is small (such as a typo fix), you can go brief.
- If it is large and you have changed a lot, it's better to write more details.
## How to begin
Please refer to the README in each module:
- [frontend](./frontend/README.md)
- [agenthub](./agenthub/README.md)
- [evaluation](./evaluation/README.md)
- [opendevin](./opendevin/README.md)
- [server](./opendevin/server/README.md)
- [mock server](./opendevin/mock/README.md)
## Tests
TODO: make sure code pass the test before submit.
+25
View File
@@ -0,0 +1,25 @@
The MIT License (MIT)
=====================
Copyright © 2023
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
files (the “Software”), to deal in the Software without
restriction, including without limitation the rights to use,
copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following
conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
+102
View File
@@ -0,0 +1,102 @@
# Makefile for OpenDevin project
# Variables
DOCKER_IMAGE = ghcr.io/opendevin/sandbox
BACKEND_PORT = 3000
BACKEND_HOST = "127.0.0.1:$(BACKEND_PORT)"
FRONTEND_PORT = 3001
DEFAULT_WORKSPACE_DIR = "./workspace"
DEFAULT_MODEL = "gpt-4-0125-preview"
CONFIG_FILE = config.toml
PRECOMMIT_CONFIG_PATH = "./dev_config/python/.pre-commit-config.yaml"
# Build
build:
@echo "Building project..."
@echo "Pulling Docker image..."
@docker pull $(DOCKER_IMAGE)
@echo "Installing Python dependencies..."
@curl -sSL https://install.python-poetry.org | python3 -
@poetry install --without evaluation
@echo "Activating Poetry shell..."
@echo "Installing pre-commit hooks..."
@poetry run pre-commit install --config $(PRECOMMIT_CONFIG_PATH)
@echo "Setting up frontend environment..."
@echo "Detect Node.js version..."
@cd frontend && node ./scripts/detect-node-version.js
@cd frontend && if [ -f node_modules/.package-lock.json ]; then \
echo "This project currently uses \"pnpm\" for dependency management. It has detected that dependencies were previously installed using \"npm\" and has automatically deleted the \"node_modules\" directory to prevent unnecessary conflicts."; \
rm -rf node_modules; \
fi
@which corepack > /dev/null || (echo "Installing corepack..." && npm install -g corepack)
@cd frontend && sudo corepack enable && pnpm install && pnpm run make-i18n
# Start backend
start-backend:
@echo "Starting backend..."
@poetry run uvicorn opendevin.server.listen:app --port $(BACKEND_PORT)
# Start frontend
start-frontend:
@echo "Starting frontend..."
@cd frontend && BACKEND_HOST=$(BACKEND_HOST) FRONTEND_PORT=$(FRONTEND_PORT) pnpm run start
# Run the app
run:
@echo "Running the app..."
@if [ "$(OS)" = "Windows_NT" ]; then \
echo "`make run` is not supported on Windows. Please run `make start-frontend` and `make start-backend` separately."; \
exit 1; \
fi
@mkdir -p logs
@poetry run nohup uvicorn opendevin.server.listen:app --port $(BACKEND_PORT) > logs/backend_$(shell date +'%Y%m%d_%H%M%S').log 2>&1 &
@echo "Waiting for the backend to start..."
@until nc -z localhost $(BACKEND_PORT); do sleep 0.1; done
@cd frontend && pnpm run start -- --port $(FRONTEND_PORT)
# Setup config.toml
setup-config:
@echo "Setting up config.toml..."
@read -p "Enter your LLM Model name (see https://docs.litellm.ai/docs/providers for full list) [default: $(DEFAULT_MODEL)]: " llm_model; \
llm_model=$${llm_model:-$(DEFAULT_MODEL)}; \
echo "LLM_MODEL=\"$$llm_model\"" > $(CONFIG_FILE).tmp
@read -p "Enter your LLM API key: " llm_api_key; \
echo "LLM_API_KEY=\"$$llm_api_key\"" >> $(CONFIG_FILE).tmp
@echo "Enter your LLM Embedding Model\nChoices are openai, azureopenai, llama2 or leave blank to default to 'BAAI/bge-small-en-v1.5' via huggingface"; \
read -p "> " llm_embedding_model; \
echo "LLM_EMBEDDING_MODEL=\"$$llm_embedding_model\"" >> $(CONFIG_FILE).tmp; \
if [ "$$llm_embedding_model" = "llama2" ]; then \
read -p "Enter the local model URL: " llm_base_url; \
echo "LLM_BASE_URL=\"$$llm_base_url\"" >> $(CONFIG_FILE).tmp; \
elif [ "$$llm_embedding_model" = "azureopenai" ]; then \
read -p "Enter the Azure endpoint URL: " llm_base_url; \
echo "LLM_BASE_URL=\"$$llm_base_url\"" >> $(CONFIG_FILE).tmp; \
read -p "Enter the Azure LLM Deployment Name: " llm_deployment_name; \
echo "LLM_DEPLOYMENT_NAME=\"$$llm_deployment_name\"" >> $(CONFIG_FILE).tmp; \
read -p "Enter the Azure API Version: " llm_api_version; \
echo "LLM_API_VERSION=\"$$llm_api_version\"" >> $(CONFIG_FILE).tmp; \
fi
@read -p "Enter your workspace directory [default: $(DEFAULT_WORKSPACE_DIR)]: " workspace_dir; \
workspace_dir=$${workspace_dir:-$(DEFAULT_WORKSPACE_DIR)}; \
echo "WORKSPACE_DIR=\"$$workspace_dir\"" >> $(CONFIG_FILE).tmp
@mv $(CONFIG_FILE).tmp $(CONFIG_FILE)
# Help
help:
@echo "Usage: make [target]"
@echo "Targets:"
@echo " build - Build project, including environment setup and dependencies."
@echo " build-eval - Build project evaluation pipeline, including environment setup and dependencies."
@echo " start-backend - Start the backend server for the OpenDevin project."
@echo " start-frontend - Start the frontend server for the OpenDevin project."
@echo " run - Run the OpenDevin application, starting both backend and frontend servers."
@echo " Backend Log file will be stored in the 'logs' directory."
@echo " setup-config - Setup the configuration for OpenDevin by providing LLM API key, LLM Model name, and workspace directory."
@echo " help - Display this help message, providing information on available targets."
# Phony targets
.PHONY: build build-eval start-backend start-frontend run setup-config help
+253
View File
@@ -0,0 +1,253 @@
<a name="readme-top"></a>
<!--
*** Thanks for checking out the Best-README-Template. If you have a suggestion
*** that would make this better, please fork the repo and create a pull request
*** or simply open an issue with the tag "enhancement".
*** Don't forget to give the project a star!
*** Thanks again! Now go create something AMAZING! :D
-->
<!-- PROJECT SHIELDS -->
<!--
*** I'm using markdown "reference style" links for readability.
*** Reference links are enclosed in brackets [ ] instead of parentheses ( ).
*** See the bottom of this document for the declaration of the reference variables
*** for contributors-url, forks-url, etc. This is an optional, concise syntax you may use.
*** https://www.markdownguide.org/basic-syntax/#reference-style-links
-->
<div align="center">
<a href="https://github.com/OpenDevin/OpenDevin/graphs/contributors"><img src="https://img.shields.io/github/contributors/opendevin/opendevin?style=for-the-badge" alt="Contributors"></a>
<a href="https://github.com/OpenDevin/OpenDevin/network/members"><img src="https://img.shields.io/github/forks/opendevin/opendevin?style=for-the-badge" alt="Forks"></a>
<a href="https://github.com/OpenDevin/OpenDevin/stargazers"><img src="https://img.shields.io/github/stars/opendevin/opendevin?style=for-the-badge" alt="Stargazers"></a>
<a href="https://github.com/OpenDevin/OpenDevin/issues"><img src="https://img.shields.io/github/issues/opendevin/opendevin?style=for-the-badge" alt="Issues"></a>
<a href="https://github.com/OpenDevin/OpenDevin/blob/main/LICENSE"><img src="https://img.shields.io/github/license/opendevin/opendevin?style=for-the-badge" alt="MIT License"></a>
</div>
<!-- PROJECT LOGO -->
<div align="center">
<img src="./logo.png" alt="Logo" width="200" height="200">
<h1 align="center">OpenDevin: Code Less, Make More</h1>
</div>
<!-- TABLE OF CONTENTS -->
<details>
<summary>🗂️ Table of Contents</summary>
<ol>
<li><a href="#-mission">🎯 Mission</a></li>
<li><a href="#-what-is-devin">🤔 What is Devin?</a></li>
<li><a href="#-why-opendevin">🐚 Why OpenDevin?</a></li>
<li><a href="#-project-status">🚧 Project Status</a></li>
<a href="#-get-started">🚀 Get Started</a>
<ul>
<li><a href="#1-requirements">1. Requirements</a></li>
<li><a href="#2-build-and-setup">2. Build and Setup</a></li>
<li><a href="#3-run-the-application">3. Run the Application</a></li>
<li><a href="#4-individual-server-startup">4. Individual Server Startup</a></li>
<li><a href="#5-help">5. Help</a></li>
</ul>
</li>
<li><a href="#%EF%B8%8F-research-strategy">⭐️ Research Strategy</a></li>
<li><a href="#-how-to-contribute">🤝 How to Contribute</a></li>
<li><a href="#-join-our-community">🤖 Join Our Community</a></li>
<li><a href="#%EF%B8%8F-built-with">🛠️ Built With</a></li>
<li><a href="#-license">📜 License</a></li>
</ol>
</details>
## 🎯 Mission
[Project Demo Video](https://github.com/OpenDevin/OpenDevin/assets/38853559/71a472cc-df34-430c-8b1d-4d7286c807c9)
Welcome to OpenDevin, an open-source project aiming to replicate Devin, an autonomous AI software engineer who is capable of executing complex engineering tasks and collaborating actively with users on software development projects. This project aspires to replicate, enhance, and innovate upon Devin through the power of the open-source community.
<p align="right" style="font-size: 14px; color: #555; margin-top: 20px;">
<a href="#readme-top" style="text-decoration: none; color: #007bff; font-weight: bold;">
↑ Back to Top ↑
</a>
</p>
## 🤔 What is Devin?
Devin represents a cutting-edge autonomous agent designed to navigate the complexities of software engineering. It leverages a combination of tools such as a shell, code editor, and web browser, showcasing the untapped potential of LLMs in software development. Our goal is to explore and expand upon Devin's capabilities, identifying both its strengths and areas for improvement, to guide the progress of open code models.
<p align="right" style="font-size: 14px; color: #555; margin-top: 20px;">
<a href="#readme-top" style="text-decoration: none; color: #007bff; font-weight: bold;">
↑ Back to Top ↑
</a>
</p>
## 🐚 Why OpenDevin?
The OpenDevin project is born out of a desire to replicate, enhance, and innovate beyond the original Devin model. By engaging the open-source community, we aim to tackle the challenges faced by Code LLMs in practical scenarios, producing works that significantly contribute to the community and pave the way for future advancements.
<p align="right" style="font-size: 14px; color: #555; margin-top: 20px;">
<a href="#readme-top" style="text-decoration: none; color: #007bff; font-weight: bold;">
↑ Back to Top ↑
</a>
</p>
## 🚧 Project Status
OpenDevin is currently a work in progress, but you can already run the alpha version to see the end-to-end system in action. The project team is actively working on the following key milestones:
- **UI**: Developing a user-friendly interface, including a chat interface, a shell demonstrating commands, and a web browser.
- **Architecture**: Building a stable agent framework with a robust backend that can read, write, and run simple commands.
- **Agent Capabilities**: Enhancing the agent's abilities to generate bash scripts, run tests, and perform other software engineering tasks.
- **Evaluation**: Establishing a minimal evaluation pipeline that is consistent with Devin's evaluation criteria.
After completing the MVP, the team will focus on research in various areas, including foundation models, specialist capabilities, evaluation, and agent studies.
<p align="right" style="font-size: 14px; color: #555; margin-top: 20px;">
<a href="#readme-top" style="text-decoration: none; color: #007bff; font-weight: bold;">
↑ Back to Top ↑
</a>
</p>
## 🚀 Get Started
Getting started with the OpenDevin project is incredibly easy. Follow these simple steps to set up and run OpenDevin on your system:
### 1. Requirements
* Linux, Mac OS, or [WSL on Windows](https://learn.microsoft.com/en-us/windows/wsl/install)
* [Docker](https://docs.docker.com/engine/install/)(For those on MacOS, make sure to allow the default Docker socket to be used from advanced settings!)
* [Python](https://www.python.org/downloads/) >= 3.11
* [NodeJS](https://nodejs.org/en/download/package-manager) >= 18.17.1
### 2. Build and Setup The Environment
- **Build the Project:** Begin by building the project, which includes setting up the environment and installing dependencies. This step ensures that OpenDevin is ready to run smoothly on your system.
```bash
make build
```
### 3. Configuring the Language Model
OpenDevin supports a diverse array of Language Models (LMs) through the powerful [litellm](https://docs.litellm.ai) library. By default, we've chosen the mighty GPT-4 from OpenAI as our go-to model, but the world is your oyster! You can unleash the potential of Anthropic's suave Claude, the enigmatic Llama, or any other LM that piques your interest.
To configure the LM of your choice, follow these steps:
1. **Using the Makefile: The Effortless Approach**
With a single command, you can have a smooth LM setup for your OpenDevin experience. Simply run:
```bash
make setup-config
```
This command will prompt you to enter the LLM API key and model name, ensuring that OpenDevin is tailored to your specific needs.
2. **Manual Config: The Artisanal Touch**
If you're feeling particularly adventurous, you can manually update the `config.toml` file located in the project's root directory. Here, you'll find the `llm_api_key` and `llm_model_name` fields, where you can set the LM of your choosing.
**Note on Alternative Models:**
Some alternative models may prove more challenging to tame than others. Fear not, brave adventurer! We shall soon unveil LLM-specific documentation to guide you on your quest. And if you've already mastered the art of wielding a model other than OpenAI's GPT, we encourage you to [share your setup instructions with us](https://github.com/OpenDevin/OpenDevin/issues/417).
For a full list of the LM providers and models available, please consult the [litellm documentation](https://docs.litellm.ai/docs/providers).
### 4. Run the Application
- **Run the Application:** Once the setup is complete, launching OpenDevin is as simple as running a single command. This command starts both the backend and frontend servers seamlessly, allowing you to interact with OpenDevin without any hassle.
```bash
make run
```
### 5. Individual Server Startup
- **Start the Backend Server:** If you prefer, you can start the backend server independently to focus on backend-related tasks or configurations.
```bash
make start-backend
```
- **Start the Frontend Server:** Similarly, you can start the frontend server on its own to work on frontend-related components or interface enhancements.
```bash
make start-frontend
```
### 6. Help
- **Get Some Help:** Need assistance or information on available targets and commands? The help command provides all the necessary guidance to ensure a smooth experience with OpenDevin.
```bash
make help
```
<p align="right" style="font-size: 14px; color: #555; margin-top: 20px;">
<a href="#readme-top" style="text-decoration: none; color: #007bff; font-weight: bold;">
↑ Back to Top ↑
</a>
</p>
## ⭐️ Research Strategy
Achieving full replication of production-grade applications with LLMs is a complex endeavor. Our strategy involves:
1. **Core Technical Research:** Focusing on foundational research to understand and improve the technical aspects of code generation and handling.
2. **Specialist Abilities:** Enhancing the effectiveness of core components through data curation, training methods, and more.
3. **Task Planning:** Developing capabilities for bug detection, codebase management, and optimization.
4. **Evaluation:** Establishing comprehensive evaluation metrics to better understand and improve our models.
<p align="right" style="font-size: 14px; color: #555; margin-top: 20px;">
<a href="#readme-top" style="text-decoration: none; color: #007bff; font-weight: bold;">
↑ Back to Top ↑
</a>
</p>
## 🤝 How to Contribute
OpenDevin is a community-driven project, and we welcome contributions from everyone. Whether you're a developer, a researcher, or simply enthusiastic about advancing the field of software engineering with AI, there are many ways to get involved:
- **Code Contributions:** Help us develop the core functionalities, frontend interface, or sandboxing solutions.
- **Research and Evaluation:** Contribute to our understanding of LLMs in software engineering, participate in evaluating the models, or suggest improvements.
- **Feedback and Testing:** Use the OpenDevin toolset, report bugs, suggest features, or provide feedback on usability.
For details, please check [this document](./CONTRIBUTING.md).
<p align="right" style="font-size: 14px; color: #555; margin-top: 20px;">
<a href="#readme-top" style="text-decoration: none; color: #007bff; font-weight: bold;">
↑ Back to Top ↑
</a>
</p>
## 🤖 Join Our Community
Join our Slack workspace by filling out the [form](https://forms.gle/758d5p6Ve8r2nxxq6). Stay updated on OpenDevin's progress, share ideas, and collaborate with fellow enthusiasts and experts. Let's simplify software engineering together!
🐚 **Code less, make more with OpenDevin.**
[![Star History Chart](https://api.star-history.com/svg?repos=OpenDevin/OpenDevin&type=Date)](https://star-history.com/#OpenDevin/OpenDevin&Date)
## 🛠️ Built With
OpenDevin is built using a combination of powerful frameworks and libraries, providing a robust foundation for its development. Here are the key technologies used in the project:
![FastAPI](https://img.shields.io/badge/FastAPI-black?style=for-the-badge) ![uvicorn](https://img.shields.io/badge/uvicorn-black?style=for-the-badge) ![LiteLLM](https://img.shields.io/badge/LiteLLM-black?style=for-the-badge) ![Docker](https://img.shields.io/badge/Docker-black?style=for-the-badge) ![Ruff](https://img.shields.io/badge/Ruff-black?style=for-the-badge) ![MyPy](https://img.shields.io/badge/MyPy-black?style=for-the-badge) ![LlamaIndex](https://img.shields.io/badge/LlamaIndex-black?style=for-the-badge) ![React](https://img.shields.io/badge/React-black?style=for-the-badge)
Please note that the selection of these technologies is in progress, and additional technologies may be added or existing ones may be removed as the project evolves. We strive to adopt the most suitable and efficient tools to enhance the capabilities of OpenDevin.
<p align="right" style="font-size: 14px; color: #555; margin-top: 20px;">
<a href="#readme-top" style="text-decoration: none; color: #007bff; font-weight: bold;">
↑ Back to Top ↑
</a>
</p>
## 📜 License
Distributed under the MIT License. See [`LICENSE`](./LICENSE) for more information.
<p align="right" style="font-size: 14px; color: #555; margin-top: 20px;">
<a href="#readme-top" style="text-decoration: none; color: #007bff; font-weight: bold;">
↑ Back to Top ↑
</a>
</p>
[contributors-shield]: https://img.shields.io/github/contributors/opendevin/opendevin?style=for-the-badge
[contributors-url]: https://github.com/OpenDevin/OpenDevin/graphs/contributors
[forks-shield]: https://img.shields.io/github/forks/opendevin/opendevin?style=for-the-badge
[forks-url]: https://github.com/OpenDevin/OpenDevin/network/members
[stars-shield]: https://img.shields.io/github/stars/opendevin/opendevin?style=for-the-badge
[stars-url]: https://github.com/OpenDevin/OpenDevin/stargazers
[issues-shield]: https://img.shields.io/github/issues/opendevin/opendevin?style=for-the-badge
[issues-url]: https://github.com/OpenDevin/OpenDevin/issues
[license-shield]: https://img.shields.io/github/license/opendevin/opendevin?style=for-the-badge
[license-url]: https://github.com/OpenDevin/OpenDevin/blob/main/LICENSE
+73
View File
@@ -0,0 +1,73 @@
# Agent Framework Research
In this folder, there may exist multiple implementations of `Agent` that will be used by the framework.
For example, `agenthub/monologue_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.
## Constructing an Agent
The abstraction for an agent can be found [here](../opendevin/agent.py).
Agents are run inside of a loop. At each iteration, `agent.step()` is called with a
[State](../opendevin/state.py) input, and the agent must output an [Action](../opendevin/action).
Every agent also has a `self.llm` which it can use to interact with the LLM configured by the user.
See the [LiteLLM docs for `self.llm.completion`](https://docs.litellm.ai/docs/completion).
## State
The `state` contains:
* A history of actions taken by the agent, as well as any observations (e.g. file content, command output) from those actions
* A list of actions/observations that have happened since the most recent step
* A [`plan`](https://github.com/OpenDevin/OpenDevin/blob/main/opendevin/plan.py), which contains the main goal
* The agent can add and modify subtasks through the `AddTaskAction` and `ModifyTaskAction`
## Actions
Here is a list of available Actions, which can be returned by `agent.step()`:
- [`CmdRunAction`](../opendevin/action/bash.py) - Runs a command inside a sandboxed terminal
- [`CmdKillAction`](../opendevin/action/bash.py) - Kills a background command
- [`FileReadAction`](../opendevin/action/fileop.py) - Reads the content of a file
- [`FileWriteAction`](../opendevin/action/fileop.py) - Writes new content to a file
- [`BrowseURLAction`](../opendevin/action/browse.py) - Gets the content of a URL
- [`AgentRecallAction`](../opendevin/action/agent.py) - Searches memory (e.g. a vector database)
- [`AddTaskAction`](../opendevin/action/tasks.py) - Adds a subtask to the plan
- [`ModifyTaskAction`](../opendevin/action/tasks.py) - Changes the state of a subtask
- [`AgentThinkAction`](../opendevin/action/agent.py) - A no-op that allows the agent to add plaintext to the history (as well as the chat log)
- [`AgentFinishAction`](../opendevin/action/agent.py) - Stops the control loop, allowing the user to enter a new task
You can use `action.to_dict()` and `action_from_dict` to serialize and deserialize actions.
## Observations
There are also several types of Observations. These are typically available in the step following the corresponding Action.
But they may also appear as a result of asynchronous events (e.g. a message from the user, logs from a command running
in the background).
Here is a list of available Observations:
- [`CmdOutputObservation`](../opendevin/observation/run.py)
- [`BrowserOutputObservation`](../opendevin/observation/browse.py)
- [`FileReadObservation`](../opendevin/observation/files.py)
- [`FileWriteObservation`](../opendevin/observation/files.py)
- [`UserMessageObservation`](../opendevin/observation/)
- [`AgentRecallObservation`](../opendevin/observation/recall.py)
- [`AgentErrorObservation`](../opendevin/observation/error.py)
You can use `observation.to_dict()` and `observation_from_dict` to serialize and deserialize observations.
## Interface
Every agent must implement the following methods:
### `step`
```
def step(self, state: "State") -> "Action"
```
`step` moves the agent forward one step towards its goal. This probably means
sending a prompt to the LLM, then parsing the response into an `Action`.
### `search_memory`
```
def search_memory(self, query: str) -> List[str]:
```
`search_memory` should return a list of events that match the query. This will be used
for the `recall` action.
You can optionally just return `[]` for this method, meaning the agent has no long-term memory.
+9
View File
@@ -0,0 +1,9 @@
from dotenv import load_dotenv
load_dotenv()
# Import agents after environment variables are loaded
from . import monologue_agent # noqa: E402
from . import codeact_agent # noqa: E402
from . import planner_agent # noqa: E402
__all__ = ['monologue_agent', 'codeact_agent', 'planner_agent']
+21
View File
@@ -0,0 +1,21 @@
# CodeAct-based Agent Framework
This folder implements the [CodeAct idea](https://arxiv.org/abs/2402.13463) that relies on LLM to autonomously perform actions in a Bash shell. It requires more from the LLM itself: LLM needs to be capable enough to do all the stuff autonomously, instead of stuck in an infinite loop.
A minimalistic example can be found at [research/codeact/examples/run_flask_server_with_bash.py](./examples/run_flask_server_with_bash.py):
```bash
mkdir workspace
PYTHONPATH=`pwd`:$PYTHONPATH python3 opendevin/main.py -d ./workspace -c CodeActAgent -t "Please write a flask app that returns 'Hello, World\!' at the root URL, then start the app on port 5000. python3 has already been installed for you."
```
Example: prompts `gpt-4-0125-preview` to write a flask server, install `flask` library, and start the server.
<img width="951" alt="image" src="https://github.com/OpenDevin/OpenDevin/assets/38853559/325c3115-a343-4cc5-a92b-f1e5d552a077">
<img width="957" alt="image" src="https://github.com/OpenDevin/OpenDevin/assets/38853559/68ad10c1-744a-4e9d-bb29-0f163d665a0a">
Most of the things are working as expected, except at the end, the model did not follow the instruction to stop the interaction by outputting `<execute> exit </execute>` as instructed.
**TODO**: This should be fixable by either (1) including a complete in-context example like [this](https://github.com/xingyaoww/mint-bench/blob/main/mint/tasks/in_context_examples/reasoning/with_tool.txt), OR (2) collect some interaction data like this and fine-tune a model (like [this](https://github.com/xingyaoww/code-act), a more complex route).
+4
View File
@@ -0,0 +1,4 @@
from opendevin.agent import Agent
from .codeact_agent import CodeActAgent
Agent.register("CodeActAgent", CodeActAgent)
+119
View File
@@ -0,0 +1,119 @@
import re
from typing import List, Mapping
from opendevin.agent import Agent
from opendevin.state import State
from opendevin.action import (
Action,
CmdRunAction,
AgentEchoAction,
AgentFinishAction,
)
from opendevin.observation import (
CmdOutputObservation,
AgentMessageObservation,
)
from opendevin.llm.llm import LLM
SYSTEM_MESSAGE = """You are a helpful assistant. You will be provided access (as root) to a bash shell to complete user-provided tasks.
You will be able to execute commands in the bash shell, interact with the file system, install packages, and receive the output of your commands.
DO NOT provide code in ```triple backticks```. Instead, you should execute bash command on behalf of the user by wrapping them with <execute> and </execute>.
For example:
You can list the files in the current directory by executing the following command:
<execute>ls</execute>
You can also install packages using pip:
<execute> pip install numpy </execute>
You can also write a block of code to a file:
<execute>
echo "import math
print(math.pi)" > math.py
</execute>
When you are done, execute "exit" to close the shell and end the conversation.
"""
INVALID_INPUT_MESSAGE = (
"I don't understand your input. \n"
"If you want to execute command, please use <execute> YOUR_COMMAND_HERE </execute>.\n"
"If you already completed the task, please exit the shell by generating: <execute> exit </execute>."
)
def parse_response(response) -> str:
action = response.choices[0].message.content
if "<execute>" in action and "</execute>" not in action:
action += "</execute>"
return action
class CodeActAgent(Agent):
def __init__(
self,
llm: LLM,
) -> None:
"""
Initializes a new instance of the CodeActAgent class.
Parameters:
- instruction (str): The instruction for the agent to execute.
- max_steps (int): The maximum number of steps to run the agent.
"""
super().__init__(llm)
self.messages: List[Mapping[str, str]] = []
def step(self, state: State) -> Action:
if len(self.messages) == 0:
assert state.plan.main_goal, "Expecting instruction to be set"
self.messages = [
{"role": "system", "content": SYSTEM_MESSAGE},
{"role": "user", "content": state.plan.main_goal},
]
updated_info = state.updated_info
if updated_info:
for prev_action, obs in updated_info:
assert isinstance(prev_action, (CmdRunAction, AgentEchoAction)), "Expecting CmdRunAction or AgentEchoAction for Action"
if isinstance(obs, AgentMessageObservation): # warning message from itself
self.messages.append({"role": "user", "content": obs.content})
elif isinstance(obs, CmdOutputObservation):
content = "OBSERVATION:\n" + obs.content
content += f"\n[Command {obs.command_id} finished with exit code {obs.exit_code}]]"
self.messages.append({"role": "user", "content": content})
else:
raise NotImplementedError(f"Unknown observation type: {obs.__class__}")
response = self.llm.completion(
messages=self.messages,
stop=["</execute>"],
temperature=0.0,
seed=42,
)
action_str: str = parse_response(response)
self.messages.append({"role": "assistant", "content": action_str})
command = re.search(r"<execute>(.*)</execute>", action_str, re.DOTALL)
if command is not None:
# a command was found
command_group = command.group(1)
if command_group.strip() == "exit":
return AgentFinishAction()
return CmdRunAction(command = command_group)
# # execute the code
# # TODO: does exit_code get loaded into Message?
# exit_code, observation = self.env.execute(command_group)
# self._history.append(Message(Role.ASSISTANT, observation))
else:
# we could provide a error message for the model to continue similar to
# https://github.com/xingyaoww/mint-bench/blob/main/mint/envs/general_env.py#L18-L23
# observation = INVALID_INPUT_MESSAGE
# self._history.append(Message(Role.ASSISTANT, observation))
return AgentEchoAction(content=INVALID_INPUT_MESSAGE) # warning message to itself
def search_memory(self, query: str) -> List[str]:
raise NotImplementedError("Implement this abstract method")
+2
View File
@@ -0,0 +1,2 @@
.envrc
workspace
+8
View File
@@ -0,0 +1,8 @@
# LLM control loop
This is currently a standalone utility. It will need to be integrated into OpenDevin's backend.
## Usage
```bash
# Run this in project root
./agenthub/monologue_agent/build-and-run.sh "write a bash script that prints 'hello world'"
```
+9
View File
@@ -0,0 +1,9 @@
# TODO
There's a lot of low-hanging fruit for this agent:
* Strip `<script>`, `<style>`, and other non-text tags from the HTML before sending it to the LLM
* Keep track of the working directory when the agent uses `cd`
* Improve memory condensing--condense earlier memories more aggressively
* Limit the time that `run` can wait (in case agent runs an interactive command and it's hanging)
* Figure out how to run background processes, e.g. `node server.js` to start a server
+4
View File
@@ -0,0 +1,4 @@
from opendevin.agent import Agent
from .agent import MonologueAgent
Agent.register("MonologueAgent", MonologueAgent)
+172
View File
@@ -0,0 +1,172 @@
from typing import List
from opendevin.agent import Agent
from opendevin.state import State
from opendevin.llm.llm import LLM
from opendevin.action import (
Action,
NullAction,
CmdRunAction,
FileWriteAction,
FileReadAction,
AgentRecallAction,
BrowseURLAction,
AgentThinkAction,
)
from opendevin.observation import (
Observation,
NullObservation,
CmdOutputObservation,
FileReadObservation,
AgentRecallObservation,
BrowserOutputObservation,
)
import agenthub.monologue_agent.utils.prompts as prompts
from agenthub.monologue_agent.utils.monologue import Monologue
from agenthub.monologue_agent.utils.memory import LongTermMemory
MAX_MONOLOGUE_LENGTH = 20000
MAX_OUTPUT_LENGTH = 5000
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 JSON array.",
"It seems whatever I say next will be added as an object 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 perform a recall action, 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 perform a run action and include the command I want to run in the command argument. The command output just jumps into my head!",
'RUN echo "hello world"',
"hello world",
"Cool! I bet I can write files too using the write action.",
"WRITE 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!",
"I'm going to try reading it now using the read action.",
"READ test.js",
"console.log('hello world')",
"Nice! I can read files too!",
"And if I want to use the browser, I just need to use the browse action and include the url I want to visit in the url argument",
"Let's try that...",
"BROWSE google.com",
'<form><input type="text"></input><button type="submit"></button></form>',
"I can browse the web too!",
"And once I have completed my task, I can use the finish action to stop working.",
"But I should only use the finish action when I'm absolutely certain that I've completed my task and have tested my work.",
"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 MonologueAgent(Agent):
_initialized = False
def __init__(self, llm: LLM):
super().__init__(llm)
self.monologue = Monologue()
self.memory = LongTermMemory()
def _add_event(self, event: dict):
if "extras" in event and "screenshot" in event["extras"]:
del event["extras"]["screenshot"]
if 'args' in event and 'output' in event['args'] and len(event['args']['output']) > MAX_OUTPUT_LENGTH:
event['args']['output'] = event['args']['output'][:MAX_OUTPUT_LENGTH] + "..."
self.monologue.add_event(event)
self.memory.add_event(event)
if self.monologue.get_total_length() > MAX_MONOLOGUE_LENGTH:
self.monologue.condense(self.llm)
def _initialize(self, task):
if self._initialized:
return
if task is None or task == "":
raise ValueError("Instruction must be provided")
self.monologue = Monologue()
self.memory = LongTermMemory()
output_type = ""
for thought in INITIAL_THOUGHTS:
thought = thought.replace("$TASK", task)
if output_type != "":
observation: Observation = NullObservation(content="")
if output_type == "run":
observation = CmdOutputObservation(content=thought, command_id=0, command="")
elif output_type == "read":
observation = FileReadObservation(content=thought, path="")
elif output_type == "recall":
observation = AgentRecallObservation(content=thought, memories=[])
elif output_type == "browse":
observation = BrowserOutputObservation(content=thought, url="", screenshot="")
self._add_event(observation.to_dict())
output_type = ""
else:
action: Action = NullAction()
if thought.startswith("RUN"):
command = thought.split("RUN ")[1]
action = CmdRunAction(command)
output_type = "run"
elif thought.startswith("WRITE"):
parts = thought.split("WRITE ")[1].split(" > ")
path = parts[1]
content = parts[0]
action = FileWriteAction(path=path, content=content)
elif thought.startswith("READ"):
path = thought.split("READ ")[1]
action = FileReadAction(path=path)
output_type = "read"
elif thought.startswith("RECALL"):
query = thought.split("RECALL ")[1]
action = AgentRecallAction(query=query)
output_type = "recall"
elif thought.startswith("BROWSE"):
url = thought.split("BROWSE ")[1]
action = BrowseURLAction(url=url)
output_type = "browse"
else:
action = AgentThinkAction(thought=thought)
self._add_event(action.to_dict())
self._initialized = True
def step(self, state: State) -> Action:
self._initialize(state.plan.main_goal)
for prev_action, obs in state.updated_info:
self._add_event(prev_action.to_dict())
self._add_event(obs.to_dict())
state.updated_info = []
prompt = prompts.get_request_action_prompt(
state.plan.main_goal,
self.monologue.get_thoughts(),
state.background_commands_obs,
)
messages = [{"content": prompt,"role": "user"}]
resp = self.llm.completion(messages=messages)
action_resp = resp['choices'][0]['message']['content']
action = prompts.parse_action_response(action_resp)
self.latest_action = action
return action
def search_memory(self, query: str) -> List[str]:
return self.memory.search(query)
+14
View File
@@ -0,0 +1,14 @@
import json
from json_repair import repair_json
def my_encoder(obj):
if hasattr(obj, "to_dict"):
return obj.to_dict()
def dumps(obj, **kwargs):
return json.dumps(obj, default=my_encoder, **kwargs)
def loads(s, **kwargs):
s_repaired = repair_json(s)
return json.loads(s_repaired, **kwargs)
+79
View File
@@ -0,0 +1,79 @@
import chromadb
from llama_index.core import Document
from llama_index.core.retrievers import VectorIndexRetriever
from llama_index.core import VectorStoreIndex
from llama_index.vector_stores.chroma import ChromaVectorStore
from opendevin import config
from . import json
embedding_strategy = config.get("LLM_EMBEDDING_MODEL")
# TODO: More embeddings: https://docs.llamaindex.ai/en/stable/examples/embeddings/OpenAI/
# There's probably a more programmatic way to do this.
if embedding_strategy == "llama2":
from llama_index.embeddings.ollama import OllamaEmbedding
embed_model = OllamaEmbedding(
model_name="llama2",
base_url=config.get_or_error("LLM_BASE_URL"),
ollama_additional_kwargs={"mirostat": 0},
)
elif embedding_strategy == "openai":
from llama_index.embeddings.openai import OpenAIEmbedding
embed_model = OpenAIEmbedding(
model="text-embedding-ada-002"
)
elif embedding_strategy == "azureopenai":
from llama_index.embeddings.azure_openai import AzureOpenAIEmbedding # Need to instruct to set these env variables in documentation
embed_model = AzureOpenAIEmbedding(
model="text-embedding-ada-002",
deployment_name=config.get_or_error("LLM_DEPLOYMENT_NAME"),
api_key=config.get_or_error("LLM_API_KEY"),
azure_endpoint=config.get_or_error("LLM_BASE_URL"),
api_version=config.get_or_error("LLM_API_VERSION"),
)
else:
from llama_index.embeddings.huggingface import HuggingFaceEmbedding
embed_model = HuggingFaceEmbedding(
model_name="BAAI/bge-small-en-v1.5"
)
class LongTermMemory:
def __init__(self):
db = chromadb.Client()
self.collection = db.get_or_create_collection(name="memories")
vector_store = ChromaVectorStore(chroma_collection=self.collection)
self.index = VectorStoreIndex.from_vector_store(vector_store, embed_model=embed_model)
self.thought_idx = 0
def add_event(self, event):
id = ""
t = ""
if "action" in event:
t = "action"
id = event["action"]
elif "observation" in event:
t = "observation"
id = event["observation"]
doc = Document(
text=json.dumps(event),
doc_id=str(self.thought_idx),
extra_info={
"type": t,
"id": id,
"idx": self.thought_idx,
},
)
self.thought_idx += 1
self.index.insert(doc)
def search(self, query, k=10):
retriever = VectorIndexRetriever(
index=self.index,
similarity_top_k=k,
)
results = retriever.retrieve(query)
return [r.get_text() for r in results]
@@ -0,0 +1,40 @@
import traceback
import agenthub.monologue_agent.utils.json as json
import agenthub.monologue_agent.utils.prompts as prompts
class Monologue:
def __init__(self):
self.thoughts = []
def add_event(self, t: dict):
if not isinstance(t, dict):
raise ValueError("Event must be a dictionary")
self.thoughts.append(t)
def get_thoughts(self):
return self.thoughts
def get_total_length(self):
total_length = 0
for t in self.thoughts:
try:
total_length += len(json.dumps(t))
except TypeError as e:
print(f"Error serializing thought: {e}")
return total_length
def condense(self, llm):
try:
prompt = prompts.get_summarize_monologue_prompt(self.thoughts)
messages = [{"content": prompt,"role": "user"}]
resp = llm.completion(messages=messages)
summary_resp = resp['choices'][0]['message']['content']
self.thoughts = prompts.parse_summary_response(strip_markdown(summary_resp))
except Exception as e:
traceback.print_exc()
raise RuntimeError(f"Error condensing thoughts: {e}")
def strip_markdown(markdown_json):
# remove markdown code block
return markdown_json.replace('```json\n', '').replace('```', '').strip()
+139
View File
@@ -0,0 +1,139 @@
from typing import List
from . import json
from opendevin.action import (
action_from_dict,
Action,
)
from opendevin.observation import (
CmdOutputObservation,
)
ACTION_PROMPT = """
You're a thoughtful robot. Your main task is this:
%(task)s
Don't expand the scope of your task--just complete it as written.
This is your internal monologue, in JSON format:
%(monologue)s
Your most recent thought is at the bottom of that monologue. Continue your train of thought.
What is your next thought or action? Your response must be in JSON format.
It must be an object, and it must contain two fields:
* `action`, which is one of the actions below
* `args`, which is a map of key-value pairs, specifying the arguments for that action
Here are the possible actions:
* `read` - reads the content of a file. Arguments:
* `path` - the path of the file to read
* `write` - writes the content to a file. Arguments:
* `path` - the path of the file to write
* `content` - the content to write to the file
* `run` - runs a command. Arguments:
* `command` - the command to run
* `background` - if true, run the command in the background, so that other commands can be run concurrently. Useful for e.g. starting a server. You won't be able to see the logs. You don't need to end the command with `&`, just set this to true.
* `kill` - kills a background command
* `id` - the ID of the background command to kill
* `browse` - opens a web page. Arguments:
* `url` - the URL to open
* `recall` - recalls a past memory. Arguments:
* `query` - the query to search for
* `think` - make a plan, set a goal, or record your thoughts. Arguments:
* `thought` - the thought to record
* `finish` - if you're absolutely certain that you've completed your task and have tested your work, use the finish action to stop working.
%(background_commands)s
You MUST take time to think in between read, write, run, browse, and recall actions.
You should never act twice in a row without thinking. But if your last several
actions are all "think" actions, you should consider taking a different action.
Notes:
* your environment is Debian Linux. You can install software with `apt`
* your working directory will not change, even if you run `cd`. All commands will be run in the `/workspace` directory.
* don't run interactive commands, or commands that don't return (e.g. `node server.js`). You may run commands in the background (e.g. `node server.js &`)
What is your next thought or action? Again, you must reply with JSON, and only with JSON.
%(hint)s
"""
MONOLOGUE_SUMMARY_PROMPT = """
Below is the internal monologue of an automated LLM agent. Each
thought is an item in a JSON array. The thoughts may be memories,
actions taken by the agent, or outputs from those actions.
Please return a new, smaller JSON array, which summarizes the
internal monologue. You can summarize individual thoughts, and
you can condense related thoughts together with a description
of their content.
%(monologue)s
Make the summaries as pithy and informative as possible.
Be specific about what happened and what was learned. The summary
will be used as keywords for searching for the original memory.
Be sure to preserve any key words or important information.
Your response must be in JSON format. It must be an object with the
key `new_monologue`, which is a JSON array containing the summarized monologue.
Each entry in the array must have an `action` key, and an `args` key.
The action key may be `summarize`, and `args.summary` should contain the summary.
You can also use the same action and args from the source monologue.
"""
def get_summarize_monologue_prompt(thoughts):
return MONOLOGUE_SUMMARY_PROMPT % {
'monologue': json.dumps({'old_monologue': thoughts}, indent=2),
}
def get_request_action_prompt(
task: str,
thoughts: List[dict],
background_commands_obs: List[CmdOutputObservation] = [],
):
hint = ''
if len(thoughts) > 0:
latest_thought = thoughts[-1]
if "action" in latest_thought:
if latest_thought["action"] == 'think':
if latest_thought["args"]['thought'].startswith("OK so my task is"):
hint = "You're just getting started! What should you do first?"
else:
hint = "You've been thinking a lot lately. Maybe it's time to take action?"
elif latest_thought["action"] == 'error':
hint = "Looks like that last command failed. Maybe you need to fix it, or try something else."
bg_commands_message = ""
if len(background_commands_obs) > 0:
bg_commands_message = "The following commands are running in the background:"
for command_obs in background_commands_obs:
bg_commands_message += f"\n`{command_obs.command_id}`: {command_obs.command}"
bg_commands_message += "\nYou can end any process by sending a `kill` action with the numerical `id` above."
latest_thought = thoughts[-1]
return ACTION_PROMPT % {
'task': task,
'monologue': json.dumps(thoughts, indent=2),
'background_commands': bg_commands_message,
'hint': hint,
}
def parse_action_response(response: str) -> Action:
json_start = response.find("{")
json_end = response.rfind("}") + 1
response = response[json_start:json_end]
action_dict = json.loads(response)
if 'content' in action_dict:
# The LLM gets confused here. Might as well be robust
action_dict['contents'] = action_dict.pop('content')
return action_from_dict(action_dict)
def parse_summary_response(response: str) -> List[dict]:
parsed = json.loads(response)
return parsed['new_monologue']
+4
View File
@@ -0,0 +1,4 @@
from opendevin.agent import Agent
from .agent import PlannerAgent
Agent.register("PlannerAgent", PlannerAgent)
+26
View File
@@ -0,0 +1,26 @@
from typing import List
from .prompt import get_prompt, parse_response
from opendevin.agent import Agent
from opendevin.action import AgentFinishAction
from opendevin.llm.llm import LLM
from opendevin.state import State
from opendevin.action import Action
class PlannerAgent(Agent):
def __init__(self, llm: LLM):
super().__init__(llm)
def step(self, state: State) -> Action:
if state.plan.task.state in ['completed', 'verified', 'abandoned']:
return AgentFinishAction()
prompt = get_prompt(state.plan, state.history)
messages = [{"content": prompt, "role": "user"}]
resp = self.llm.completion(messages=messages)
action_resp = resp['choices'][0]['message']['content']
action = parse_response(action_resp)
return action
def search_memory(self, query: str) -> List[str]:
return []
+203
View File
@@ -0,0 +1,203 @@
import json
from typing import List, Tuple, Dict, Type
from opendevin.controller.agent_controller import print_with_color
from opendevin.plan import Plan
from opendevin.action import Action, action_from_dict
from opendevin.observation import Observation
from opendevin.action import (
NullAction,
CmdRunAction,
CmdKillAction,
BrowseURLAction,
FileReadAction,
FileWriteAction,
AgentRecallAction,
AgentThinkAction,
AgentFinishAction,
AgentSummarizeAction,
AddTaskAction,
ModifyTaskAction,
)
from opendevin.observation import (
NullObservation,
)
ACTION_TYPE_TO_CLASS: Dict[str, Type[Action]] = {
"run": CmdRunAction,
"kill": CmdKillAction,
"browse": BrowseURLAction,
"read": FileReadAction,
"write": FileWriteAction,
"recall": AgentRecallAction,
"think": AgentThinkAction,
"summarize": AgentSummarizeAction,
"finish": AgentFinishAction,
"add_task": AddTaskAction,
"modify_task": ModifyTaskAction,
}
HISTORY_SIZE = 10
prompt = """
# Task
You're a diligent software engineer AI. You can't see, draw, or interact with a
browser, but you can read and write files, and you can run commands, and you can think.
You've been given the following task:
%(task)s
## Plan
As you complete this task, you're building a plan and keeping
track of your progress. Here's a JSON representation of your plan:
%(plan)s
%(plan_status)s
You're responsible for managing this plan and the status of tasks in
it, by using the `add_task` and `modify_task` actions described below.
If the History below contradicts the state of any of these tasks, you
MUST modify the task using the `modify_task` action described below.
Be sure NOT to duplicate any tasks. Do NOT use the `add_task` action for
a task that's already represented. Every task must be represented only once.
Tasks that are sequential MUST be siblings. They must be added in order
to their parent task.
If you mark a task as 'completed', 'verified', or 'abandoned',
all non-abandoned subtasks will be marked the same way.
So before closing a task this way, you MUST not only be sure that it has
been completed successfully--you must ALSO be sure that all its subtasks
are ready to be marked the same way.
If, and only if, ALL tasks have already been marked verified,
you MUST respond with the `finish` action.
## History
Here is a recent history of actions you've taken in service of this plan,
as well as observations you've made. This only includes the MOST RECENT
ten actions--more happened before that.
%(history)s
Your most recent action is at the bottom of that history.
## Action
What is your next thought or action? Your response must be in JSON format.
It must be an object, and it must contain two fields:
* `action`, which is one of the actions below
* `args`, which is a map of key-value pairs, specifying the arguments for that action
* `read` - reads the content of a file. Arguments:
* `path` - the path of the file to read
* `write` - writes the content to a file. Arguments:
* `path` - the path of the file to write
* `content` - the content to write to the file
* `run` - runs a command on the command line in a Linux shell. Arguments:
* `command` - the command to run
* `background` - if true, run the command in the background, so that other commands can be run concurrently. Useful for e.g. starting a server. You won't be able to see the logs. You don't need to end the command with `&`, just set this to true.
* `kill` - kills a background command
* `id` - the ID of the background command to kill
* `browse` - opens a web page. Arguments:
* `url` - the URL to open
* `think` - make a plan, set a goal, or record your thoughts. Arguments:
* `thought` - the thought to record
* `add_task` - add a task to your plan. Arguments:
* `parent` - the ID of the parent task
* `goal` - the goal of the task
* `subtasks` - a list of subtasks, each of which is a map with a `goal` key.
* `modify_task` - close a task. Arguments:
* `id` - the ID of the task to close
* `state` - set to 'in_progress' to start the task, 'completed' to finish it, 'verified' to assert that it was successful, 'abandoned' to give up on it permanently, or `open` to stop working on it for now.
* `finish` - if ALL of your tasks and subtasks have been verified or abandoned, and you're absolutely certain that you've completed your task and have tested your work, use the finish action to stop working.
You MUST take time to think in between read, write, run, browse, and recall actions.
You should never act twice in a row without thinking. But if your last several
actions are all `think` actions, you should consider taking a different action.
What is your next thought or action? Again, you must reply with JSON, and only with JSON.
%(hint)s
"""
def get_prompt(plan: Plan, history: List[Tuple[Action, Observation]]):
plan_str = json.dumps(plan.task.to_dict(), indent=2)
sub_history = history[-HISTORY_SIZE:]
history_dicts = []
latest_action: Action = NullAction()
for action, observation in sub_history:
if not isinstance(action, NullAction):
history_dicts.append(action.to_dict())
latest_action = action
if not isinstance(observation, NullObservation):
observation_dict = observation.to_dict()
if "extras" in observation_dict and "screenshot" in observation_dict["extras"]:
del observation_dict["extras"]["screenshot"]
history_dicts.append(observation_dict)
history_str = json.dumps(history_dicts, indent=2)
hint = ""
current_task = plan.get_current_task()
if current_task is not None:
plan_status = f"You're currently working on this task:\n{current_task.goal}."
if len(current_task.subtasks) == 0:
plan_status += "\nIf it's not achievable AND verifiable with a SINGLE action, you MUST break it down into subtasks NOW."
else:
plan_status = "You're not currently working on any tasks. Your next action MUST be to mark a task as in_progress."
hint = plan_status
latest_action_id = latest_action.to_dict()['action']
if current_task is not None:
if latest_action_id == "":
hint = "You haven't taken any actions yet. Start by using `ls` to check out what files you're working with."
elif latest_action_id == "run":
hint = "You should think about the command you just ran, what output it gave, and how that affects your plan."
elif latest_action_id == "read":
hint = "You should think about the file you just read, what you learned from it, and how that affects your plan."
elif latest_action_id == "write":
hint = "You just changed a file. You should think about how it affects your plan."
elif latest_action_id == "browse":
hint = "You should think about the page you just visited, and what you learned from it."
elif latest_action_id == "think":
hint = "Look at your last thought in the history above. What does it suggest? Don't think anymore--take action."
elif latest_action_id == "recall":
hint = "You should think about the information you just recalled, and how it should affect your plan."
elif latest_action_id == "add_task":
hint = "You should think about the next action to take."
elif latest_action_id == "modify_task":
hint = "You should think about the next action to take."
elif latest_action_id == "summarize":
hint = ""
elif latest_action_id == "finish":
hint = ""
print_with_color("HINT:\n" + hint, "INFO")
return prompt % {
'task': plan.main_goal,
'plan': plan_str,
'history': history_str,
'hint': hint,
'plan_status': plan_status,
}
def parse_response(response: str) -> Action:
json_start = response.find("{")
json_end = response.rfind("}") + 1
response = response[json_start:json_end]
action_dict = json.loads(response)
if 'contents' in action_dict:
# The LLM gets confused here. Might as well be robust
action_dict['content'] = action_dict.pop('contents')
action = action_from_dict(action_dict)
return action
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 113 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 14 KiB

File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
-1
View File
@@ -1 +0,0 @@
"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[3396],{7729:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>i,default:()=>u,frontMatter:()=>s,metadata:()=>l,toc:()=>c});var o=t(4848),r=t(8453);const s={sidebar_label:"memory",title:"agenthub.monologue_agent.utils.memory"},i=void 0,l={id:"python/agenthub/monologue_agent/utils/memory",title:"agenthub.monologue_agent.utils.memory",description:"LongTermMemory Objects",source:"@site/modules/python/agenthub/monologue_agent/utils/memory.md",sourceDirName:"python/agenthub/monologue_agent/utils",slug:"/python/agenthub/monologue_agent/utils/memory",permalink:"/OpenDevin/modules/python/agenthub/monologue_agent/utils/memory",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{sidebar_label:"memory",title:"agenthub.monologue_agent.utils.memory"},sidebar:"apiSidebar",previous:{title:"json",permalink:"/OpenDevin/modules/python/agenthub/monologue_agent/utils/json"},next:{title:"monologue",permalink:"/OpenDevin/modules/python/agenthub/monologue_agent/utils/monologue"}},a={},c=[{value:"LongTermMemory Objects",id:"longtermmemory-objects",level:2},{value:"__init__",id:"__init__",level:4},{value:"add_event",id:"add_event",level:4},{value:"search",id:"search",level:4}];function d(e){const n={code:"code",h2:"h2",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h2,{id:"longtermmemory-objects",children:"LongTermMemory Objects"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-python",children:"class LongTermMemory()\n"})}),"\n",(0,o.jsx)(n.p,{children:"Responsible for storing information that the agent can call on later for better insights and context.\nUses chromadb to store and search through memories."}),"\n",(0,o.jsx)(n.h4,{id:"__init__",children:"__init__"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-python",children:"def __init__()\n"})}),"\n",(0,o.jsx)(n.p,{children:"Initialize the chromadb and set up ChromaVectorStore for later use."}),"\n",(0,o.jsx)(n.h4,{id:"add_event",children:"add_event"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-python",children:"def add_event(event: dict)\n"})}),"\n",(0,o.jsx)(n.p,{children:"Adds a new event to the long term memory with a unique id."}),"\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.strong,{children:"Arguments"}),":"]}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"event (dict): The new event to be added to memory"}),"\n"]}),"\n",(0,o.jsx)(n.h4,{id:"search",children:"search"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-python",children:"def search(query: str, k: int = 10)\n"})}),"\n",(0,o.jsx)(n.p,{children:"Searches through the current memory using VectorIndexRetriever"}),"\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.strong,{children:"Arguments"}),":"]}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"query (str): A query to match search results to"}),"\n",(0,o.jsx)(n.li,{children:"k (int): Number of top results to return"}),"\n"]}),"\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.strong,{children:"Returns"}),":"]}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"List[str]: List of top k results found in current memory"}),"\n"]})]})}function u(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>i,x:()=>l});var o=t(6540);const r={},s=o.createContext(r);function i(e){const n=o.useContext(s);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),o.createElement(s.Provider,{value:n},e.children)}}}]);
-1
View File
@@ -1 +0,0 @@
"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[4302],{1106:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>i,default:()=>h,frontMatter:()=>a,metadata:()=>r,toc:()=>l});var o=t(4848),s=t(8453);const a={sidebar_label:"observation",title:"opendevin.schema.observation"},i=void 0,r={id:"python/opendevin/schema/observation",title:"opendevin.schema.observation",description:"ObservationTypeSchema Objects",source:"@site/modules/python/opendevin/schema/observation.md",sourceDirName:"python/opendevin/schema",slug:"/python/opendevin/schema/observation",permalink:"/OpenDevin/modules/python/opendevin/schema/observation",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{sidebar_label:"observation",title:"opendevin.schema.observation"},sidebar:"apiSidebar",previous:{title:"action",permalink:"/OpenDevin/modules/python/opendevin/schema/action"},next:{title:"task",permalink:"/OpenDevin/modules/python/opendevin/schema/task"}},c={},l=[{value:"ObservationTypeSchema Objects",id:"observationtypeschema-objects",level:2},{value:"READ",id:"read",level:4},{value:"BROWSE",id:"browse",level:4},{value:"RUN",id:"run",level:4},{value:"RECALL",id:"recall",level:4},{value:"CHAT",id:"chat",level:4},{value:"DELEGATE",id:"delegate",level:4}];function d(e){const n={code:"code",h2:"h2",h4:"h4",p:"p",pre:"pre",...(0,s.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h2,{id:"observationtypeschema-objects",children:"ObservationTypeSchema Objects"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-python",children:"class ObservationTypeSchema(BaseModel)\n"})}),"\n",(0,o.jsx)(n.h4,{id:"read",children:"READ"}),"\n",(0,o.jsx)(n.p,{children:"The content of a file"}),"\n",(0,o.jsx)(n.h4,{id:"browse",children:"BROWSE"}),"\n",(0,o.jsx)(n.p,{children:"The HTML content of a URL"}),"\n",(0,o.jsx)(n.h4,{id:"run",children:"RUN"}),"\n",(0,o.jsx)(n.p,{children:"The output of a command"}),"\n",(0,o.jsx)(n.h4,{id:"recall",children:"RECALL"}),"\n",(0,o.jsx)(n.p,{children:"The result of a search"}),"\n",(0,o.jsx)(n.h4,{id:"chat",children:"CHAT"}),"\n",(0,o.jsx)(n.p,{children:"A message from the user"}),"\n",(0,o.jsx)(n.h4,{id:"delegate",children:"DELEGATE"}),"\n",(0,o.jsx)(n.p,{children:"The result of a task delegated to another agent"})]})}function h(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>i,x:()=>r});var o=t(6540);const s={},a=o.createContext(s);function i(e){const n=o.useContext(a);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),o.createElement(a.Provider,{value:n},e.children)}}}]);
File diff suppressed because one or more lines are too long
-1
View File
@@ -1 +0,0 @@
"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[4435],{3596:(n,e,i)=>{i.r(e),i.d(e,{assets:()=>r,contentTitle:()=>l,default:()=>a,frontMatter:()=>o,metadata:()=>p,toc:()=>d});var t=i(4848),s=i(8453);const o={sidebar_label:"mixin",title:"opendevin.sandbox.plugins.mixin"},l=void 0,p={id:"python/opendevin/sandbox/plugins/mixin",title:"opendevin.sandbox.plugins.mixin",description:"PluginMixin Objects",source:"@site/modules/python/opendevin/sandbox/plugins/mixin.md",sourceDirName:"python/opendevin/sandbox/plugins",slug:"/python/opendevin/sandbox/plugins/mixin",permalink:"/OpenDevin/modules/python/opendevin/sandbox/plugins/mixin",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{sidebar_label:"mixin",title:"opendevin.sandbox.plugins.mixin"},sidebar:"apiSidebar",previous:{title:"jupyter",permalink:"/OpenDevin/modules/python/opendevin/sandbox/plugins/jupyter/__init__"},next:{title:"requirement",permalink:"/OpenDevin/modules/python/opendevin/sandbox/plugins/requirement"}},r={},d=[{value:"PluginMixin Objects",id:"pluginmixin-objects",level:2},{value:"init_plugins",id:"init_plugins",level:4}];function u(n){const e={code:"code",h2:"h2",h4:"h4",p:"p",pre:"pre",...(0,s.R)(),...n.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(e.h2,{id:"pluginmixin-objects",children:"PluginMixin Objects"}),"\n",(0,t.jsx)(e.pre,{children:(0,t.jsx)(e.code,{className:"language-python",children:"class PluginMixin()\n"})}),"\n",(0,t.jsx)(e.p,{children:"Mixin for Sandbox to support plugins."}),"\n",(0,t.jsx)(e.h4,{id:"init_plugins",children:"init_plugins"}),"\n",(0,t.jsx)(e.pre,{children:(0,t.jsx)(e.code,{className:"language-python",children:"def init_plugins(requirements: List[PluginRequirement])\n"})}),"\n",(0,t.jsx)(e.p,{children:"Load a plugin into the sandbox."})]})}function a(n={}){const{wrapper:e}={...(0,s.R)(),...n.components};return e?(0,t.jsx)(e,{...n,children:(0,t.jsx)(u,{...n})}):u(n)}},8453:(n,e,i)=>{i.d(e,{R:()=>l,x:()=>p});var t=i(6540);const s={},o=t.createContext(s);function l(n){const e=t.useContext(o);return t.useMemo((function(){return"function"==typeof n?n(e):{...e,...n}}),[e,n])}function p(n){let e;return e=n.disableParentContext?"function"==typeof n.components?n.components(s):n.components||s:l(n.components),t.createElement(o.Provider,{value:e},n.children)}}}]);
File diff suppressed because one or more lines are too long
-1
View File
@@ -1 +0,0 @@
"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[2237],{3363:(e,t,n)=>{n.d(t,{A:()=>a});n(6540);var i=n(4164),o=n(1312),s=n(1107),r=n(4848);function a(e){let{className:t}=e;return(0,r.jsx)("main",{className:(0,i.A)("container margin-vert--xl",t),children:(0,r.jsx)("div",{className:"row",children:(0,r.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,r.jsx)(s.A,{as:"h1",className:"hero__title",children:(0,r.jsx)(o.A,{id:"theme.NotFound.title",description:"The title of the 404 page",children:"Page Not Found"})}),(0,r.jsx)("p",{children:(0,r.jsx)(o.A,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page",children:"We could not find what you were looking for."})}),(0,r.jsx)("p",{children:(0,r.jsx)(o.A,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page",children:"Please contact the owner of the site that linked you to the original URL and let them know their link is broken."})})]})})})}},2237:(e,t,n)=>{n.r(t),n.d(t,{default:()=>d});n(6540);var i=n(1312),o=n(1003),s=n(781),r=n(3363),a=n(4848);function d(){const e=(0,i.T)({id:"theme.NotFound.title",message:"Page Not Found"});return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(o.be,{title:e}),(0,a.jsx)(s.A,{children:(0,a.jsx)(r.A,{})})]})}}}]);
-1
View File
@@ -1 +0,0 @@
"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[1250],{7101:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>p,contentTitle:()=>i,default:()=>u,frontMatter:()=>r,metadata:()=>a,toc:()=>c});var o=t(4848),s=t(8453);const r={sidebar_label:"browse",title:"opendevin.observation.browse"},i=void 0,a={id:"python/opendevin/observation/browse",title:"opendevin.observation.browse",description:"BrowserOutputObservation Objects",source:"@site/modules/python/opendevin/observation/browse.md",sourceDirName:"python/opendevin/observation",slug:"/python/opendevin/observation/browse",permalink:"/OpenDevin/modules/python/opendevin/observation/browse",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{sidebar_label:"browse",title:"opendevin.observation.browse"},sidebar:"apiSidebar",previous:{title:"base",permalink:"/OpenDevin/modules/python/opendevin/observation/base"},next:{title:"delegate",permalink:"/OpenDevin/modules/python/opendevin/observation/delegate"}},p={},c=[{value:"BrowserOutputObservation Objects",id:"browseroutputobservation-objects",level:2}];function d(e){const n={code:"code",h2:"h2",p:"p",pre:"pre",...(0,s.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h2,{id:"browseroutputobservation-objects",children:"BrowserOutputObservation Objects"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-python",children:"@dataclass\nclass BrowserOutputObservation(Observation)\n"})}),"\n",(0,o.jsx)(n.p,{children:"This data class represents the output of a browser."})]})}function u(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>i,x:()=>a});var o=t(6540);const s={},r=o.createContext(s);function i(e){const n=o.useContext(r);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),o.createElement(r.Provider,{value:n},e.children)}}}]);
-1
View File
@@ -1 +0,0 @@
"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[8878],{2207:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>l,default:()=>h,frontMatter:()=>r,metadata:()=>i,toc:()=>c});var o=t(4848),s=t(8453);const r={sidebar_label:"agent",title:"agenthub.monologue_agent.agent"},l=void 0,i={id:"python/agenthub/monologue_agent/agent",title:"agenthub.monologue_agent.agent",description:"MonologueAgent Objects",source:"@site/modules/python/agenthub/monologue_agent/agent.md",sourceDirName:"python/agenthub/monologue_agent",slug:"/python/agenthub/monologue_agent/agent",permalink:"/OpenDevin/modules/python/agenthub/monologue_agent/agent",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{sidebar_label:"agent",title:"agenthub.monologue_agent.agent"},sidebar:"apiSidebar",previous:{title:"prompts",permalink:"/OpenDevin/modules/python/agenthub/monologue_agent/utils/prompts"},next:{title:"agent",permalink:"/OpenDevin/modules/python/agenthub/planner_agent/agent"}},a={},c=[{value:"MonologueAgent Objects",id:"monologueagent-objects",level:2},{value:"__init__",id:"__init__",level:4},{value:"step",id:"step",level:4},{value:"search_memory",id:"search_memory",level:4}];function d(e){const n={code:"code",h2:"h2",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h2,{id:"monologueagent-objects",children:"MonologueAgent Objects"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-python",children:"class MonologueAgent(Agent)\n"})}),"\n",(0,o.jsx)(n.p,{children:"The Monologue Agent utilizes long and short term memory to complete tasks.\nLong term memory is stored as a LongTermMemory object and the model uses it to search for examples from the past.\nShort term memory is stored as a Monologue object and the model can condense it as necessary."}),"\n",(0,o.jsx)(n.h4,{id:"__init__",children:"__init__"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-python",children:"def __init__(llm: LLM)\n"})}),"\n",(0,o.jsx)(n.p,{children:"Initializes the Monologue Agent with an llm, monologue, and memory."}),"\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.strong,{children:"Arguments"}),":"]}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"llm (LLM): The llm to be used by this agent"}),"\n"]}),"\n",(0,o.jsx)(n.h4,{id:"step",children:"step"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-python",children:"def step(state: State) -> Action\n"})}),"\n",(0,o.jsx)(n.p,{children:"Modifies the current state by adding the most recent actions and observations, then prompts the model to think about it's next action to take using monologue, memory, and hint."}),"\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.strong,{children:"Arguments"}),":"]}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"state (State): The current state based on previous steps taken"}),"\n"]}),"\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.strong,{children:"Returns"}),":"]}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"Action: The next action to take based on LLM response"}),"\n"]}),"\n",(0,o.jsx)(n.h4,{id:"search_memory",children:"search_memory"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-python",children:"def search_memory(query: str) -> List[str]\n"})}),"\n",(0,o.jsx)(n.p,{children:"Uses VectorIndexRetriever to find related memories within the long term memory.\nUses search to produce top 10 results."}),"\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.strong,{children:"Arguments"}),":"]}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"query (str): The query that we want to find related memories for"}),"\n"]}),"\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.strong,{children:"Returns"}),":"]}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"List[str]: A list of top 10 text results that matched the query"}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>l,x:()=>i});var o=t(6540);const s={},r=o.createContext(s);function l(e){const n=o.useContext(r);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:l(e.components),o.createElement(r.Provider,{value:n},e.children)}}}]);
File diff suppressed because one or more lines are too long
-1
View File
@@ -1 +0,0 @@
"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[8659],{759:(n,e,t)=>{t.r(e),t.d(e,{assets:()=>c,contentTitle:()=>r,default:()=>l,frontMatter:()=>a,metadata:()=>s,toc:()=>p});var o=t(4848),i=t(8453);const a={sidebar_label:"action",title:"opendevin.action"},r=void 0,s={id:"python/opendevin/action/__init__",title:"opendevin.action",description:"ACTION\\TYPE\\TO\\_CLASS",source:"@site/modules/python/opendevin/action/__init__.md",sourceDirName:"python/opendevin/action",slug:"/python/opendevin/action/__init__",permalink:"/OpenDevin/modules/python/opendevin/action/__init__",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{sidebar_label:"action",title:"opendevin.action"},sidebar:"apiSidebar",previous:{title:"prompt",permalink:"/OpenDevin/modules/python/agenthub/planner_agent/prompt"},next:{title:"base",permalink:"/OpenDevin/modules/python/opendevin/action/base"}},c={},p=[{value:"ACTION_TYPE_TO_CLASS",id:"action_type_to_class",level:4}];function d(n){const e={h4:"h4",p:"p",...(0,i.R)(),...n.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(e.h4,{id:"action_type_to_class",children:"ACTION_TYPE_TO_CLASS"}),"\n",(0,o.jsx)(e.p,{children:"type: ignore[attr-defined]"})]})}function l(n={}){const{wrapper:e}={...(0,i.R)(),...n.components};return e?(0,o.jsx)(e,{...n,children:(0,o.jsx)(d,{...n})}):d(n)}},8453:(n,e,t)=>{t.d(e,{R:()=>r,x:()=>s});var o=t(6540);const i={},a=o.createContext(i);function r(n){const e=o.useContext(a);return o.useMemo((function(){return"function"==typeof n?n(e):{...e,...n}}),[e,n])}function s(n){let e;return e=n.disableParentContext?"function"==typeof n.components?n.components(i):n.components||i:r(n.components),o.createElement(a.Provider,{value:e},n.children)}}}]);
-1
View File
@@ -1 +0,0 @@
"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[1865],{1790:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>m,contentTitle:()=>s,default:()=>i,frontMatter:()=>u,metadata:()=>r,toc:()=>d});var a=n(4848),o=n(8453);const u={sidebar_label:"agent",title:"agenthub.dummy_agent.agent"},s=void 0,r={id:"python/agenthub/dummy_agent/agent",title:"agenthub.dummy_agent.agent",description:"Module for a Dummy agent.",source:"@site/modules/python/agenthub/dummy_agent/agent.md",sourceDirName:"python/agenthub/dummy_agent",slug:"/python/agenthub/dummy_agent/agent",permalink:"/OpenDevin/modules/python/agenthub/dummy_agent/agent",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{sidebar_label:"agent",title:"agenthub.dummy_agent.agent"},sidebar:"apiSidebar",previous:{title:"agent",permalink:"/OpenDevin/modules/python/agenthub/delegator_agent/agent"},next:{title:"agent",permalink:"/OpenDevin/modules/python/agenthub/micro/agent"}},m={},d=[{value:"DummyAgent Objects",id:"dummyagent-objects",level:2}];function c(e){const t={code:"code",h2:"h2",p:"p",pre:"pre",...(0,o.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.p,{children:"Module for a Dummy agent."}),"\n",(0,a.jsx)(t.h2,{id:"dummyagent-objects",children:"DummyAgent Objects"}),"\n",(0,a.jsx)(t.pre,{children:(0,a.jsx)(t.code,{className:"language-python",children:"class DummyAgent(Agent)\n"})}),"\n",(0,a.jsx)(t.p,{children:"A dummy agent that does nothing but can be used in testing."})]})}function i(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(c,{...e})}):c(e)}},8453:(e,t,n)=>{n.d(t,{R:()=>s,x:()=>r});var a=n(6540);const o={},u=a.createContext(o);function s(e){const t=a.useContext(u);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),a.createElement(u.Provider,{value:t},e.children)}}}]);
-1
View File
@@ -1 +0,0 @@
"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[9903],{9619:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>a,contentTitle:()=>t,default:()=>u,frontMatter:()=>o,metadata:()=>l,toc:()=>d});var i=s(4848),r=s(8453);const o={sidebar_position:2},t="\ud83e\udd16 LLM Backends",l={id:"usage/llms/llms",title:"\ud83e\udd16 LLM Backends",description:"OpenDevin can work with any LLM backend.",source:"@site/modules/usage/llms/llms.md",sourceDirName:"usage/llms",slug:"/usage/llms/",permalink:"/OpenDevin/modules/usage/llms/",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"docsSidebar",previous:{title:"\ud83d\udcbb OpenDevin",permalink:"/OpenDevin/modules/usage/intro"},next:{title:"Azure OpenAI LLM",permalink:"/OpenDevin/modules/usage/llms/azureLLMs"}},a={},d=[{value:"Note on Alternative Models",id:"note-on-alternative-models",level:2},{value:"API retries and rate limits",id:"api-retries-and-rate-limits",level:2}];function c(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",li:"li",p:"p",ul:"ul",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"-llm-backends",children:"\ud83e\udd16 LLM Backends"}),"\n",(0,i.jsxs)(n.p,{children:["OpenDevin can work with any LLM backend.\nFor a full list of the LM providers and models available, please consult the\n",(0,i.jsx)(n.a,{href:"https://docs.litellm.ai/docs/providers",children:"litellm documentation"}),"."]}),"\n",(0,i.jsx)(n.admonition,{type:"warning",children:(0,i.jsx)(n.p,{children:"OpenDevin will issue many prompts to the LLM you configure. Most of these LLMs cost money--be sure to set spending limits and monitor usage."})}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.code,{children:"LLM_MODEL"})," environment variable controls which model is used in programmatic interactions.\nBut when using the OpenDevin UI, you'll need to choose your model in the settings window (the gear\nwheel on the bottom left)."]}),"\n",(0,i.jsx)(n.p,{children:"The following environment variables might be necessary for some LLMs:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"LLM_API_KEY"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"LLM_BASE_URL"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"LLM_EMBEDDING_MODEL"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"LLM_EMBEDDING_DEPLOYMENT_NAME"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"LLM_API_VERSION"})}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"We have a few guides for running OpenDevin with specific model providers:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"llms/localLLMs",children:"ollama"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"llms/azureLLMs",children:"Azure"})}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"If you're using another provider, we encourage you to open a PR to share your setup!"}),"\n",(0,i.jsx)(n.h2,{id:"note-on-alternative-models",children:"Note on Alternative Models"}),"\n",(0,i.jsx)(n.p,{children:"The best models are GPT-4 and Claude 3. Current local and open source models are\nnot nearly as powerful. When using an alternative model,\nyou may see long wait times between messages,\npoor responses, or errors about malformed JSON. OpenDevin\ncan only be as powerful as the models driving it--fortunately folks on our team\nare actively working on building better open source models!"}),"\n",(0,i.jsx)(n.h2,{id:"api-retries-and-rate-limits",children:"API retries and rate limits"}),"\n",(0,i.jsxs)(n.p,{children:["Some LLMs have rate limits and may require retries. OpenDevin will automatically retry requests if it receives a 429 error or API connection error.\nYou can set ",(0,i.jsx)(n.code,{children:"LLM_NUM_RETRIES"}),", ",(0,i.jsx)(n.code,{children:"LLM_RETRY_MIN_WAIT"}),", ",(0,i.jsx)(n.code,{children:"LLM_RETRY_MAX_WAIT"})," environment variables to control the number of retries and the time between retries.\nBy default, ",(0,i.jsx)(n.code,{children:"LLM_NUM_RETRIES"})," is 5 and ",(0,i.jsx)(n.code,{children:"LLM_RETRY_MIN_WAIT"}),", ",(0,i.jsx)(n.code,{children:"LLM_RETRY_MAX_WAIT"})," are 3 seconds and respectively 60 seconds."]})]})}function u(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},8453:(e,n,s)=>{s.d(n,{R:()=>t,x:()=>l});var i=s(6540);const r={},o=i.createContext(r);function t(e){const n=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:t(e.components),i.createElement(o.Provider,{value:n},e.children)}}}]);
-1
View File
@@ -1 +0,0 @@
"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[8396],{6713:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>u,contentTitle:()=>r,default:()=>c,frontMatter:()=>o,metadata:()=>p,toc:()=>d});var s=t(4848),i=t(8453);const o={sidebar_label:"jupyter",title:"opendevin.sandbox.plugins.jupyter"},r=void 0,p={id:"python/opendevin/sandbox/plugins/jupyter/__init__",title:"opendevin.sandbox.plugins.jupyter",description:"JupyterRequirement Objects",source:"@site/modules/python/opendevin/sandbox/plugins/jupyter/__init__.md",sourceDirName:"python/opendevin/sandbox/plugins/jupyter",slug:"/python/opendevin/sandbox/plugins/jupyter/__init__",permalink:"/OpenDevin/modules/python/opendevin/sandbox/plugins/jupyter/__init__",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{sidebar_label:"jupyter",title:"opendevin.sandbox.plugins.jupyter"},sidebar:"apiSidebar",previous:{title:"sandbox",permalink:"/OpenDevin/modules/python/opendevin/sandbox/e2b/sandbox"},next:{title:"mixin",permalink:"/OpenDevin/modules/python/opendevin/sandbox/plugins/mixin"}},u={},d=[{value:"JupyterRequirement Objects",id:"jupyterrequirement-objects",level:2},{value:"host_src",id:"host_src",level:4}];function l(e){const n={code:"code",h2:"h2",h4:"h4",p:"p",pre:"pre",...(0,i.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h2,{id:"jupyterrequirement-objects",children:"JupyterRequirement Objects"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-python",children:"@dataclass\nclass JupyterRequirement(PluginRequirement)\n"})}),"\n",(0,s.jsx)(n.h4,{id:"host_src",children:"host_src"}),"\n",(0,s.jsx)(n.p,{children:"The directory of this file (sandbox/plugins/jupyter)"})]})}function c(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>r,x:()=>p});var s=t(6540);const i={},o=s.createContext(i);function r(e){const n=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function p(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),s.createElement(o.Provider,{value:n},e.children)}}}]);
-1
View File
@@ -1 +0,0 @@
"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[9086],{5184:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>c,contentTitle:()=>r,default:()=>p,frontMatter:()=>a,metadata:()=>i,toc:()=>l});var t=n(4848),o=n(8453);const a={sidebar_label:"message",title:"opendevin.observation.message"},r=void 0,i={id:"python/opendevin/observation/message",title:"opendevin.observation.message",description:"UserMessageObservation Objects",source:"@site/modules/python/opendevin/observation/message.md",sourceDirName:"python/opendevin/observation",slug:"/python/opendevin/observation/message",permalink:"/OpenDevin/modules/python/opendevin/observation/message",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{sidebar_label:"message",title:"opendevin.observation.message"},sidebar:"apiSidebar",previous:{title:"files",permalink:"/OpenDevin/modules/python/opendevin/observation/files"},next:{title:"recall",permalink:"/OpenDevin/modules/python/opendevin/observation/recall"}},c={},l=[{value:"UserMessageObservation Objects",id:"usermessageobservation-objects",level:2},{value:"AgentMessageObservation Objects",id:"agentmessageobservation-objects",level:2}];function d(e){const s={code:"code",h2:"h2",p:"p",pre:"pre",...(0,o.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.h2,{id:"usermessageobservation-objects",children:"UserMessageObservation Objects"}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-python",children:"@dataclass\nclass UserMessageObservation(Observation)\n"})}),"\n",(0,t.jsx)(s.p,{children:"This data class represents a message sent by the user."}),"\n",(0,t.jsx)(s.h2,{id:"agentmessageobservation-objects",children:"AgentMessageObservation Objects"}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-python",children:"@dataclass\nclass AgentMessageObservation(Observation)\n"})}),"\n",(0,t.jsx)(s.p,{children:"This data class represents a message sent by the agent."})]})}function p(e={}){const{wrapper:s}={...(0,o.R)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},8453:(e,s,n)=>{n.d(s,{R:()=>r,x:()=>i});var t=n(6540);const o={},a=t.createContext(o);function r(e){const s=t.useContext(a);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),t.createElement(a.Provider,{value:s},e.children)}}}]);
-1
View File
@@ -1 +0,0 @@
"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[9270],{9230:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>h,contentTitle:()=>c,default:()=>a,frontMatter:()=>s,metadata:()=>r,toc:()=>l});var i=t(4848),o=t(8453);const s={sidebar_label:"github",title:"opendevin.action.github"},c=void 0,r={id:"python/opendevin/action/github",title:"opendevin.action.github",description:"GitHubPushAction Objects",source:"@site/modules/python/opendevin/action/github.md",sourceDirName:"python/opendevin/action",slug:"/python/opendevin/action/github",permalink:"/OpenDevin/modules/python/opendevin/action/github",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{sidebar_label:"github",title:"opendevin.action.github"},sidebar:"apiSidebar",previous:{title:"fileop",permalink:"/OpenDevin/modules/python/opendevin/action/fileop"},next:{title:"tasks",permalink:"/OpenDevin/modules/python/opendevin/action/tasks"}},h={},l=[{value:"GitHubPushAction Objects",id:"githubpushaction-objects",level:2},{value:"GitHubSendPRAction Objects",id:"githubsendpraction-objects",level:2}];function d(e){const n={code:"code",h2:"h2",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h2,{id:"githubpushaction-objects",children:"GitHubPushAction Objects"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"@dataclass\nclass GitHubPushAction(ExecutableAction)\n"})}),"\n",(0,i.jsx)(n.p,{children:"This pushes the current branch to github."}),"\n",(0,i.jsx)(n.p,{children:"To use this, you need to set the GITHUB_TOKEN environment variable.\nThe agent will return a message with a URL that you can click to make a pull\nrequest."}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Attributes"}),":"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"owner"})," - The owner of the source repo"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"repo"})," - The name of the source repo"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"branch"})," - The branch to push"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"action"})," - The action identifier"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"githubsendpraction-objects",children:"GitHubSendPRAction Objects"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"@dataclass\nclass GitHubSendPRAction(ExecutableAction)\n"})}),"\n",(0,i.jsx)(n.p,{children:"An action to send a github PR."}),"\n",(0,i.jsx)(n.p,{children:"To use this, you need to set the GITHUB_TOKEN environment variable."}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Attributes"}),":"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"owner"})," - The owner of the source repo"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"repo"})," - The name of the source repo"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"title"})," - The title of the PR"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"head"})," - The branch to send the PR from"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"head_repo"})," - The repo to send the PR from"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"base"})," - The branch to send the PR to"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"body"})," - The body of the PR"]}),"\n"]})]})}function a(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>c,x:()=>r});var i=t(6540);const o={},s=i.createContext(o);function c(e){const n=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:c(e.components),i.createElement(s.Provider,{value:n},e.children)}}}]);
-1
View File
@@ -1 +0,0 @@
"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[6528],{8305:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>i,default:()=>g,frontMatter:()=>a,metadata:()=>o,toc:()=>d});var r=t(4848),s=t(8453);const a={sidebar_label:"manager",title:"opendevin.server.agent.manager"},i=void 0,o={id:"python/opendevin/server/agent/manager",title:"opendevin.server.agent.manager",description:"AgentManager Objects",source:"@site/modules/python/opendevin/server/agent/manager.md",sourceDirName:"python/opendevin/server/agent",slug:"/python/opendevin/server/agent/manager",permalink:"/OpenDevin/modules/python/opendevin/server/agent/manager",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{sidebar_label:"manager",title:"opendevin.server.agent.manager"},sidebar:"apiSidebar",previous:{title:"agent",permalink:"/OpenDevin/modules/python/opendevin/server/agent/"},next:{title:"auth",permalink:"/OpenDevin/modules/python/opendevin/server/auth/"}},c={},d=[{value:"AgentManager Objects",id:"agentmanager-objects",level:2},{value:"register_agent",id:"register_agent",level:4},{value:"dispatch",id:"dispatch",level:4}];function l(e){const n={code:"code",h2:"h2",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h2,{id:"agentmanager-objects",children:"AgentManager Objects"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-python",children:"class AgentManager()\n"})}),"\n",(0,r.jsx)(n.h4,{id:"register_agent",children:"register_agent"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-python",children:"def register_agent(sid: str)\n"})}),"\n",(0,r.jsx)(n.p,{children:"Registers a new agent."}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Arguments"}),":"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"sid"})," - The session ID of the agent."]}),"\n"]}),"\n",(0,r.jsx)(n.h4,{id:"dispatch",children:"dispatch"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-python",children:"async def dispatch(sid: str, action: str | None, data: dict)\n"})}),"\n",(0,r.jsx)(n.p,{children:"Dispatches actions to the agent from the client."})]})}function g(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>i,x:()=>o});var r=t(6540);const s={},a=r.createContext(s);function i(e){const n=r.useContext(a);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),r.createElement(a.Provider,{value:n},e.children)}}}]);
-1
View File
@@ -1 +0,0 @@
"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[2472],{4884:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>a,default:()=>p,frontMatter:()=>o,metadata:()=>i,toc:()=>c});var r=s(4848),t=s(8453);const o={sidebar_label:"manager",title:"opendevin.server.session.manager"},a=void 0,i={id:"python/opendevin/server/session/manager",title:"opendevin.server.session.manager",description:"SessionManager Objects",source:"@site/modules/python/opendevin/server/session/manager.md",sourceDirName:"python/opendevin/server/session",slug:"/python/opendevin/server/session/manager",permalink:"/OpenDevin/modules/python/opendevin/server/session/manager",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{sidebar_label:"manager",title:"opendevin.server.session.manager"},sidebar:"apiSidebar",previous:{title:"auth",permalink:"/OpenDevin/modules/python/opendevin/server/auth/"},next:{title:"msg_stack",permalink:"/OpenDevin/modules/python/opendevin/server/session/msg_stack"}},d={},c=[{value:"SessionManager Objects",id:"sessionmanager-objects",level:2},{value:"send",id:"send",level:4},{value:"send_error",id:"send_error",level:4},{value:"send_message",id:"send_message",level:4}];function l(e){const n={code:"code",h2:"h2",h4:"h4",p:"p",pre:"pre",...(0,t.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h2,{id:"sessionmanager-objects",children:"SessionManager Objects"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-python",children:"class SessionManager()\n"})}),"\n",(0,r.jsx)(n.h4,{id:"send",children:"send"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-python",children:"async def send(sid: str, data: Dict[str, object]) -> bool\n"})}),"\n",(0,r.jsx)(n.p,{children:"Sends data to the client."}),"\n",(0,r.jsx)(n.h4,{id:"send_error",children:"send_error"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-python",children:"async def send_error(sid: str, message: str) -> bool\n"})}),"\n",(0,r.jsx)(n.p,{children:"Sends an error message to the client."}),"\n",(0,r.jsx)(n.h4,{id:"send_message",children:"send_message"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-python",children:"async def send_message(sid: str, message: str) -> bool\n"})}),"\n",(0,r.jsx)(n.p,{children:"Sends a message to the client."})]})}function p(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},8453:(e,n,s)=>{s.d(n,{R:()=>a,x:()=>i});var r=s(6540);const t={},o=r.createContext(t);function a(e){const n=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:a(e.components),r.createElement(o.Provider,{value:n},e.children)}}}]);
File diff suppressed because one or more lines are too long
-1
View File
@@ -1 +0,0 @@
"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[7859],{1862:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>o,contentTitle:()=>i,default:()=>d,frontMatter:()=>r,metadata:()=>l,toc:()=>c});var s=t(4848),a=t(8453);const r={sidebar_label:"agent",title:"agenthub.planner_agent.agent"},i=void 0,l={id:"python/agenthub/planner_agent/agent",title:"agenthub.planner_agent.agent",description:"PlannerAgent Objects",source:"@site/modules/python/agenthub/planner_agent/agent.md",sourceDirName:"python/agenthub/planner_agent",slug:"/python/agenthub/planner_agent/agent",permalink:"/OpenDevin/modules/python/agenthub/planner_agent/agent",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{sidebar_label:"agent",title:"agenthub.planner_agent.agent"},sidebar:"apiSidebar",previous:{title:"agent",permalink:"/OpenDevin/modules/python/agenthub/monologue_agent/agent"},next:{title:"prompt",permalink:"/OpenDevin/modules/python/agenthub/planner_agent/prompt"}},o={},c=[{value:"PlannerAgent Objects",id:"planneragent-objects",level:2},{value:"__init__",id:"__init__",level:4},{value:"step",id:"step",level:4}];function p(e){const n={code:"code",h2:"h2",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,a.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h2,{id:"planneragent-objects",children:"PlannerAgent Objects"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-python",children:"class PlannerAgent(Agent)\n"})}),"\n",(0,s.jsx)(n.p,{children:"The planner agent utilizes a special prompting strategy to create long term plans for solving problems.\nThe agent is given its previous action-observation pairs, current task, and hint based on last action taken at every step."}),"\n",(0,s.jsx)(n.h4,{id:"__init__",children:"__init__"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-python",children:"def __init__(llm: LLM)\n"})}),"\n",(0,s.jsx)(n.p,{children:"Initialize the Planner Agent with an LLM"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Arguments"}),":"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"llm (LLM): The llm to be used by this agent"}),"\n"]}),"\n",(0,s.jsx)(n.h4,{id:"step",children:"step"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-python",children:"def step(state: State) -> Action\n"})}),"\n",(0,s.jsx)(n.p,{children:"Checks to see if current step is completed, returns AgentFinishAction if True.\nOtherwise, creates a plan prompt and sends to model for inference, returning the result as the next action."}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Arguments"}),":"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"state (State): The current state given the previous actions and observations"}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Returns"}),":"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"AgentFinishAction: If the last state was 'completed', 'verified', or 'abandoned'"}),"\n",(0,s.jsx)(n.li,{children:"Action: The next action to take based on llm response"}),"\n"]})]})}function d(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(p,{...e})}):p(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>i,x:()=>l});var s=t(6540);const a={},r=s.createContext(a);function i(e){const n=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),s.createElement(r.Provider,{value:n},e.children)}}}]);
-1
View File
@@ -1 +0,0 @@
"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[3159],{9604:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>i,default:()=>u,frontMatter:()=>s,metadata:()=>c,toc:()=>l});var o=t(4848),r=t(8453);const s={sidebar_label:"agent",title:"agenthub.micro.agent"},i=void 0,c={id:"python/agenthub/micro/agent",title:"agenthub.micro.agent",description:"my\\_encoder",source:"@site/modules/python/agenthub/micro/agent.md",sourceDirName:"python/agenthub/micro",slug:"/python/agenthub/micro/agent",permalink:"/OpenDevin/modules/python/agenthub/micro/agent",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{sidebar_label:"agent",title:"agenthub.micro.agent"},sidebar:"apiSidebar",previous:{title:"agent",permalink:"/OpenDevin/modules/python/agenthub/dummy_agent/agent"},next:{title:"json",permalink:"/OpenDevin/modules/python/agenthub/monologue_agent/utils/json"}},a={},l=[{value:"my_encoder",id:"my_encoder",level:4},{value:"to_json",id:"to_json",level:4}];function d(e){const n={code:"code",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h4,{id:"my_encoder",children:"my_encoder"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-python",children:"def my_encoder(obj)\n"})}),"\n",(0,o.jsx)(n.p,{children:"Encodes objects as dictionaries"}),"\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.strong,{children:"Arguments"}),":"]}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"obj (Object): An object that will be converted"}),"\n"]}),"\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.strong,{children:"Returns"}),":"]}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"dict: If the object can be converted it is returned in dict format"}),"\n"]}),"\n",(0,o.jsx)(n.h4,{id:"to_json",children:"to_json"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-python",children:"def to_json(obj, **kwargs)\n"})}),"\n",(0,o.jsx)(n.p,{children:"Serialize an object to str format"})]})}function u(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>i,x:()=>c});var o=t(6540);const r={},s=o.createContext(r);function i(e){const n=o.useContext(s);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),o.createElement(s.Provider,{value:n},e.children)}}}]);
File diff suppressed because one or more lines are too long
-1
View File
@@ -1 +0,0 @@
"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[2902],{3942:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>s,default:()=>a,frontMatter:()=>r,metadata:()=>c,toc:()=>p});var o=t(4848),i=t(8453);const r={sidebar_label:"config",title:"opendevin.config"},s=void 0,c={id:"python/opendevin/config",title:"opendevin.config",description:"get",source:"@site/modules/python/opendevin/config.md",sourceDirName:"python/opendevin",slug:"/python/opendevin/config",permalink:"/OpenDevin/modules/python/opendevin/config",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{sidebar_label:"config",title:"opendevin.config"},sidebar:"apiSidebar",previous:{title:"agent",permalink:"/OpenDevin/modules/python/opendevin/agent"},next:{title:"files",permalink:"/OpenDevin/modules/python/opendevin/files"}},d={},p=[{value:"get",id:"get",level:4}];function l(e){const n={code:"code",h4:"h4",p:"p",pre:"pre",...(0,i.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h4,{id:"get",children:"get"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-python",children:"def get(key: ConfigType, required: bool = False)\n"})}),"\n",(0,o.jsx)(n.p,{children:"Get a key from the environment variables or config.toml or default configs."})]})}function a(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(l,{...e})}):l(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>s,x:()=>c});var o=t(6540);const i={},r=o.createContext(i);function s(e){const n=o.useContext(r);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:s(e.components),o.createElement(r.Provider,{value:n},e.children)}}}]);
-1
View File
@@ -1 +0,0 @@
"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[9647],{7121:(e,s,r)=>{r.r(s),r.d(s,{default:()=>l});r(6540);var c=r(4164),u=r(1003),a=r(7559),d=r(2831),n=r(781),t=r(4848);function l(e){return(0,t.jsx)(u.e3,{className:(0,c.A)(a.G.wrapper.docsPages),children:(0,t.jsx)(n.A,{children:(0,d.v)(e.route.routes)})})}}}]);
-1
View File
@@ -1 +0,0 @@
"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[5360],{8613:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>p,contentTitle:()=>r,default:()=>c,frontMatter:()=>s,metadata:()=>a,toc:()=>d});var o=t(4848),i=t(8453);const s={sidebar_label:"observation",title:"opendevin.observation"},r=void 0,a={id:"python/opendevin/observation/__init__",title:"opendevin.observation",description:"OBSERVATION\\TYPE\\TO\\_CLASS",source:"@site/modules/python/opendevin/observation/__init__.md",sourceDirName:"python/opendevin/observation",slug:"/python/opendevin/observation/__init__",permalink:"/OpenDevin/modules/python/opendevin/observation/__init__",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{sidebar_label:"observation",title:"opendevin.observation"},sidebar:"apiSidebar",previous:{title:"llm",permalink:"/OpenDevin/modules/python/opendevin/llm/"},next:{title:"base",permalink:"/OpenDevin/modules/python/opendevin/observation/base"}},p={},d=[{value:"OBSERVATION_TYPE_TO_CLASS",id:"observation_type_to_class",level:4}];function l(e){const n={h4:"h4",p:"p",...(0,i.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h4,{id:"observation_type_to_class",children:"OBSERVATION_TYPE_TO_CLASS"}),"\n",(0,o.jsx)(n.p,{children:"type: ignore[attr-defined]"})]})}function c(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(l,{...e})}):l(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>r,x:()=>a});var o=t(6540);const i={},s=o.createContext(i);function r(e){const n=o.useContext(s);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),o.createElement(s.Provider,{value:n},e.children)}}}]);
-1
View File
@@ -1 +0,0 @@
"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[8726],{8343:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>o,default:()=>p,frontMatter:()=>r,metadata:()=>c,toc:()=>l});var s=n(4848),a=n(8453);const r={sidebar_label:"agent",title:"agenthub.SWE_agent.agent"},o=void 0,c={id:"python/agenthub/SWE_agent/agent",title:"agenthub.SWE_agent.agent",description:"SWEAgent Objects",source:"@site/modules/python/agenthub/SWE_agent/agent.md",sourceDirName:"python/agenthub/SWE_agent",slug:"/python/agenthub/SWE_agent/agent",permalink:"/OpenDevin/modules/python/agenthub/SWE_agent/agent",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{sidebar_label:"agent",title:"agenthub.SWE_agent.agent"},sidebar:"apiSidebar",next:{title:"parser",permalink:"/OpenDevin/modules/python/agenthub/SWE_agent/parser"}},i={},l=[{value:"SWEAgent Objects",id:"sweagent-objects",level:2},{value:"step",id:"step",level:4},{value:"reset",id:"reset",level:4}];function d(e){const t={code:"code",h2:"h2",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",...(0,a.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h2,{id:"sweagent-objects",children:"SWEAgent Objects"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-python",children:"class SWEAgent(Agent)\n"})}),"\n",(0,s.jsx)(t.p,{children:"An attempt to recreate swe_agent with output parsing, prompting style, and Application Computer Interface (ACI)."}),"\n",(0,s.jsx)(t.p,{children:"SWE-agent includes ACI functions like 'goto', 'search_for', 'edit', 'scroll', 'run'"}),"\n",(0,s.jsx)(t.h4,{id:"step",children:"step"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-python",children:"def step(state: State) -> Action\n"})}),"\n",(0,s.jsx)(t.p,{children:"SWE-Agent step:"}),"\n",(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsx)(t.li,{children:"Get context - past actions, custom commands, current step"}),"\n",(0,s.jsx)(t.li,{children:"Perform think-act - prompt model for action and reasoning"}),"\n",(0,s.jsx)(t.li,{children:"Catch errors - ensure model takes action (5 attempts max)"}),"\n"]}),"\n",(0,s.jsx)(t.h4,{id:"reset",children:"reset"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-python",children:"def reset() -> None\n"})}),"\n",(0,s.jsx)(t.p,{children:"Used to reset the agent"})]})}function p(e={}){const{wrapper:t}={...(0,a.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},8453:(e,t,n)=>{n.d(t,{R:()=>o,x:()=>c});var s=n(6540);const a={},r=s.createContext(a);function o(e){const t=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:o(e.components),s.createElement(r.Provider,{value:t},e.children)}}}]);
File diff suppressed because one or more lines are too long
-1
View File
@@ -1 +0,0 @@
"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[1309],{1409:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>o,default:()=>p,frontMatter:()=>a,metadata:()=>s,toc:()=>l});var i=t(4848),r=t(8453);const a={sidebar_label:"main",title:"opendevin.main"},o=void 0,s={id:"python/opendevin/main",title:"opendevin.main",description:"read\\task\\from\\_file",source:"@site/modules/python/opendevin/main.md",sourceDirName:"python/opendevin",slug:"/python/opendevin/main",permalink:"/OpenDevin/modules/python/opendevin/main",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{sidebar_label:"main",title:"opendevin.main"},sidebar:"apiSidebar",previous:{title:"logger",permalink:"/OpenDevin/modules/python/opendevin/logger"},next:{title:"plan",permalink:"/OpenDevin/modules/python/opendevin/plan"}},d={},l=[{value:"read_task_from_file",id:"read_task_from_file",level:4},{value:"read_task_from_stdin",id:"read_task_from_stdin",level:4},{value:"main",id:"main",level:4}];function c(e){const n={code:"code",h4:"h4",p:"p",pre:"pre",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h4,{id:"read_task_from_file",children:"read_task_from_file"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"def read_task_from_file(file_path: str) -> str\n"})}),"\n",(0,i.jsx)(n.p,{children:"Read task from the specified file."}),"\n",(0,i.jsx)(n.h4,{id:"read_task_from_stdin",children:"read_task_from_stdin"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"def read_task_from_stdin() -> str\n"})}),"\n",(0,i.jsx)(n.p,{children:"Read task from stdin."}),"\n",(0,i.jsx)(n.h4,{id:"main",children:"main"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"async def main(task_str: str = '')\n"})}),"\n",(0,i.jsx)(n.p,{children:"Main coroutine to run the agent controller with task input flexibility."})]})}function p(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>o,x:()=>s});var i=t(6540);const r={},a=i.createContext(r);function o(e){const n=i.useContext(a);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function s(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),i.createElement(a.Provider,{value:n},e.children)}}}]);
-1
View File
@@ -1 +0,0 @@
"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[8078],{4061:s=>{s.exports=JSON.parse('{"name":"docusaurus-plugin-content-pages","id":"default"}')}}]);
-1
View File
@@ -1 +0,0 @@
"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[9200],{375:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>r,contentTitle:()=>i,default:()=>p,frontMatter:()=>s,metadata:()=>c,toc:()=>d});var o=n(4848),a=n(8453);const s={sidebar_label:"tasks",title:"opendevin.action.tasks"},i=void 0,c={id:"python/opendevin/action/tasks",title:"opendevin.action.tasks",description:"TaskStateChangedAction Objects",source:"@site/modules/python/opendevin/action/tasks.md",sourceDirName:"python/opendevin/action",slug:"/python/opendevin/action/tasks",permalink:"/OpenDevin/modules/python/opendevin/action/tasks",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{sidebar_label:"tasks",title:"opendevin.action.tasks"},sidebar:"apiSidebar",previous:{title:"github",permalink:"/OpenDevin/modules/python/opendevin/action/github"},next:{title:"agent_controller",permalink:"/OpenDevin/modules/python/opendevin/controller/agent_controller"}},r={},d=[{value:"TaskStateChangedAction Objects",id:"taskstatechangedaction-objects",level:2}];function l(e){const t={code:"code",h2:"h2",p:"p",pre:"pre",...(0,a.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.h2,{id:"taskstatechangedaction-objects",children:"TaskStateChangedAction Objects"}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{className:"language-python",children:"@dataclass\nclass TaskStateChangedAction(NotExecutableAction)\n"})}),"\n",(0,o.jsx)(t.p,{children:"Fake action, just to notify the client that a task state has changed."})]})}function p(e={}){const{wrapper:t}={...(0,a.R)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(l,{...e})}):l(e)}},8453:(e,t,n)=>{n.d(t,{R:()=>i,x:()=>c});var o=n(6540);const a={},s=o.createContext(a);function i(e){const t=o.useContext(s);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),o.createElement(s.Provider,{value:t},e.children)}}}]);
-1
View File
@@ -1 +0,0 @@
"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[5289],{6771:(n,e,t)=>{t.r(e),t.d(e,{assets:()=>c,contentTitle:()=>o,default:()=>p,frontMatter:()=>a,metadata:()=>i,toc:()=>d});var r=t(4848),s=t(8453);const a={sidebar_label:"parser",title:"agenthub.SWE_agent.parser"},o=void 0,i={id:"python/agenthub/SWE_agent/parser",title:"agenthub.SWE_agent.parser",description:"get\\action\\from\\_string",source:"@site/modules/python/agenthub/SWE_agent/parser.md",sourceDirName:"python/agenthub/SWE_agent",slug:"/python/agenthub/SWE_agent/parser",permalink:"/OpenDevin/modules/python/agenthub/SWE_agent/parser",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{sidebar_label:"parser",title:"agenthub.SWE_agent.parser"},sidebar:"apiSidebar",previous:{title:"agent",permalink:"/OpenDevin/modules/python/agenthub/SWE_agent/agent"},next:{title:"codeact_agent",permalink:"/OpenDevin/modules/python/agenthub/codeact_agent/"}},c={},d=[{value:"get_action_from_string",id:"get_action_from_string",level:4},{value:"parse_command",id:"parse_command",level:4}];function l(n){const e={code:"code",em:"em",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.R)(),...n.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(e.h4,{id:"get_action_from_string",children:"get_action_from_string"}),"\n",(0,r.jsx)(e.pre,{children:(0,r.jsx)(e.code,{className:"language-python",children:"def get_action_from_string(command_string: str,\n path: str,\n line: int,\n thoughts: str = '') -> Action | None\n"})}),"\n",(0,r.jsx)(e.p,{children:"Parses the command string to find which command the agent wants to run\nConverts the command into a proper Action and returns"}),"\n",(0,r.jsx)(e.h4,{id:"parse_command",children:"parse_command"}),"\n",(0,r.jsx)(e.pre,{children:(0,r.jsx)(e.code,{className:"language-python",children:"def parse_command(input_str: str, path: str, line: int)\n"})}),"\n",(0,r.jsx)(e.p,{children:"Parses a given string and separates the command (enclosed in triple backticks) from any accompanying text."}),"\n",(0,r.jsxs)(e.p,{children:[(0,r.jsx)(e.strong,{children:"Arguments"}),":"]}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"input_str"})," ",(0,r.jsx)(e.em,{children:"str"})," - The input string to be parsed."]}),"\n"]}),"\n",(0,r.jsxs)(e.p,{children:[(0,r.jsx)(e.strong,{children:"Returns"}),":"]}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.code,{children:"tuple"})," - A tuple containing the command and the accompanying text (if any)."]}),"\n"]})]})}function p(n={}){const{wrapper:e}={...(0,s.R)(),...n.components};return e?(0,r.jsx)(e,{...n,children:(0,r.jsx)(l,{...n})}):l(n)}},8453:(n,e,t)=>{t.d(e,{R:()=>o,x:()=>i});var r=t(6540);const s={},a=r.createContext(s);function o(n){const e=r.useContext(a);return r.useMemo((function(){return"function"==typeof n?n(e):{...e,...n}}),[e,n])}function i(n){let e;return e=n.disableParentContext?"function"==typeof n.components?n.components(s):n.components||s:o(n.components),r.createElement(a.Provider,{value:e},n.children)}}}]);
-1
View File
@@ -1 +0,0 @@
"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[5650],{3577:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>h,contentTitle:()=>i,default:()=>u,frontMatter:()=>l,metadata:()=>r,toc:()=>a});var o=t(4848),s=t(8453);const l={sidebar_label:"monologue",title:"agenthub.monologue_agent.utils.monologue"},i=void 0,r={id:"python/agenthub/monologue_agent/utils/monologue",title:"agenthub.monologue_agent.utils.monologue",description:"Monologue Objects",source:"@site/modules/python/agenthub/monologue_agent/utils/monologue.md",sourceDirName:"python/agenthub/monologue_agent/utils",slug:"/python/agenthub/monologue_agent/utils/monologue",permalink:"/OpenDevin/modules/python/agenthub/monologue_agent/utils/monologue",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{sidebar_label:"monologue",title:"agenthub.monologue_agent.utils.monologue"},sidebar:"apiSidebar",previous:{title:"memory",permalink:"/OpenDevin/modules/python/agenthub/monologue_agent/utils/memory"},next:{title:"prompts",permalink:"/OpenDevin/modules/python/agenthub/monologue_agent/utils/prompts"}},h={},a=[{value:"Monologue Objects",id:"monologue-objects",level:2},{value:"__init__",id:"__init__",level:4},{value:"add_event",id:"add_event",level:4},{value:"get_thoughts",id:"get_thoughts",level:4},{value:"get_total_length",id:"get_total_length",level:4},{value:"condense",id:"condense",level:4}];function d(e){const n={code:"code",h2:"h2",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h2,{id:"monologue-objects",children:"Monologue Objects"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-python",children:"class Monologue()\n"})}),"\n",(0,o.jsx)(n.p,{children:"The monologue is a representation for the agent's internal monologue where it can think.\nThe agent has the capability of using this monologue for whatever it wants."}),"\n",(0,o.jsx)(n.h4,{id:"__init__",children:"__init__"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-python",children:"def __init__()\n"})}),"\n",(0,o.jsx)(n.p,{children:"Initialize the empty list of thoughts"}),"\n",(0,o.jsx)(n.h4,{id:"add_event",children:"add_event"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-python",children:"def add_event(t: dict)\n"})}),"\n",(0,o.jsx)(n.p,{children:"Adds an event to memory if it is a valid event."}),"\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.strong,{children:"Arguments"}),":"]}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"t (dict): The thought that we want to add to memory"}),"\n"]}),"\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.strong,{children:"Raises"}),":"]}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"AgentEventTypeError: If t is not a dict"}),"\n"]}),"\n",(0,o.jsx)(n.h4,{id:"get_thoughts",children:"get_thoughts"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-python",children:"def get_thoughts()\n"})}),"\n",(0,o.jsx)(n.p,{children:"Get the current thoughts of the agent."}),"\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.strong,{children:"Returns"}),":"]}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"List: The list of thoughts that the agent has."}),"\n"]}),"\n",(0,o.jsx)(n.h4,{id:"get_total_length",children:"get_total_length"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-python",children:"def get_total_length()\n"})}),"\n",(0,o.jsx)(n.p,{children:"Gives the total number of characters in all thoughts"}),"\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.strong,{children:"Returns"}),":"]}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"Int: Total number of chars in thoughts."}),"\n"]}),"\n",(0,o.jsx)(n.h4,{id:"condense",children:"condense"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-python",children:"def condense(llm: LLM)\n"})}),"\n",(0,o.jsx)(n.p,{children:"Attempts to condense the monologue by using the llm"}),"\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.strong,{children:"Arguments"}),":"]}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"llm (LLM): llm to be used for summarization"}),"\n"]}),"\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.strong,{children:"Raises"}),":"]}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"Exception: the same exception as it got from the llm or processing the response"}),"\n"]})]})}function u(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>i,x:()=>r});var o=t(6540);const s={},l=o.createContext(s);function i(e){const n=o.useContext(l);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),o.createElement(l.Provider,{value:n},e.children)}}}]);
-1
View File
@@ -1 +0,0 @@
"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[7127],{1519:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>r,default:()=>h,frontMatter:()=>a,metadata:()=>d,toc:()=>o});var s=t(4848),i=t(8453);const a={sidebar_label:"task",title:"opendevin.schema.task"},r=void 0,d={id:"python/opendevin/schema/task",title:"opendevin.schema.task",description:"TaskState Objects",source:"@site/modules/python/opendevin/schema/task.md",sourceDirName:"python/opendevin/schema",slug:"/python/opendevin/schema/task",permalink:"/OpenDevin/modules/python/opendevin/schema/task",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{sidebar_label:"task",title:"opendevin.schema.task"},sidebar:"apiSidebar",previous:{title:"observation",permalink:"/OpenDevin/modules/python/opendevin/schema/observation"},next:{title:"agent",permalink:"/OpenDevin/modules/python/opendevin/server/agent/"}},l={},o=[{value:"TaskState Objects",id:"taskstate-objects",level:2},{value:"INIT",id:"init",level:4},{value:"RUNNING",id:"running",level:4},{value:"PAUSED",id:"paused",level:4},{value:"STOPPED",id:"stopped",level:4},{value:"FINISHED",id:"finished",level:4},{value:"ERROR",id:"error",level:4},{value:"TaskStateAction Objects",id:"taskstateaction-objects",level:2},{value:"START",id:"start",level:4},{value:"PAUSE",id:"pause",level:4},{value:"RESUME",id:"resume",level:4},{value:"STOP",id:"stop",level:4}];function c(e){const n={code:"code",h2:"h2",h4:"h4",p:"p",pre:"pre",...(0,i.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h2,{id:"taskstate-objects",children:"TaskState Objects"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-python",children:"class TaskState(str, Enum)\n"})}),"\n",(0,s.jsx)(n.h4,{id:"init",children:"INIT"}),"\n",(0,s.jsx)(n.p,{children:"Initial state of the task."}),"\n",(0,s.jsx)(n.h4,{id:"running",children:"RUNNING"}),"\n",(0,s.jsx)(n.p,{children:"The task is running."}),"\n",(0,s.jsx)(n.h4,{id:"paused",children:"PAUSED"}),"\n",(0,s.jsx)(n.p,{children:"The task is paused."}),"\n",(0,s.jsx)(n.h4,{id:"stopped",children:"STOPPED"}),"\n",(0,s.jsx)(n.p,{children:"The task is stopped."}),"\n",(0,s.jsx)(n.h4,{id:"finished",children:"FINISHED"}),"\n",(0,s.jsx)(n.p,{children:"The task is finished."}),"\n",(0,s.jsx)(n.h4,{id:"error",children:"ERROR"}),"\n",(0,s.jsx)(n.p,{children:"An error occurred during the task."}),"\n",(0,s.jsx)(n.h2,{id:"taskstateaction-objects",children:"TaskStateAction Objects"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-python",children:"class TaskStateAction(str, Enum)\n"})}),"\n",(0,s.jsx)(n.h4,{id:"start",children:"START"}),"\n",(0,s.jsx)(n.p,{children:"Starts the task."}),"\n",(0,s.jsx)(n.h4,{id:"pause",children:"PAUSE"}),"\n",(0,s.jsx)(n.p,{children:"Pauses the task."}),"\n",(0,s.jsx)(n.h4,{id:"resume",children:"RESUME"}),"\n",(0,s.jsx)(n.p,{children:"Resumes the task."}),"\n",(0,s.jsx)(n.h4,{id:"stop",children:"STOP"}),"\n",(0,s.jsx)(n.p,{children:"Stops the task."})]})}function h(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>r,x:()=>d});var s=t(6540);const i={},a=s.createContext(i);function r(e){const n=s.useContext(a);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),s.createElement(a.Provider,{value:n},e.children)}}}]);
-1
View File
@@ -1 +0,0 @@
"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[1487],{4308:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>c,default:()=>d,frontMatter:()=>a,metadata:()=>s,toc:()=>p});var o=t(4848),i=t(8453);const a={sidebar_label:"fileop",title:"opendevin.action.fileop"},c=void 0,s={id:"python/opendevin/action/fileop",title:"opendevin.action.fileop",description:"FileReadAction Objects",source:"@site/modules/python/opendevin/action/fileop.md",sourceDirName:"python/opendevin/action",slug:"/python/opendevin/action/fileop",permalink:"/OpenDevin/modules/python/opendevin/action/fileop",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{sidebar_label:"fileop",title:"opendevin.action.fileop"},sidebar:"apiSidebar",previous:{title:"base",permalink:"/OpenDevin/modules/python/opendevin/action/base"},next:{title:"github",permalink:"/OpenDevin/modules/python/opendevin/action/github"}},l={},p=[{value:"FileReadAction Objects",id:"filereadaction-objects",level:2}];function r(e){const n={code:"code",h2:"h2",p:"p",pre:"pre",...(0,i.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h2,{id:"filereadaction-objects",children:"FileReadAction Objects"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-python",children:"@dataclass\nclass FileReadAction(ExecutableAction)\n"})}),"\n",(0,o.jsx)(n.p,{children:"Reads a file from a given path.\nCan be set to read specific lines using start and end\nDefault lines 0:-1 (whole file)"})]})}function d(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(r,{...e})}):r(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>c,x:()=>s});var o=t(6540);const i={},a=o.createContext(i);function c(e){const n=o.useContext(a);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function s(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:c(e.components),o.createElement(a.Provider,{value:n},e.children)}}}]);
-1
View File
@@ -1 +0,0 @@
"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[3815],{2956:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>r,default:()=>p,frontMatter:()=>i,metadata:()=>a,toc:()=>c});var s=t(4848),o=t(8453);const i={sidebar_label:"files",title:"opendevin.observation.files"},r=void 0,a={id:"python/opendevin/observation/files",title:"opendevin.observation.files",description:"FileReadObservation Objects",source:"@site/modules/python/opendevin/observation/files.md",sourceDirName:"python/opendevin/observation",slug:"/python/opendevin/observation/files",permalink:"/OpenDevin/modules/python/opendevin/observation/files",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{sidebar_label:"files",title:"opendevin.observation.files"},sidebar:"apiSidebar",previous:{title:"error",permalink:"/OpenDevin/modules/python/opendevin/observation/error"},next:{title:"message",permalink:"/OpenDevin/modules/python/opendevin/observation/message"}},l={},c=[{value:"FileReadObservation Objects",id:"filereadobservation-objects",level:2},{value:"FileWriteObservation Objects",id:"filewriteobservation-objects",level:2}];function d(e){const n={code:"code",h2:"h2",p:"p",pre:"pre",...(0,o.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h2,{id:"filereadobservation-objects",children:"FileReadObservation Objects"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-python",children:"@dataclass\nclass FileReadObservation(Observation)\n"})}),"\n",(0,s.jsx)(n.p,{children:"This data class represents the content of a file."}),"\n",(0,s.jsx)(n.h2,{id:"filewriteobservation-objects",children:"FileWriteObservation Objects"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-python",children:"@dataclass\nclass FileWriteObservation(Observation)\n"})}),"\n",(0,s.jsx)(n.p,{children:"This data class represents a file write operation"})]})}function p(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>r,x:()=>a});var s=t(6540);const o={},i=s.createContext(o);function r(e){const n=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),s.createElement(i.Provider,{value:n},e.children)}}}]);
-1
View File
@@ -1 +0,0 @@
"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[9818],{421:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>i,contentTitle:()=>r,default:()=>l,frontMatter:()=>d,metadata:()=>a,toc:()=>c});var t=o(4848),s=o(8453);const d={sidebar_label:"sandbox",title:"opendevin.sandbox.e2b.sandbox"},r=void 0,a={id:"python/opendevin/sandbox/e2b/sandbox",title:"opendevin.sandbox.e2b.sandbox",description:"E2BBox Objects",source:"@site/modules/python/opendevin/sandbox/e2b/sandbox.md",sourceDirName:"python/opendevin/sandbox/e2b",slug:"/python/opendevin/sandbox/e2b/sandbox",permalink:"/OpenDevin/modules/python/opendevin/sandbox/e2b/sandbox",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{sidebar_label:"sandbox",title:"opendevin.sandbox.e2b.sandbox"},sidebar:"apiSidebar",previous:{title:"process",permalink:"/OpenDevin/modules/python/opendevin/sandbox/docker/process"},next:{title:"jupyter",permalink:"/OpenDevin/modules/python/opendevin/sandbox/plugins/jupyter/__init__"}},i={},c=[{value:"E2BBox Objects",id:"e2bbox-objects",level:2},{value:"copy_to",id:"copy_to",level:4}];function p(e){const n={code:"code",h2:"h2",h4:"h4",p:"p",pre:"pre",...(0,s.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h2,{id:"e2bbox-objects",children:"E2BBox Objects"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-python",children:"class E2BBox(Sandbox)\n"})}),"\n",(0,t.jsx)(n.h4,{id:"copy_to",children:"copy_to"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-python",children:"def copy_to(host_src: str, sandbox_dest: str, recursive: bool = False)\n"})}),"\n",(0,t.jsx)(n.p,{children:"Copies a local file or directory to the sandbox."})]})}function l(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(p,{...e})}):p(e)}},8453:(e,n,o)=>{o.d(n,{R:()=>r,x:()=>a});var t=o(6540);const s={},d=t.createContext(s);function r(e){const n=t.useContext(d);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),t.createElement(d.Provider,{value:n},e.children)}}}]);
-1
View File
@@ -1 +0,0 @@
"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[4534],{8368:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>d,contentTitle:()=>r,default:()=>c,frontMatter:()=>s,metadata:()=>a,toc:()=>l});var o=i(4848),t=i(8453);const s={},r="Azure OpenAI LLM",a={id:"usage/llms/azureLLMs",title:"Azure OpenAI LLM",description:"Completion",source:"@site/modules/usage/llms/azureLLMs.md",sourceDirName:"usage/llms",slug:"/usage/llms/azureLLMs",permalink:"/OpenDevin/modules/usage/llms/azureLLMs",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{},sidebar:"docsSidebar",previous:{title:"\ud83e\udd16 LLM Backends",permalink:"/OpenDevin/modules/usage/llms/"},next:{title:"Google Gemini/Vertex LLM",permalink:"/OpenDevin/modules/usage/llms/googleLLMs"}},d={},l=[{value:"Completion",id:"completion",level:2},{value:"Azure openai configs",id:"azure-openai-configs",level:3},{value:"Embeddings",id:"embeddings",level:2},{value:"Azure openai configs",id:"azure-openai-configs-1",level:3}];function u(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",p:"p",pre:"pre",...(0,t.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h1,{id:"azure-openai-llm",children:"Azure OpenAI LLM"}),"\n",(0,o.jsx)(n.h2,{id:"completion",children:"Completion"}),"\n",(0,o.jsxs)(n.p,{children:["OpenDevin uses LiteLLM for completion calls. You can find their documentation on Azure ",(0,o.jsx)(n.a,{href:"https://docs.litellm.ai/docs/providers/azure",children:"here"})]}),"\n",(0,o.jsx)(n.h3,{id:"azure-openai-configs",children:"Azure openai configs"}),"\n",(0,o.jsxs)(n.p,{children:["When running the OpenDevin Docker image, you'll need to set the following environment variables using ",(0,o.jsx)(n.code,{children:"-e"}),":"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{children:'LLM_BASE_URL="<azure-api-base-url>" # e.g. "https://openai-gpt-4-test-v-1.openai.azure.com/"\nLLM_API_KEY="<azure-api-key>"\nLLM_MODEL="azure/<your-gpt-deployment-name>"\nLLM_API_VERSION = "<api-version>" # e.g. "2024-02-15-preview"\n'})}),"\n",(0,o.jsx)(n.admonition,{type:"note",children:(0,o.jsx)(n.p,{children:"You can find your ChatGPT deployment name on the deployments page in Azure. It could be the same with the chat model name (e.g. 'GPT4-1106-preview'), by default or initially set, but it doesn't have to be the same. Run opendevin, and when you load it in the browser, go to Settings and set model as above: \"azure/<your-actual-gpt-deployment-name>\". If it's not in the list, enter your own text and save it."})}),"\n",(0,o.jsx)(n.h2,{id:"embeddings",children:"Embeddings"}),"\n",(0,o.jsxs)(n.p,{children:["OpenDevin uses llama-index for embeddings. You can find their documentation on Azure ",(0,o.jsx)(n.a,{href:"https://docs.llamaindex.ai/en/stable/api_reference/embeddings/azure_openai/",children:"here"})]}),"\n",(0,o.jsx)(n.h3,{id:"azure-openai-configs-1",children:"Azure openai configs"}),"\n",(0,o.jsx)(n.p,{children:'The model used for Azure OpenAI embeddings is "text-embedding-ada-002".\nYou need the correct deployment name for this model in your Azure account.'}),"\n",(0,o.jsxs)(n.p,{children:["When running OpenDevin in Docker, set the following environment variables using ",(0,o.jsx)(n.code,{children:"-e"}),":"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{children:'LLM_EMBEDDING_MODEL="azureopenai"\nLLM_EMBEDDING_DEPLOYMENT_NAME = "<your-embedding-deployment-name>" # e.g. "TextEmbedding...<etc>"\nLLM_API_VERSION = "<api-version>" # e.g. "2024-02-15-preview"\n'})})]})}function c(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(u,{...e})}):u(e)}},8453:(e,n,i)=>{i.d(n,{R:()=>r,x:()=>a});var o=i(6540);const t={},s=o.createContext(t);function r(e){const n=o.useContext(s);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:r(e.components),o.createElement(s.Provider,{value:n},e.children)}}}]);
-1
View File
@@ -1 +0,0 @@
"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[1976],{3202:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>a,default:()=>p,frontMatter:()=>r,metadata:()=>i,toc:()=>c});var o=t(4848),s=t(8453);const r={sidebar_label:"recall",title:"opendevin.observation.recall"},a=void 0,i={id:"python/opendevin/observation/recall",title:"opendevin.observation.recall",description:"AgentRecallObservation Objects",source:"@site/modules/python/opendevin/observation/recall.md",sourceDirName:"python/opendevin/observation",slug:"/python/opendevin/observation/recall",permalink:"/OpenDevin/modules/python/opendevin/observation/recall",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{sidebar_label:"recall",title:"opendevin.observation.recall"},sidebar:"apiSidebar",previous:{title:"message",permalink:"/OpenDevin/modules/python/opendevin/observation/message"},next:{title:"run",permalink:"/OpenDevin/modules/python/opendevin/observation/run"}},l={},c=[{value:"AgentRecallObservation Objects",id:"agentrecallobservation-objects",level:2}];function d(e){const n={code:"code",h2:"h2",p:"p",pre:"pre",...(0,s.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h2,{id:"agentrecallobservation-objects",children:"AgentRecallObservation Objects"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-python",children:"@dataclass\nclass AgentRecallObservation(Observation)\n"})}),"\n",(0,o.jsx)(n.p,{children:"This data class represents a list of memories recalled by the agent."})]})}function p(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>a,x:()=>i});var o=t(6540);const s={},r=o.createContext(s);function a(e){const n=o.useContext(r);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),o.createElement(r.Provider,{value:n},e.children)}}}]);
File diff suppressed because one or more lines are too long
-1
View File
@@ -1 +0,0 @@
"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[7526],{9209:(n,e,t)=>{t.r(e),t.d(e,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>a,toc:()=>p});var r=t(4848),s=t(8453);const o={sidebar_label:"prompt",title:"agenthub.planner_agent.prompt"},i=void 0,a={id:"python/agenthub/planner_agent/prompt",title:"agenthub.planner_agent.prompt",description:"get\\_hint",source:"@site/modules/python/agenthub/planner_agent/prompt.md",sourceDirName:"python/agenthub/planner_agent",slug:"/python/agenthub/planner_agent/prompt",permalink:"/OpenDevin/modules/python/agenthub/planner_agent/prompt",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{sidebar_label:"prompt",title:"agenthub.planner_agent.prompt"},sidebar:"apiSidebar",previous:{title:"agent",permalink:"/OpenDevin/modules/python/agenthub/planner_agent/agent"},next:{title:"action",permalink:"/OpenDevin/modules/python/opendevin/action/__init__"}},l={},p=[{value:"get_hint",id:"get_hint",level:4},{value:"get_prompt",id:"get_prompt",level:4},{value:"parse_response",id:"parse_response",level:4}];function c(n){const e={code:"code",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.R)(),...n.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(e.h4,{id:"get_hint",children:"get_hint"}),"\n",(0,r.jsx)(e.pre,{children:(0,r.jsx)(e.code,{className:"language-python",children:"def get_hint(latest_action_id: str) -> str\n"})}),"\n",(0,r.jsx)(e.p,{children:"Returns action type hint based on given action_id"}),"\n",(0,r.jsx)(e.h4,{id:"get_prompt",children:"get_prompt"}),"\n",(0,r.jsx)(e.pre,{children:(0,r.jsx)(e.code,{className:"language-python",children:"def get_prompt(plan: Plan, history: List[Tuple[Action, Observation]]) -> str\n"})}),"\n",(0,r.jsx)(e.p,{children:"Gets the prompt for the planner agent.\nFormatted with the most recent action-observation pairs, current task, and hint based on last action"}),"\n",(0,r.jsxs)(e.p,{children:[(0,r.jsx)(e.strong,{children:"Arguments"}),":"]}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsx)(e.li,{children:"plan (Plan): The original plan outlined by the user with LLM defined tasks"}),"\n",(0,r.jsx)(e.li,{children:"history (List[Tuple[Action, Observation]]): List of corresponding action-observation pairs"}),"\n"]}),"\n",(0,r.jsxs)(e.p,{children:[(0,r.jsx)(e.strong,{children:"Returns"}),":"]}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsx)(e.li,{children:"str: The formatted string prompt with historical values"}),"\n"]}),"\n",(0,r.jsx)(e.h4,{id:"parse_response",children:"parse_response"}),"\n",(0,r.jsx)(e.pre,{children:(0,r.jsx)(e.code,{className:"language-python",children:"def parse_response(response: str) -> Action\n"})}),"\n",(0,r.jsx)(e.p,{children:"Parses the model output to find a valid action to take"}),"\n",(0,r.jsxs)(e.p,{children:[(0,r.jsx)(e.strong,{children:"Arguments"}),":"]}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsx)(e.li,{children:"response (str): A response from the model that potentially contains an Action."}),"\n"]}),"\n",(0,r.jsxs)(e.p,{children:[(0,r.jsx)(e.strong,{children:"Returns"}),":"]}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsx)(e.li,{children:"Action: A valid next action to perform from model output"}),"\n"]})]})}function d(n={}){const{wrapper:e}={...(0,s.R)(),...n.components};return e?(0,r.jsx)(e,{...n,children:(0,r.jsx)(c,{...n})}):c(n)}},8453:(n,e,t)=>{t.d(e,{R:()=>i,x:()=>a});var r=t(6540);const s={},o=r.createContext(s);function i(n){const e=r.useContext(o);return r.useMemo((function(){return"function"==typeof n?n(e):{...e,...n}}),[e,n])}function a(n){let e;return e=n.disableParentContext?"function"==typeof n.components?n.components(s):n.components||s:i(n.components),r.createElement(o.Provider,{value:e},n.children)}}}]);
-1
View File
@@ -1 +0,0 @@
"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[8102],{1966:s=>{s.exports=JSON.parse('{"name":"docusaurus-plugin-content-docs","id":"default"}')}}]);
-1
View File
@@ -1 +0,0 @@
"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[6732],{8601:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>c,contentTitle:()=>i,default:()=>l,frontMatter:()=>s,metadata:()=>a,toc:()=>d});var o=r(4848),t=r(8453);const s={sidebar_label:"error",title:"opendevin.observation.error"},i=void 0,a={id:"python/opendevin/observation/error",title:"opendevin.observation.error",description:"AgentErrorObservation Objects",source:"@site/modules/python/opendevin/observation/error.md",sourceDirName:"python/opendevin/observation",slug:"/python/opendevin/observation/error",permalink:"/OpenDevin/modules/python/opendevin/observation/error",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{sidebar_label:"error",title:"opendevin.observation.error"},sidebar:"apiSidebar",previous:{title:"delegate",permalink:"/OpenDevin/modules/python/opendevin/observation/delegate"},next:{title:"files",permalink:"/OpenDevin/modules/python/opendevin/observation/files"}},c={},d=[{value:"AgentErrorObservation Objects",id:"agenterrorobservation-objects",level:2}];function p(e){const n={code:"code",h2:"h2",p:"p",pre:"pre",...(0,t.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h2,{id:"agenterrorobservation-objects",children:"AgentErrorObservation Objects"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-python",children:"@dataclass\nclass AgentErrorObservation(Observation)\n"})}),"\n",(0,o.jsx)(n.p,{children:"This data class represents an error encountered by the agent."})]})}function l(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(p,{...e})}):p(e)}},8453:(e,n,r)=>{r.d(n,{R:()=>i,x:()=>a});var o=r(6540);const t={},s=o.createContext(t);function i(e){const n=o.useContext(s);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:i(e.components),o.createElement(s.Provider,{value:n},e.children)}}}]);
-1
View File
@@ -1 +0,0 @@
"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[9294],{7810:(e,n,i)=>{i.r(n),i.d(n,{default:()=>o});var s=i(781),t=i(4848);function o(){return(0,t.jsx)(s.A,{title:"FAQ",description:"Frequently Asked Questions",children:(0,t.jsxs)("div",{id:"faq",style:{maxWidth:"900px",margin:"0px auto",padding:"40px",textAlign:"justify"},children:[(0,t.jsx)("h1",{style:{fontSize:"3rem"},children:"Frequently Asked Questions"}),(0,t.jsx)("h2",{style:{fontSize:"2rem"},children:"Support"}),(0,t.jsx)("h3",{children:"How can I report an issue with OpenDevin?"}),(0,t.jsxs)("p",{children:["Please send us a message on our"," ",(0,t.jsx)("a",{href:"https://discord.gg/mBuDGRzzES",children:"Discord channel"})," or file a bug on"," ",(0,t.jsx)("a",{href:"https://github.com/OpenDevin/OpenDevin/issues",children:"GitHub"})," if you run into any issues!"]}),(0,t.jsx)("h2",{style:{fontSize:"2rem"},children:"General"}),(0,t.jsx)("h3",{children:"What is Devin?"}),(0,t.jsxs)("p",{children:[(0,t.jsx)("span",{style:{fontWeight:"600",color:"var(--logo)"},children:"Devin"})," ","represents a cutting-edge autonomous agent designed to navigate the complexities of software engineering. It leverages a combination of tools such as a shell, code editor, and web browser, showcasing the untapped potential of LLMs in software development. Our goal is to explore and expand upon Devin's capabilities, identifying both its strengths and areas for improvement, to guide the progress of open code models."]}),(0,t.jsx)("h3",{children:"Why OpenDevin?"}),(0,t.jsxs)("p",{children:["The"," ",(0,t.jsx)("span",{style:{fontWeight:"600",color:"var(--logo)"},children:"OpenDevin"})," ","project is born out of a desire to replicate, enhance, and innovate beyond the original Devin model. By engaging the"," ",(0,t.jsx)("a",{href:"https://github.com/OpenDevin/OpenDevin",children:"open-source community"}),", we aim to tackle the challenges faced by Code LLMs in practical scenarios, producing works that significantly contribute to the community and pave the way for future advancements."]})]})})}}}]);
-1
View File
@@ -1 +0,0 @@
"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[6872],{7791:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>r,contentTitle:()=>l,default:()=>c,frontMatter:()=>o,metadata:()=>a,toc:()=>p});var i=t(4848),s=t(8453);const o={sidebar_label:"system",title:"opendevin.utils.system"},l=void 0,a={id:"python/opendevin/utils/system",title:"opendevin.utils.system",description:"find\\available\\tcp\\_port",source:"@site/modules/python/opendevin/utils/system.md",sourceDirName:"python/opendevin/utils",slug:"/python/opendevin/utils/system",permalink:"/OpenDevin/modules/python/opendevin/utils/system",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{sidebar_label:"system",title:"opendevin.utils.system"},sidebar:"apiSidebar",previous:{title:"listen",permalink:"/OpenDevin/modules/python/opendevin/server/listen"},next:{title:"agent",permalink:"/OpenDevin/modules/python/opendevin/agent"}},r={},p=[{value:"find_available_tcp_port",id:"find_available_tcp_port",level:4}];function d(e){const n={code:"code",h4:"h4",p:"p",pre:"pre",...(0,s.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h4,{id:"find_available_tcp_port",children:"find_available_tcp_port"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"def find_available_tcp_port() -> int\n"})}),"\n",(0,i.jsx)(n.p,{children:"Find an available TCP port, return -1 if none available."})]})}function c(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>l,x:()=>a});var i=t(6540);const s={},o=i.createContext(s);function l(e){const n=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:l(e.components),i.createElement(o.Provider,{value:n},e.children)}}}]);
-1
View File
@@ -1 +0,0 @@
"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[7098],{4532:(n,e,s)=>{s.r(e),s.d(e,{default:()=>d});s(6540);var r=s(1003),o=s(2967),t=s(2252),c=s(2831),i=s(1463),u=s(4848);function a(n){const{version:e}=n;return(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(i.A,{version:e.version,tag:(0,o.tU)(e.pluginId,e.version)}),(0,u.jsx)(r.be,{children:e.noIndex&&(0,u.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})]})}function l(n){const{version:e,route:s}=n;return(0,u.jsx)(r.e3,{className:e.className,children:(0,u.jsx)(t.n,{version:e,children:(0,c.v)(s.routes)})})}function d(n){return(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(a,{...n}),(0,u.jsx)(l,{...n})]})}}}]);
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
-1
View File
@@ -1 +0,0 @@
"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[4910],{9140:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>r,default:()=>p,frontMatter:()=>a,metadata:()=>i,toc:()=>l});var o=t(4848),s=t(8453);const a={sidebar_label:"delegate",title:"opendevin.observation.delegate"},r=void 0,i={id:"python/opendevin/observation/delegate",title:"opendevin.observation.delegate",description:"AgentDelegateObservation Objects",source:"@site/modules/python/opendevin/observation/delegate.md",sourceDirName:"python/opendevin/observation",slug:"/python/opendevin/observation/delegate",permalink:"/OpenDevin/modules/python/opendevin/observation/delegate",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{sidebar_label:"delegate",title:"opendevin.observation.delegate"},sidebar:"apiSidebar",previous:{title:"browse",permalink:"/OpenDevin/modules/python/opendevin/observation/browse"},next:{title:"error",permalink:"/OpenDevin/modules/python/opendevin/observation/error"}},d={},l=[{value:"AgentDelegateObservation Objects",id:"agentdelegateobservation-objects",level:2}];function c(e){const n={code:"code",h2:"h2",p:"p",pre:"pre",...(0,s.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h2,{id:"agentdelegateobservation-objects",children:"AgentDelegateObservation Objects"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-python",children:"@dataclass\nclass AgentDelegateObservation(Observation)\n"})}),"\n",(0,o.jsx)(n.p,{children:"This data class represents a delegate observation.\nThis is used when the produced action is NOT executable."})]})}function p(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>r,x:()=>i});var o=t(6540);const s={},a=o.createContext(s);function r(e){const n=o.useContext(a);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),o.createElement(a.Provider,{value:n},e.children)}}}]);
File diff suppressed because one or more lines are too long
-1
View File
@@ -1 +0,0 @@
"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[1730],{2060:(e,o,n)=>{n.r(o),n.d(o,{assets:()=>c,contentTitle:()=>t,default:()=>g,frontMatter:()=>s,metadata:()=>r,toc:()=>d});var i=n(4848),l=n(8453);const s={},t="Google Gemini/Vertex LLM",r={id:"usage/llms/googleLLMs",title:"Google Gemini/Vertex LLM",description:"Completion",source:"@site/modules/usage/llms/googleLLMs.md",sourceDirName:"usage/llms",slug:"/usage/llms/googleLLMs",permalink:"/OpenDevin/modules/usage/llms/googleLLMs",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Azure OpenAI LLM",permalink:"/OpenDevin/modules/usage/llms/azureLLMs"},next:{title:"Local LLM with Ollama",permalink:"/OpenDevin/modules/usage/llms/localLLMs"}},c={},d=[{value:"Completion",id:"completion",level:2},{value:"Gemini - Google AI Studio Configs",id:"gemini---google-ai-studio-configs",level:3},{value:"Vertex AI - Google Cloud Platform Configs",id:"vertex-ai---google-cloud-platform-configs",level:3}];function u(e){const o={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",ul:"ul",...(0,l.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(o.h1,{id:"google-geminivertex-llm",children:"Google Gemini/Vertex LLM"}),"\n",(0,i.jsx)(o.h2,{id:"completion",children:"Completion"}),"\n",(0,i.jsx)(o.p,{children:"OpenDevin uses LiteLLM for completion calls. The following resources are relevant for using OpenDevin with Google's LLMs"}),"\n",(0,i.jsxs)(o.ul,{children:["\n",(0,i.jsx)(o.li,{children:(0,i.jsx)(o.a,{href:"https://docs.litellm.ai/docs/providers/gemini",children:"Gemini - Google AI Studio"})}),"\n",(0,i.jsx)(o.li,{children:(0,i.jsx)(o.a,{href:"https://docs.litellm.ai/docs/providers/vertex",children:"VertexAI - Google Cloud Platform"})}),"\n"]}),"\n",(0,i.jsx)(o.h3,{id:"gemini---google-ai-studio-configs",children:"Gemini - Google AI Studio Configs"}),"\n",(0,i.jsxs)(o.p,{children:["To use Gemini through Google AI Studio when running the OpenDevin Docker image, you'll need to set the following environment variables using ",(0,i.jsx)(o.code,{children:"-e"}),":"]}),"\n",(0,i.jsx)(o.pre,{children:(0,i.jsx)(o.code,{children:'GEMINI_API_KEY="<your-google-api-key>"\nLLM_MODEL="gemini/gemini-1.5-pro"\n'})}),"\n",(0,i.jsx)(o.h3,{id:"vertex-ai---google-cloud-platform-configs",children:"Vertex AI - Google Cloud Platform Configs"}),"\n",(0,i.jsxs)(o.p,{children:["To use Vertex AI through Google Cloud Platform when running the OpenDevin Docker image, you'll need to set the following environment variables using ",(0,i.jsx)(o.code,{children:"-e"}),":"]}),"\n",(0,i.jsx)(o.pre,{children:(0,i.jsx)(o.code,{children:'GOOGLE_APPLICATION_CREDENTIALS="<json-dump-of-gcp-service-account-json>"\nVERTEXAI_PROJECT="<your-gcp-project-id>"\nVERTEXAI_LOCATION="<your-gcp-location>"\nLLM_MODEL="vertex_ai/<desired-llm-model>"\n'})})]})}function g(e={}){const{wrapper:o}={...(0,l.R)(),...e.components};return o?(0,i.jsx)(o,{...e,children:(0,i.jsx)(u,{...e})}):u(e)}},8453:(e,o,n)=>{n.d(o,{R:()=>t,x:()=>r});var i=n(6540);const l={},s=i.createContext(l);function t(e){const o=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function r(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:t(e.components),i.createElement(s.Provider,{value:o},e.children)}}}]);
-1
View File
@@ -1 +0,0 @@
"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[1707],{1788:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>a,default:()=>h,frontMatter:()=>l,metadata:()=>o,toc:()=>c});var i=t(4848),s=t(8453);const l={sidebar_label:"action",title:"opendevin.schema.action"},a=void 0,o={id:"python/opendevin/schema/action",title:"opendevin.schema.action",description:"ActionTypeSchema Objects",source:"@site/modules/python/opendevin/schema/action.md",sourceDirName:"python/opendevin/schema",slug:"/python/opendevin/schema/action",permalink:"/OpenDevin/modules/python/opendevin/schema/action",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{sidebar_label:"action",title:"opendevin.schema.action"},sidebar:"apiSidebar",previous:{title:"requirement",permalink:"/OpenDevin/modules/python/opendevin/sandbox/plugins/requirement"},next:{title:"observation",permalink:"/OpenDevin/modules/python/opendevin/schema/observation"}},d={},c=[{value:"ActionTypeSchema Objects",id:"actiontypeschema-objects",level:2},{value:"INIT",id:"init",level:4},{value:"START",id:"start",level:4},{value:"READ",id:"read",level:4},{value:"WRITE",id:"write",level:4},{value:"RUN",id:"run",level:4},{value:"KILL",id:"kill",level:4},{value:"BROWSE",id:"browse",level:4},{value:"RECALL",id:"recall",level:4},{value:"THINK",id:"think",level:4},{value:"DELEGATE",id:"delegate",level:4},{value:"FINISH",id:"finish",level:4},{value:"PAUSE",id:"pause",level:4},{value:"RESUME",id:"resume",level:4},{value:"STOP",id:"stop",level:4},{value:"PUSH",id:"push",level:4},{value:"SEND_PR",id:"send_pr",level:4}];function r(e){const n={code:"code",h2:"h2",h4:"h4",p:"p",pre:"pre",...(0,s.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h2,{id:"actiontypeschema-objects",children:"ActionTypeSchema Objects"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"class ActionTypeSchema(BaseModel)\n"})}),"\n",(0,i.jsx)(n.h4,{id:"init",children:"INIT"}),"\n",(0,i.jsx)(n.p,{children:"Initializes the agent. Only sent by client."}),"\n",(0,i.jsx)(n.h4,{id:"start",children:"START"}),"\n",(0,i.jsx)(n.p,{children:"Starts a new development task. Only sent by the client."}),"\n",(0,i.jsx)(n.h4,{id:"read",children:"READ"}),"\n",(0,i.jsx)(n.p,{children:"Reads the content of a file."}),"\n",(0,i.jsx)(n.h4,{id:"write",children:"WRITE"}),"\n",(0,i.jsx)(n.p,{children:"Writes the content to a file."}),"\n",(0,i.jsx)(n.h4,{id:"run",children:"RUN"}),"\n",(0,i.jsx)(n.p,{children:"Runs a command."}),"\n",(0,i.jsx)(n.h4,{id:"kill",children:"KILL"}),"\n",(0,i.jsx)(n.p,{children:"Kills a background command."}),"\n",(0,i.jsx)(n.h4,{id:"browse",children:"BROWSE"}),"\n",(0,i.jsx)(n.p,{children:"Opens a web page."}),"\n",(0,i.jsx)(n.h4,{id:"recall",children:"RECALL"}),"\n",(0,i.jsx)(n.p,{children:"Searches long-term memory"}),"\n",(0,i.jsx)(n.h4,{id:"think",children:"THINK"}),"\n",(0,i.jsx)(n.p,{children:"Allows the agent to make a plan, set a goal, or record thoughts"}),"\n",(0,i.jsx)(n.h4,{id:"delegate",children:"DELEGATE"}),"\n",(0,i.jsx)(n.p,{children:"Delegates a task to another agent."}),"\n",(0,i.jsx)(n.h4,{id:"finish",children:"FINISH"}),"\n",(0,i.jsx)(n.p,{children:"If you're absolutely certain that you've completed your task and have tested your work,\nuse the finish action to stop working."}),"\n",(0,i.jsx)(n.h4,{id:"pause",children:"PAUSE"}),"\n",(0,i.jsx)(n.p,{children:"Pauses the task."}),"\n",(0,i.jsx)(n.h4,{id:"resume",children:"RESUME"}),"\n",(0,i.jsx)(n.p,{children:"Resumes the task."}),"\n",(0,i.jsx)(n.h4,{id:"stop",children:"STOP"}),"\n",(0,i.jsx)(n.p,{children:"Stops the task. Must send a start action to restart a new task."}),"\n",(0,i.jsx)(n.h4,{id:"push",children:"PUSH"}),"\n",(0,i.jsx)(n.p,{children:"Push a branch to github."}),"\n",(0,i.jsx)(n.h4,{id:"send_pr",children:"SEND_PR"}),"\n",(0,i.jsx)(n.p,{children:"Send a PR to github."})]})}function h(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(r,{...e})}):r(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>a,x:()=>o});var i=t(6540);const s={},l=i.createContext(s);function a(e){const n=i.useContext(l);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),i.createElement(l.Provider,{value:n},e.children)}}}]);
File diff suppressed because one or more lines are too long
-1
View File
@@ -1 +0,0 @@
"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[8750],{2464:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>s,default:()=>d,frontMatter:()=>c,metadata:()=>a,toc:()=>r});var o=t(4848),i=t(8453);const c={sidebar_label:"base",title:"opendevin.action.base"},s=void 0,a={id:"python/opendevin/action/base",title:"opendevin.action.base",description:"NullAction Objects",source:"@site/modules/python/opendevin/action/base.md",sourceDirName:"python/opendevin/action",slug:"/python/opendevin/action/base",permalink:"/OpenDevin/modules/python/opendevin/action/base",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{sidebar_label:"base",title:"opendevin.action.base"},sidebar:"apiSidebar",previous:{title:"action",permalink:"/OpenDevin/modules/python/opendevin/action/__init__"},next:{title:"fileop",permalink:"/OpenDevin/modules/python/opendevin/action/fileop"}},l={},r=[{value:"NullAction Objects",id:"nullaction-objects",level:2}];function p(e){const n={code:"code",h2:"h2",p:"p",pre:"pre",...(0,i.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h2,{id:"nullaction-objects",children:"NullAction Objects"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-python",children:"@dataclass\nclass NullAction(NotExecutableAction)\n"})}),"\n",(0,o.jsx)(n.p,{children:"An action that does nothing."})]})}function d(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(p,{...e})}):p(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>s,x:()=>a});var o=t(6540);const i={},c=o.createContext(i);function s(e){const n=o.useContext(c);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:s(e.components),o.createElement(c.Provider,{value:n},e.children)}}}]);
-1
View File
@@ -1 +0,0 @@
"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[2042],{1865:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>o,default:()=>c,frontMatter:()=>l,metadata:()=>r,toc:()=>d});var s=t(4848),i=t(8453);const l={sidebar_label:"listen",title:"opendevin.server.listen"},o=void 0,r={id:"python/opendevin/server/listen",title:"opendevin.server.listen",description:"get\\litellm\\models",source:"@site/modules/python/opendevin/server/listen.md",sourceDirName:"python/opendevin/server",slug:"/python/opendevin/server/listen",permalink:"/OpenDevin/modules/python/opendevin/server/listen",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{sidebar_label:"listen",title:"opendevin.server.listen"},sidebar:"apiSidebar",previous:{title:"session",permalink:"/OpenDevin/modules/python/opendevin/server/session/"},next:{title:"system",permalink:"/OpenDevin/modules/python/opendevin/utils/system"}},a={},d=[{value:"get_litellm_models",id:"get_litellm_models",level:4},{value:"get_agents",id:"get_agents",level:4},{value:"get_token",id:"get_token",level:4}];function p(e){const n={code:"code",h4:"h4",p:"p",pre:"pre",...(0,i.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h4,{id:"get_litellm_models",children:"get_litellm_models"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-python",children:"@app.get('/api/litellm-models')\nasync def get_litellm_models()\n"})}),"\n",(0,s.jsx)(n.p,{children:"Get all models supported by LiteLLM."}),"\n",(0,s.jsx)(n.h4,{id:"get_agents",children:"get_agents"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-python",children:"@app.get('/api/agents')\nasync def get_agents()\n"})}),"\n",(0,s.jsx)(n.p,{children:"Get all agents supported by LiteLLM."}),"\n",(0,s.jsx)(n.h4,{id:"get_token",children:"get_token"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-python",children:"@app.get('/api/auth')\nasync def get_token(\n credentials: HTTPAuthorizationCredentials = Depends(security_scheme))\n"})}),"\n",(0,s.jsx)(n.p,{children:"Generate a JWT for authentication when starting a WebSocket connection. This endpoint checks if valid credentials\nare provided and uses them to get a session ID. If no valid credentials are provided, it generates a new session ID."})]})}function c(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(p,{...e})}):p(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>o,x:()=>r});var s=t(6540);const i={},l=s.createContext(i);function o(e){const n=s.useContext(l);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),s.createElement(l.Provider,{value:n},e.children)}}}]);
-1
View File
@@ -1 +0,0 @@
"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[8474],{7976:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>l,default:()=>u,frontMatter:()=>r,metadata:()=>i,toc:()=>c});var o=t(4848),s=t(8453);const r={sidebar_label:"json",title:"agenthub.monologue_agent.utils.json"},l=void 0,i={id:"python/agenthub/monologue_agent/utils/json",title:"agenthub.monologue_agent.utils.json",description:"my\\_encoder",source:"@site/modules/python/agenthub/monologue_agent/utils/json.md",sourceDirName:"python/agenthub/monologue_agent/utils",slug:"/python/agenthub/monologue_agent/utils/json",permalink:"/OpenDevin/modules/python/agenthub/monologue_agent/utils/json",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{sidebar_label:"json",title:"agenthub.monologue_agent.utils.json"},sidebar:"apiSidebar",previous:{title:"agent",permalink:"/OpenDevin/modules/python/agenthub/micro/agent"},next:{title:"memory",permalink:"/OpenDevin/modules/python/agenthub/monologue_agent/utils/memory"}},a={},c=[{value:"my_encoder",id:"my_encoder",level:4},{value:"dumps",id:"dumps",level:4},{value:"loads",id:"loads",level:4}];function d(e){const n={code:"code",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h4,{id:"my_encoder",children:"my_encoder"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-python",children:"def my_encoder(obj)\n"})}),"\n",(0,o.jsx)(n.p,{children:"Encodes objects as dictionaries"}),"\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.strong,{children:"Arguments"}),":"]}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"obj (Object): An object that will be converted"}),"\n"]}),"\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.strong,{children:"Returns"}),":"]}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"dict: If the object can be converted it is returned in dict format"}),"\n"]}),"\n",(0,o.jsx)(n.h4,{id:"dumps",children:"dumps"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-python",children:"def dumps(obj, **kwargs)\n"})}),"\n",(0,o.jsx)(n.p,{children:"Serialize an object to str format"}),"\n",(0,o.jsx)(n.h4,{id:"loads",children:"loads"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-python",children:"def loads(s, **kwargs)\n"})}),"\n",(0,o.jsx)(n.p,{children:"Create a JSON object from str"})]})}function u(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>l,x:()=>i});var o=t(6540);const s={},r=o.createContext(s);function l(e){const n=o.useContext(r);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:l(e.components),o.createElement(r.Provider,{value:n},e.children)}}}]);
-1
View File
@@ -1 +0,0 @@
"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[2609],{6817:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>c,contentTitle:()=>i,default:()=>p,frontMatter:()=>r,metadata:()=>a,toc:()=>d});var t=n(4848),o=n(8453);const r={sidebar_label:"msg_stack",title:"opendevin.server.session.msg_stack"},i=void 0,a={id:"python/opendevin/server/session/msg_stack",title:"opendevin.server.session.msg_stack",description:"Message Objects",source:"@site/modules/python/opendevin/server/session/msg_stack.md",sourceDirName:"python/opendevin/server/session",slug:"/python/opendevin/server/session/msg_stack",permalink:"/OpenDevin/modules/python/opendevin/server/session/msg_stack",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{sidebar_label:"msg_stack",title:"opendevin.server.session.msg_stack"},sidebar:"apiSidebar",previous:{title:"manager",permalink:"/OpenDevin/modules/python/opendevin/server/session/manager"},next:{title:"session",permalink:"/OpenDevin/modules/python/opendevin/server/session/"}},c={},d=[{value:"Message Objects",id:"message-objects",level:2},{value:"role",id:"role",level:4}];function l(e){const s={code:"code",h2:"h2",h4:"h4",p:"p",pre:"pre",...(0,o.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.h2,{id:"message-objects",children:"Message Objects"}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-python",children:"class Message()\n"})}),"\n",(0,t.jsx)(s.h4,{id:"role",children:"role"}),"\n",(0,t.jsx)(s.p,{children:'"user"| "assistant"'})]})}function p(e={}){const{wrapper:s}={...(0,o.R)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},8453:(e,s,n)=>{n.d(s,{R:()=>i,x:()=>a});var t=n(6540);const o={},r=t.createContext(o);function i(e){const s=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),t.createElement(r.Provider,{value:s},e.children)}}}]);
-1
View File
@@ -1 +0,0 @@
"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[300],{4761:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>i,default:()=>a,frontMatter:()=>o,metadata:()=>l,toc:()=>d});var r=t(4848),s=t(8453);const o={sidebar_label:"files",title:"opendevin.files"},i=void 0,l={id:"python/opendevin/files",title:"opendevin.files",description:"WorkspaceFile Objects",source:"@site/modules/python/opendevin/files.md",sourceDirName:"python/opendevin",slug:"/python/opendevin/files",permalink:"/OpenDevin/modules/python/opendevin/files",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{sidebar_label:"files",title:"opendevin.files"},sidebar:"apiSidebar",previous:{title:"config",permalink:"/OpenDevin/modules/python/opendevin/config"},next:{title:"logger",permalink:"/OpenDevin/modules/python/opendevin/logger"}},c={},d=[{value:"WorkspaceFile Objects",id:"workspacefile-objects",level:2},{value:"to_dict",id:"to_dict",level:4},{value:"get_folder_structure",id:"get_folder_structure",level:4}];function p(e){const n={code:"code",h2:"h2",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h2,{id:"workspacefile-objects",children:"WorkspaceFile Objects"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-python",children:"class WorkspaceFile()\n"})}),"\n",(0,r.jsx)(n.h4,{id:"to_dict",children:"to_dict"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-python",children:"def to_dict() -> Dict[str, Any]\n"})}),"\n",(0,r.jsx)(n.p,{children:"Converts the File object to a dictionary."}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Returns"}),":"]}),"\n",(0,r.jsx)(n.p,{children:"The dictionary representation of the File object."}),"\n",(0,r.jsx)(n.h4,{id:"get_folder_structure",children:"get_folder_structure"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-python",children:"def get_folder_structure(workdir: Path) -> WorkspaceFile\n"})}),"\n",(0,r.jsx)(n.p,{children:"Gets the folder structure of a directory."}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Arguments"}),":"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"workdir"})," - The directory path."]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Returns"}),":"]}),"\n",(0,r.jsx)(n.p,{children:"The folder structure."})]})}function a(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(p,{...e})}):p(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>i,x:()=>l});var r=t(6540);const s={},o=r.createContext(s);function i(e){const n=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),r.createElement(o.Provider,{value:n},e.children)}}}]);
-1
View File
@@ -1 +0,0 @@
"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[8176],{6677:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>c,default:()=>h,frontMatter:()=>a,metadata:()=>i,toc:()=>r});var s=t(4848),o=t(8453);const a={sidebar_label:"codeact_agent",title:"agenthub.codeact_agent.codeact_agent"},c=void 0,i={id:"python/agenthub/codeact_agent/codeact_agent",title:"agenthub.codeact_agent.codeact_agent",description:"CodeActAgent Objects",source:"@site/modules/python/agenthub/codeact_agent/codeact_agent.md",sourceDirName:"python/agenthub/codeact_agent",slug:"/python/agenthub/codeact_agent/",permalink:"/OpenDevin/modules/python/agenthub/codeact_agent/",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{sidebar_label:"codeact_agent",title:"agenthub.codeact_agent.codeact_agent"},sidebar:"apiSidebar",previous:{title:"parser",permalink:"/OpenDevin/modules/python/agenthub/SWE_agent/parser"},next:{title:"agent",permalink:"/OpenDevin/modules/python/agenthub/delegator_agent/agent"}},d={},r=[{value:"CodeActAgent Objects",id:"codeactagent-objects",level:2},{value:"__init__",id:"__init__",level:4},{value:"step",id:"step",level:4}];function l(e){const n={code:"code",h2:"h2",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h2,{id:"codeactagent-objects",children:"CodeActAgent Objects"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-python",children:"class CodeActAgent(Agent)\n"})}),"\n",(0,s.jsx)(n.p,{children:"The Code Act Agent is a minimalist agent.\nThe agent works by passing the model a list of action-observation pairs and prompting the model to take the next step."}),"\n",(0,s.jsx)(n.h4,{id:"__init__",children:"__init__"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-python",children:"def __init__(llm: LLM) -> None\n"})}),"\n",(0,s.jsx)(n.p,{children:"Initializes a new instance of the CodeActAgent class."}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Arguments"}),":"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"llm (LLM): The llm to be used by this agent"}),"\n"]}),"\n",(0,s.jsx)(n.h4,{id:"step",children:"step"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-python",children:"def step(state: State) -> Action\n"})}),"\n",(0,s.jsx)(n.p,{children:"Performs one step using the Code Act Agent.\nThis includes gathering info on previous steps and prompting the model to make a command to execute."}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Arguments"}),":"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"state (State): used to get updated info and background commands"}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Returns"}),":"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"CmdRunAction(command) - command action to run"}),"\n",(0,s.jsx)(n.li,{children:"AgentEchoAction(content=INVALID_INPUT_MESSAGE) - invalid command output"}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Raises"}),":"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"NotImplementedError - for actions other than CmdOutputObservation or AgentMessageObservation"}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>c,x:()=>i});var s=t(6540);const o={},a=s.createContext(o);function c(e){const n=s.useContext(a);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:c(e.components),s.createElement(a.Provider,{value:n},e.children)}}}]);
File diff suppressed because one or more lines are too long
-1
View File
@@ -1 +0,0 @@
"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[3945],{2258:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>a,default:()=>p,frontMatter:()=>i,metadata:()=>r,toc:()=>c});var t=s(4848),o=s(8453);const i={sidebar_label:"base",title:"opendevin.observation.base"},a=void 0,r={id:"python/opendevin/observation/base",title:"opendevin.observation.base",description:"Observation Objects",source:"@site/modules/python/opendevin/observation/base.md",sourceDirName:"python/opendevin/observation",slug:"/python/opendevin/observation/base",permalink:"/OpenDevin/modules/python/opendevin/observation/base",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{sidebar_label:"base",title:"opendevin.observation.base"},sidebar:"apiSidebar",previous:{title:"observation",permalink:"/OpenDevin/modules/python/opendevin/observation/__init__"},next:{title:"browse",permalink:"/OpenDevin/modules/python/opendevin/observation/browse"}},d={},c=[{value:"Observation Objects",id:"observation-objects",level:2},{value:"to_dict",id:"to_dict",level:4},{value:"to_memory",id:"to_memory",level:4},{value:"message",id:"message",level:4},{value:"NullObservation Objects",id:"nullobservation-objects",level:2}];function l(e){const n={code:"code",h2:"h2",h4:"h4",p:"p",pre:"pre",...(0,o.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h2,{id:"observation-objects",children:"Observation Objects"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-python",children:"@dataclass\nclass Observation()\n"})}),"\n",(0,t.jsx)(n.p,{children:"This data class represents an observation of the environment."}),"\n",(0,t.jsx)(n.h4,{id:"to_dict",children:"to_dict"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-python",children:"def to_dict() -> dict\n"})}),"\n",(0,t.jsx)(n.p,{children:"Converts the observation to a dictionary and adds user message."}),"\n",(0,t.jsx)(n.h4,{id:"to_memory",children:"to_memory"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-python",children:"def to_memory() -> dict\n"})}),"\n",(0,t.jsx)(n.p,{children:"Converts the observation to a dictionary."}),"\n",(0,t.jsx)(n.h4,{id:"message",children:"message"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-python",children:"@property\ndef message() -> str\n"})}),"\n",(0,t.jsx)(n.p,{children:"Returns a message describing the observation."}),"\n",(0,t.jsx)(n.h2,{id:"nullobservation-objects",children:"NullObservation Objects"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-python",children:"@dataclass\nclass NullObservation(Observation)\n"})}),"\n",(0,t.jsx)(n.p,{children:"This data class represents a null observation.\nThis is used when the produced action is NOT executable."})]})}function p(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},8453:(e,n,s)=>{s.d(n,{R:()=>a,x:()=>r});var t=s(6540);const o={},i=t.createContext(o);function a(e){const n=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),t.createElement(i.Provider,{value:n},e.children)}}}]);
-1
View File
@@ -1 +0,0 @@
"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[1930],{9139:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>i,default:()=>g,frontMatter:()=>r,metadata:()=>o,toc:()=>c});var s=t(4848),a=t(8453);const r={sidebar_label:"agent",title:"agenthub.delegator_agent.agent"},i=void 0,o={id:"python/agenthub/delegator_agent/agent",title:"agenthub.delegator_agent.agent",description:"DelegatorAgent Objects",source:"@site/modules/python/agenthub/delegator_agent/agent.md",sourceDirName:"python/agenthub/delegator_agent",slug:"/python/agenthub/delegator_agent/agent",permalink:"/OpenDevin/modules/python/agenthub/delegator_agent/agent",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{sidebar_label:"agent",title:"agenthub.delegator_agent.agent"},sidebar:"apiSidebar",previous:{title:"codeact_agent",permalink:"/OpenDevin/modules/python/agenthub/codeact_agent/"},next:{title:"agent",permalink:"/OpenDevin/modules/python/agenthub/dummy_agent/agent"}},l={},c=[{value:"DelegatorAgent Objects",id:"delegatoragent-objects",level:2},{value:"__init__",id:"__init__",level:4},{value:"step",id:"step",level:4}];function d(e){const n={code:"code",h2:"h2",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,a.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h2,{id:"delegatoragent-objects",children:"DelegatorAgent Objects"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-python",children:"class DelegatorAgent(Agent)\n"})}),"\n",(0,s.jsx)(n.p,{children:"The planner agent utilizes a special prompting strategy to create long term plans for solving problems.\nThe agent is given its previous action-observation pairs, current task, and hint based on last action taken at every step."}),"\n",(0,s.jsx)(n.h4,{id:"__init__",children:"__init__"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-python",children:"def __init__(llm: LLM)\n"})}),"\n",(0,s.jsx)(n.p,{children:"Initialize the Delegator Agent with an LLM"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Arguments"}),":"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"llm (LLM): The llm to be used by this agent"}),"\n"]}),"\n",(0,s.jsx)(n.h4,{id:"step",children:"step"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-python",children:"def step(state: State) -> Action\n"})}),"\n",(0,s.jsx)(n.p,{children:"Checks to see if current step is completed, returns AgentFinishAction if True.\nOtherwise, creates a plan prompt and sends to model for inference, returning the result as the next action."}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Arguments"}),":"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"state (State): The current state given the previous actions and observations"}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Returns"}),":"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"AgentFinishAction: If the last state was 'completed', 'verified', or 'abandoned'"}),"\n",(0,s.jsx)(n.li,{children:"Action: The next action to take based on llm response"}),"\n"]})]})}function g(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>i,x:()=>o});var s=t(6540);const a={},r=s.createContext(a);function i(e){const n=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),s.createElement(r.Provider,{value:n},e.children)}}}]);
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
-1
View File
@@ -1 +0,0 @@
"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[2259],{8466:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>d,contentTitle:()=>r,default:()=>u,frontMatter:()=>i,metadata:()=>l,toc:()=>c});var t=o(4848),s=o(8453);const i={},r="Notes for Windows and WSL Users",l={id:"usage/troubleshooting/windows",title:"Notes for Windows and WSL Users",description:"OpenDevin only supports Windows via WSL.",source:"@site/modules/usage/troubleshooting/windows.md",sourceDirName:"usage/troubleshooting",slug:"/usage/troubleshooting/windows",permalink:"/OpenDevin/modules/usage/troubleshooting/windows",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{},sidebar:"docsSidebar",previous:{title:"\ud83d\udea7 Troubleshooting",permalink:"/OpenDevin/modules/usage/troubleshooting/"},next:{title:"\ud83d\udcda Misc",permalink:"/OpenDevin/modules/usage/about"}},d={},c=[{value:"Troubleshooting",id:"troubleshooting",level:2},{value:"Failed to create opendevin user",id:"failed-to-create-opendevin-user",level:3},{value:"Poetry Installation",id:"poetry-installation",level:3},{value:"NoneType object has no attribute &#39;request&#39;",id:"nonetype-object-has-no-attribute-request",level:3}];function a(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",ul:"ul",...(0,s.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"notes-for-windows-and-wsl-users",children:"Notes for Windows and WSL Users"}),"\n",(0,t.jsxs)(n.p,{children:["OpenDevin only supports Windows via ",(0,t.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/windows/wsl/install",children:"WSL"}),".\nPlease be sure to run all commands inside your WSL terminal."]}),"\n",(0,t.jsx)(n.h2,{id:"troubleshooting",children:"Troubleshooting"}),"\n",(0,t.jsx)(n.h3,{id:"failed-to-create-opendevin-user",children:"Failed to create opendevin user"}),"\n",(0,t.jsxs)(n.p,{children:["If you encounter the following error during setup: ",(0,t.jsx)(n.code,{children:"Exception: Failed to create opendevin user in sandbox: b'useradd: UID 0 is not unique\\n'"}),"\nYou can resolve it by running:\n",(0,t.jsx)(n.code,{children:" export SANDBOX_USER_ID=1000 "})]}),"\n",(0,t.jsx)(n.h3,{id:"poetry-installation",children:"Poetry Installation"}),"\n",(0,t.jsxs)(n.p,{children:["If you face issues running Poetry even after installing it during the build process, you may need to add its binary path to your environment:\n",(0,t.jsx)(n.code,{children:' export PATH="$HOME/.local/bin:$PATH" '})]}),"\n",(0,t.jsx)(n.h3,{id:"nonetype-object-has-no-attribute-request",children:"NoneType object has no attribute 'request'"}),"\n",(0,t.jsxs)(n.p,{children:["If you experiencing issues related to networking, such as ",(0,t.jsx)(n.code,{children:"NoneType object has no attribute 'request'"})," when executing ",(0,t.jsx)(n.code,{children:"make run"}),", you may need to configure your WSL2 networking settings. Follow these steps:"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Open or create the ",(0,t.jsx)(n.code,{children:".wslconfig"})," file located at ",(0,t.jsx)(n.code,{children:"C:\\Users\\%username%\\.wslconfig"})," on your Windows host machine."]}),"\n",(0,t.jsxs)(n.li,{children:["Add the following configuration to the ",(0,t.jsx)(n.code,{children:".wslconfig"})," file:"]}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{children:"[wsl2]\nnetworkingMode=mirrored\nlocalhostForwarding=true\n"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Save the ",(0,t.jsx)(n.code,{children:".wslconfig"})," file."]}),"\n",(0,t.jsxs)(n.li,{children:["Restart WSL2 completely by exiting any running WSL2 instances and executing the command ",(0,t.jsx)(n.code,{children:"wsl --shutdown"})," in your command prompt or terminal."]}),"\n",(0,t.jsxs)(n.li,{children:["After restarting WSL, attempt to execute ",(0,t.jsx)(n.code,{children:"make run"})," again. The networking issue should be resolved."]}),"\n"]})]})}function u(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(a,{...e})}):a(e)}},8453:(e,n,o)=>{o.d(n,{R:()=>r,x:()=>l});var t=o(6540);const s={},i=t.createContext(s);function r(e){const n=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),t.createElement(i.Provider,{value:n},e.children)}}}]);
-1
View File
@@ -1 +0,0 @@
"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[5632],{190:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>i,default:()=>u,frontMatter:()=>r,metadata:()=>a,toc:()=>p});var o=t(4848),s=t(8453);const r={sidebar_label:"run",title:"opendevin.observation.run"},i=void 0,a={id:"python/opendevin/observation/run",title:"opendevin.observation.run",description:"CmdOutputObservation Objects",source:"@site/modules/python/opendevin/observation/run.md",sourceDirName:"python/opendevin/observation",slug:"/python/opendevin/observation/run",permalink:"/OpenDevin/modules/python/opendevin/observation/run",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{sidebar_label:"run",title:"opendevin.observation.run"},sidebar:"apiSidebar",previous:{title:"recall",permalink:"/OpenDevin/modules/python/opendevin/observation/recall"},next:{title:"process",permalink:"/OpenDevin/modules/python/opendevin/sandbox/docker/process"}},c={},p=[{value:"CmdOutputObservation Objects",id:"cmdoutputobservation-objects",level:2}];function d(e){const n={code:"code",h2:"h2",p:"p",pre:"pre",...(0,s.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h2,{id:"cmdoutputobservation-objects",children:"CmdOutputObservation Objects"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-python",children:"@dataclass\nclass CmdOutputObservation(Observation)\n"})}),"\n",(0,o.jsx)(n.p,{children:"This data class represents the output of a command."})]})}function u(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>i,x:()=>a});var o=t(6540);const s={},r=o.createContext(s);function i(e){const n=o.useContext(r);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),o.createElement(r.Provider,{value:n},e.children)}}}]);

Some files were not shown because too many files have changed in this diff Show More