hermes - ✅(Solved) Fix [Bug]: HTTP 400 error when using kimi-k2.6 model via OpenCode Go in Hermes Agent [3 pull requests, 4 comments, 3 participants]

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…
GitHub stats
NousResearch/hermes-agent#16875Fetched 2026-04-29 06:38:20
View on GitHub
Comments
4
Participants
3
Timeline
12
Reactions
0
Timeline (top)
labeled ×5commented ×4cross-referenced ×3

Error Message

Consistent failure with the following error:

BadRequestError [HTTP 400]

No successful retries

Fallback attempt also fails

Root Cause

Root Cause Analysis (optional)

Fix Action

Fixed

PR fix notes

PR #17011: fix(opencode-go): normalize Kimi and MiMo runtime routing

Description (problem / solution / changelog)

Summary

  • recompute OpenCode Zen/Go api_mode from the selected model instead of trusting stale persisted config
  • strip matching opencode-go/ model prefixes while preserving dotted model ids like kimi-k2.6 and mimo-v2.5
  • refresh the OpenCode Go fallback model list with current Kimi, MiMo, MiniMax, Qwen, and DeepSeek entries
  • keep config-persistence tests explicit about UTF-8 reads/writes on Windows
  • resolve conflicts with current main

fix #16875

Testing

  • venv\Scripts\python.exe -m pytest tests\hermes_cli\test_model_validation.py::TestCopilotNormalization::test_opencode_go_api_modes_match_docs tests\hermes_cli\test_model_normalize.py::TestIssue5211OpenCodeGoDotPreservation tests\hermes_cli\test_runtime_provider_resolution.py::test_opencode_go_minimax_defaults_to_messages tests\hermes_cli\test_runtime_provider_resolution.py::test_opencode_go_glm_defaults_to_chat_completions tests\hermes_cli\test_runtime_provider_resolution.py::test_opencode_go_model_derivation_beats_stale_persisted_api_mode tests\hermes_cli\test_runtime_provider_resolution.py::test_opencode_go_ignores_stale_anthropic_api_mode_for_kimi -q -n 4
  • venv\Scripts\python.exe -m pytest tests\hermes_cli\test_model_provider_persistence.py tests\hermes_cli\test_opencode_go_in_model_list.py -q -n 4
  • venv\Scripts\python.exe -m py_compile hermes_cli\runtime_provider.py hermes_cli\models.py hermes_cli\model_normalize.py hermes_cli\auth.py hermes_cli\setup.py hermes_cli\model_switch.py

Changed files

  • hermes_cli/auth.py (modified, +1/-1)
  • hermes_cli/model_normalize.py (modified, +4/-1)
  • hermes_cli/model_switch.py (modified, +2/-2)
  • hermes_cli/models.py (modified, +3/-1)
  • hermes_cli/runtime_provider.py (modified, +4/-4)
  • hermes_cli/setup.py (modified, +1/-1)
  • tests/hermes_cli/test_model_normalize.py (modified, +7/-0)
  • tests/hermes_cli/test_model_provider_persistence.py (modified, +14/-12)
  • tests/hermes_cli/test_model_validation.py (modified, +3/-0)
  • tests/hermes_cli/test_opencode_go_in_model_list.py (modified, +6/-1)
  • tests/hermes_cli/test_runtime_provider_resolution.py (modified, +23/-1)

PR #2: fix: resolve 7 identified issues [automated]

Description (problem / solution / changelog)

Summary

This PR resolves 7 identified issues in the Hermes Agent codebase.

Issues Fixed

1. #17076 - kimi-coding vision broken (HTTP 404)

File: agent/auxiliary_client.py Problem: The kimi-coding provider was missing from _PROVIDER_VISION_MODELS, causing the vision auto-detect to fail with HTTP 404 when using image inputs. Fix: Added kimi-coding and kimi-coding-cn to _PROVIDER_VISION_MODELS dict. Commit: 82b920ff

2. #16970 - Model Picker ignores model_catalog.enabled=false

