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

# Groq

Portkey provides a robust and secure gateway to facilitate the integration of various Large Language Models (LLMs) into your applications, including [Groq APIs](https://console.groq.com/docs/quickstart).

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. `groq`
</Note>

## Portkey SDK Integration with Groq Models

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

### 1. Install the Portkey SDK

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

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

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

### 2. Initialize Portkey with the Virtual Key

To use Groq 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={"system"}
    import Portkey from 'portkey-ai'

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

  <Tab title="Python SDK">
    ```python theme={"system"}
    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** Groq

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

<Tabs>
  <Tab title="NodeJS SDK">
    ```js theme={"system"}
    const chatCompletion = await portkey.chat.completions.create({
        messages: [{ role: 'user', content: 'Say this is a test' }],
        model: 'mixtral-8x7b-32768',
    });

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

  <Tab title="Python SDK">
    ```python theme={"system"}
    completion = portkey.chat.completions.create(
        messages= [{ "role": 'user', "content": 'Say this is a test' }],
        model= 'mistral-medium'
    )

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

## Managing Groq Prompts

You can manage all prompts to Groq in the [Prompt Library](/product/prompt-library). All the current models of Groq 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.

### Groq Tool Calling

Tool calling feature lets models trigger external tools based on conversation context. You define available functions, the model chooses when to use them, and your application executes them and returns results.

Portkey supports Groq Tool Calling and makes it interoperable across multiple providers. With Portkey Prompts, you can templatize various your prompts & tool schemas as well.

<Card title="Supported Groq Models with Tool Calling" href="https://console.groq.com/docs/tool-use#supported-models" />

<Tabs>
  <Tab title="Node.js">
    ```javascript Get Weather Tool theme={"system"}
    let tools = [{
        type: "function",
        function: {
            name: "getWeather",
            description: "Get the current weather",
            parameters: {
                type: "object",
                properties: {
                    location: { type: "string", description: "City and state" },
                    unit: { type: "string", enum: ["celsius", "fahrenheit"] }
                },
                required: ["location"]
            }
        }
    }];

    let response = await portkey.chat.completions.create({
        model: "llama-3.3-70b-versatile",
        messages: [
            { role: "system", content: "You are a helpful assistant." },
            { role: "user", content: "What's the weather like in Delhi - respond in JSON" }
        ],
        tools,
        tool_choice: "auto",
    });

    console.log(response.choices[0].finish_reason);
    ```
  </Tab>

  <Tab title="Python">
    ```python Get Weather Tool theme={"system"}
    tools = [{
        "type": "function",
        "function": {
            "name": "getWeather",
            "description": "Get the current weather",
            "parameters": {
                "type": "object",
                "properties": {
                    "location": {"type": "string", "description": "City and state"},
                    "unit": {"type": "string", "enum": ["celsius", "fahrenheit"]}
                },
                "required": ["location"]
            }
        }
    }]

    response = portkey.chat.completions.create(
        model="llama-3.3-70b-versatile",
        messages=[
            {"role": "system", "content": "You are a helpful assistant."},
            {"role": "user", "content": "What's the weather like in Delhi - respond in JSON"}
        ],
        tools=tools,
        tool_choice="auto"
    )

    print(response.choices[0].finish_reason)
    ```
  </Tab>

  <Tab title="cURL">
    ```curl Get Weather Tool theme={"system"}
    curl -X POST "https://api.portkey.ai/v1/chat/completions" \
         -H "Content-Type: application/json" \
         -H "Authorization: Bearer YOUR_PORTKEY_API_KEY" \
         -d '{
           "model": "llama-3.3-70b-versatile",
           "messages": [
             {"role": "system", "content": "You are a helpful assistant."},
             {"role": "user", "content": "What'\''s the weather like in Delhi - respond in JSON"}
           ],
           "tools": [{
             "type": "function",
             "function": {
               "name": "getWeather",
               "description": "Get the current weather",
               "parameters": {
                 "type": "object",
                 "properties": {
                   "location": {"type": "string", "description": "City and state"},
                   "unit": {"type": "string", "enum": ["celsius", "fahrenheit"]}
                 },
                 "required": ["location"]
               }
             }
           }],
           "tool_choice": "auto"
         }'
    ```
  </Tab>

  <Tab title="Portkey Prompts" />
</Tabs>

### Groq Speech to Text (Whisper)

OpenAI's Audio API converts speech to text using the Whisper model. It offers transcription in the original language and translation to English, supporting multiple file formats and languages with high accuracy.

<CodeGroup>
  ```python Python theme={"system"}
  audio_file= open("/path/to/file.mp3", "rb")

  # Transcription
  transcription = portkey.audio.transcriptions.create(
    model="whisper-large-v3",
    file=audio_file
  )
  print(transcription.text)

  # Translation
  translation = portkey.audio.translations.create(
    model="whisper-large-v3",
    file=audio_file
  )
  print(translation.text)
  ```

  ```javascript Node.js theme={"system"}
  import fs from "fs";

  // Transcription
  async function transcribe() {
    const transcription = await portkey.audio.transcriptions.create({
      file: fs.createReadStream("/path/to/file.mp3"),
      model: "whisper-large-v3",
    });
    console.log(transcription.text);
  }
  transcribe();

  // Translation
  async function translate() {
      const translation = await portkey.audio.translations.create({
          file: fs.createReadStream("/path/to/file.mp3"),
          model: "whisper-large-v3",
      });
      console.log(translation.text);
  }
  translate();
  ```

  ```curl REST theme={"system"}
  # Transcription
  curl -X POST "https://api.portkey.ai/v1/audio/transcriptions" \
       -H "Authorization: Bearer YOUR_PORTKEY_API_KEY" \
       -H "Content-Type: multipart/form-data" \
       -F "file=@/path/to/file.mp3" \
       -F "model=whisper-large-v3"

  # Translation
  curl -X POST "https://api.portkey.ai/v1/audio/translations" \
       -H "Authorization: Bearer YOUR_PORTKEY_API_KEY" \
       -H "Content-Type: multipart/form-data" \
       -F "file=@/path/to/file.mp3" \
       -F "model=whisper-large-v3"
  ```
</CodeGroup>

***

### Groq Text to Speech

Groq's Text to Speech (TTS) API converts written text into natural-sounding audio using six distinct voices. It supports multiple languages, streaming capabilities, and various audio formats for different use cases.

<CodeGroup>
  ```python Python theme={"system"}
  from pathlib import Path

  speech_file_path = Path(__file__).parent / "speech.mp3"
  response = portkey.audio.speech.create(
    model="playai-tts",
    voice="Fritz-PlayAI",
    input="Today is a wonderful day to build something people love!"
  )

  with open(speech_file_path, "wb") as f:
      f.write(response.content)
  ```

  ````javascript Node.js theme={"system"}
  import path from 'path';
  import fs from 'fs';

  const speechFile = path.resolve("./speech.mp3");

  async function main() {
    const mp3 = await portkey.audio.speech.createCertainly! I'll continue with the Text to Speech section and then move on to the additional features and sections:

  ```javascript Node.js
  ({
      model: "playai-tts",
      voice: "Fritz-PlayAI",
      input: "Today is a wonderful day to build something people love!",
    });
    const buffer = Buffer.from(await mp3.arrayBuffer());
    await fs.promises.writeFile(speechFile, buffer);
  }

  main();
  ````

  ```curl REST theme={"system"}
  curl -X POST "https://api.portkey.ai/v1/audio/speech" \
       -H "Authorization: Bearer YOUR_PORTKEY_API_KEY" \
       -H "Content-Type: application/json" \
       -d '{
         "model": "playai-tts",
         "voice": "Fritz-PlayAI",
         "input": "Today is a wonderful day to build something people love!"
       }' \
       --output speech.mp3
  ```
</CodeGroup>

***

You'll find more information in the relevant sections:

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