From 59ecf5515e2ebecb28e86da43249b506d744bc86 Mon Sep 17 00:00:00 2001 From: Graham Neubig Date: Wed, 6 Aug 2025 13:33:12 -0400 Subject: [PATCH] Promote OpenHands LLM provider as the recommended option (#10108) Co-authored-by: openhands --- docs/docs.json | 2 +- docs/usage/local-setup.mdx | 10 ++++++++++ frontend/__tests__/routes/llm-settings.test.tsx | 8 ++++---- frontend/src/mocks/handlers.ts | 1 + frontend/src/services/settings.ts | 2 +- 5 files changed, 17 insertions(+), 6 deletions(-) diff --git a/docs/docs.json b/docs/docs.json index 41fef71789..61f8455bfb 100644 --- a/docs/docs.json +++ b/docs/docs.json @@ -71,6 +71,7 @@ { "group": "Providers", "pages": [ + "usage/llms/openhands-llms", "usage/llms/azure-llms", "usage/llms/google-llms", "usage/llms/groq", @@ -78,7 +79,6 @@ "usage/llms/litellm-proxy", "usage/llms/moonshot", "usage/llms/openai-llms", - "usage/llms/openhands-llms", "usage/llms/openrouter" ] } diff --git a/docs/usage/local-setup.mdx b/docs/usage/local-setup.mdx index 90a01148b8..86217b01ae 100644 --- a/docs/usage/local-setup.mdx +++ b/docs/usage/local-setup.mdx @@ -100,6 +100,16 @@ OpenHands requires an API key to access most language models. Here's how to get + + +1. [Log in to OpenHands Cloud](https://app.all-hands.dev). +2. Go to the Settings page and navigate to the `API Keys` tab. +3. Copy your `LLM API Key`. + +OpenHands provides access to state-of-the-art agentic coding models with competitive pricing. [Learn more about OpenHands LLM provider](/usage/llms/openhands-llms). + + + 1. [Create an Anthropic account](https://console.anthropic.com/). diff --git a/frontend/__tests__/routes/llm-settings.test.tsx b/frontend/__tests__/routes/llm-settings.test.tsx index 4415cfa8a2..578b6d21b7 100644 --- a/frontend/__tests__/routes/llm-settings.test.tsx +++ b/frontend/__tests__/routes/llm-settings.test.tsx @@ -47,7 +47,7 @@ describe("Content", () => { const apiKey = screen.getByTestId("llm-api-key-input"); await waitFor(() => { - expect(provider).toHaveValue("Anthropic"); + expect(provider).toHaveValue("OpenHands"); expect(model).toHaveValue("claude-sonnet-4-20250514"); expect(apiKey).toHaveValue(""); @@ -135,7 +135,7 @@ describe("Content", () => { ); const condensor = screen.getByTestId("enable-memory-condenser-switch"); - expect(model).toHaveValue("anthropic/claude-sonnet-4-20250514"); + expect(model).toHaveValue("openhands/claude-sonnet-4-20250514"); expect(baseUrl).toHaveValue(""); expect(apiKey).toHaveValue(""); expect(apiKey).toHaveProperty("placeholder", ""); @@ -537,7 +537,7 @@ describe("Form submission", () => { // select provider await userEvent.click(provider); - const providerOption = screen.getByText("Anthropic"); + const providerOption = screen.getByText("OpenHands"); await userEvent.click(providerOption); // select model @@ -550,7 +550,7 @@ describe("Form submission", () => { expect(saveSettingsSpy).toHaveBeenCalledWith( expect.objectContaining({ - llm_model: "anthropic/claude-sonnet-4-20250514", + llm_model: "openhands/claude-sonnet-4-20250514", llm_base_url: "", confirmation_mode: false, }), diff --git a/frontend/src/mocks/handlers.ts b/frontend/src/mocks/handlers.ts index 67c8a36022..d3c54b13b1 100644 --- a/frontend/src/mocks/handlers.ts +++ b/frontend/src/mocks/handlers.ts @@ -112,6 +112,7 @@ const openHandsHandlers = [ "gpt-4o-mini", "anthropic/claude-3.5", "anthropic/claude-sonnet-4-20250514", + "openhands/claude-sonnet-4-20250514", "sambanova/Meta-Llama-3.1-8B-Instruct", ]), ), diff --git a/frontend/src/services/settings.ts b/frontend/src/services/settings.ts index 0ec0e01ced..8588694645 100644 --- a/frontend/src/services/settings.ts +++ b/frontend/src/services/settings.ts @@ -3,7 +3,7 @@ import { Settings } from "#/types/settings"; export const LATEST_SETTINGS_VERSION = 5; export const DEFAULT_SETTINGS: Settings = { - LLM_MODEL: "anthropic/claude-sonnet-4-20250514", + LLM_MODEL: "openhands/claude-sonnet-4-20250514", LLM_BASE_URL: "", AGENT: "CodeActAgent", LANGUAGE: "en",