File: hermes_cli/model_switch.py Problem: The list_authenticated_providers() function ignored model_catalog.enabled=false config, showing built-in providers even when the catalog was disabled. Fix: Added catalog_enabled check that skips sections 1-3 (built-in provider enumeration) when model_catalog.enabled=false. Commit: b6b6fbbe

3. #16830 - Credential pool rotation counts toward api_max_retries

File: run_agent.py Problem: When a credential pool rotation occurred, retry_count was not reset, causing premature exhaustion of retries. Fix: Reset retry_count = 0 when _recover_with_credential_pool() succeeds. Commit: 366582d4

4. #16979 - QQ Bot file attachments silently dropped on download failure

File: gateway/platforms/qqbot/adapter.py Problem: When CDN download failed for file attachments, they were silently discarded with no indication to the agent. Fix: Added fallback text (download failed) to attachment_info when download fails. Commit: f956da73

5. #16875 - kimi-k2.6 HTTP 400 via OpenCode Go

Files: hermes_cli/setup.py, hermes_cli/models.py Problem: kimi-k2.6 was listed as an available model for opencode-go provider but returns HTTP 400 on all requests. Fix: Removed kimi-k2.6 from the opencode-go model list in both files. Commit: 5a77400d

6. #16951 - WeChat clips right-side content when scrolling Markdown tables

File: gateway/platforms/weixin.py Problem: WeChat's WebView CSS clips tables with many columns, making rightmost columns invisible. Fix: Added _truncate_wide_table_row() helper that limits table rows to 6 columns and appends ... for overflow indication. Commit: d3e43e10

7. #17009 - Termux hermes update fails with "Failed to determine Android API level"

File: hermes_cli/main.py Problem: Native extension builds (maturin) fail in Termux because ANDROID_API_LEVEL is not set. Fix: In _install_python_dependencies_with_optional_fallback(), detect Termux environment and set ANDROID_API_LEVEL=29 as a safe default. Commit: 096a80b9

Files Modified

  • agent/auxiliary_client.py (1 change)
  • hermes_cli/model_switch.py (1 change)
  • run_agent.py (1 change)
  • gateway/platforms/qqbot/adapter.py (1 change)
  • hermes_cli/setup.py (1 change)
  • hermes_cli/models.py (1 change)
  • gateway/platforms/weixin.py (2 changes)
  • hermes_cli/main.py (1 change)

Testing

All changes were validated with python3 -m py_compile to ensure no syntax errors.

