hermes - 💡(How to fix) Fix [Feature]: Global toggle to disable all provider fallbacks, prevent silent data leakage to third parties [1 participants]

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…
GitHub stats
NousResearch/hermes-agent#19002Fetched 2026-05-03 04:52:56
View on GitHub
Comments
0
Participants
1
Timeline
4
Reactions
0
Author
Participants
Timeline (top)
labeled ×4

Error Message

  1. Primary model fallbackAIAgent never activates fallback_providers; hard-error on primary failure.
  • It is error-prone (easy to miss a task)

Code Example

# ~/.hermes/config.yaml
fallback:
  enabled: false   # default: true

---
RAW_BUFFERClick to expand / collapse

Problem or Use Case

I like to have control over my data. Under no circumstances should my prompts, attached images, screenshots of browsers, or session data reach third-party APIs. Currently, ensuring this requires manually overriding every individual auxiliary task and hoping no code path misses a fallback edge case.

Hermes has multiple independent fallback mechanisms that activate when a provider fails or is unavailable. There is no single, auditable way to disable all of them. For users running Hermes under a strict privacy model (e.g., only local inference or a single trusted endpoint), this creates a risk of silent data leaks — prompts, images, and session context can be sent to third-party providers without explicit user consent.

Current behavior

Fallbacks are scattered across the codebase and controlled independently. In many cases, the correct method to disable a given fallback is either undocumented or requires reading source code to discover.

Note: The table below lists where fallbacks occur. The steps to disable them are not consistently documented in the official docs or CLI help, and some require inspecting agent/auxiliary_client.py to understand.

ComponentFallback behavior
Primary modelfallback_providers chain on 429/auth/connection failure
Auxiliary visionAuto → OpenRouter → Nous if client build fails
Auxiliary compressionSame auto-detection chain
Auxiliary web_extractSame auto-detection chain
Payment/connection errors_try_payment_fallback() chains through providers
Image size retryRetries same endpoint (acceptable)

Note: Even where disable steps can be inferred (e.g., omitting fallback_model or setting explicit auxiliary.*.provider), there is no guarantee they are complete or forward-compatible. New auxiliary tasks may introduce new fallback paths that are not covered by existing documentation.

Why this is insufficient:

  • Setting explicit auxiliary.vision.provider: custom blocks most fallback paths, but async_call_llm still contains a _try_payment_fallback() branch that fires on connection/payment errors when the resolved provider is "auto".
  • A misconfigured env var or transient DNS failure could cause the resolved provider to flip to "auto", triggering fallback to an external aggregator without warning.
  • There is no way to audit or prove that fallbacks are globally disabled — a single missed override in a new auxiliary task type defeats the purpose.

Environment

  • Hermes version: v0.12.0
  • Provider: Custom endpoint via model.provider: custom
  • Use case: Privacy-sensitive, zero-third-party-exfiltration requirement

Proposed Solution

Add a single, top-level configuration switch that is respected by all fallback paths:

# ~/.hermes/config.yaml
fallback:
  enabled: false   # default: true

When fallback.enabled: false:

  1. Primary model fallbackAIAgent never activates fallback_providers; hard-error on primary failure.
  2. Auxiliary task fallbackresolve_vision_provider_client(), _resolve_auto(), _try_payment_fallback(), and all related auto-detection chains return None immediately instead of chaining.
  3. Credential-pool rotation — still allowed (same provider, different keys), since this does not leak data to a different party.
  4. Image size retry — unaffected (retries same endpoint).

This should be a single source of truth checked at the top of every fallback decision point, rather than the current per-task override whack-a-mole.

Alternatives Considered

Per-task explicit overrides (auxiliary.vision.provider: custom, etc.) — this is what I currently use, but:

  • It is error-prone (easy to miss a task)
  • It is not forward-compatible (new auxiliary tasks may add new fallback paths)
  • It does not protect against the "auto" edge case in async_call_llm

Feature Type

Configuration option

Scope

Small (single file, < 50 lines)

Contribution

  • I'd like to implement this myself and submit a PR

Debug Report (optional)

extent analysis

TL;DR

To prevent silent data leaks, add a top-level configuration switch fallback.enabled that, when set to false, disables all fallback paths across Hermes.

Guidance

  • Introduce a single, auditable configuration option fallback.enabled in ~/.hermes/config.yaml to control all fallback mechanisms.
  • Ensure this option is respected by all fallback paths, including primary model fallback and auxiliary task fallbacks.
  • Verify the effectiveness of this switch by testing various failure scenarios and confirming that no data is sent to third-party providers.
  • Consider implementing this change in a way that allows for easy auditing and verification of the fallback status.

Example

# ~/.hermes/config.yaml
fallback:
  enabled: false   # default: true

Notes

  • The proposed solution aims to provide a single source of truth for controlling fallbacks, reducing the risk of silent data leaks.
  • The implementation should ensure that all fallback paths are disabled when fallback.enabled is set to false, including the "auto" edge case in async_call_llm.

Recommendation

Apply the proposed workaround by adding the fallback.enabled configuration option and setting it to false to ensure that all fallback paths are disabled, providing a single, auditable way to prevent silent data leaks.

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING

hermes - 💡(How to fix) Fix [Feature]: Global toggle to disable all provider fallbacks, prevent silent data leakage to third parties [1 participants]