Spaces:
Build error
Build error
| # Development Guide | |
| This guide is for people working on OpenHands and editing the source code. | |
| If you wish to contribute your changes, check out the | |
| [CONTRIBUTING.md](https://github.com/All-Hands-AI/OpenHands/blob/main/CONTRIBUTING.md) | |
| on how to clone and setup the project initially before moving on. Otherwise, | |
| you can clone the OpenHands project directly. | |
| ## Start the Server for Development | |
| ### 1. Requirements | |
| - Linux, Mac OS, or [WSL on Windows](https://learn.microsoft.com/en-us/windows/wsl/install) [Ubuntu >= 22.04] | |
| - [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.12 | |
| - [NodeJS](https://nodejs.org/en/download/package-manager) >= 22.x | |
| - [Poetry](https://python-poetry.org/docs/#installing-with-the-official-installer) >= 1.8 | |
| - OS-specific dependencies: | |
| - Ubuntu: build-essential => `sudo apt-get install build-essential python3.12-dev` | |
| - WSL: netcat => `sudo apt-get install netcat` | |
| Make sure you have all these dependencies installed before moving on to `make build`. | |
| #### Dev container | |
| There is a [dev container](https://containers.dev/) available which provides a | |
| pre-configured environment with all the necessary dependencies installed if you | |
| are using a [supported editor or tool](https://containers.dev/supporting). For | |
| example, if you are using Visual Studio Code (VS Code) with the | |
| [Dev Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers) | |
| extension installed, you can open the project in a dev container by using the | |
| _Dev Container: Reopen in Container_ command from the Command Palette | |
| (Ctrl+Shift+P). | |
| #### Develop without sudo access | |
| If you want to develop without system admin/sudo access to upgrade/install `Python` and/or `NodeJs`, you can use | |
| `conda` or `mamba` to manage the packages for you: | |
| ```bash | |
| # Download and install Mamba (a faster version of conda) | |
| curl -L -O "https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-$(uname)-$(uname -m).sh" | |
| bash Miniforge3-$(uname)-$(uname -m).sh | |
| # Install Python 3.12, nodejs, and poetry | |
| mamba install python=3.12 | |
| mamba install conda-forge::nodejs | |
| mamba install conda-forge::poetry | |
| ``` | |
| ### 2. Build and Setup The Environment | |
| Begin by building the project which includes setting up the environment and installing dependencies. This step ensures | |
| that OpenHands is ready to run on your system: | |
| ```bash | |
| make build | |
| ``` | |
| ### 3. Configuring the Language Model | |
| OpenHands supports a diverse array of Language Models (LMs) through the powerful [litellm](https://docs.litellm.ai) library. | |
| To configure the LM of your choice, run: | |
| ```bash | |
| make setup-config | |
| ``` | |
| This command will prompt you to enter the LLM API key, model name, and other variables ensuring that OpenHands is | |
| tailored to your specific needs. Note that the model name will apply only when you run headless. If you use the UI, | |
| please set the model in the UI. | |
| Note: If you have previously run OpenHands using the docker command, you may have already set some environmental | |
| variables in your terminal. The final configurations are set from highest to lowest priority: | |
| Environment variables > config.toml variables > default variables | |
| **Note on Alternative Models:** | |
| See [our documentation](https://docs.all-hands.dev/usage/llms) for recommended models. | |
| ### 4. Running the application | |
| #### Option A: Run the Full Application | |
| Once the setup is complete, this command starts both the backend and frontend servers, allowing you to interact with OpenHands: | |
| ```bash | |
| make run | |
| ``` | |
| #### Option B: 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. LLM Debugging | |
| If you encounter any issues with the Language Model (LM) or you're simply curious, export DEBUG=1 in the environment and restart the backend. | |
| OpenHands will log the prompts and responses in the logs/llm/CURRENT_DATE directory, allowing you to identify the causes. | |
| ### 7. Help | |
| Need help or info on available targets and commands? Use the help command for all the guidance you need with OpenHands. | |
| ```bash | |
| make help | |
| ``` | |
| ### 8. Testing | |
| To run tests, refer to the following: | |
| #### Unit tests | |
| ```bash | |
| poetry run pytest ./tests/unit/test_*.py | |
| ``` | |
| ### 9. Add or update dependency | |
| 1. Add your dependency in `pyproject.toml` or use `poetry add xxx`. | |
| 2. Update the poetry.lock file via `poetry lock --no-update`. | |
| ### 9. Use existing Docker image | |
| To reduce build time (e.g., if no changes were made to the client-runtime component), you can use an existing Docker | |
| container image by setting the SANDBOX_RUNTIME_CONTAINER_IMAGE environment variable to the desired Docker image. | |
| Example: `export SANDBOX_RUNTIME_CONTAINER_IMAGE=ghcr.io/all-hands-ai/runtime:0.41-nikolaik` | |
| ## Develop inside Docker container | |
| TL;DR | |
| ```bash | |
| make docker-dev | |
| ``` | |
| See more details [here](./containers/dev/README.md). | |
| If you are just interested in running `OpenHands` without installing all the required tools on your host. | |
| ```bash | |
| make docker-run | |
| ``` | |
| If you do not have `make` on your host, run: | |
| ```bash | |
| cd ./containers/dev | |
| ./dev.sh | |
| ``` | |
| You do need [Docker](https://docs.docker.com/engine/install/) installed on your host though. | |
| ## Key Documentation Resources | |
| Here's a guide to the important documentation files in the repository: | |
| - [/README.md](./README.md): Main project overview, features, and basic setup instructions | |
| - [/Development.md](./Development.md) (this file): Comprehensive guide for developers working on OpenHands | |
| - [/CONTRIBUTING.md](./CONTRIBUTING.md): Guidelines for contributing to the project, including code style and PR process | |
| - [/docs/DOC_STYLE_GUIDE.md](./docs/DOC_STYLE_GUIDE.md): Standards for writing and maintaining project documentation | |
| - [/openhands/README.md](./openhands/README.md): Details about the backend Python implementation | |
| - [/frontend/README.md](./frontend/README.md): Frontend React application setup and development guide | |
| - [/containers/README.md](./containers/README.md): Information about Docker containers and deployment | |
| - [/tests/unit/README.md](./tests/unit/README.md): Guide to writing and running unit tests | |
| - [/evaluation/README.md](./evaluation/README.md): Documentation for the evaluation framework and benchmarks | |
| - [/microagents/README.md](./microagents/README.md): Information about the microagents architecture and implementation | |
| - [/openhands/server/README.md](./openhands/server/README.md): Server implementation details and API documentation | |
| - [/openhands/runtime/README.md](./openhands/runtime/README.md): Documentation for the runtime environment and execution model | |