{"record":{"id":"ef468c893308ee7b","repo":"BerriAI/litellm","slug":"gcs-bucket-name-is-not-set-in-the-environment-but","errorCode":null,"errorMessage":"GCS_BUCKET_NAME is not set in the environment, but GCS Bucket is being used as a logging callback. Please set 'GCS_BUCKET_NAME' in the environment.","messagePattern":"GCS_BUCKET_NAME is not set in the environment, but GCS Bucket is being used as a logging callback\\. Please set 'GCS_BUCKET_NAME' in the environment\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"litellm/integrations/gcs_bucket/gcs_bucket_base.py","lineNumber":163,"sourceCode":"            kwargs = {}\n\n        standard_callback_dynamic_params: Final[StandardCallbackDynamicParams | None] = kwargs.get(\n            \"standard_callback_dynamic_params\", None\n        )\n\n        bucket_name: str\n        path_service_account: str | None\n        if standard_callback_dynamic_params is not None:\n            verbose_logger.debug(\"Using dynamic GCS logging\")\n            verbose_logger.debug(\"standard_callback_dynamic_params: %s\", standard_callback_dynamic_params)\n\n            _bucket_name: str | None = standard_callback_dynamic_params.get(\"gcs_bucket_name\", None) or self.BUCKET_NAME\n            _path_service_account: Final[str | None] = (\n                standard_callback_dynamic_params.get(\"gcs_path_service_account\", None) or self.path_service_account_json\n            )\n\n            if _bucket_name is None:\n                raise ValueError(\n                    \"GCS_BUCKET_NAME is not set in the environment, but GCS Bucket is being used as a logging callback. Please set 'GCS_BUCKET_NAME' in the environment.\"\n                )\n            bucket_name = _bucket_name\n            path_service_account = _path_service_account\n            vertex_instance = await self.get_or_create_vertex_instance(credentials=path_service_account)\n        else:\n            # If no dynamic parameters, use the default instance\n            if self.BUCKET_NAME is None:\n                raise ValueError(\n                    \"GCS_BUCKET_NAME is not set in the environment, but GCS Bucket is being used as a logging callback. Please set 'GCS_BUCKET_NAME' in the environment.\"\n                )\n            bucket_name = self.BUCKET_NAME\n            path_service_account = self.path_service_account_json\n            vertex_instance = await self.get_or_create_vertex_instance(credentials=path_service_account)\n\n        return GCSLoggingConfig(\n            bucket_name=bucket_name,\n            vertex_instance=vertex_instance,","sourceCodeStart":145,"sourceCodeEnd":181,"githubUrl":"https://github.com/BerriAI/litellm/blob/6c2dcb801bf2b75c18f1bb24140e7cf57465cc4d/litellm/integrations/gcs_bucket/gcs_bucket_base.py#L145-L181","documentation":"Raised in the dynamic-params branch of GCS bucket logging setup: when per-request dynamic params are supplied, the bucket name is resolved as standard_callback_dynamic_params['gcs_bucket_name'] falling back to the class-level BUCKET_NAME; if both are None the logging callback cannot proceed. BUCKET_NAME itself comes from the GCS_BUCKET_NAME env var.","triggerScenarios":"A request carries dynamic GCS logging params (gcs_path_service_account or similar) but neither gcs_bucket_name in the dynamic params nor GCS_BUCKET_NAME in the proxy environment is set.","commonSituations":"Per-team/per-request bucket routing configured in the DB with the bucket field left blank on some rows; env var present in one replica but missing in another.","solutions":["Set GCS_BUCKET_NAME in the proxy environment as the safe fallback.","Or populate gcs_bucket_name in the dynamic callback params for the affected request/team.","Audit dynamic logging config rows for empty gcs_bucket_name values."],"exampleFix":"# before: dynamic params without bucket, GCS_BUCKET_NAME unset\n\n# after\nexport GCS_BUCKET_NAME=my-default-logs-bucket","handlingStrategy":"validation","validationCode":"import os\n\nbucket = dynamic_params.get(\"gcs_bucket_name\") or os.getenv(\"GCS_BUCKET_NAME\")\nif not bucket:\n    raise ValueError(\"Set gcs_bucket_name in dynamic logging params or GCS_BUCKET_NAME in the env\")","typeGuard":"def gcs_dynamic_params_valid(p: dict | None) -> bool:\n    import os\n    if p is None:\n        return True\n    return bool(p.get(\"gcs_bucket_name\") or os.getenv(\"GCS_BUCKET_NAME\"))","tryCatchPattern":null,"preventionTips":["Always set GCS_BUCKET_NAME as the default even when using per-request buckets.","Add a NOT NULL / non-empty constraint on gcs_bucket_name in dynamic logging config tables.","Test dynamic-params rows in staging with the env var deliberately unset."],"tags":["gcs","env-vars","config","dynamic-params","logging-callback"],"backgroundTag":null,"analyzedSha":"6c2dcb801bf2b75c18f1bb24140e7cf57465cc4d","analyzedAt":"2026-08-15T07:12:03.035Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}