Skip to content

Batch salvage group 2: 10 low-risk new-contributor PRs (kanban/windows/credential-pool/deepseek-aux/etc)#27292

Merged
teknium1 merged 11 commits into
mainfrom
hermes/hermes-e1ed3e9f
May 17, 2026
Merged

Batch salvage group 2: 10 low-risk new-contributor PRs (kanban/windows/credential-pool/deepseek-aux/etc)#27292
teknium1 merged 11 commits into
mainfrom
hermes/hermes-e1ed3e9f

Conversation

@teknium1

Copy link
Copy Markdown
Contributor

Batch salvage of 10 low-risk new-contributor PRs onto current main with contributor authorship preserved per-commit. Group 2 of the LHF run (group 1 was #27247 / #27271).

Salvaged PRs

PR Author Change
#26661 @shellybotmoyer fix(kanban): --severity filter uses >= comparison per documented "at or above" semantics
#26632 @ether-btc fix(run_agent): guard memory provider init against empty/whitespace string
#26516 @LifeJiggy fix: add paste-collapse INFO logging to aid debugging
#26481 @nekwo fix(windows): add UTF-8 BOM so PowerShell 5.1 parses non-ASCII box-drawing chars
#26374 @flooryyyy fix(delegate): replace brittle "error in first 80 chars" check with existing _looks_like_error_output helper
#26034 @dgians feat(gateway): add .ts/.py/.sh to SUPPORTED_DOCUMENT_TYPES
#25576 @shellybotmoyer fix(credential_pool): tolerate ISO-string last_status_at during from_dict rehydration
#27030 @flanny7 fix(install): use resolved python variable in setup_open_webui.sh
#26438 @hermesagent26 fix(run_agent): detect kimi models via model name for reasoning pad
#26926 @kriscolab fix(deepseek): set default_aux_model on profile so "No aux LLM provider configured" warning stops firing (#26924)

Salvage-with-redirect: #26926

#26926 diagnosed a real bug — deepseek users were seeing the "No auxiliary LLM provider configured -- context compression will drop middle turns without a summary" warning on every session because _get_aux_model_for_provider("deepseek") returned "". The contributor's fix landed "deepseek": "deepseek-chat" in the legacy _API_KEY_PROVIDER_AUX_MODELS_FALLBACK dict.

Per current main, that dict is legacy_get_aux_model_for_provider() checks ProviderProfile.default_aux_model first, and every modern provider (gemini, zai, minimax, anthropic, kimi-coding, stepfun, ollama-cloud, gmi, novita, kilocode, ai-gateway, opencode-zen) sets that on its profile. Deepseek was the only one missing the attribute.

Salvage shape moved one layer up: default_aux_model="deepseek-chat" is now set on DeepSeekProfile() directly. Tests landed under tests/plugins/model_providers/test_deepseek_profile.py::TestDeepSeekAuxModel covering both the profile attribute and the consumer API (_get_aux_model_for_provider). Original diagnosis and aux-model choice credited to @kriscolab via Co-authored-by: trailer.

Attribution

Test plan

  • tests/plugins/model_providers/test_deepseek_profile.py — 29 passed in 0.89s (3 new aux-model tests + 26 existing).
  • Other 9 changes are tightly localized: kanban severity comparator (one operator flip), memory provider init guard (whitespace check), Windows PowerShell BOM, paste-collapse logger, etc. Compile-clean across all touched .py files.
  • AUTHOR_MAP changes don't alter release-script behavior for existing authors.

Rebase-merge so contributor authorship survives per-commit.

shellybotmoyer and others added 11 commits May 16, 2026 22:51
Adds logger.info when large pastes are collapsed to file
references in both paste-code paths (handle_paste and
_on_text_changed). Logs paste ID, line count, character
count, and file path so operators can correlate missing-
content reports with specific paste files. This is a
diagnostic aid, not a fix for the paste-drop issue.
The gateway already accepts plain-text config files (.ini, .cfg) and
structured formats (.json, .yaml, .toml) as documents, but not common
source-file extensions. Sending a .ts/.py/.sh file currently requires
renaming it to .txt first.

Adds .ts, .py, .sh as text/plain, consistent with the existing
.ini/.cfg entries.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The install_open_webui function correctly resolved the python interpreter into the $py variable, but hardcoded 'python' in subsequent pip install commands. This caused 'command not found' or 'externally-managed-environment' errors on systems where 'python' is not implicitly aliased to 'python3'.
 previously only checked provider ID and
base URL. When kimi-k2.6 is served via ollama-cloud (or any third-party
provider), provider is not 'kimi-coding' and base URL is not
api.kimi.com — so reasoning_content pad was never injected. This caused
HTTP 400 from Ollama Cloud's Go backend: 'invalid message content type:
map[string]interface {}'.

Fix: add model-name detection ('kimi' in model.lower()) so any route
serving a kimi model gets the required reasoning_content echo-back.

Refs the 400/401 Telegram errors where kimi-k2.6 via ollama-cloud
consistently failed after tool-call turns.
…firing

Closes #26924 (and supersedes #26926) in spirit.

DeepSeek was missing `default_aux_model` on its `ProviderProfile`, so
`_get_aux_model_for_provider("deepseek")` returned an empty string and
the compression / vision / session-search paths emitted

  "No auxiliary LLM provider configured -- context compression will
  drop middle turns without a summary."

on every DeepSeek session, even when the user had perfectly working
DeepSeek credentials.

Fix lands at the profile layer rather than the legacy
`_API_KEY_PROVIDER_AUX_MODELS_FALLBACK` dict the original PR targeted.
Every modern provider (gemini, zai, minimax, anthropic, kimi-coding,
stepfun, ollama-cloud, gmi, novita, kilocode, ai-gateway, opencode-zen)
sets `default_aux_model` on its `ProviderProfile`; the fallback dict
only exists for providers that predate the profiles system.

Tests added under `tests/plugins/model_providers/test_deepseek_profile.py`:
- `test_profile_advertises_deepseek_chat`  -- pins the profile attribute
- `test_consumer_api_returns_deepseek_chat` -- pins the consumer API behavior
- `test_consumer_api_returns_non_empty`     -- regression guard for the
  symptom in the issue

Original diagnosis and aux-model choice from @kriscolab in PR #26926;
moved one layer up.

Co-authored-by: kriscolab <71590782+kriscolab@users.noreply.github.com>
…tors

Adds release-note attribution mappings for 10 contributors from the
low-hanging-fruit salvage group 2 batch:
- @shellybotmoyer (PR #26661, #25576)
- @ether-btc (PR #26632)
- @LifeJiggy (PR #26516)
- @nekwo (PR #26481)
- @flooryyyy (PR #26374)
- @dgians (PR #26034, incl. zealy-tzco bot-committer alias)
- @flanny7 (PR #27030)
- @hermesagent26 (PR #26438)
- @kriscolab (PR #26926, co-author on salvage commit)
@github-actions

Copy link
Copy Markdown
Contributor

🔎 Lint report: hermes/hermes-e1ed3e9f vs origin/main

ruff

Total: 0 on HEAD, 0 on base (➖ 0)

🆕 New issues: none

✅ Fixed issues: none

Unchanged: 0 pre-existing issues carried over.

ty (type checker)

Total: 8350 on HEAD, 8349 on base (🆕 +1)

🆕 New issues: none

✅ Fixed issues: none

Unchanged: 4366 pre-existing issues carried over.

Diagnostics are surfaced as warnings — this check never fails the build.

@alt-glitch alt-glitch added type/bug Something isn't working P2 Medium — degraded but workaround exists comp/agent Core agent loop, run_agent.py, prompt builder comp/cli CLI entry point, hermes_cli/, setup wizard comp/gateway Gateway runner, session dispatch, delivery labels May 17, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

comp/agent Core agent loop, run_agent.py, prompt builder comp/cli CLI entry point, hermes_cli/, setup wizard comp/gateway Gateway runner, session dispatch, delivery comp/plugins Plugin system and bundled plugins P2 Medium — degraded but workaround exists type/bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

10 participants