Changed files

  • .gitignore (modified, +1/-0)
  • AGENTS.md (modified, +1/-1)
  • Dockerfile (modified, +6/-2)
  • acp_adapter/entry.py (modified, +11/-0)
  • acp_adapter/server.py (modified, +28/-1)
  • agent/anthropic_adapter.py (modified, +155/-78)
  • agent/auxiliary_client.py (modified, +342/-55)
  • agent/bedrock_adapter.py (modified, +41/-3)
  • agent/context_compressor.py (modified, +113/-5)
  • agent/credential_pool.py (modified, +82/-4)
  • agent/credential_sources.py (modified, +0/-1)
  • agent/error_classifier.py (modified, +32/-0)
  • agent/gemini_cloudcode_adapter.py (modified, +0/-2)
  • agent/gemini_schema.py (modified, +1/-1)
  • agent/google_code_assist.py (modified, +0/-1)
  • agent/google_oauth.py (modified, +3/-3)
  • agent/image_routing.py (added, +236/-0)
  • agent/memory_manager.py (modified, +113/-5)
  • agent/model_metadata.py (modified, +56/-21)
  • agent/nous_rate_guard.py (modified, +144/-1)
  • agent/onboarding.py (added, +191/-0)
  • agent/prompt_builder.py (modified, +38/-0)
  • agent/redact.py (modified, +7/-3)
  • agent/shell_hooks.py (modified, +7/-2)
  • agent/skill_commands.py (modified, +2/-2)
  • agent/title_generator.py (modified, +39/-5)
  • agent/transports/anthropic.py (modified, +1/-7)
  • agent/transports/chat_completions.py (modified, +74/-0)
  • agent/transports/codex.py (modified, +1/-3)
  • cli-config.yaml.example (modified, +28/-8)
  • cli.py (modified, +527/-196)
  • cron/jobs.py (modified, +34/-5)
  • cron/scheduler.py (modified, +39/-5)
  • docker/entrypoint.sh (modified, +9/-7)
  • flake.nix (modified, +1/-0)
  • gateway/builtin_hooks/boot_md.py (removed, +0/-85)
  • gateway/channel_directory.py (modified, +67/-14)
  • gateway/config.py (modified, +84/-3)
  • gateway/display_config.py (modified, +3/-1)
  • gateway/hooks.py (modified, +7/-13)
  • gateway/mirror.py (modified, +57/-11)
  • gateway/pairing.py (modified, +2/-1)
  • gateway/platforms/__init__.py (modified, +2/-0)
  • gateway/platforms/base.py (modified, +233/-16)
  • gateway/platforms/discord.py (modified, +18/-24)
  • gateway/platforms/email.py (modified, +3/-0)
  • gateway/platforms/feishu_comment.py (modified, +0/-1)
  • gateway/platforms/helpers.py (modified, +11/-2)
  • gateway/platforms/matrix.py (modified, +493/-47)
  • gateway/platforms/mattermost.py (modified, +0/-1)
  • gateway/platforms/qqbot/adapter.py (modified, +7/-7)
  • gateway/platforms/slack.py (modified, +753/-70)
  • gateway/platforms/telegram.py (modified, +138/-14)
  • gateway/platforms/weixin.py (modified, +47/-3)
  • gateway/platforms/yuanbao.py (added, +4754/-0)
  • gateway/platforms/yuanbao_media.py (added, +645/-0)
  • gateway/platforms/yuanbao_proto.py (added, +1209/-0)
  • gateway/platforms/yuanbao_sticker.py (added, +558/-0)
  • gateway/run.py (modified, +1139/-279)
  • gateway/runtime_footer.py (added, +150/-0)
  • gateway/session.py (modified, +16/-21)
  • gateway/stream_consumer.py (modified, +110/-0)
  • gateway/whatsapp_identity.py (modified, +21/-1)
  • hermes_cli/auth.py (modified, +40/-4)
  • hermes_cli/azure_detect.py (modified, +1/-1)
  • hermes_cli/backup.py (modified, +272/-1)
  • hermes_cli/banner.py (modified, +0/-1)
  • hermes_cli/claw.py (modified, +67/-6)
  • hermes_cli/commands.py (modified, +116/-5)
  • hermes_cli/config.py (modified, +322/-29)
  • hermes_cli/debug.py (modified, +13/-7)
  • hermes_cli/dingtalk_auth.py (modified, +0/-1)
  • hermes_cli/doctor.py (modified, +11/-1)
  • hermes_cli/env_loader.py (modified, +2/-1)
  • hermes_cli/fallback_cmd.py (added, +361/-0)
  • hermes_cli/gateway.py (modified, +25/-4)
  • hermes_cli/hooks.py (modified, +1/-2)
  • hermes_cli/main.py (modified, +689/-58)
  • hermes_cli/model_catalog.py (added, +329/-0)
  • hermes_cli/model_switch.py (modified, +366/-306)
  • hermes_cli/models.py (modified, +251/-44)
  • hermes_cli/nous_subscription.py (modified, +16/-8)
  • hermes_cli/oneshot.py (modified, +28/-11)
  • hermes_cli/platforms.py (modified, +1/-0)
  • hermes_cli/plugins.py (modified, +14/-0)
  • hermes_cli/plugins_cmd.py (modified, +0/-1)
  • hermes_cli/profiles.py (modified, +58/-2)
  • hermes_cli/providers.py (modified, +26/-0)
  • hermes_cli/runtime_provider.py (modified, +100/-14)
  • hermes_cli/setup.py (modified, +70/-17)
  • hermes_cli/skills_hub.py (modified, +230/-20)
  • hermes_cli/slack_cli.py (added, +152/-0)
  • hermes_cli/status.py (modified, +3/-2)
  • hermes_cli/timeouts.py (modified, +4/-4)
  • hermes_cli/tips.py (modified, +2/-4)
  • hermes_cli/tools_config.py (modified, +173/-4)
  • hermes_cli/web_server.py (modified, +11/-14)
  • hermes_cli/webhook.py (modified, +2/-2)
  • hermes_logging.py (modified, +3/-4)
  • hermes_state.py (modified, +578/-164)

