{"record":{"id":"9e49c21fcaf7322a","repo":"BerriAI/litellm","slug":"invalid-data-url-format-missing-comma-data-url","errorCode":null,"errorMessage":"Invalid data URL format (missing comma): {data_url[:50]}...","messagePattern":"Invalid data URL format \\(missing comma\\): (.+?)\\.\\.\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"litellm/llms/bedrock/embed/amazon_nova_transformation.py","lineNumber":71,"sourceCode":"    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\n\n    def _transform_request(\n        self,\n        input: str,\n        inference_params: dict,","sourceCodeStart":53,"sourceCodeEnd":89,"githubUrl":"https://github.com/BerriAI/litellm/blob/6c2dcb801bf2b75c18f1bb24140e7cf57465cc4d/litellm/llms/bedrock/embed/amazon_nova_transformation.py#L53-L89","documentation":"Data-URL parsing fails because no comma is present to separate metadata from the payload — valid form is data:image/jpeg;base64,<data>. The string starts with 'data:' but the ',' delimiter is missing, so split(“,”,1) would fail.","triggerScenarios":"Passing 'data:image/jpeg;base64' (metadata only), truncated strings cut at the comma, or a data URL where the payload was never appended.","commonSituations":"String truncation from size limits (logs, DB columns, message queues), templating bugs that drop the encoded payload, or manual construction that forgets the data section.","solutions":["Rebuild the data URL completely: metadata + ',' + base64 payload","Check for truncation upstream (column sizes, max body length) and re-fetch the original file","Log len(data_url) before the call to catch empty/truncated payloads early"],"exampleFix":"# before\nf\"data:{mime};base64\"  # payload omitted\n\n# after\nf\"data:{mime};base64,{b64_payload}\"","handlingStrategy":"validation","validationCode":"def parse_data_url(u: str) -> tuple[str, str]:\n    if not u.startswith(\"data:\") or \",\" not in u:\n        raise ValueError(f\"Invalid data URL format: {u[:50]}...\")\n    meta, payload = u.split(\",\", 1)\n    return meta[5:].split(\";\")[0], payload","typeGuard":"def is_complete_data_url(v) -> bool:\n    return isinstance(v, str) and v.startswith(\"data:\") and \",\" in v and v.split(\",\", 1)[1] != \"\"","tryCatchPattern":null,"preventionTips":["Check len(data_url) and comma presence before sending large media payloads","Avoid storing data URLs in size-limited columns/queues where truncation can occur"],"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"}