{"record":{"id":"916419ef39dab534","repo":"BerriAI/litellm","slug":"invalid-data-url-format-data-url-50","errorCode":null,"errorMessage":"Invalid data URL format: {data_url[:50]}...","messagePattern":"Invalid data URL format: (.+?)\\.\\.\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"litellm/llms/bedrock/embed/amazon_nova_transformation.py","lineNumber":66,"sourceCode":"                optional_params[\"embedding_dimension\"] = v\n            elif k in self.get_supported_openai_params():\n                optional_params[k] = v\n        return optional_params\n\n    def _parse_data_url(self, data_url: str) -> tuple:\n        \"\"\"\n        Parse a data URL to extract the media type and base64 data.\n\n        Args:\n            data_url: Data URL in format: data:image/jpeg;base64,/9j/4AAQ...\n\n        Returns:\n            tuple: (media_type, base64_data)\n                media_type: e.g., \"image/jpeg\", \"video/mp4\", \"audio/mpeg\"\n                base64_data: The base64-encoded data without the prefix\n        \"\"\"\n        if not data_url.startswith(\"data:\"):\n            raise ValueError(f\"Invalid data URL format: {data_url[:50]}...\")\n\n        # Split by comma to separate metadata from data\n        # Format: data:image/jpeg;base64,<base64_data>\n        if \",\" not in data_url:\n            raise ValueError(f\"Invalid data URL format (missing comma): {data_url[:50]}...\")\n\n        metadata, base64_data = data_url.split(\",\", 1)\n\n        # Extract media type from metadata\n        # Remove 'data:' prefix and ';base64' suffix\n        metadata = metadata[5:]  # Remove 'data:'\n\n        if \";\" in metadata:\n            media_type = metadata.split(\";\")[0]\n        else:\n            media_type = metadata\n\n        return media_type, base64_data","sourceCodeStart":48,"sourceCodeEnd":84,"githubUrl":"https://github.com/BerriAI/litellm/blob/6c2dcb801bf2b75c18f1bb24140e7cf57465cc4d/litellm/llms/bedrock/embed/amazon_nova_transformation.py#L48-L84","documentation":"Raised by the Amazon Nova embedding/multimodal transformation when a supplied media reference is not a data URL: it must start with 'data:' (format data:<mediatype>;base64,<payload>). Only the first 50 characters are echoed in the error.","triggerScenarios":"Passing an https:// image URL, a local file path, or a raw base64 string without the data: prefix as image/video/audio data to Nova embed calls.","commonSituations":"Receiving file references from webhooks/frontend uploads that use hosted URLs, or base64 blobs generated upstream whose data-URL prefix was stripped during JSON transport.","solutions":["Convert the media to a data URL: f\"data:{mime};base64,{b64data}\"","For remote files, download the bytes and base64-encode them with the correct MIME type before building the data URL","Ensure the prefix uses lowercase 'data:' exactly"],"exampleFix":"# before\n{\"image\": \"https://example.com/cat.jpg\"}\n\n# after\nimport base64, mimetypes\ndef to_data_url(path):\n    mime = mimetypes.guess_type(path)[0] or \"application/octet-stream\"\n    return f\"data:{mime};base64,\" + base64.b64encode(open(path, 'rb').read()).decode()","handlingStrategy":"type-guard","validationCode":"def is_data_url(v: str) -> bool:\n    return isinstance(v, str) and v.startswith(\"data:\") and \",\" in v","typeGuard":"def to_data_url(raw: str, mime: str = \"image/jpeg\") -> str:\n    if raw.startswith(\"data:\"):\n        return raw\n    if raw.startswith((\"http://\", \"https://\")):\n        import base64, urllib.request\n        b = urllib.request.urlopen(raw).read()\n        return f\"data:{mime};base64,\" + base64.b64encode(b).decode()\n    raise ValueError(\"unsupported media reference\")","tryCatchPattern":null,"preventionTips":["Convert all media to data URLs in one boundary function before Nova calls","Standardize on data:<mime>;base64,<payload> in your storage layer"],"tags":["bedrock","nova","embedding","data-url","validation"],"backgroundTag":null,"analyzedSha":"6c2dcb801bf2b75c18f1bb24140e7cf57465cc4d","analyzedAt":"2026-08-15T07:12:03.035Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}