> ## Documentation Index
> Fetch the complete documentation index at: https://portkey-docs-add-third-party-integration-issues-fixes.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Workers AI

Portkey provides a robust and secure gateway to facilitate the integration of various Large Language Models (LLMs) into your applications, including [Workers AI.](https://developers.cloudflare.com/workers-ai/)

With Portkey, you can take advantage of features like fast AI gateway access, observability, prompt management, and more, all while ensuring the secure management of your LLM API keys through a [virtual key](/product/ai-gateway/virtual-keys) system.

<Note>
  Provider Slug. **workers-ai**
</Note>

## Portkey SDK Integration with Workers AI Models

Portkey provides a consistent API to interact with models from various providers. To integrate Workers AI with Portkey:

### 1. Install the Portkey SDK

Add the Portkey SDK to your application to interact with Workers AI's API through Portkey's gateway.

<Tabs>
  <Tab title="NodeJS">
    ```sh theme={null}
    npm install --save portkey-ai
    ```
  </Tab>

  <Tab title="Python">
    ```sh theme={null}
    pip install portkey-ai
    ```
  </Tab>
</Tabs>

### 2. Initialize Portkey with the Virtual Key

To use Workers AI with Portkey, [get your API key from here](https://console.groq.com/keys), then add it to Portkey to create the virtual key.

<Tabs>
  <Tab title="NodeJS SDK">
    ```js theme={null}
    import Portkey from 'portkey-ai'

    const portkey = new Portkey({
        apiKey: "PORTKEY_API_KEY", // defaults to process.env["PORTKEY_API_KEY"]
        virtualKey: "VIRTUAL_KEY" // Your Workers AI Virtual Key
    })
    ```
  </Tab>

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

    portkey = Portkey(
        api_key="PORTKEY_API_KEY",  # Replace with your Portkey API key
        virtual_key="VIRTUAL_KEY"   # Replace with your virtual key for Groq
    )
    ```
  </Tab>
</Tabs>

### **3. Invoke Chat Completions with** Workers AI

Use the Portkey instance to send requests to Workers AI. You can also override the virtual key directly in the API call if needed.

<Tabs>
  <Tab title="NodeJS SDK">
    ```js theme={null}
    const chatCompletion = await portkey.chat.completions.create({
        messages: [{ role: 'user', content: 'Say "this is a test"' }],
        model: '@cf/meta/llama-3.2-3b-instruct',
    });

    console.log(chatCompletion.choices);
    ```
  </Tab>

  <Tab title="Python SDK">
    ```python theme={null}
    completion = portkey.chat.completions.create(
        messages= [{ "role": 'user', "content": 'Say "this is a test"' }],
        model= '@cf/meta/llama-3.2-3b-instruct'
    )

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

### **4. Invoke Image Generation with** Workers AI

Use the Portkey instance to send requests to Workers AI. You can also override the virtual key directly in the API call if needed.

Portkey supports the OpenAI signature to make text-to-image requests.

<Tabs>
  <Tab title="NodeJS">
    ```js theme={null}
    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
    });

    async function main() {
      const image = await portkey.images.generate({
        model: "image_model_name",
        prompt: "Lucy in the sky with diamonds"
      });

      console.log(image.data);
    }

    main();
    ```
  </Tab>

  <Tab title="Python">
    ```py theme={null}
    from portkey_ai import Portkey
    from IPython.display import display, Image

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

    image = portkey.images.generate(
      model="image_model_name",
      prompt="Lucy in the sky with diamonds"
    )

    # Display the image
    display(Image(url=image.data[0].url))
    ```
  </Tab>

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

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

    async function main() {
      const image = await openai.images.generate({
        model: "image_model_name",
        prompt: "Lucy in the sky with diamonds"
      });

      console.log(image.data);
    }

    main();
    ```
  </Tab>

  <Tab title="OpenAI Python">
    ```py theme={null}
    from openai import OpenAI
    from portkey_ai import PORTKEY_GATEWAY_URL, createHeaders
    from IPython.display import display, Image

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

    image = client.images.generate(
      model="image_model_name",
      prompt="Lucy in the sky with diamonds",
      n=1,
      size="1024x1024"
    )

    # Display the image
    display(Image(url=image.data[0].url))
    ```
  </Tab>

  <Tab title="cURL">
    ```sh theme={null}
    curl "https://api.portkey.ai/v1/images/generations" \
      -H "Content-Type: application/json" \
      -H "x-portkey-api-key: $PORTKEY_API_KEY" \
      -H "x-portkey-virtual-key: $WORKERS_AI_VIRTUAL_KEY" \
      -d '{
        "model": "image_model_name",
        "prompt": "Lucy in the sky with diamonds"
      }'
    ```
  </Tab>
</Tabs>

## Managing Workers AI Prompts

You can manage all prompts to Workers AI in the [Prompt Library](/product/prompt-library). All the current models of Workers AI are supported and you can easily start testing different prompts.

Once you're ready with your prompt, you can use the `portkey.prompts.completions.create` interface to use the prompt in your application.

The complete list of features supported in the SDK are available on the link below.

<Card title="SDK" href="/api-reference/portkey-sdk-client" />

You'll find more information in the relevant sections:

1. [Add metadata to your requests](/product/observability/metadata)
2. [Add gateway configs to your Workers requests](/product/ai-gateway/configs)
3. [Tracing Workers AI requests](/product/observability/traces)
4. [Setup a fallback from OpenAI to Workers AI APIs](/product/ai-gateway/fallbacks)
