Skip to content

fix(kimi): omit temperature entirely for Kimi/Moonshot models - #13157

Merged
teknium1 merged 1 commit into
mainfrom
hermes/hermes-d7fc4ba8
Apr 20, 2026
Merged

fix(kimi): omit temperature entirely for Kimi/Moonshot models#13157
teknium1 merged 1 commit into
mainfrom
hermes/hermes-d7fc4ba8

Conversation

@teknium1

Copy link
Copy Markdown
Contributor

Summary

Kimi's gateway now selects the correct temperature server-side. Sending any temperature value — even the previously correct one — conflicts with gateway-managed defaults. This strips the temperature key from API kwargs entirely for all kimi-* models.

Inspired by PR #13137 (@kshitijk4poor) which removed the forced values but still passed the caller's temperature through. This goes further: no temperature sent at all.

Changes

  • agent/auxiliary_client.py: OMIT_TEMPERATURE sentinel + _is_kimi_model() prefix check. _build_call_kwargs() strips temperature when sentinel returned.
  • run_agent.py: _build_api_kwargs, flush_memories, and summary generation paths handle the sentinel.
  • trajectory_compressor.py: Direct client calls conditionally include temperature via kwargs dict.
  • mini_swe_runner.py: Same sentinel handling.
  • 6 test files: All 'forces temperature X' assertions → 'temperature not in kwargs'.

Validation

Before After
kimi-for-coding temp 0.6 forced omitted
kimi-k2.5 @ moonshot.ai 1.0 forced omitted
kimi-k2-thinking 1.0 forced omitted
gpt-5.4 temp=0.3 0.3 preserved 0.3 preserved

468 tests pass across all 6 affected test files. E2E verified with real imports.

Kimi's gateway selects the correct temperature server-side based on the
active mode (thinking -> 1.0, non-thinking -> 0.6).  Sending any
temperature value — even the previously "correct" one — conflicts with
gateway-managed defaults.

Replaces the old approach of forcing specific temperature values (0.6
for non-thinking, 1.0 for thinking) with an OMIT_TEMPERATURE sentinel
that tells all call sites to strip the temperature key from API kwargs
entirely.

Changes:
- agent/auxiliary_client.py: OMIT_TEMPERATURE sentinel, _is_kimi_model()
  prefix check (covers all kimi-* models), _fixed_temperature_for_model()
  returns sentinel for kimi models.  _build_call_kwargs() strips temp.
- run_agent.py: _build_api_kwargs, flush_memories, and summary generation
  paths all handle the sentinel by popping/omitting temperature.
- trajectory_compressor.py: _effective_temperature_for_model returns None
  for kimi (sentinel mapped), direct client calls use kwargs dict to
  conditionally include temperature.
- mini_swe_runner.py: same sentinel handling via wrapper function.
- 6 test files updated: all 'forces temperature X' assertions replaced
  with 'temperature not in kwargs' assertions.

Net: -76 lines (171 added, 247 removed).
Inspired by PR #13137 (@kshitijk4poor).
@github-actions

Copy link
Copy Markdown
Contributor

🚨 CRITICAL Supply Chain Risk Detected

This PR contains a pattern that has been used in real supply chain attacks. A maintainer must review the flagged code carefully before merging.

🚨 CRITICAL: Install-hook file added or modified

These files can execute code during package installation or interpreter startup.

Files:

hermes_cli/setup.py

Scanner only fires on high-signal indicators: .pth files, base64+exec/eval combos, subprocess with encoded commands, or install-hook files. Low-signal warnings were removed intentionally — if you're seeing this comment, the finding is worth inspecting.

@teknium1
teknium1 merged commit 3cba81e into main Apr 20, 2026
3 of 6 checks passed
@teknium1
teknium1 deleted the hermes/hermes-d7fc4ba8 branch April 20, 2026 19:23
pefontana added a commit to pefontana/hermes-agent that referenced this pull request Apr 20, 2026
PRs NousResearch#13148 and NousResearch#13152 landed kimi-k2.6 on OpenRouter, Nous, NVIDIA NIM,
kimi-coding, kimi-coding-cn, and moonshot. This fills in the remaining
static catalogs (opencode-zen, opencode-go, alibaba, huggingface) plus
the 256K context-length entry for the HuggingFace variant.

