hermes-agent/tests/agent
kshitij c7e8add120
fix(context): handle JSON decode errors in compression — salvage of #22248 (#22416)
When an auxiliary LLM provider (or an upstream proxy) returns a non-JSON
body with `Content-Type: application/json` — e.g. an HTML 502 page from a
misconfigured gateway — the OpenAI SDK's `response.json()` raises a raw
`json.JSONDecodeError` (or wraps it in `APIResponseValidationError` whose
message contains "expecting value"). Previously this fell through to the
unknown-error branch and entered a 60s cooldown without retrying on the
main model, dropping the middle conversation turns instead.

This change folds JSON-decode detection into the existing fast-path
fallback chain: detect by `isinstance(e, JSONDecodeError)` OR substring
match for "expecting value", retry once on the main model, and use a
shorter 30s cooldown when already on main (the body shape tends to flip
back to valid quickly when the upstream proxy recovers).

The three duplicated fallback bodies (model-not-found, unknown-error,
JSON-decode) are consolidated into a single `_fallback_to_main_for_compression`
helper that handles the shared bookkeeping (record aux-model failure for
`/usage`-style callers, clear summary_model, clear cooldown).

Also adds three unit tests covering: raw `JSONDecodeError` retries on main,
substring-match for wrapped exceptions, and the 30s cooldown when already
on main.

Salvage of #22248 by @0xharryriddle. Closes #22244.

Co-authored-by: Harry Riddle <ntconguit@gmail.com>
2026-05-09 01:47:15 -07:00
..
transports fix(bedrock): preserve reasoningContent across converse normalization 2026-05-07 05:17:16 -07:00
__init__.py
test_anthropic_adapter.py fix: avoid unsupported anthropic context beta by default 2026-05-07 05:43:20 -07:00
test_anthropic_keychain.py
test_arcee_trinity_overrides.py test(arcee): cover Trinity Large Thinking temperature + compression overrides 2026-05-05 17:23:45 -07:00
test_auxiliary_client.py fix(auxiliary): enforce Codex Responses stream timeout 2026-05-07 06:21:50 -07:00
test_auxiliary_client_anthropic_custom.py
test_auxiliary_config_bridge.py
test_auxiliary_main_first.py
test_auxiliary_named_custom_providers.py
test_auxiliary_transport_autodetect.py
test_bedrock_1m_context.py test: remove 50 stale/broken tests to unblock CI (#22098) 2026-05-08 14:55:40 -07:00
test_bedrock_adapter.py fix(bedrock): preserve reasoningContent across converse normalization 2026-05-07 05:17:16 -07:00
test_bedrock_integration.py
test_codex_cloudflare_headers.py
test_compress_focus.py
test_compressor_image_tokens.py
test_context_compressor.py fix(context): handle JSON decode errors in compression — salvage of #22248 (#22416) 2026-05-09 01:47:15 -07:00
test_context_compressor_summary_continuity.py
test_context_engine.py
test_context_references.py
test_copilot_acp_client.py
test_credential_pool.py fix(auth): shorten credential 401 cooldown 2026-05-07 06:15:33 -07:00
test_credential_pool_routing.py
test_crossloop_client_cache.py
test_curator.py
test_curator_activity.py
test_curator_backup.py
test_curator_classification.py
test_curator_reports.py
test_deepseek_anthropic_thinking.py
test_direct_provider_url_detection.py
test_display.py fix(cli): honor positive tool preview length 2026-05-07 05:26:28 -07:00
test_display_emoji.py
test_error_classifier.py
test_external_skills.py
test_external_skills_dirs_cache.py perf(cli): cut ~19s from 'hermes' cold start (skills cache + lazy Feishu + no Nous HTTP) (#22138) 2026-05-08 16:39:32 -07:00
test_gemini_cloudcode.py
test_gemini_fast_fallback.py Prefer fallback for Gemini CloudCode rate limits 2026-05-05 10:14:48 -07:00
test_gemini_free_tier_gate.py
test_gemini_native_adapter.py
test_gemini_schema.py
test_i18n.py fix: add Turkish locale references in config, tests, and docs 2026-05-05 17:29:12 -07:00
test_image_gen_registry.py
test_image_routing.py fix(image-routing): sniff magic bytes for image MIME, ignore misleading suffix 2026-05-07 05:58:11 -07:00
test_insights.py
test_kimi_coding_anthropic_thinking.py
test_local_stream_timeout.py
test_memory_provider.py
test_memory_session_switch.py feat(hindsight): probe API for update_mode='append' support, dedupe across processes 2026-05-05 15:09:59 -07:00
test_memory_user_id.py
test_minimax_auxiliary_url.py
test_minimax_provider.py feat: provider modules — ProviderProfile ABC, 33 providers, fetch_models, transport single-path 2026-05-05 13:40:01 -07:00
test_model_metadata.py feat(computer-use): cua-driver backend, universal any-model schema 2026-05-08 11:07:38 -07:00
test_model_metadata_local_ctx.py
test_model_metadata_ssl.py
test_models_dev.py fix(models): prefer image modalities for vision routing 2026-05-07 05:54:12 -07:00
test_moonshot_schema.py
test_nous_rate_guard.py
test_onboarding.py
test_openrouter_response_cache.py
test_prompt_builder.py feat: enrich system-prompt environment hints with host + terminal-backend info 2026-05-08 14:27:40 -07:00
test_prompt_caching.py
test_proxy_and_url_validation.py
test_rate_limit_tracker.py
test_redact.py
test_shell_hooks.py
test_shell_hooks_consent.py
test_skill_commands.py test(skills): cover additional rescan paths in skill_commands cache (#14536) 2026-05-07 04:59:43 -07:00
test_skill_commands_reload.py
test_skill_utils.py
test_streaming_context_scrubber.py
test_subagent_progress.py
test_subagent_stop_hook.py
test_subdirectory_hints.py
test_think_scrubber.py
test_title_generator.py
test_tool_guardrails.py
test_unsupported_parameter_retry.py test: remove 50 stale/broken tests to unblock CI (#22098) 2026-05-08 14:55:40 -07:00
test_unsupported_temperature_retry.py
test_usage_pricing.py
test_vision_resolved_args.py