iflytek/astron-agent · error · ValueError

audio_data must be valid base64 encoded string

Error message

audio_data must be valid base64 encoded string

What it means

Pydantic field_validator on audio_data: the provided string fails base64.b64decode, so the request is rejected as malformed. Clients must send properly base64-encoded audio bytes for the ISE oral evaluation.

Solutions

  1. Send only the raw base64 payload (strip any 'data:...;base64,' prefix)
  2. Encode with base64.b64encode(audio_bytes).decode('ascii')
  3. Verify with base64.b64decode(value, validate=True) before sending; remove embedded newlines

Example fix

// before
audio_data = 'data:audio/wav;base64,' + b64  # fails decode
// after
audio_data = base64.b64encode(audio_bytes).decode('ascii')
Defensive patterns

Strategy: validation

Validate before calling

import base64, binascii
try:
    base64.b64decode(audio_data, validate=True)
except (binascii.Error, ValueError):
    raise ValueError('audio_data must be plain base64, no data: URI prefix')

Try / catch

try:
    req = IseEvaluateRequest(audio_data=audio_data, text=text)
except ValidationError as e:
    if any('base64' in str(err['msg']) for err in e.errors()):
        audio_data = audio_data.split(',', 1)[-1].replace('\n', '')
        req = IseEvaluateRequest(audio_data=audio_data, text=text)

Prevention

When it happens

Trigger: Passing raw binary bytes str-ified, a data-URI ('data:audio/wav;base64,...'), whitespace-corrupted, or otherwise malformed base64 in audio_data.

Common situations: Including the 'data:' URI prefix from a browser FileReader result; double-encoding; newline characters injected by JSON transports; sending hex instead of base64.

Understand the failure class

Background: "Invalid ... format", "must be in format X", "does not look like a ..." — invalid argument format errors across CLI tools and libraries — this error's family across 17 libraries.

Related errors


AI-assisted analysis of iflytek/astron-agent@5e758547a8 (2026-09-12). Data as JSON: /api/errors/8deecce19fc16778. Report an issue: GitHub.

Appendix: source

Thrown at core/plugin/aitools/service/ise/ise_evaluate_service.py:55

    @field_validator("group")
    @classmethod
    def validate_group(cls, value: str) -> str:
        """Validate group"""
        valid_groups = ["pupil", "youth", "adult"]
        if value not in valid_groups:
            raise ValueError(f"Invalid group: {value}. Valid options: {valid_groups}")
        return value

    @field_validator("audio_data")
    @classmethod
    def validate_audio_data(cls, value: str) -> str:
        """Validate audio_data"""
        if not value:
            raise ValueError("audio_data cannot be empty")
        try:
            base64.b64decode(value)
        except Exception as exc:
            raise ValueError("audio_data must be valid base64 encoded string") from exc
        return value


@api_service(
    method="POST",
    path="/aitools/v1/ise",
    query=None,
    body=ISEInput,
    response=BaseResponse,
    summary="ISE Evaluation",
    description="ISE Evaluation",
    tags=["public_cn"],
    deprecated=True,
)
async def ise_evaluate_service(body: ISEInput, request: Request) -> BaseResponse:
    """ISE Evaluation Service"""
    credentials = get_iflytek_open_platform_credentials()

View on GitHub (pinned to 5e758547a8)