mirror of
https://github.com/OpenHands/OpenHands.git
synced 2026-10-07 17:28:03 +08:00
* fix: always send frontend's chosen default model to agent-server (#807) When the agent-server returns an empty model string (e.g. because no settings have been saved yet), the adapter's type guard accepted it as a valid string and forwarded it verbatim. The agent-server would then fall back to its SDK default ('gpt-5.5') rather than using the frontend's chosen default ('openhands/minimax-m2.7'). Fix: strengthen the guard in buildConfiguredOpenHandsAgentSettings to also reject empty/whitespace-only strings, so the frontend's own default is always sent explicitly: llm.model = typeof llm.model === 'string' && llm.model.trim().length > 0 ? llm.model : DEFAULT_SETTINGS.llm_model; While here: align the legacy V0 /api/options/models mock endpoint's default_model with DEFAULT_SETTINGS (was incorrectly set to claude-opus; should be minimax-m2.7 to match the rest of the defaults), and document the canonical default model and the two-location update rule in AGENTS.md. Closes #807 Co-authored-by: openhands <openhands@all-hands.dev> * refactor(tests): parameterize llm.model fallback tests + add spec + AGENTS.md - Extract getModelFrom() helper to eliminate repeated as unknown as ModelPayload casts - Consolidate 7 individual fallback it() blocks into two it.each() groups: (1) agent_settings variants (undefined/empty/whitespace/no-llm-block/empty-settings) (2) encryptedAgentSettings variants (empty model / empty object) - Rename @spec annotation from BM-807 to LLD-001 (not a backend-management spec) - Add specs/llm-defaults.md with LLD-001 checklist - Add AGENTS.md note documenting canonical default model, its location, and the two-location update rule Co-authored-by: openhands <openhands@all-hands.dev> --------- Co-authored-by: openhands <openhands@all-hands.dev> Co-authored-by: hieptl <hieptl.developer@gmail.com>