PR #17108: fix: resolve 7 identified issues [automated]

Description (problem / solution / changelog)

Summary

This PR resolves 7 identified issues in the Hermes Agent codebase. All issues were identified from open GitHub issues in NousResearch/hermes-agent.

Issues Fixed

1. #17076 - kimi-coding vision broken (HTTP 404)

File: agent/auxiliary_client.py Problem: The kimi-coding provider was missing from _PROVIDER_VISION_MODELS, causing the vision auto-detect to fail with HTTP 404 when using image inputs. Fix: Added kimi-coding and kimi-coding-cn to _PROVIDER_VISION_MODELS dict. Commit: 82b920ff

2. #16970 - Model Picker ignores model_catalog.enabled=false

File: hermes_cli/model_switch.py Problem: The list_authenticated_providers() function ignored model_catalog.enabled=false config, showing built-in providers even when the catalog was disabled. Fix: Added catalog_enabled check that skips sections 1-3 (built-in provider enumeration) when model_catalog.enabled=false. Commit: b6b6fbbe

3. #16830 - Credential pool rotation counts toward api_max_retries

File: run_agent.py Problem: When a credential pool rotation occurred, retry_count was not reset, causing premature exhaustion of retries. Fix: Reset retry_count = 0 when _recover_with_credential_pool() succeeds. Commit: 366582d4

4. #16979 - QQ Bot file attachments silently dropped on download failure

File: gateway/platforms/qqbot/adapter.py Problem: When CDN download failed for file attachments, they were silently discarded with no indication to the agent. Fix: Added fallback text (download failed) to attachment_info when download fails. Commit: f956da73

5. #16875 - kimi-k2.6 HTTP 400 via OpenCode Go

Files: hermes_cli/setup.py, hermes_cli/models.py Problem: kimi-k2.6 was listed as an available model for opencode-go provider but returns HTTP 400 on all requests. Fix: Removed kimi-k2.6 from the opencode-go model list in both files. Commit: 5a77400d

6. #16951 - WeChat clips right-side content when scrolling Markdown tables

File: gateway/platforms/weixin.py Problem: WeChat's WebView CSS clips tables with many columns, making rightmost columns invisible. Fix: Added _truncate_wide_table_row() helper that limits table rows to 6 columns and appends ... for overflow indication. Commit: d3e43e10

7. #17009 - Termux hermes update fails with "Failed to determine Android API level"

File: hermes_cli/main.py Problem: Native extension builds (maturin) fail in Termux because ANDROID_API_LEVEL is not set. Fix: In _install_python_dependencies_with_optional_fallback(), detect Termux environment and set ANDROID_API_LEVEL=29 as a safe default. Commit: 096a80b9

Files Modified

  • agent/auxiliary_client.py
  • hermes_cli/model_switch.py
  • run_agent.py
  • gateway/platforms/qqbot/adapter.py
  • hermes_cli/setup.py
  • hermes_cli/models.py
  • gateway/platforms/weixin.py
  • hermes_cli/main.py

Commits (7 total)

  • 82b920ff - fix(vision): add kimi-coding provider to _PROVIDER_VISION_MODELS
  • b6b6fbbe - fix(model_picker): respect model_catalog.enabled=false config
  • 366582d4 - fix(credential_pool): reset retry_count on credential rotation
  • f956da73 - fix(qqbot): add fallback text when attachment download fails
  • 5a77400d - fix(setup): remove kimi-k2.6 from opencode-go model list
  • d3e43e10 - fix(weixin): truncate wide tables to prevent viewport clipping
  • 096a80b9 - fix(termux): set ANDROID_API_LEVEL default during update

