hermes-agent/tests/agent
Teknium c4cc0f3bd0
fix(streaming): route minimax/* on OpenRouter away from broken direct endpoint
The direct Minimax OpenRouter endpoint silently drops tool-call streams on
tool-calling workflows (MiniMax-M2#109, reproduced 4/4 times on 2026-04-18:
zero content, no finish_reason, silent close at ~40s). PR #12072 surfaced
the failure to the user; this PR avoids it entirely by routing minimax/*
requests to Fireworks / NovitaAI / Google-Vertex / AtlasCloud / Together
by default.

New module agent/provider_tweaks.py centralizes known-broken-endpoint
avoidance with a single registry entry per upstream bug. User-supplied
provider preferences (provider_sort, providers_allowed/ignored/order)
always win — tweaks only fill in defaults where absent, and a user who
sets 'only' is fully opted out.

Wired into both provider_preferences build sites in run_agent.py (main
chat loop + iteration-summary call). Only applies when base_url targets
openrouter.ai.

Validation
| | Before | After |
|---|---|---|
| minimax/minimax-m2.7 tool-call stream on OR (direct endpoint) | 0/4 success | 4/4 on Fireworks |
| extra_body.provider injected for minimax/* on OpenRouter | no | ignore=[minimax] order=[fireworks,novitaai,google-vertex,atlascloud,together] |
| extra_body.provider for anthropic/* on OpenRouter | unchanged | unchanged |
| extra_body.provider for minimax/* on api.minimax.io | unchanged | unchanged |
| User-supplied {only:[minimax]} | unchanged | unchanged (explicit opt-in honoured) |
| tests/agent/test_provider_tweaks.py | n/a | 23 passed |
| tests/run_agent/test_streaming.py | 26 passed | 26 passed |

Live e2e sanity (real OpenRouter call): 89.6s clean response via Fireworks,
with `extra_body.provider={'ignore': ['minimax'], 'order': ['fireworks',...]}`
confirmed in the outgoing request.
2026-04-18 02:24:10 -07:00
..
__init__.py test: add unit tests for 8 modules (batch 2) 2026-02-26 13:54:20 +03:00
test_anthropic_adapter.py fix(agent): downgrade xhigh→max on Anthropic pre-4.7 adaptive models 2026-04-16 12:00:56 -07:00
test_auxiliary_client.py fix(kimi): force kimi-for-coding temperature to 0.6 2026-04-17 15:49:14 -07:00
test_auxiliary_config_bridge.py fix: remove legacy compression.summary_* config and env var fallbacks (#8992) 2026-04-13 04:59:26 -07:00
test_auxiliary_main_first.py feat(auxiliary): default 'auto' routing to main model for all users (#11900) 2026-04-17 19:13:23 -07:00
test_auxiliary_named_custom_providers.py fix(tests): resolve CI test failures — pool auto-seeding, stale assertions, mock isolation 2026-04-15 22:05:21 -07:00
test_bedrock_adapter.py feat: native AWS Bedrock provider via Converse API 2026-04-15 16:17:17 -07:00
test_bedrock_integration.py feat: native AWS Bedrock provider via Converse API 2026-04-15 16:17:17 -07:00
test_compress_focus.py fix: resolve CI test failures — add missing functions, fix stale tests (#9483) 2026-04-14 01:43:45 -07:00
test_context_compressor.py fix(agent): route compression aux through live session runtime 2026-04-12 01:34:52 -07:00
test_context_engine.py feat: wire context engine plugin slot into agent and plugin system 2026-04-10 19:15:50 -07:00
test_context_references.py fix(agent): preserve quoted @file references with spaces 2026-04-10 13:05:01 -07:00
test_credential_pool.py fix(tests): resolve CI test failures — pool auto-seeding, stale assertions, mock isolation 2026-04-15 22:05:21 -07:00
test_credential_pool_routing.py refactor(tests): re-architect tests + fix CI failures (#5946) 2026-04-07 17:19:07 -07:00
test_crossloop_client_cache.py refactor(tests): re-architect tests + fix CI failures (#5946) 2026-04-07 17:19:07 -07:00
test_display.py refactor(tests): re-architect tests + fix CI failures (#5946) 2026-04-07 17:19:07 -07:00
test_display_emoji.py feat(tools): centralize tool emoji metadata in registry + skin integration 2026-03-15 20:21:21 -07:00
test_error_classifier.py fix: add vLLM/local server error patterns + MCP initial connection retry (#9281) 2026-04-13 18:46:14 -07:00
test_external_skills.py feat(skills): support external skill directories via config (#3678) 2026-03-29 00:33:30 -07:00
test_gemini_cloudcode.py fix(gemini-cli): surface MODEL_CAPACITY_EXHAUSTED cleanly + drop retired gemma-4-26b (#11833) 2026-04-17 15:34:12 -07:00
test_insights.py fix(insights): hide cache read/write and cost metrics from display (#11477) 2026-04-17 01:02:06 -07:00
test_local_stream_timeout.py fix: is_local_endpoint misses Docker/Podman DNS names (#7950) 2026-04-11 14:46:18 -07:00
test_memory_provider.py feat(honcho): context injection overhaul, 5-tool surface, cost safety, session isolation (#10619) 2026-04-15 19:12:19 -07:00
test_memory_user_id.py fix: resolve CI test failures — add missing functions, fix stale tests (#9483) 2026-04-14 01:43:45 -07:00
test_minimax_auxiliary_url.py fix: provider/model resolution — salvage 4 PRs + MiniMax aux URL fix (#5983) 2026-04-07 22:23:28 -07:00
test_minimax_provider.py fix: preserve dots in model names for OpenCode Zen and ZAI providers (#8794) 2026-04-12 21:22:59 -07:00
test_model_metadata.py fix(agent): complete Claude Opus 4.7 API migration 2026-04-16 10:48:20 -07:00
test_model_metadata_local_ctx.py fix(agent): prefer Ollama Modelfile num_ctx over GGUF training max 2026-04-13 04:24:07 -07:00
test_models_dev.py fix: three provider-related bugs (#8161, #8181, #8147) (#8243) 2026-04-12 01:44:18 -07:00
test_nous_rate_guard.py fix: Nous Portal rate limit guard — prevent retry amplification (#10568) 2026-04-15 16:31:48 -07:00
test_prompt_builder.py feat: ungate Tool Gateway — subscription-based access with per-tool opt-in 2026-04-16 12:36:49 -07:00
test_prompt_caching.py fix(prompt-caching): skip top-level cache_control on role:tool for OpenRouter 2026-03-21 16:54:43 -07:00
test_provider_tweaks.py fix(streaming): route minimax/* on OpenRouter away from broken direct endpoint 2026-04-18 02:24:10 -07:00
test_proxy_and_url_validation.py fix(runtime): surface malformed proxy env and base URL before client init 2026-04-15 16:10:53 -07:00
test_rate_limit_tracker.py feat: capture provider rate limit headers and show in /usage (#6541) 2026-04-09 03:43:14 -07:00
test_redact.py fix(security): add JWT token and Discord mention redaction (#10547) 2026-04-15 16:08:52 -07:00
test_skill_commands.py fix: sanitize Telegram command names to strip invalid characters 2026-04-06 11:27:28 -07:00
test_smart_model_routing.py fix: hermes update causes dual gateways on macOS (launchd) (#1567) 2026-03-16 12:36:29 -07:00
test_subagent_progress.py test: update stale tests to match current code (#11963) 2026-04-17 21:35:30 -07:00
test_subdirectory_hints.py fix(agent): catch PermissionError in subdirectory hint discovery 2026-04-09 03:10:30 -07:00
test_title_generator.py feat: auto-generate session titles after first exchange 2026-03-17 04:14:40 -07:00
test_usage_pricing.py feat: use endpoint metadata for custom model context and pricing (#1906) 2026-03-18 03:04:07 -07:00
test_vision_resolved_args.py fix: pass resolved args to resolve_vision_provider_client() 2026-04-16 07:45:13 -07:00