Skip to content

Making File Downloading Model Profile Compatible #2142

Closed
@ChenghaoMou

Description

@ChenghaoMou

Description

When using OpenRouter with a Gemini model, it will try to download a file with a gs:// url even though Gemini supposedly can handle it directly.

import asyncio
import os

from dotenv import load_dotenv
from pydantic_ai import Agent
from pydantic_ai import AudioUrl
from pydantic_ai.models.openai import OpenAIModel
from pydantic_ai.providers.openrouter import OpenRouterProvider


async def main() -> None:
    load_dotenv()

    provider = OpenRouterProvider(
        api_key=os.environ["OPENROUTER_API_KEY"],
    )
    agent = Agent(
        model=OpenAIModel(
            "google/gemini-2.0-flash-001",
            provider=provider,
            profile=provider.model_profile,
        ),
        system_prompt="You are a helpful assistant that can transcribe audio to text.",
    )
    result = await agent.run(
        [
            "Here is the audio file to transcribe:",
            AudioUrl(
                url="gs://...",
                force_download=False,
            ),
        ],
    )
    print(result.output)


if __name__ == "__main__":
    asyncio.run(main())

The error stack

  File "/Users/chenghao/Developer/ai-reports/.venv/lib/python3.12/site-packages/pydantic_ai/models/openai.py", line 229, in request
    response = await self._completions_create(
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/chenghao/Developer/ai-reports/.venv/lib/python3.12/site-packages/pydantic_ai/models/openai.py", line 293, in _completions_create
    openai_messages = await self._map_messages(messages)
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/chenghao/Developer/ai-reports/.venv/lib/python3.12/site-packages/pydantic_ai/models/openai.py", line 416, in _map_messages
    async for item in self._map_user_message(message):
  File "/Users/chenghao/Developer/ai-reports/.venv/lib/python3.12/site-packages/pydantic_ai/models/openai.py", line 489, in _map_user_message
    yield await self._map_user_prompt(part)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/chenghao/Developer/ai-reports/.venv/lib/python3.12/site-packages/pydantic_ai/models/openai.py", line 545, in _map_user_prompt
    downloaded_item = await download_item(item, data_format='base64', type_format='extension')
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/chenghao/Developer/ai-reports/.venv/lib/python3.12/site-packages/pydantic_ai/models/__init__.py", line 689, in download_item
    raise UserError('Downloading from protocol "gs://" is not supported.')
pydantic_ai.exceptions.UserError: Downloading from protocol "gs://" is not supported.

I am aware gs url support is available with Gemini/Google model classes from https://ai.pydantic.dev/input/#user-side-download-vs-direct-file-url, but I hope this downloading behavior could be more consistent with model profiles, in addition to model classes.

References

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions