hermes-agent/tests/agent
Teknium 228b7d27bd
fix(auxiliary): cache 402'd providers as unhealthy with TTL to stop per-call retry storms (#23597)
When an auxiliary provider returns HTTP 402 (credit / payment), every
subsequent compression / title-gen / session-search / vision call still
re-tried it as the FIRST entry in the chain — burning ~1 RTT to hit 402
again, then falling back. On a long Discord/LCM session that meant dozens
of doomed 402s per minute (issue #23570).

Add a per-process unhealthy-provider cache with a 10 min TTL. When any
caller observes a payment error against a provider, the label is marked
unhealthy and skipped by:
  * _resolve_auto Step-1 (main provider use-as-aux path)
  * _resolve_auto Step-2 (aggregator/fallback chain)
  * _try_payment_fallback (used by call_llm/acall_llm on first 402)

Skip-logs are throttled to once per minute per label so a bursty session
doesn't spam agent.log. Entries auto-expire so a topped-up account
recovers without manual intervention. The cache is in-process only by
design — multi-profile users with different keys per profile must each
hit the 402 once.

Refs #23570
2026-05-10 22:43:14 -07:00
..
transports fix(xai): omit reasoning.effort for grok models that reject it (#23435) 2026-05-10 15:21:30 -07:00
__init__.py
test_anthropic_adapter.py
test_anthropic_keychain.py
test_arcee_trinity_overrides.py
test_auxiliary_client.py fix(auxiliary): cache 402'd providers as unhealthy with TTL to stop per-call retry storms (#23597) 2026-05-10 22:43:14 -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_bedrock_adapter.py
test_bedrock_integration.py
test_codex_cloudflare_headers.py
test_compress_focus.py
test_compressor_image_tokens.py
test_context_compressor.py
test_context_compressor_summary_continuity.py
test_context_engine.py
test_context_references.py
test_copilot_acp_client.py
test_credential_pool.py
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 feat(curator): hint at hermes curator pin in the rename block (#23212) 2026-05-10 06:44:53 -07:00
test_curator_reports.py
test_deepseek_anthropic_thinking.py
test_direct_provider_url_detection.py
test_display.py
test_display_emoji.py
test_error_classifier.py fix(error_classifier): classify generic-typed timeout messages as transient (carve-out of #22664) 2026-05-09 17:54:07 -07:00
test_external_skills.py
test_external_skills_dirs_cache.py
test_gemini_cloudcode.py
test_gemini_fast_fallback.py
test_gemini_free_tier_gate.py
test_gemini_native_adapter.py
test_gemini_schema.py
test_i18n.py feat(i18n): localize all gateway commands + web dashboard, add 8 new locales (16 total) (#22914) 2026-05-10 07:14:14 -07:00
test_image_gen_registry.py
test_image_routing.py
test_insights.py
test_kimi_coding_anthropic_thinking.py
test_local_stream_timeout.py
test_memory_provider.py
test_memory_session_switch.py
test_memory_user_id.py
test_minimax_auxiliary_url.py
test_minimax_provider.py
test_model_metadata.py fix(model-metadata): set codex-spark fallback context to 128k 2026-05-09 23:17:25 -07:00
test_model_metadata_local_ctx.py
test_model_metadata_ssl.py
test_models_dev.py
test_moonshot_schema.py
test_nous_rate_guard.py
test_onboarding.py
test_openrouter_response_cache.py
test_plugin_llm.py feat(plugins): run any LLM call from inside a plugin via ctx.llm (#23194) 2026-05-10 07:09:28 -07:00
test_prompt_builder.py
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_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_unsupported_temperature_retry.py
test_usage_pricing.py
test_vision_resolved_args.py