Skip to content

fix: add kimi-for-coding model and update Kimi User-Agent#1039

Merged
teknium1 merged 3 commits intomainfrom
hermes/hermes-3a9bd319
Mar 12, 2026
Merged

fix: add kimi-for-coding model and update Kimi User-Agent#1039
teknium1 merged 3 commits intomainfrom
hermes/hermes-3a9bd319

Conversation

@teknium1
Copy link
Copy Markdown
Contributor

@teknium1 teknium1 commented Mar 12, 2026

Summary

Improves the Kimi / Moonshot model setup experience. Previously users had to manually type base URLs and model names (leading to misconfiguration). Now the endpoint is auto-detected from the API key.

Before

hermes model → Kimi / Moonshot
  API key: sk-kimi-xxx... ✓
  Base URL [https://api.moonshot.ai/v1]: ← user had to manually type the coding URL
  Model name: ← user had to manually type 'kimi-for-coding'

After

hermes model → Kimi / Moonshot
  API key: sk-kimi-xxx... ✓
  Detected Kimi Coding Plan key → https://api.kimi.com/coding/v1
  Select default model:
  → kimi-for-coding
    kimi-k2.5
    kimi-k2-thinking
    kimi-k2-thinking-turbo

Changes

New dedicated _model_flow_kimi() (hermes_cli/main.py):

  • Removes the 'Base URL' prompt — auto-detects from key prefix:
    • sk-kimi-*api.kimi.com/coding/v1 (Kimi Coding Plan)
    • Other keys → api.moonshot.ai/v1 (legacy Moonshot)
  • Shows appropriate models for each endpoint
  • Clears stale KIMI_BASE_URL overrides

Model catalog (3 files):

  • Added kimi-for-coding and kimi-k2-thinking-turbo to models.py, main.py, and model_metadata.py

User-Agent (run_agent.py):

  • Updated from KimiCLI/1.0 to KimiCLI/1.3 (Kimi's coding endpoint whitelists known agents)

How it works

User just needs KIMI_API_KEY=sk-kimi-xxx in .env, then hermes model → select Kimi → everything auto-configures.

…traction

Three issues with the /reasoning command:

1. Output interleaving: The command echo used print() while feedback
   used _cprint(), causing them to render out-of-order under
   prompt_toolkit's patch_stdout. Changed echo to use _cprint() so
   all output renders through the same path in correct order.

2. Reasoning display not working: /reasoning show toggled a flag
   but reasoning never appeared for models that embed thinking in
   inline <think> blocks rather than structured API fields. Added
   fallback extraction in _build_assistant_message to capture
   <think> block content as reasoning when no structured reasoning
   fields (reasoning, reasoning_content, reasoning_details) are
   present. This feeds into both the reasoning callback (during
   tool loops) and the post-response reasoning box display.

3. Feedback clarity: Added checkmarks to confirm actions, persisted
   show/hide to config (was session-only before), and aligned the
   status display for readability.

Tests: 7 new tests for inline think block extraction (41 total).
The /reasoning command only existed in the CLI — messaging platforms
had no way to view or change reasoning settings. This adds:

1. /reasoning command handler in the gateway:
   - No args: shows current effort level and display state
   - /reasoning <level>: sets reasoning effort (none/low/medium/high/xhigh)
   - /reasoning show|hide: toggles reasoning display in responses
   - All changes saved to config.yaml immediately

2. Reasoning display in gateway responses:
   - When show_reasoning is enabled, prepends a 'Reasoning' block
     with the model's last_reasoning content before the response
   - Collapses long reasoning (>15 lines) to keep messages readable
   - Uses last_reasoning from run_conversation result dict

3. Plumbing:
   - Added _show_reasoning attribute loaded from config at startup
   - Propagated last_reasoning through _run_agent return dict
   - Added /reasoning to help text and known_commands set
   - Uses getattr for _show_reasoning to handle test stubs
@teknium1 teknium1 force-pushed the hermes/hermes-3a9bd319 branch from 75db1ed to ca4bd25 Compare March 12, 2026 12:52
… models

Kimi Coding Plan setup:
- New dedicated _model_flow_kimi() replaces the generic API-key flow
  for kimi-coding. Removes the confusing 'Base URL' prompt entirely —
  the endpoint is auto-detected from the API key prefix:
    sk-kimi-* → api.kimi.com/coding/v1 (Kimi Coding Plan)
    other     → api.moonshot.ai/v1 (legacy Moonshot)

- Shows appropriate models for each endpoint:
    Coding Plan: kimi-for-coding, kimi-k2.5, kimi-k2-thinking, kimi-k2-thinking-turbo
    Moonshot:    full model catalog

- Clears any stale KIMI_BASE_URL override so runtime auto-detection
  via _resolve_kimi_base_url() works correctly.

Model catalog updates:
- Added kimi-for-coding (primary Coding Plan model) and kimi-k2-thinking-turbo
  to models.py, main.py _PROVIDER_MODELS, and model_metadata.py context windows.

- Updated User-Agent from KimiCLI/1.0 to KimiCLI/1.3 (Kimi's coding
  endpoint whitelists known coding agents via User-Agent sniffing).
@teknium1 teknium1 force-pushed the hermes/hermes-3a9bd319 branch from ca4bd25 to df0745f Compare March 12, 2026 12:57
@teknium1 teknium1 merged commit e9c3317 into main Mar 12, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

1 participant