> ## 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.

# PDF Input File Upload

> Upload a PDF to the Gemini Files API, then ask an agent to summarize it and suggest a recipe from it.

In this example, we upload a PDF file to Google GenAI directly and then use it as an input to an agent.

```python pdf_input_file_upload.py theme={null}
"""
In this example, we upload a PDF file to Google GenAI directly and then use it as an input to an agent.

Note: If the size of the file is greater than 20MB, and a file path is provided, the file automatically gets uploaded to Google GenAI.
"""

from pathlib import Path
from time import sleep

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

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

pdf_path = Path(__file__).parent.joinpath("ThaiRecipes.pdf")

client = genai.Client()

# Upload the file to Google GenAI
upload_result = client.files.upload(file=pdf_path)

# Get the file from Google GenAI
if upload_result and upload_result.name:
    retrieved_file = client.files.get(name=upload_result.name)
else:
    retrieved_file = None

# Retry up to 3 times if file is not ready
retries = 0
wait_time = 5
while retrieved_file is None and retries < 3:
    retries += 1
    sleep(wait_time)
    if upload_result and upload_result.name:
        retrieved_file = client.files.get(name=upload_result.name)
    else:
        retrieved_file = None

if retrieved_file is not None:
    agent = Agent(
        model=Gemini(id="gemini-3.5-flash"),
        markdown=True,
        add_history_to_context=True,
    )

    agent.print_response(
        "Summarize the contents of the attached file.",
        files=[File(external=retrieved_file)],
    )

    agent.print_response(
        "Suggest me a recipe from the attached file.",
    )
else:
    print("Error: File was not ready after multiple attempts.")

# ---------------------------------------------------------------------------
# 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 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="Run the example">
    Save the code above as `pdf_input_file_upload.py`, then run:

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

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