zed-industries/zed · warning

unknown provider `{provider}`. Valid options: mercury, zeta1

Error message

unknown provider `{provider}`. Valid options: mercury, zeta1, zeta2, zeta2:<version>, teacher, teacher:<backend>, teacher-jumps, teacher-jumps:<backend>, teacher-non-batching, teacher-jumps-non-batching, repair
                 For zeta2, you can optionally specify a version like `zeta2:ordered` or `zeta2:V0113_Ordered`.
                 For teacher providers, you can specify a backend like `teacher:sonnet46`, `teacher-jumps:sonnet46`, `teacher-jumps-non-batching:sonnet46`, or `teacher:gpt52`.
                 Available zeta versions:
{}

What it means

Parse failure for PredictionProvider, the enum (main.rs:449) selecting which prediction model backs the CLI: mercury, zeta1, zeta2(format), baseten(format), teacher/teacher-jumps variants (each optionally non-batching, each with a backend and/or zeta format after ':'), and repair. The root provider name (text before any ':') must match one of the accepted arms; the error message enumerates them and appends the currently available zeta2 versions from ZetaFormat::options_as_string(). Note 'baseten' is accepted by the parser even though it is absent from the message's list.

Source

Thrown at crates/edit_prediction_cli/src/main.rs:536

                Ok(PredictionProvider::TeacherJumps(backend))
            }
            "teacher-jumps-non-batching" | "teacher_jumps_non_batching" => {
                let backend = arg
                    .map(|a| a.parse())
                    .transpose()?
                    .unwrap_or(TeacherBackend::default());
                Ok(PredictionProvider::TeacherJumpsNonBatching(backend))
            }
            "repair" => Ok(PredictionProvider::Repair),
            "baseten" => {
                let format = arg
                    .map(ZetaFormat::parse)
                    .transpose()?
                    .unwrap_or(ZetaFormat::default());
                Ok(PredictionProvider::Baseten(format))
            }
            _ => {
                anyhow::bail!(
                    "unknown provider `{provider}`. Valid options: mercury, zeta1, zeta2, zeta2:<version>, teacher, teacher:<backend>, teacher-jumps, teacher-jumps:<backend>, teacher-non-batching, teacher-jumps-non-batching, repair\n\
                 For zeta2, you can optionally specify a version like `zeta2:ordered` or `zeta2:V0113_Ordered`.\n\
                 For teacher providers, you can specify a backend like `teacher:sonnet46`, `teacher-jumps:sonnet46`, `teacher-jumps-non-batching:sonnet46`, or `teacher:gpt52`.\n\
                 Available zeta versions:\n{}",
                    ZetaFormat::options_as_string()
                )
            }
        }
    }
}

fn parse_teacher_args(arg: Option<&str>) -> Result<(TeacherBackend, ZetaFormat), anyhow::Error> {
    let mut backend = TeacherBackend::default();
    let mut format = ZetaFormat::default();

    for arg in arg.unwrap_or_default().split(':') {
        if arg.is_empty() {
            continue;

View on GitHub (pinned to f4178619ac)

Solutions

  1. Use a listed provider: mercury, zeta1, zeta2[:version], teacher[:backend], teacher-jumps[:backend], teacher-non-batching, teacher-jumps-non-batching[:backend], repair (baseten also parses)
  2. For version-specific runs use the colon form, e.g. zeta2:ordered — the error's tail lists the available zeta versions
  3. Check for typos in long names like teacher-jumps-non-batching (hyphens matter)

Example fix

# before
--provider openai

# after
--provider teacher:gpt54   # OpenAI teacher via gpt alias
# or
--provider zeta2:ordered
Defensive patterns

Strategy: validation

Validate before calling

const KNOWN_PROVIDERS: &[&str] = &["mercury", "zeta1", "zeta2", "baseten", "teacher", "teacher-jumps", "teacher-non-batching", "teacher-jumps-non-batching", "repair"];

fn provider_root_is_valid(s: &str) -> bool {
    let root = s.split(':').next().unwrap_or("");
    KNOWN_PROVIDERS.contains(&root)
}

Prevention

When it happens

Trigger: Passing --provider with an unknown root token, e.g. --provider openai (not valid; teachers use gpt aliases via teacher:gpt54), --provider zeta3, or misspelling 'teacher-jumps-non-batching'. Composite forms like zeta2:ordered or teacher:sonnet46 are parsed only if the root matches.

Common situations: Version churn: zeta1 deprecated in favor of zeta2:<version>; users guessing provider names not yet implemented; copying a provider string from old run docs into a newer CLI.

Understand the failure class

Background: "Must be a positive integer", "Invalid value", "Unsupported": the invalid-argument-value error family, when a library rejects the value you pass — this error's family across 35 libraries.

Related errors


AI-assisted analysis of zed-industries/zed@f4178619ac (2026-08-20). Data as JSON: /api/errors/45acffc527b8637c. Report an issue: GitHub.