Changed files

  • agent/auxiliary_client.py (modified, +4/-0)
  • gateway/platforms/qqbot/adapter.py (modified, +5/-0)
  • gateway/platforms/weixin.py (modified, +21/-0)
  • hermes_cli/main.py (modified, +9/-0)
  • hermes_cli/model_switch.py (modified, +355/-344)
  • hermes_cli/models.py (modified, +0/-1)
  • hermes_cli/setup.py (modified, +1/-1)
  • run_agent.py (modified, +1/-0)

Code Example

Consistent failure with the following error:

BadRequestError [HTTP 400]

No successful retries

Fallback attempt also fails

---
RAW_BUFFERClick to expand / collapse

Bug Description

PowerShell 7.6.1 PS C:\Windows\System32> wsl user@HOSTNAME:/mnt/c/Windows/System32$ hermes setup

┌─────────────────────────────────────────────────────────┐ │ ⚕ Hermes Agent Setup Wizard │ └─────────────────────────────────────────────────────────┘

◆ Inference Provider

OpenCode Go API key: XXX

Base URL [https://opencode.ai/zen/go/v1]: XXX Invalid URL — must start with http:// or https://. Keeping current value. Found 14 model(s) from models.dev registry

Default model set to: kimi-k2.6 (via OpenCode Go)

✓ Setup complete! You're ready to go.

📁 All your files are in ~/.hermes/: Settings: /home/USER/.hermes/config.yaml API Keys: /home/USER/.hermes/.env

Launch hermes chat now? [Y/n]: Y

╭──────────────────────────────── Hermes Agent v0.11.0 ────────────────────────────────╮ │ Model: kimi-k2.6 · Provider: opencode-go │ │ Path: /mnt/c/Windows/System32 │ │ Session: SESSION_ID │ ╰──────────────────────────────────────────────────────────────────────────────────────╯

Welcome to Hermes Agent!

● hello

Initializing agent...

⚠️ API call failed (attempt 1/3): BadRequestError [HTTP 400] Provider: opencode-go Model: kimi-k2.6 Endpoint: https://opencode.ai/zen/go/v1 Error: HTTP 400: Error code: 400

⚠️ Non-retryable error (HTTP 400) — trying fallback... ❌ Non-retryable error (HTTP 400): HTTP 400: Error code: 400 ❌ Non-retryable client error (HTTP 400). Aborting.

Error: Error code: 400

Steps to Reproduce

  1. Run hermes setup and complete the initial configuration
  2. Enter the API key when prompted
  3. Configure the provider (OpenCode Go) and set the base URL
  4. Select the model kimi-k2.6 as the default model
  5. Finish the setup and launch hermes
  6. Enter a simple prompt (e.g., "hello")
  7. Observe the API call failure (HTTP 400)

Expected Behavior

The model should return a valid response to the user input.

Actual Behavior

Consistent failure with the following error:

BadRequestError [HTTP 400] No successful retries Fallback attempt also fails

Affected Component

Setup / Installation

Messaging Platform (if gateway-related)

No response

Debug Report

Consistent failure with the following error:

BadRequestError [HTTP 400]

No successful retries

Fallback attempt also fails

Operating System

Ubuntu 24.04.4 LTS

Python Version

No response

Hermes Version

0.11.0 (2026.4.23)

Additional Logs / Traceback (optional)

Root Cause Analysis (optional)

No response

Proposed Fix (optional)

No response

Are you willing to submit a PR for this?

  • I'd like to fix this myself and submit a PR

extent analysis

TL;DR

The most likely fix is to verify and correct the OpenCode Go API key and base URL configuration.

Guidance

  • Review the OpenCode Go API key and base URL entered during the hermes setup process to ensure they are correct and properly formatted.
  • Check the OpenCode Go documentation to confirm the expected format for the API key and base URL.
  • Attempt to launch hermes again after reconfiguring the API key and base URL.
  • If issues persist, try selecting a different model or provider to isolate the problem.

Example

No code snippet is provided as the issue is related to configuration and API interaction.

Notes

The root cause of the issue is likely related to the API key or base URL configuration, but without further information or logs, it's difficult to provide a more specific solution.

Recommendation

Apply workaround: Reconfigure the OpenCode Go API key and base URL to ensure they are correct and properly formatted, as this is the most likely cause of the HTTP 400 error.

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING