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
- Add a cloud_providers entry whose endpoint matches the configured inference_url
- Or clear inference_url from config to use the managed backend
- 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.