> ## Documentation Index
> Fetch the complete documentation index at: https://phidatainc.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# S3 URL File Input

> Generate an S3 pre-signed URL with boto3 and pass it straight to Gemini to summarize the PDF without downloading it.

The Gemini API now supports external HTTPS URLs (up to 100MB). Generate a pre-signed URL from S3 and pass it directly to Gemini.

```python s3_url_file_input.py theme={null}
"""
Example: Analyze files from AWS S3 using pre-signed URLs.

The Gemini API now supports external HTTPS URLs (up to 100MB).
Generate a pre-signed URL from S3 and pass it directly to Gemini.

Requirements:
- AWS credentials configured (via environment variables or ~/.aws/credentials)
- boto3 installed: uv pip install boto3

Supported formats: PDF, JSON, HTML, CSS, XML, images (PNG, JPEG, WebP, GIF)

Note: External URL support requires Gemini 3.x models (e.g., gemini-3.5-flash).
      Gemini 2.0 models do not support this feature.
"""

import boto3
from agno.agent import Agent
from agno.media import File
from agno.models.google import Gemini

# ---------------------------------------------------------------------------
# Create Agent
# ---------------------------------------------------------------------------

# Generate a pre-signed URL for your S3 object
# Replace with your own bucket and key for private files
s3_client = boto3.client("s3")
presigned_url = s3_client.generate_presigned_url(
    "get_object",
    Params={
        "Bucket": "agno-public",  # Example: using Agno's public bucket
        "Key": "recipes/ThaiRecipes.pdf",
    },
    ExpiresIn=3600,  # URL valid for 1 hour
)

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

# Pass pre-signed URL directly - Gemini fetches the content
agent.print_response(
    "What is this document about? Answer in one sentence.",
    files=[
        File(
            url=presigned_url,
            mime_type="application/pdf",
        )
    ],
)

# ---------------------------------------------------------------------------
# Run Agent
# ---------------------------------------------------------------------------

if __name__ == "__main__":
    pass
```

## Run the Example

<Steps>
  <Snippet file="create-venv-step.mdx" />

  <Step title="Install dependencies">
    ```bash theme={null}
    uv pip install -U agno boto3 google-genai
    ```
  </Step>

  <Step title="Export your Google API key">
    <CodeGroup>
      ```bash Mac/Linux theme={null}
      export GOOGLE_API_KEY="your_google_api_key_here"
      ```

      ```bash Windows theme={null}
      $Env:GOOGLE_API_KEY="your_google_api_key_here"
      ```
    </CodeGroup>
  </Step>

  <Step title="Configure AWS credentials">
    Configure boto3 through environment variables, `~/.aws/credentials`, or an IAM role. The source presigns `s3://agno-public/recipes/ThaiRecipes.pdf`; if you use another object, update the bucket and key and give the AWS identity permission to read it.
  </Step>

  <Step title="Run the example">
    Save the code above as `s3_url_file_input.py`, then run:

    ```bash theme={null}
    python s3_url_file_input.py
    ```
  </Step>
</Steps>

Full source: [cookbook/90\_models/google/gemini/s3\_url\_file\_input.py](https://github.com/agno-agi/agno/blob/main/cookbook/90_models/google/gemini/s3_url_file_input.py)
