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

  1. Set the provider string to 'claude-code:<model-id>' (e.g. 'claude-code:claude-sonnet-4-5') in the role's provider config
  2. 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.