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

# Files

> Upload files to Google Cloud Storage for Vertex AI fine-tuning and batch inference

To perform fine-tuning or batch inference with Vertex AI, you need to upload files to Google Cloud Storage.
With Prisma AIRS AI Gateway, you can easily upload files to GCS and use them for fine-tuning or batch inference with Vertex AI models.

## Uploading Files

<Tabs>
  <Tab title="REST">
    ```sh theme={"system"}
    curl -X POST --header 'Authorization: Bearer <portkey_api_key>' \
     --header 'x-portkey-provider: @your-vertex-provider' \
     --header 'x-portkey-vertex-storage-bucket-name: <bucket_name>' \
     --header 'x-portkey-provider-file-name: <file_name>.jsonl' \
     --header 'x-portkey-provider-model: <model_name>' \
     --form 'purpose="fine-tune"' \
     --form 'file=@dataset.jsonl' \
     'https://aigw.portkey.ai/v1/files'
    ```
  </Tab>

  <Tab title="OpenAI NodeJS">
    ```js theme={"system"}
    import OpenAI from 'openai';
    import * as fs from 'fs';

    const openai = new OpenAI({
      apiKey: "PORTKEY_API_KEY",
      baseURL: "https://aigw.portkey.ai/v1",
      defaultHeaders: { "x-portkey-provider": "@VERTEX_PROVIDER", "x-portkey-vertex-storage-bucket-name": "your_bucket_name", "x-portkey-provider-file-name": "your_file_name.jsonl", "x-portkey-provider-model": "gemini-1.5-flash-001" }
    });

    const uploadFile = async () => {
      const file = await openai.files.create({
        purpose: "fine-tune", // Can be "fine-tune" or "batch"
        file: fs.createReadStream("dataset.jsonl")
      });

      console.log(file);
    }

    uploadFile();
    ```
  </Tab>

  <Tab title="OpenAI Python">
    ```python theme={"system"}
    from openai import OpenAI

    openai = OpenAI(
        api_key="PORTKEY_API_KEY",
        base_url="https://aigw.portkey.ai/v1",
        default_headers={"x-portkey-provider": "@VERTEX_PROVIDER", "x-portkey-vertex-storage-bucket-name": "your_bucket_name", "x-portkey-provider-file-name": "your_file_name.jsonl", "x-portkey-provider-model": "gemini-1.5-flash-001"}
    )

    upload_file_response = openai.files.create(
      purpose="fine-tune", # Can be "fine-tune" or "batch"
      file=open("dataset.jsonl", "rb")
    )

    print(upload_file_response)
    ```
  </Tab>
</Tabs>

## Get File

<Tabs>
  <Tab title="REST">
    ```sh theme={"system"}
    curl -X GET --header 'Authorization: Bearer <portkey_api_key>' \
    --header 'x-portkey-provider: @your-vertex-provider' \
    'https://aigw.portkey.ai/v1/files/<file_id>'
    ```
  </Tab>

  <Tab title="OpenAI NodeJS">
    ```js theme={"system"}
    import OpenAI from 'openai';

    const openai = new OpenAI({
      apiKey: "PORTKEY_API_KEY",
      baseURL: "https://aigw.portkey.ai/v1",
      defaultHeaders: { "x-portkey-provider": "@VERTEX_PROVIDER" }
    });

    const getFile = async () => {
      const file = await openai.files.retrieve("file_id");

      console.log(file);
    }

    getFile();
    ```
  </Tab>

  <Tab title="OpenAI Python">
    ```python theme={"system"}
    from openai import OpenAI

    openai = OpenAI(
        api_key="PORTKEY_API_KEY",
        base_url="https://aigw.portkey.ai/v1",
        default_headers={"x-portkey-provider": "@VERTEX_PROVIDER"}
    )

    file = openai.files.retrieve(file_id="file_id")

    print(file)
    ```
  </Tab>
</Tabs>

## Get File Content

<Tabs>
  <Tab title="REST">
    ```sh theme={"system"}
    curl -X GET --header 'Authorization: Bearer <portkey_api_key>' \
    --header 'x-portkey-provider: @your-vertex-provider' \
    'https://aigw.portkey.ai/v1/files/<file_id>/content'
    ```
  </Tab>

  <Tab title="OpenAI NodeJS">
    ```js theme={"system"}
    import OpenAI from 'openai';

    const openai = new OpenAI({
      apiKey: "PORTKEY_API_KEY",
      baseURL: "https://aigw.portkey.ai/v1",
      defaultHeaders: { "x-portkey-provider": "@VERTEX_PROVIDER" }
    });

    const getFileContent = async () => {
      const fileContent = await openai.files.content("file_id");

      console.log(fileContent);
    }

    getFileContent();
    ```
  </Tab>

  <Tab title="OpenAI Python">
    ```python theme={"system"}
    from openai import OpenAI

    openai = OpenAI(
        api_key="PORTKEY_API_KEY",
        base_url="https://aigw.portkey.ai/v1",
        default_headers={"x-portkey-provider": "@VERTEX_PROVIDER"}
    )

    file_content = openai.files.content(file_id="file_id")

    print(file_content)
    ```
  </Tab>
</Tabs>

Note: The `ListFiles` endpoint is not supported for Vertex AI.


## Related topics

- [Files](/docs/aigw/integrations/llms/anthropic/files.md)
