tinyhumansai/openhuman · error · anyhow::Error

[chat-factory] BYOK_INCOMPLETE: inference_url is set to a cu

Error message

[chat-factory] BYOK_INCOMPLETE: inference_url is set to a custom/direct endpoint ({inference_url}) but no matching cloud_providers entry was found for role '{role}'. To complete BYOK setup add a cloud_providers entry whose endpoint matches {inference_url} (or use a workload-specific route). To use the OpenHuman managed backend instead, clear inference_url from config.

What it means

Error "[chat-factory] BYOK_INCOMPLETE: inference_url is set to a custom/direct endpoint ({inference_url}) but no matching cloud_providers entry was found for role '{role}'. To complete BYOK setup add a cloud_providers entry whose endpoint matches {inference_url} (or use a workload-specific route). To use the OpenHuman managed backend instead, clear inference_url from config." thrown in tinyhumansai/openhuman.

Source

Thrown at src/openhuman/inference/provider/factory.rs:986

/// provider string that none of the crate-native model constructors accepted.
///
/// Successful production routes never reach this function. Keeping error
/// resolution separate means `create_chat_model*` no longer constructs a
/// legacy `Provider` merely to discover that a route is invalid.
fn unresolved_chat_model_error(role: &str, provider: &str, config: &Config) -> anyhow::Error {
    let p = provider.trim();

    if let Err(error) = enforce_local_only_inference(role, p) {
        return error;
    }

    if p == BYOK_INCOMPLETE_SENTINEL {
        let inference_url = config
            .inference_url
            .as_deref()
            .filter(|value| !value.trim().is_empty())
            .unwrap_or("<unset>");
        return anyhow::anyhow!(
            "[chat-factory] BYOK_INCOMPLETE: inference_url is set to a custom/direct endpoint \
             ({inference_url}) but no matching cloud_providers entry was found for role '{role}'. \
             To complete BYOK setup add a cloud_providers entry whose endpoint matches \
             {inference_url} (or use a workload-specific route). \
             To use the OpenHuman managed backend instead, clear inference_url from config."
        );
    }

    if p.is_empty() || p == "cloud" {
        return unresolved_chat_model_error(
            role,
            &resolve_primary_cloud_provider_string(config),
            config,
        );
    }

    #[cfg(not(test))]
    if let Err(error) = verify_session_active(config) {

View on GitHub (pinned to 7491200858)

Solutions

  1. Add a cloud_providers entry whose endpoint matches the configured inference_url
  2. Or clear inference_url from config to use the managed backend
  3. Or route that workload to a workload-specific inference route
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at src/openhuman/inference/provider/factory.rs:986 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of tinyhumansai/openhuman@7491200858 (2026-08-17). Data as JSON: /api/errors/f658a9545dedd699. Report an issue: GitHub.