Audio Input (Upload the file)

Upload an audio file with the Gemini Files API and pass the uploaded file to an agent.

Use File(external=...) for a Google Files API object. Audio.content accepts raw bytes, so it cannot hold the uploaded SDK file object.

Code

from pathlib import Path

from agno.agent import Agent
from agno.media import File
from agno.models.google import Gemini
from google.genai.types import UploadFileConfig

model = Gemini(id="gemini-3.5-flash")
agent = Agent(
    model=model,
    markdown=True,
)

# Please download a sample audio file to test this Agent and upload using:
audio_path = Path(__file__).parent.joinpath("sample.mp3")
if not audio_path.is_file():
    raise FileNotFoundError(f"Place a sample MP3 at {audio_path}")
audio_file = None

remote_file_name = f"files/{audio_path.stem.lower()}"
try:
    audio_file = model.get_client().files.get(name=remote_file_name)
except Exception as e:
    print(f"Error getting file {audio_path.stem}: {e}")
    pass

if not audio_file:
    try:
        audio_file = model.get_client().files.upload(
            file=audio_path,
            config=UploadFileConfig(name=audio_path.stem, display_name=audio_path.stem),
        )
        print(f"Uploaded audio: {audio_file}")
    except Exception as e:
        raise RuntimeError("Audio upload failed; no agent request was sent") from e

if audio_file is None:
    raise RuntimeError("No uploaded audio is available")

agent.print_response(
    "Tell me about this audio",
    files=[File(external=audio_file)],
    stream=True,
)

Usage

Set up your virtual environment

uv venv --python 3.12
source .venv/bin/activate

Set your API key

export GOOGLE_API_KEY=xxx

Install dependencies

uv pip install -U google-genai agno

Prepare an audio file

Put a real MP3 named sample.mp3 in the same directory as the Python script, or update audio_path to your file.

Run Agent

Save the code above as audio_input_file_upload.py, then run:

python audio_input_file_upload.py