Temperature handling is already covered by PR NousResearch#13157's OMIT_TEMPERATURE
sentinel + _is_kimi_model() prefix check, which matches all kimi-* IDs
automatically — no per-model entries needed.
aj-nt pushed a commit to aj-nt/hermes-agent that referenced this pull request May 1, 2026
…search#13157)

Kimi's gateway selects the correct temperature server-side based on the
active mode (thinking -> 1.0, non-thinking -> 0.6).  Sending any
temperature value — even the previously "correct" one — conflicts with
gateway-managed defaults.

Replaces the old approach of forcing specific temperature values (0.6
for non-thinking, 1.0 for thinking) with an OMIT_TEMPERATURE sentinel
that tells all call sites to strip the temperature key from API kwargs
entirely.

Changes:
- agent/auxiliary_client.py: OMIT_TEMPERATURE sentinel, _is_kimi_model()
  prefix check (covers all kimi-* models), _fixed_temperature_for_model()
  returns sentinel for kimi models.  _build_call_kwargs() strips temp.
- run_agent.py: _build_api_kwargs, flush_memories, and summary generation
  paths all handle the sentinel by popping/omitting temperature.
- trajectory_compressor.py: _effective_temperature_for_model returns None
  for kimi (sentinel mapped), direct client calls use kwargs dict to
  conditionally include temperature.
- mini_swe_runner.py: same sentinel handling via wrapper function.
- 6 test files updated: all 'forces temperature X' assertions replaced
  with 'temperature not in kwargs' assertions.

Net: -76 lines (171 added, 247 removed).
Inspired by PR NousResearch#13137 (@kshitijk4poor).
Luminet2023 pushed a commit to Luminet2023/hermes-agent that referenced this pull request May 1, 2026
…search#13157)

Kimi's gateway selects the correct temperature server-side based on the
active mode (thinking -> 1.0, non-thinking -> 0.6).  Sending any
temperature value — even the previously "correct" one — conflicts with
gateway-managed defaults.

Replaces the old approach of forcing specific temperature values (0.6
for non-thinking, 1.0 for thinking) with an OMIT_TEMPERATURE sentinel
that tells all call sites to strip the temperature key from API kwargs
entirely.

Changes:
- agent/auxiliary_client.py: OMIT_TEMPERATURE sentinel, _is_kimi_model()
  prefix check (covers all kimi-* models), _fixed_temperature_for_model()
  returns sentinel for kimi models.  _build_call_kwargs() strips temp.
- run_agent.py: _build_api_kwargs, flush_memories, and summary generation
  paths all handle the sentinel by popping/omitting temperature.
- trajectory_compressor.py: _effective_temperature_for_model returns None
  for kimi (sentinel mapped), direct client calls use kwargs dict to
  conditionally include temperature.
- mini_swe_runner.py: same sentinel handling via wrapper function.
- 6 test files updated: all 'forces temperature X' assertions replaced
  with 'temperature not in kwargs' assertions.

Net: -76 lines (171 added, 247 removed).
Inspired by PR NousResearch#13137 (@kshitijk4poor).
02356abc pushed a commit to 02356abc/hermes-agent that referenced this pull request May 14, 2026
…search#13157)

Kimi's gateway selects the correct temperature server-side based on the
active mode (thinking -> 1.0, non-thinking -> 0.6).  Sending any
temperature value — even the previously "correct" one — conflicts with
gateway-managed defaults.

Replaces the old approach of forcing specific temperature values (0.6
for non-thinking, 1.0 for thinking) with an OMIT_TEMPERATURE sentinel
that tells all call sites to strip the temperature key from API kwargs
entirely.

Changes:
- agent/auxiliary_client.py: OMIT_TEMPERATURE sentinel, _is_kimi_model()
  prefix check (covers all kimi-* models), _fixed_temperature_for_model()
  returns sentinel for kimi models.  _build_call_kwargs() strips temp.
- run_agent.py: _build_api_kwargs, flush_memories, and summary generation
  paths all handle the sentinel by popping/omitting temperature.
- trajectory_compressor.py: _effective_temperature_for_model returns None
  for kimi (sentinel mapped), direct client calls use kwargs dict to
  conditionally include temperature.
