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

# Batches

> Perform batch inference with Azure OpenAI

With Portkey, you can perform [Azure OpenAI Batch Inference](https://learn.microsoft.com/en-us/azure/ai-services/openai/how-to/batch?tabs=global-batch%2Cstandard-input%2Cpython-secure\&pivots=rest-api) operations.
This is the most efficient way to

* Test your data with different foundation models
* Perform A/B testing with different foundation models
* Perform batch inference with different foundation models

## Create Batch Job

<Tabs>
  <Tab title="Python">
    ```python theme={"system"}
    from portkey_ai import Portkey

    # Initialize the Portkey client
    portkey = Portkey(
        api_key="PORTKEY_API_KEY",  # Replace with your Portkey API key
        virtual_key="VIRTUAL_KEY"   # Add your provider's virtual key
    )

    start_batch_response = portkey.batches.create(
      input_file_id="file_id", # file id of the input file
      endpoint="endpoint", # ex: /v1/chat/completions
      completion_window="completion_window", # ex: 24h
      metadata={} # metadata for the batch
    )

    print(start_batch_response)
    ```
  </Tab>

  <Tab title="NodeJS">
    ```js theme={"system"}
    import { Portkey } from 'portkey-ai';

    // Initialize the Portkey client
    const portkey = new Portkey({
        apiKey: "PORTKEY_API_KEY",  // Replace with your Portkey API key
        virtualKey: "VIRTUAL_KEY"   // Add your provider's virtual key
    });

    const startBatch = async () => {
      const startBatchResponse = await portkey.batches.create({
        input_file_id: "file_id", // file id of the input file
        endpoint: "endpoint", // ex: /v1/chat/completions
        completion_window: "completion_window", // ex: 24h
        metadata: {} // metadata for the batch
      });

      console.log(startBatchResponse);
    }

    await startBatch();

    ```
  </Tab>

  <Tab title="REST">
    ```sh theme={"system"}
    curl --location 'https://api.portkey.ai/v1/batches' \
    --header 'x-portkey-api-key: <portkey_api_key>' \
    --header 'x-portkey-virtual-key: <virtual_key>' \
    --header 'Content-Type: application/json' \
    --data '{
        "input_file_id": "<file_id>",
        "endpoint": "<endpoint>",
        "completion_window": "<completion_window>",
        "metadata": {},
    }'
    ```
  </Tab>

  <Tab title="OpenAI NodeJS">
    ```js theme={"system"}
    import OpenAI from 'openai'; // We're using the v4 SDK
    import { PORTKEY_GATEWAY_URL, createHeaders } from 'portkey-ai'

    const openai = new OpenAI({
      apiKey: 'OPENAI_API_KEY', // defaults to process.env["OPENAI_API_KEY"],
      baseURL: PORTKEY_GATEWAY_URL,
      defaultHeaders: createHeaders({
        provider: "openai",
        apiKey: "PORTKEY_API_KEY" // defaults to process.env["PORTKEY_API_KEY"]
      })
    });

    const startBatch = async () => {
      const startBatchResponse = await openai.batches.create({
        input_file_id: "file_id", // file id of the input file
        endpoint: "endpoint", // ex: /v1/chat/completions
        completion_window: "completion_window", // ex: 24h
        metadata: {} // metadata for the batch
      });

      console.log(startBatchResponse);
    }

    await startBatch();
    ```
  </Tab>

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

    openai = OpenAI(
        api_key='OPENAI_API_KEY',
        base_url=PORTKEY_GATEWAY_URL,
        default_headers=createHeaders(
            provider="openai",
            api_key="PORTKEY_API_KEY"
        )
    )

    start_batch_response = openai.batches.create(
      input_file_id="file_id", # file id of the input file
      endpoint="endpoint", # ex: /v1/chat/completions
      completion_window="completion_window", # ex: 24h
      metadata={} # metadata for the batch
    )

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

## List Batch Jobs

<Tabs>
  <Tab title="Python">
    ```python theme={"system"}
    from portkey_ai import Portkey

    # Initialize the Portkey client
    portkey = Portkey(
        api_key="PORTKEY_API_KEY",  # Replace with your Portkey API key
        virtual_key="VIRTUAL_KEY"   # Add your provider's virtual key
    )

    batches = portkey.batches.list()

    print(batches)
    ```
  </Tab>

  <Tab title="NodeJS">
    ```js theme={"system"}
    import { Portkey } from 'portkey-ai';

    // Initialize the Portkey client
    const portkey = new Portkey({
        apiKey: "PORTKEY_API_KEY",  // Replace with your Portkey API key
        virtualKey: "VIRTUAL_KEY"   // Add your provider's virtual key
    });

    const listBatches = async () => {
      const batches = await portkey.batches.list();

      console.log(batches);
    }

    await listBatches();

    ```
  </Tab>

  <Tab title="REST">
    ```sh theme={"system"}
    curl --location 'https://api.portkey.ai/v1/batches' \
    --header 'x-portkey-api-key: <portkey_api_key>' \
    --header 'x-portkey-virtual-key: <virtual_key>'
    ```
  </Tab>

  <Tab title="OpenAI NodeJS">
    ```js theme={"system"}
    import OpenAI from 'openai'; // We're using the v4 SDK
    import { PORTKEY_GATEWAY_URL, createHeaders } from 'portkey-ai'

    const openai = new OpenAI({
      apiKey: 'OPENAI_API_KEY', // defaults to process.env["OPENAI_API_KEY"],
      baseURL: PORTKEY_GATEWAY_URL,
      defaultHeaders: createHeaders({
        provider: "openai",
        apiKey: "PORTKEY_API_KEY" // defaults to process.env["PORTKEY_API_KEY"]
      })
    });

    const listBatches = async () => {
      const batches = await openai.batches.list();

      console.log(batches);
    }

    await listBatches();
    ```
  </Tab>

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

    openai = OpenAI(
        api_key='OPENAI_API_KEY',
        base_url=PORTKEY_GATEWAY_URL,
        default_headers=createHeaders(
            provider="openai",
            api_key="PORTKEY_API_KEY"
        )
    )

    batches = openai.batches.list()

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

## Get Batch Job Details

<Tabs>
  <Tab title="Python">
    ```python theme={"system"}
    from portkey_ai import Portkey

    # Initialize the Portkey client
    portkey = Portkey(
        api_key="PORTKEY_API_KEY",  # Replace with your Portkey API key
        virtual_key="VIRTUAL_KEY"   # Add your provider's virtual key
    )

    batch = portkey.batches.retrieve(batch_id="batch_id")

    print(batch)
    ```
  </Tab>

  <Tab title="NodeJS">
    ```js theme={"system"}
    import { Portkey } from 'portkey-ai';

    // Initialize the Portkey client
    const portkey = new Portkey({
        apiKey: "PORTKEY_API_KEY",  // Replace with your Portkey API key
        virtualKey: "VIRTUAL_KEY"   // Add your provider's virtual key
    });

    const getBatch = async () => {
      const batch = await portkey.batches.retrieve(batch_id="batch_id");

      console.log(batch);
    }

    await getBatch();

    ```
  </Tab>

  <Tab title="REST">
    ```sh theme={"system"}
    curl --location 'https://api.portkey.ai/v1/batches/<batch_id>' \
    --header 'x-portkey-api-key: <portkey_api_key>' \
    --header 'x-portkey-virtual-key: <virtual_key>'
    ```
  </Tab>

  <Tab title="OpenAI NodeJS">
    ```js theme={"system"}
    import OpenAI from 'openai'; // We're using the v4 SDK
    import { PORTKEY_GATEWAY_URL, createHeaders } from 'portkey-ai'

    const openai = new OpenAI({
      apiKey: 'OPENAI_API_KEY', // defaults to process.env["OPENAI_API_KEY"],
      baseURL: PORTKEY_GATEWAY_URL,
      defaultHeaders: createHeaders({
        provider: "openai",
        apiKey: "PORTKEY_API_KEY" // defaults to process.env["PORTKEY_API_KEY"]
      })
    });

    const getBatch = async () => {
      const batch = await openai.batches.retrieve(batch_id="batch_id");

      console.log(batch);
    }

    await getBatch();
    ```
  </Tab>

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

    openai = OpenAI(
        api_key='OPENAI_API_KEY',
        base_url=PORTKEY_GATEWAY_URL,
        default_headers=createHeaders(
            provider="openai",
            api_key="PORTKEY_API_KEY"
        )
    )

    batch = openai.batches.retrieve(batch_id="batch_id")

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

## Get Batch Output

<Tabs>
  <Tab title="REST">
    ```sh theme={"system"}
    curl --location 'https://api.portkey.ai/v1/batches/<batch_id>/output' \
    --header 'x-portkey-api-key: <portkey_api_key>' \
    --header 'x-portkey-virtual-key: <virtual_key>'
    ```
  </Tab>
</Tabs>

## List Batch Jobs

<Tabs>
  <Tab title="Python">
    ```python theme={"system"}
    from portkey_ai import Portkey

    # Initialize the Portkey client
    portkey = Portkey(
        api_key="PORTKEY_API_KEY",  # Replace with your Portkey API key
        virtual_key="VIRTUAL_KEY"   # Add your provider's virtual key
    )

    batches = portkey.batches.list()

    print(batches)
    ```
  </Tab>

  <Tab title="NodeJS">
    ```js theme={"system"}
    import { Portkey } from 'portkey-ai';

    // Initialize the Portkey client
    const portkey = new Portkey({
        apiKey: "PORTKEY_API_KEY",  // Replace with your Portkey API key
        virtualKey: "VIRTUAL_KEY"   // Add your provider's virtual key
    });

    const listBatchingJobs = async () => {
      const batching_jobs = await portkey.batches.list();

      console.log(batching_jobs);
    }

    await listBatchingJobs();

    ```
  </Tab>

  <Tab title="REST">
    ```sh theme={"system"}
    curl --location 'https://api.portkey.ai/v1/batches' \
    --header 'x-portkey-api-key: <portkey_api_key>' \
    --header 'x-portkey-virtual-key: <virtual_key>'
    ```
  </Tab>

  <Tab title="OpenAI NodeJS">
    ```js theme={"system"}
    import OpenAI from 'openai'; // We're using the v4 SDK
    import { PORTKEY_GATEWAY_URL, createHeaders } from 'portkey-ai'

    const openai = new OpenAI({
      apiKey: 'OPENAI_API_KEY', // defaults to process.env["OPENAI_API_KEY"],
      baseURL: PORTKEY_GATEWAY_URL,
      defaultHeaders: createHeaders({
        provider: "openai",
        apiKey: "PORTKEY_API_KEY" // defaults to process.env["PORTKEY_API_KEY"]
      })
    });

    const listBatchingJobs = async () => {
      const batching_jobs = await openai.batches.list();

      console.log(batching_jobs);
    }

    await listBatchingJobs();
    ```
  </Tab>

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

    openai = OpenAI(
        api_key='OPENAI_API_KEY',
        base_url=PORTKEY_GATEWAY_URL,
        default_headers=createHeaders(
            provider="openai",
            api_key="PORTKEY_API_KEY"
        )
    )

    batching_jobs = openai.batches.list()

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

## Cancel Batch Job

<Tabs>
  <Tab title="Python">
    ```python theme={"system"}
    from portkey_ai import Portkey

    # Initialize the Portkey client
    portkey = Portkey(
        api_key="PORTKEY_API_KEY",  # Replace with your Portkey API key
        virtual_key="VIRTUAL_KEY"   # Add your provider's virtual key
    )

    cancel_batch_response = portkey.batches.cancel(batch_id="batch_id")

    print(cancel_batch_response)
    ```
  </Tab>

  <Tab title="NodeJS">
    ```js theme={"system"}
    import { Portkey } from 'portkey-ai';

    // Initialize the Portkey client
    const portkey = new Portkey({
        apiKey: "PORTKEY_API_KEY",  // Replace with your Portkey API key
        virtualKey: "VIRTUAL_KEY"   // Add your provider's virtual key
    });

    const cancelBatch = async () => {
      const cancel_batch_response = await portkey.batches.cancel(batch_id="batch_id");

      console.log(cancel_batch_response);
    }

    await cancelBatch();

    ```
  </Tab>

  <Tab title="REST">
    ```sh theme={"system"}
    curl --request POST --location 'https://api.portkey.ai/v1/batches/<batch_id>/cancel' \
    --header 'x-portkey-api-key: <portkey_api_key>' \
    --header 'x-portkey-virtual-key: <virtual_key>'
    ```
  </Tab>

  <Tab title="OpenAI NodeJS">
    ```js theme={"system"}
    import OpenAI from 'openai'; // We're using the v4 SDK
    import { PORTKEY_GATEWAY_URL, createHeaders } from 'portkey-ai'

    const openai = new OpenAI({
      apiKey: 'OPENAI_API_KEY', // defaults to process.env["OPENAI_API_KEY"],
      baseURL: PORTKEY_GATEWAY_URL,
      defaultHeaders: createHeaders({
        provider: "openai",
        apiKey: "PORTKEY_API_KEY" // defaults to process.env["PORTKEY_API_KEY"]
      })
    });

    const cancelBatch = async () => {
      const cancel_batch_response = await openai.batches.cancel(batch_id="batch_id");

      console.log(cancel_batch_response);
    }

    await cancelBatch();
    ```
  </Tab>

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

    openai = OpenAI(
        api_key='OPENAI_API_KEY',
        base_url=PORTKEY_GATEWAY_URL,
        default_headers=createHeaders(
            provider="openai",
            api_key="PORTKEY_API_KEY"
        )
    )

    cancel_batch_response = openai.batches.cancel(batch_id="batch_id")

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