refactor: let Artifact validator handle base64 decoding across all providers#139
refactor: let Artifact validator handle base64 decoding across all providers#139Kamilbenkirane merged 2 commits intomainfrom
Conversation
…oviders Remove manual base64.b64decode() calls and pass base64 strings directly to ImageArtifact/VideoArtifact/AudioArtifact(data=...). The Artifact field validator automatically decodes base64 strings to bytes. Closes #138 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Code reviewCritical Issue: Missing base64 decoder validatorThe entire premise of this PR is incorrect. The PR description claims:
This validator does not exist. Looking at
What will actually happenWhen Pydantic v2 receives a This will cause silent data corruption - the artifact's ImpactAll 9 changes across 6 files would produce corrupted outputs:
Required fixThe original
Note: Two files already have this bug pre-existing ( |
Add @field_validator("data", mode="before") to Artifact base class that
automatically decodes base64 strings to bytes. This is the counterpart
to the existing @field_serializer that encodes bytes to base64 for JSON
output. Without this validator, passing a base64 string to data= would
cause Pydantic to UTF-8 encode it, storing literal base64 text as bytes.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Summary
base64.b64decode()calls across 6 provider clientsImageArtifact/VideoArtifact/AudioArtifact(data=...)— theArtifactfield validator automatically decodes base64 strings to bytesimport base64from 5 filesFiles changed
modalities/images/providers/openai/client.py(2 instances)modalities/images/providers/xai/client.py(1 instance)modalities/images/providers/ollama/client.py(2 instances)modalities/images/providers/byteplus/client.py(2 instances)modalities/videos/providers/openai/client.py(1 instance)modalities/audio/providers/google/client.py(1 instance)Test plan
Closes #138
🤖 Generated with Claude Code