{"record":{"id":"2935779957d8a704","repo":"BerriAI/litellm","slug":"invalid-gs-uri-gs-uri","errorCode":null,"errorMessage":"Invalid gs URI: {gs_uri}","messagePattern":"Invalid gs URI: (.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"litellm/llms/vertex_ai/gemini/transformation.py","lineNumber":213,"sourceCode":"        part_dict[\"media_resolution\"] = media_resolution_enum\n\n    if video_metadata is not None:\n        gemini_video_metadata: Final = {}\n        if \"fps\" in video_metadata:\n            gemini_video_metadata[\"fps\"] = video_metadata[\"fps\"]\n        if \"start_offset\" in video_metadata:\n            gemini_video_metadata[\"startOffset\"] = video_metadata[\"start_offset\"]\n        if \"end_offset\" in video_metadata:\n            gemini_video_metadata[\"endOffset\"] = video_metadata[\"end_offset\"]\n        if gemini_video_metadata:\n            part_dict[\"video_metadata\"] = gemini_video_metadata\n\n    return cast(PartType, part_dict)\n\n\ndef _parse_gs_uri(gs_uri: str) -> tuple[str, str]:\n    if not gs_uri.startswith(\"gs://\"):\n        raise ValueError(f\"Invalid gs URI: {gs_uri}\")\n    uri_without_scheme: Final = gs_uri[5:]  # drop gs://\n    uri_parts: Final = uri_without_scheme.split(\"/\", 1)\n    if len(uri_parts) != 2 or not uri_parts[0] or not uri_parts[1]:\n        raise ValueError(f\"Invalid gs URI: {gs_uri}\")\n    return uri_parts[0], uri_parts[1]\n\n\ndef _is_valid_gcs_bucket_name(bucket: str) -> bool:\n    \"\"\"\n    Validate bucket name against core GCS naming constraints.\n    \"\"\"\n    bucket_length: Final = len(bucket)\n    max_bucket_length: Final = 222 if \".\" in bucket else 63\n    if bucket_length < 3 or bucket_length > max_bucket_length:\n        return False\n    if \".\" in bucket and any(len(label) == 0 or len(label) > 63 for label in bucket.split(\".\")):\n        return False\n    if not re.fullmatch(r\"[a-z0-9][a-z0-9._-]*[a-z0-9]\", bucket):","sourceCodeStart":195,"sourceCodeEnd":231,"githubUrl":"https://github.com/BerriAI/litellm/blob/77b7c6c40c0c5aa5fbcb1d6a1825ac39ca8829b8/litellm/llms/vertex_ai/gemini/transformation.py#L195-L231","documentation":"Validation while converting file parts to Gemini format: a gs:// URI failed parsing/validation (must be gs://bucket/object), so the file reference cannot be turned into a Gemini fileData part.","triggerScenarios":"Triggered when a gs:// URI passed to the Vertex AI Gemini transformation is malformed.","commonSituations":"See trigger scenarios.","solutions":["Provide a valid gs://bucket/object URI.","Check for typos in the GCS URI."],"exampleFix":"gs_uri=\"gs://my-bucket/path/to/object\"","handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"77b7c6c40c0c5aa5fbcb1d6a1825ac39ca8829b8","analyzedAt":"2026-08-18T11:44:31.656Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}