{"record":{"id":"c9dd7207e3546400","repo":"BerriAI/litellm","slug":"dashscope-api-key-is-not-set","errorCode":null,"errorMessage":"DASHSCOPE_API_KEY is not set","messagePattern":"DASHSCOPE_API_KEY is not set","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"litellm/llms/dashscope/image_generation/transformation.py","lineNumber":112,"sourceCode":"        optional_params: dict,\n        litellm_params: dict,\n        stream: bool | None = None,\n    ) -> str:\n        return api_base or get_secret_str(\"DASHSCOPE_API_BASE_IMAGE\") or DEFAULT_API_BASE\n\n    def validate_environment(\n        self,\n        headers: dict,\n        model: str,\n        messages: list[AllMessageValues],\n        optional_params: dict,\n        litellm_params: dict,\n        api_key: str | None = None,\n        api_base: str | None = None,\n    ) -> dict:\n        final_api_key: Final = api_key or get_secret_str(\"DASHSCOPE_API_KEY\")\n        if not final_api_key:\n            raise ValueError(\"DASHSCOPE_API_KEY is not set\")\n        headers[\"Authorization\"] = f\"Bearer {final_api_key}\"\n        headers[\"Content-Type\"] = \"application/json\"\n        return headers\n\n    def transform_image_generation_request(\n        self,\n        model: str,\n        prompt: str,\n        optional_params: dict,\n        litellm_params: dict,\n        headers: dict,\n    ) -> dict:\n        \"\"\"\n        Transform OpenAI-style image generation request to DashScope multimodal-generation format.\n        \"\"\"\n        parameters: Final[dict] = {}\n        for k, v in optional_params.items():\n            parameters[k] = v","sourceCodeStart":94,"sourceCodeEnd":130,"githubUrl":"https://github.com/BerriAI/litellm/blob/77b7c6c40c0c5aa5fbcb1d6a1825ac39ca8829b8/litellm/llms/dashscope/image_generation/transformation.py#L94-L130","documentation":"The DashScope image-generation handler's validate_environment needs a bearer token before any HTTP request: either an explicit api_key argument or the DASHSCOPE_API_KEY environment variable. Neither was present, so it raises ValueError('DASHSCOPE_API_KEY is not set') — a pure client-side configuration failure, no network call happened.","triggerScenarios":"litellm.image_generation(model='dashscope/<image-model>', prompt=...) executed in a process where DASHSCOPE_API_KEY was never exported and no api_key was passed (or supplied by the LiteLLM proxy config).","commonSituations":".env file not loaded (python-dotenv not run at startup); key exported in a different shell/venv than the running app; Docker/K8s secret not mounted; proxy config lists the deployment under a provider whose env var name is misspelled.","solutions":["Export the variable in the runtime environment: export DASHSCOPE_API_KEY=sk-... (or inject it via your container/CI secret store)","Or pass it per call: litellm.image_generation(..., api_key='sk-...')","If using the LiteLLM proxy, set DASHSCOPE_API_KEY in the dashscope deployment's litellm_params/environment_variables in litellm_config.yaml","Verify visibility in the failing process: python -c \"import os; print(bool(os.getenv('DASHSCOPE_API_KEY')))\""],"exampleFix":"# before\nimg = litellm.image_generation(model='dashscope/wanx2.1-t2i-turbo', prompt='a cat')  # ValueError\n\n# after\nimg = litellm.image_generation(\n    model='dashscope/wanx2.1-t2i-turbo',\n    prompt='a cat',\n    api_key=os.environ['DASHSCOPE_API_KEY'],  # or export DASHSCOPE_API_KEY first\n)","handlingStrategy":"validation","validationCode":"import os\n\ndef dashscope_ready() -> bool:\n    return bool(os.getenv('DASHSCOPE_API_KEY'))\n\nif not dashscope_ready():\n    raise RuntimeError('DASHSCOPE_API_KEY missing - refusing to start image-generation worker')","typeGuard":null,"tryCatchPattern":"try:\n    litellm.image_generation(model='dashscope/wanx2.1-t2i-turbo', prompt=p)\nexcept ValueError as e:\n    if 'DASHSCOPE_API_KEY' in str(e):\n        raise ConfigError('DashScope key not provisioned for this environment') from e\n    raise","preventionTips":["Load .env at process start, before any litellm import-time config","Run a boot-time assert on required provider env vars and fail fast","Store keys in a secret manager and inject them into the runtime environment in every environment"],"tags":["dashscope","image-generation","api-key","environment-variables"],"backgroundTag":"missing-api-key","analyzedSha":"77b7c6c40c0c5aa5fbcb1d6a1825ac39ca8829b8","analyzedAt":"2026-08-18T11:44:31.656Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}