tinyhumansai/openhuman · error · anyhow::Error
[chat-factory] provider string '{}' for role '{}' has an emp
Error message
[chat-factory] provider string '{}' for role '{}' has an empty model — use 'claude-code:<model-id>' What it means
Fires in try_create_claude_code_chat_model_from_string when a provider string starting with the claude-code prefix has no model id after the colon (e.g. 'claude-code:'). The split of prefix from model yielded an empty model, so no ChatModel can be constructed for the role.
Source
Thrown at src/openhuman/inference/provider/factory.rs:1520
fn try_create_claude_code_chat_model_from_string(
role: &str,
provider: &str,
config: &Config,
model_override: Option<&str>,
) -> OptionalChatModelResult {
let provider = provider.trim();
let model_with_temp = provider
.strip_prefix(crate::openhuman::inference::provider::claude_code::PROVIDER_PREFIX)?;
let (configured_model, temperature_override) = split_model_and_temperature(model_with_temp);
if temperature_override.is_some() {
log::warn!(
"[providers][chat-factory] claude-code provider: per-model temperature override \
is accepted but not wired through to the CLI — the @<temp> suffix is ignored"
);
}
if configured_model.is_empty() {
return Some(Err(anyhow::anyhow!(
"[chat-factory] provider string '{}' for role '{}' has an empty model — \
use 'claude-code:<model-id>'",
provider,
role
)));
}
if let Err(error) = enforce_local_only_inference(role, provider) {
return Some(Err(error));
}
#[cfg(not(test))]
if let Err(error) = verify_session_active(config) {
return Some(Err(error));
}
let workspace =
crate::openhuman::inference::provider::claude_code::workspace_dir_from_config(config);
let effective_model = model_override.unwrap_or(&configured_model).to_string();
emit_inference_egress(
role,View on GitHub (pinned to 7491200858)
Solutions
- Set the provider string to 'claude-code:<model-id>' (e.g. 'claude-code:claude-sonnet-4-5') in the role's provider config
- Check for stray whitespace or a trailing colon that leaves the model segment empty after trimming
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at src/openhuman/inference/provider/factory.rs:1520 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/8d16b20bec95bb32.
Report an issue: GitHub.