Skip to content
12 changes: 12 additions & 0 deletions dspy/adapters/types/audio.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,10 @@ def from_url(cls, url: str) -> "Audio":
if not mime_type.startswith("audio/"):
raise ValueError(f"Unsupported MIME type for audio: {mime_type}")
audio_format = mime_type.split("/")[1]

if "x-" in audio_format:
audio_format = audio_format.replace("x-", "")

encoded_data = base64.b64encode(response.content).decode("utf-8")
return cls(data=encoded_data, audio_format=audio_format)

Expand All @@ -80,6 +84,10 @@ def from_file(cls, file_path: str) -> "Audio":
file_data = file.read()

audio_format = mime_type.split("/")[1]

if "x-" in audio_format:
audio_format = audio_format.replace("x-", "")

encoded_data = base64.b64encode(file_data).decode("utf-8")
return cls(data=encoded_data, audio_format=audio_format)

Expand Down Expand Up @@ -126,6 +134,10 @@ def encode_audio(audio: Union[str, bytes, dict, "Audio", Any], sampling_rate: in
header, b64data = audio.split(",", 1)
mime = header.split(";")[0].split(":")[1]
audio_format = mime.split("/")[1]

if "x-" in audio_format:
audio_format = audio_format.replace("x-", "")

return {"data": b64data, "audio_format": audio_format}
except Exception as e:
raise ValueError(f"Malformed audio data URI: {e}")
Expand Down