apache/seatunnel · error · ValueError

No AI provider configured. Set up with one of: 1. Run…

Error message

No AI provider configured. Set up with one of:
  1. Run: seatunnel --init              (interactive setup)
  2. Set: export AI_PROVIDER=<{available}>
  3. Set provider credentials:
     - Anthropic: export ANTHROPIC_API_KEY=sk-ant-...
     - OpenAI:    export OPENAI_API_KEY=sk-...
     - Bedrock:   configure AWS credentials (aws configure)

What it means

create_provider() is the factory that resolves which LLM provider to use. When no provider name was given (explicitly, via saved config, or via AI_PROVIDER) and _auto_detect_provider() finds no detectable credentials, it raises ValueError with a multi-line setup guide covering --init, AI_PROVIDER, and per-provider credential env vars.

Solutions

  1. Run `seatunnel --init` for interactive provider setup
  2. Set a provider explicitly: export AI_PROVIDER=anthropic|openai|bedrock|orcarouter
  3. Export the matching credentials (ANTHROPIC_API_KEY, OPENAI_API_KEY, or AWS credentials for Bedrock)

Example fix

// before
provider = create_provider()  # ValueError: No AI provider configured
// after
os.environ["AI_PROVIDER"] = "openai"
os.environ["OPENAI_API_KEY"] = "sk-..."
provider = create_provider()
Defensive patterns

Strategy: validation

Validate before calling

import os
creds = ["ANTHROPIC_API_KEY", "OPENAI_API_KEY", "ORCAROUTER_API_KEY"]
if not os.environ.get("AI_PROVIDER") and not any(os.environ.get(c) for c in creds):
    raise SystemExit("No AI provider configured; run `seatunnel --init`")

Try / catch

try:
    provider = create_provider()
except ValueError as e:
    if str(e).startswith("No AI provider configured"):
        run_interactive_setup()
    else:
        raise

Prevention

When it happens

Trigger: Calling create_provider() (directly or via run_benchmark, _ensure_provider, _cmd_config, run_init) with no name argument, no AI_PROVIDER env var, no saved config, and none of ANTHROPIC_API_KEY / OPENAI_API_KEY / AWS credentials present for auto-detection.

Common situations: First run of the CLI on a new machine before any setup; cleaned environment in CI; user deleted the saved provider config; running inside a container that strips env vars.

Related errors


AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10). Data as JSON: /api/errors/c7209d3bf4a7e109. Report an issue: GitHub.

Appendix: source

Thrown at seatunnel-cli/seatunnel_cli/llm_provider.py:1445

                if name in ("openai", "bedrock-mantle"):
                    os.environ.setdefault("OPENAI_MODEL", model_config["model"])
                else:
                    os.environ.setdefault("ANTHROPIC_MODEL", model_config["model"])
        if model_config.get("fast_model"):
            if name == "orcarouter":
                os.environ.setdefault("ORCAROUTER_SMALL_FAST_MODEL", model_config["fast_model"])
            elif not os.environ.get("ANTHROPIC_SMALL_FAST_MODEL") and not os.environ.get("OPENAI_SMALL_FAST_MODEL"):
                if name in ("openai", "bedrock-mantle"):
                    os.environ.setdefault("OPENAI_SMALL_FAST_MODEL", model_config["fast_model"])
                else:
                    os.environ.setdefault("ANTHROPIC_SMALL_FAST_MODEL", model_config["fast_model"])

    # 4. Auto-detect
    if not name:
        name = _auto_detect_provider()

    if not name:
        raise ValueError(
            f"No AI provider configured. Set up with one of:\n"
            f"  1. Run: seatunnel --init              (interactive setup)\n"
            f"  2. Set: export AI_PROVIDER=<{available}>\n"
            f"  3. Set provider credentials:\n"
            f"     - Anthropic: export ANTHROPIC_API_KEY=sk-ant-...\n"
            f"     - OpenAI:    export OPENAI_API_KEY=sk-...\n"
            f"     - Bedrock:   configure AWS credentials (aws configure)"
        )

    name = name.lower().strip()
    cls = _PROVIDERS.get(name)
    if cls is None:
        raise ValueError(f"Unknown AI provider '{name}'. Available: {available}")
    return cls()

View on GitHub (pinned to cf67b549a7)