# File generated from our OpenAPI spec by Castiron. See CONTRIBUTING.md for details.

from typing import Optional
from typing_extensions import Literal

from ..._models import BaseModel

__all__ = ["InputAudioBufferAppendEvent"]


class InputAudioBufferAppendEvent(BaseModel):
    """Send this event to append audio bytes to the input audio buffer.

    The audio
    buffer is temporary storage you can write to and later commit. A "commit" will create a new
    user message item in the conversation history from the buffer content and clear the buffer.
    Input audio transcription (if enabled) will be generated when the buffer is committed.

    If VAD is enabled the audio buffer is used to detect speech and the server will decide
    when to commit. When Server VAD is disabled, you must commit the audio buffer
    manually. Input audio noise reduction operates on writes to the audio buffer.

    The client may choose how much audio to place in each event up to a maximum
    of 15 MiB, for example streaming smaller chunks from the client may allow the
    VAD to be more responsive. Unlike most other client events, the server will
    not send a confirmation response to this event.
    """

    audio: str
    """Base64-encoded audio bytes.

    This must be in the format specified by the `input_audio_format` field in the
    session configuration.
    """

    type: Literal["input_audio_buffer.append"]
    """The event type, must be `input_audio_buffer.append`."""

    event_id: Optional[str] = None
    """Optional client-generated ID used to identify this event."""
