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

# Perplexity AI

Portkey provides a robust and secure gateway to facilitate the integration of various Large Language Models (LLMs) into your applications, including [Perplexity AI APIs](https://docs.perplexity.ai/reference/post%5Fchat%5Fcompletions).

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

## Portkey SDK Integration with Perplexity AI Models

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

### 1. Install the Portkey SDK

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

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

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

### 2. Initialize Portkey with the Virtual Key

To use Perplexity AI with Portkey, [get your API key from here,](https://www.perplexity.ai/settings/api) 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 Perplexity 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 Perplexity AI
    )
    ```
  </Tab>
</Tabs>

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

Use the Portkey instance to send requests to Perplexity 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: 'pplx-70b-chat',
    });

    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= 'pplx-70b-chat'
    )

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

## Fetching citations

If you need to obtain citations in the response, you can disable [strict open ai compliance](/product/ai-gateway/strict-open-ai-compliance)

## Perplexity-Specific Features

Perplexity AI offers several unique features that can be accessed through additional parameters in your requests:

### Search Domain Filter (Beta)

You can limit citations to specific domains using the `search_domain_filter` parameter. This feature is currently in closed beta and limited to 3 domains for whitelisting or blacklisting.

<Tabs>
  <Tab title="Python SDK">
    ```python theme={null}
    completion = portkey.chat.completions.create(
        messages=[{"role": "user", "content": "Tell me about electric cars"}],
        model="pplx-70b-chat",
        search_domain_filter=["tesla.com", "ford.com", "-competitors.com"]  # Use '-' prefix for blacklisting
    )
    ```
  </Tab>

  <Tab title="NodeJS SDK">
    ```js theme={null}
    const completion = await portkey.chat.completions.create({
        messages: [{ role: "user", content: "Tell me about electric cars" }],
        model: "pplx-70b-chat",
        search_domain_filter: ["tesla.com", "ford.com", "-competitors.com"]  // Use '-' prefix for blacklisting
    });
    ```
  </Tab>
</Tabs>

### Image Results (Beta)

Enable image results in responses from online models using the `return_images` parameter:

<Tabs>
  <Tab title="Python SDK">
    ```python theme={null}
    completion = portkey.chat.completions.create(
        messages=[{"role": "user", "content": "Show me pictures of electric cars"}],
        model="pplx-70b-chat",
        return_images=True  # Feature in closed beta
    )
    ```
  </Tab>

  <Tab title="NodeJS SDK">
    ```js theme={null}
    const completion = await portkey.chat.completions.create({
        messages: [{ role: "user", content: "Show me pictures of electric cars" }],
        model: "pplx-70b-chat",
        return_images: true  // Feature in closed beta
    });
    ```
  </Tab>
</Tabs>

### Related Questions (Beta)

Get related questions in the response using the `return_related_questions` parameter:

<Tabs>
  <Tab title="Python SDK">
    ```python theme={null}
    completion = portkey.chat.completions.create(
        messages=[{"role": "user", "content": "Tell me about electric cars"}],
        model="pplx-70b-chat",
        return_related_questions=True  # Feature in closed beta
    )
    ```
  </Tab>

  <Tab title="NodeJS SDK">
    ```js theme={null}
    const completion = await portkey.chat.completions.create({
        messages: [{ role: "user", content: "Tell me about electric cars" }],
        model: "pplx-70b-chat",
        return_related_questions: true  // Feature in closed beta
    });
    ```
  </Tab>
</Tabs>

### Search Recency Filter

Filter search results based on time intervals using the `search_recency_filter` parameter:

<Tabs>
  <Tab title="Python SDK">
    ```python theme={null}
    completion = portkey.chat.completions.create(
        messages=[{"role": "user", "content": "What are the latest developments in electric cars?"}],
        model="pplx-70b-chat",
        search_recency_filter="week"  # Options: month, week, day, hour
    )
    ```
  </Tab>

  <Tab title="NodeJS SDK">
    ```js theme={null}
    const completion = await portkey.chat.completions.create({
        messages: [{ role: "user", content: "What are the latest developments in electric cars?" }],
        model: "pplx-70b-chat",
        search_recency_filter: "week"  // Options: month, week, day, hour
    });
    ```
  </Tab>
</Tabs>

### Web Search Options

Determines how much search context is retrieved for the model.
Options are:

* `low`: minimizes context for cost savings but less comprehensive answers.
* `medium`: balanced approach suitable for most queries.
* `high`: maximizes context for comprehensive answers but at higher cost.

<Tabs>
  <Tab title="Python SDK">
    ```python theme={null}
    completion = portkey.chat.completions.create(
        messages=[{"role": "user", "content": "What are the latest developments in electric cars?"}],
        model="sonar",
        web_search_options={
        "search_context_size": "high"
        }

    )
    ```
  </Tab>

  <Tab title="NodeJS SDK">
    ```js theme={null}
    const completion = await portkey.chat.completions.create({
        messages: [{ role: "user", content: "What are the latest developments in electric cars?" }],
        model: "sonar",
        web_search_options: {
          "search_context_size": "high"
          }
    });
    ```
  </Tab>
</Tabs>

### Search Recency Filter

Filters search results based on time (e.g., 'week', 'day').

<Tabs>
  <Tab title="Python SDK">
    ```python theme={null}
    completion = portkey.chat.completions.create(
        messages=[{"role": "user", "content": "What are the latest developments in electric cars?"}],
        model="sonar",
        "search_recency_filter": "<string>",
    )
    ```
  </Tab>

  <Tab title="NodeJS SDK">
    ```js theme={null}
    const completion = await portkey.chat.completions.create({
        messages: [{ role: "user", content: "What are the latest developments in electric cars?" }],
        model: "sonar",
        search_recency_filter: "<string>",
    });
    ```
  </Tab>
</Tabs>

## Managing Perplexity AI Prompts

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

## Next Steps

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 Perplexity AI](/product/ai-gateway/configs)[ requests](/product/ai-gateway/configs)
3. [Tracing Perplexity AI requests](/product/observability/traces)
4. [Setup a fallback from OpenAI to Perplexity AI APIs](/product/ai-gateway/fallbacks)
