{"record":{"id":"4d75a6ced26a6616","repo":"agentscope-ai/agentscope","slug":"unsupported-source-type-type-source-name-in","errorCode":null,"errorMessage":"Unsupported source type {type(source).__name__} in DataBlock.","messagePattern":"Unsupported source type (.+?) in DataBlock\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"src/agentscope/embedding/_gemini/_model.py","lineNumber":482,"sourceCode":"        if isinstance(source, Base64Source):\n            import base64\n\n            return types.Part.from_bytes(\n                data=base64.b64decode(source.data),\n                mime_type=source.media_type,\n            )\n\n        if isinstance(source, URLSource):\n            # Gemini SDK doesn't have a direct from_url for\n            # embed_content; download or use File API.\n            # For now, raise — callers should use Base64Source.\n            raise ValueError(\n                \"Gemini embedding API requires inline data \"\n                \"(Base64Source). URLSource is not directly supported \"\n                f\"for embedding. Got URL: {source.url}\",\n            )\n\n        raise ValueError(\n            f\"Unsupported source type {type(source).__name__} \"\n            f\"in DataBlock.\",\n        )\n","sourceCodeStart":464,"sourceCodeEnd":486,"githubUrl":"https://github.com/agentscope-ai/agentscope/blob/e90f1c7592896cc95f6e5ee506194f533378247d/src/agentscope/embedding/_gemini/_model.py#L464-L486","documentation":"A fallback guard in _data_block_to_part: the DataBlock's source is neither Base64Source nor URLSource (the two handled types). This almost always means a custom source class, a source left as None, or an object from an incompatible library version.","triggerScenarios":"Passing a DataBlock whose source is None, a locally-defined source subclass, or a source dataclass from a different (mismatched) agentscope/version namespace, so isinstance checks fail.","commonSituations":"Mixing agentscope versions in one environment (DataBlock imported from an old installed copy while the model uses the new one); creating DataBlock(source=...) with a plain dict; subclassing source types without updating formatters/models.","solutions":["Print type(source) and its module to see what actually arrived; verify module paths match agentscope.message","Ensure exactly one agentscope version is installed (pip show agentscope; clean venv)","Set source to a real Base64Source (inline) or URLSource instance"],"exampleFix":"# before\nblock = DataBlock(source={\"data\": b\"...\", \"media_type\": \"image/png\"})  # dict source\n\n# after\nfrom agentscope.message import DataBlock, Base64Source\nblock = DataBlock(source=Base64Source(data=..., media_type=\"image/png\"))","handlingStrategy":"type-guard","validationCode":"from agentscope.message import Base64Source, URLSource\nfor x in inputs:\n    src = getattr(x, \"source\", None)\n    assert isinstance(src, (Base64Source, URLSource)), type(src)","typeGuard":"from agentscope.message import Base64Source, URLSource\n\ndef has_supported_source(block) -> bool:\n    return isinstance(getattr(block, \"source\", None), (Base64Source, URLSource))","tryCatchPattern":"try:\n    emb = await model(inputs=inputs)\nexcept ValueError as e:\n    if \"Unsupported source type\" in str(e):\n        log_source_modules(inputs)  # diagnose version mismatch, then rebuild blocks\n        raise\n    raise","preventionTips":["Pin one agentscope version per environment","Always import DataBlock/source types from agentscope.message","Never assign dicts or None as DataBlock.source"],"tags":["embedding","gemini","datablock","source-type","version-mismatch"],"backgroundTag":"unsupported-source-type","analyzedSha":"e90f1c7592896cc95f6e5ee506194f533378247d","analyzedAt":"2026-08-28T18:24:12.087Z","schemaVersion":2},"datasetVersion":"2026-08-28T21:17:43.275Z"}