Use DaoXE in OpenHands

OpenHands (formerly OpenDevin) is the open-source agent that plans, edits files, runs commands and proposes patches. Its LLM layer is LiteLLM — so any OpenAI-compatible endpoint drops straight in, DaoXE included.

Updated 2026-09-15

OpenHands runs a full engineering loop — planning, file edits, terminal commands, PRs. Its docs state it connects to any LLM LiteLLM supports, and the OpenAI-compatible path is exactly DaoXE's shape (cheapest APIs guide): a base URL, a key, and a model ID with the right prefix.

Why route OpenHands through DaoXE#

  • Agent-grade loops, your key. OpenHands' planner, editor and terminal tool calls all ride one provider — a DaoXE key covers hundreds of models from ~25 providers, so a strong model and a cheap one sit on the same balance.
  • Two profiles, one bill. Named LLM configurations let a strong model handle planning while a budget model does routine edits — without a second account anywhere.
  • Easy to audit. An agent's output is diffs and command runs — ideal ground truth for checking whether a cheap endpoint is serving you the real model (detect model swapping).

Set it up in OpenHands#

  1. Open the advanced LLM panel. In the OpenHands UI go to Settings → LLM, click "see advanced settings" and enable the Advanced toggle — the Base URL field only exists there.
  2. Prefix the model ID. Set Custom Model to openai/ + the exact ID from DaoXE's GET /v1/models — e.g. openai/YOUR_EXACT_MODEL_ID. OpenHands routes through LiteLLM, and openai/… is its provider prefix for any OpenAI-compatible server.
  3. Point it at DaoXE. Base URL: https://daoxe.com/v1. API Key: your DaoXE key. Headless runs read the same trio via LLM_MODEL / LLM_BASE_URL / LLM_API_KEY.
  4. Sanity-check the loop. Ask for a small real task — list files, patch a typo — and confirm the tool calls actually execute. If the agent "acts like a chatbot", the docs' own fix is a stronger model or a larger context window, not a settings hunt.
bash
# Headless / CLI runs read the same trio
export LLM_MODEL="openai/YOUR_EXACT_MODEL_ID"   # the openai/ prefix is required
export LLM_BASE_URL="https://daoxe.com/v1"
export LLM_API_KEY="***"

Caveats worth knowing

The openai/ prefix is not decoration: OpenHands resolves the provider from it — without the prefix the profile lands on the wrong path, and the docs' troubleshooting table lists "Provider is not recognized" for exactly this. What follows the prefix must match an id returned by your endpoint's GET /v1/models; DaoXE model IDs are account-scoped, so read them, don't guess. The base URL is reached from the backend, not your browser: OpenHands commonly runs in Docker, where 127.0.0.1 is the container — that's why the docs' local-server examples use http://host.docker.internal:<port>/v1. DaoXE's hosted URL works from a container as long as outbound HTTPS isn't blocked. Weak models stall the loop: the docs recommend the strongest model you can afford; a model that ignores tool calls looks like a gateway bug but is a model problem. Named configs inherit: [llm.<profile>] sections in config.toml copy everything from the default [llm] block, so one base URL feeds all your profiles. More clients: client setup notes.

Verify you actually get the model#

Prove the endpoint works before blaming the client — if this fails, no setting will fix it:

bash
export DAOXE_API_KEY="your_api_key"

# List the exact model IDs your account can call
curl --fail-with-body --show-error --silent \
  https://daoxe.com/v1/models \
  -H "Authorization: Bearer ${DAOXE_API_KEY}"

Prove the endpoint outside the agent first, then diff a hard task against the official API at temperature 0:

bash
curl --fail-with-body --show-error --silent \
  https://daoxe.com/v1/chat/completions \
  -H "Authorization: Bearer ${DAOXE_API_KEY}" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "YOUR_EXACT_MODEL_ID",
    "max_tokens": 64,
    "messages": [{"role": "user", "content": "Say hello in one sentence."}]
  }'

Verify us — don't trust us

Point the open benchmark at DaoXE and at the official API and compare at temperature 0. Then learn to detect model swapping so a cheaper endpoint can't quietly swap you to a smaller model.

Frequently asked questions#

Can OpenHands use DaoXE?

Yes — in Settings → LLM enable Advanced, set Custom Model to openai/YOUR_EXACT_MODEL_ID, Base URL https://daoxe.com/v1, and paste your DaoXE key. Technically it's LiteLLM's openai/ provider pointed at DaoXE.

Why must the model ID start with openai/?

That prefix is how OpenHands (via LiteLLM) picks "any OpenAI-compatible server at this base URL". The remainder must equal an exact ID from GET /v1/models or you get wrong-model errors.

OpenHands can't reach my base URL — why?

The URL is contacted by OpenHands' backend, typically inside Docker, where localhost is the container. For the hosted DaoXE endpoint check outbound HTTPS/proxy settings in the container; the docs' host.docker.internal pattern is for locally-served model servers.

What does it cost?

Per-model, account-scoped — live pricing; top-up is a flat 1 RMB = $1 of credit on every payment method.

Try DaoXE — and benchmark it yourself

One key for GPT, Claude, Gemini, DeepSeek and more. Point the open benchmark at us and compare — don't take our word for it.