- mini_swe_runner.py: same sentinel handling via wrapper function.
- 6 test files updated: all 'forces temperature X' assertions replaced
  with 'temperature not in kwargs' assertions.

Net: -76 lines (171 added, 247 removed).
Inspired by PR NousResearch#13137 (@kshitijk4poor).
gweeteve pushed a commit to gweeteve/hermes-agent that referenced this pull request Jun 2, 2026
…search#13157)

Kimi's gateway selects the correct temperature server-side based on the
active mode (thinking -> 1.0, non-thinking -> 0.6).  Sending any
temperature value — even the previously "correct" one — conflicts with
gateway-managed defaults.

Replaces the old approach of forcing specific temperature values (0.6
for non-thinking, 1.0 for thinking) with an OMIT_TEMPERATURE sentinel
that tells all call sites to strip the temperature key from API kwargs
entirely.

Changes:
- agent/auxiliary_client.py: OMIT_TEMPERATURE sentinel, _is_kimi_model()
  prefix check (covers all kimi-* models), _fixed_temperature_for_model()
  returns sentinel for kimi models.  _build_call_kwargs() strips temp.
- run_agent.py: _build_api_kwargs, flush_memories, and summary generation
  paths all handle the sentinel by popping/omitting temperature.
- trajectory_compressor.py: _effective_temperature_for_model returns None
  for kimi (sentinel mapped), direct client calls use kwargs dict to
  conditionally include temperature.
- mini_swe_runner.py: same sentinel handling via wrapper function.
- 6 test files updated: all 'forces temperature X' assertions replaced
  with 'temperature not in kwargs' assertions.

Net: -76 lines (171 added, 247 removed).
Inspired by PR NousResearch#13137 (@kshitijk4poor).
waefrebeorn pushed a commit to waefrebeorn/slermes that referenced this pull request Jul 2, 2026
…search#13157)

Kimi's gateway selects the correct temperature server-side based on the
active mode (thinking -> 1.0, non-thinking -> 0.6).  Sending any
temperature value — even the previously "correct" one — conflicts with
gateway-managed defaults.

Replaces the old approach of forcing specific temperature values (0.6
for non-thinking, 1.0 for thinking) with an OMIT_TEMPERATURE sentinel
that tells all call sites to strip the temperature key from API kwargs
entirely.

Changes:
- agent/auxiliary_client.py: OMIT_TEMPERATURE sentinel, _is_kimi_model()
  prefix check (covers all kimi-* models), _fixed_temperature_for_model()
  returns sentinel for kimi models.  _build_call_kwargs() strips temp.
- run_agent.py: _build_api_kwargs, flush_memories, and summary generation
  paths all handle the sentinel by popping/omitting temperature.
- trajectory_compressor.py: _effective_temperature_for_model returns None
  for kimi (sentinel mapped), direct client calls use kwargs dict to
  conditionally include temperature.
- mini_swe_runner.py: same sentinel handling via wrapper function.
- 6 test files updated: all 'forces temperature X' assertions replaced
  with 'temperature not in kwargs' assertions.

Net: -76 lines (171 added, 247 removed).
Inspired by PR NousResearch#13137 (@kshitijk4poor).
zons-zhaozhy pushed a commit to zons-zhaozhy/hermes-agent that referenced this pull request Aug 15, 2026
…rver-side

GLM-5.3 (2026-08-14) no longer accepts thinking.type=disabled; the official
migration is enabled + reasoning_effort=low. Three bug classes fixed:

1. zai profile: emit the migration shape on glm-5.3 (any alias spelling),
   map Hermes effort onto the new low/high/max tiers, keep glm-5.2's
   high/max contract untouched, add glm-5.3 to fallback_models.
2. judge call sites (read_think_gate x2, analysis_stop_guard): hardcoded
   extra_body thinking=disabled bypassed the provider profile; now routed
   through build_judge_thinking_extra_body(model) so glm-5.3 judges get
   enabled+low instead of a rejected request.
3. aux temperature: the global 0.1 pin clobbered explicitly passed caller
   temperatures (judge determinism, NousResearch#13157 preserve-explicit contract);
   pin now applies only as a default. Coding path unaffected — main
   transport never sends temperature.

A/B-verified: 22 pre-existing tests/run_agent failures reproduce
identically on HEAD (isolated worktree), none introduced here.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant