{"record":{"id":"7423d5b825268a2e","repo":"apache/seatunnel","slug":"orcarouter-api-key-environment-variable-is-require","errorCode":null,"errorMessage":"ORCAROUTER_API_KEY environment variable is required for AI_PROVIDER=orcarouter","messagePattern":"ORCAROUTER_API_KEY environment variable is required for AI_PROVIDER=orcarouter","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"seatunnel-cli/seatunnel_cli/llm_provider.py","lineNumber":1286,"sourceCode":"    \"\"\"\n\n    #: OrcaRouter's OpenAI-compatible base URL.\n    DEFAULT_BASE_URL = \"https://api.orcarouter.ai/v1\"\n    #: Default model: auto-routes to the best model for the request.\n    DEFAULT_MODEL = \"orcarouter/auto\"\n\n    def __init__(self):\n        try:\n            import openai\n        except ImportError:\n            raise ImportError(\n                \"openai package required for AI_PROVIDER=orcarouter. \"\n                \"Install it: pip install openai\"\n            )\n\n        api_key = os.environ.get(\"ORCAROUTER_API_KEY\")\n        if not api_key:\n            raise ValueError(\n                \"ORCAROUTER_API_KEY environment variable is required for \"\n                \"AI_PROVIDER=orcarouter\"\n            )\n\n        self._model_id = os.environ.get(\n            \"ORCAROUTER_MODEL\",\n            os.environ.get(\"OPENAI_MODEL\", self.DEFAULT_MODEL))\n        self._fast_model_id = os.environ.get(\n            \"ORCAROUTER_SMALL_FAST_MODEL\",\n            os.environ.get(\"OPENAI_SMALL_FAST_MODEL\", self._model_id))\n        self._client = openai.OpenAI(api_key=api_key, base_url=self.DEFAULT_BASE_URL)\n        self._echo_reasoning_content = _env_bool(\n            \"ORCAROUTER_ECHO_REASONING_CONTENT\", True)\n\n    @property\n    def provider_name(self) -> str:\n        return \"orcarouter\"\n","sourceCodeStart":1268,"sourceCodeEnd":1304,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-cli/seatunnel_cli/llm_provider.py#L1268-L1304","documentation":"The OrcaRouter provider requires an API key supplied through the ORCAROUTER_API_KEY environment variable. __init__ raises ValueError when the variable is unset or empty, because no authenticated requests can be made without it.","triggerScenarios":"Constructing the orcarouter provider while os.environ.get(\"ORCAROUTER_API_KEY\") returns None/empty — i.e. AI_PROVIDER=orcarouter is set (or provider name passed explicitly) but the key env var was never exported in the current shell/session.","commonSituations":"Setting AI_PROVIDER in a config file but exporting the key only in another shell; forgetting the export after installing the package; CI jobs missing the secret; running under systemd/cron where interactive shell env vars don't propagate.","solutions":["Export the key: export ORCAROUTER_API_KEY=<your-key> in the shell running seatunnel","Persist the variable in ~/.bashrc, ~/.zshrc, or an .env file loaded by the runner","Alternatively run `seatunnel --init` interactive setup to store credentials","In CI, add ORCAROUTER_API_KEY as a secret environment variable"],"exampleFix":"// before\n$ AI_PROVIDER=orcarouter seatunnel chat\nValueError: ORCAROUTER_API_KEY environment variable is required...\n// after\n$ export ORCAROUTER_API_KEY=sk-orca-...\n$ seatunnel chat","handlingStrategy":"validation","validationCode":"import os\nassert os.environ.get(\"ORCAROUTER_API_KEY\"), \"Set ORCAROUTER_API_KEY before running\"","typeGuard":null,"tryCatchPattern":"try:\n    provider = create_provider(\"orcarouter\")\nexcept ValueError as e:\n    if \"ORCAROUTER_API_KEY\" in str(e):\n        print(\"Export ORCAROUTER_API_KEY first\")\n        sys.exit(1)\n    raise","preventionTips":["Export ORCAROUTER_API_KEY in shell startup files or an .env loaded by the runner","Add the key as a secret in CI pipelines","Check env presence with a preflight script before launching long jobs"],"tags":["environment","api-key","configuration","llm"],"backgroundTag":"missing-env-var","analyzedSha":"cf67b549a7a6c35fa0beb12d83c62892427ea919","analyzedAt":"2026-09-10T21:44:55.265Z","contentChangedAt":"2026-09-10T21:44:55.265Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}