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

# Mistral AI

Portkey provides a robust and secure gateway to facilitate the integration of various Large Language Models (LLMs) into your applications, including [Mistral AI APIs](https://docs.mistral.ai/api/).

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

## Portkey SDK Integration with Mistral AI Models

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

### 1. Install the Portkey SDK

Add the Portkey SDK to your application to interact with Mistral 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 Mistral AI with Portkey, [get your API key from here](https://console.mistral.ai/api-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 Mistral AI 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 Mistral AI
    )
    ```
  </Tab>
</Tabs>

### **3.1. Invoke Chat Completions with** Mistral AI

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

You can also call the new Codestral model here!

<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: 'codestral-latest',
    });

    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= 'codestral-latest'
    )

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

***

## Invoke Codestral Endpoint

Using Portkey, you can also call Mistral API's new Codestral endpoint. Just pass the Codestral URL `https://codestral.mistral.ai/v1` with the `customHost` property.

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

    const portkey = new Portkey({
        apiKey: "PORTKEY_API_KEY",
        virtualKey: "MISTRAL_VIRTUAL_KEY",
        customHost: "https://codestral.mistral.ai/v1"
    })

    const codeCompletion = await portkey.chat.completions.create({
        model: "codestral-latest",
        messages: [{"role": "user", "content": "Write a minimalist Python code to validate the proof for the special number 1729"}]
    });

    console.log(codeCompletion.choices[0].message.content);
    ```
  </Tab>

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

    portkey = Portkey(
        api_key="PORTKEY_API_KEY",
        virtual_key="MISTRAL_VIRTUAL_KEY",
        custom_host="https://codestral.mistral.ai/v1"
    )

    code_completion = portkey.chat.completions.create(
        model="codestral-latest",
        messages=[{"role": "user", "content": "Write a minimalist Python code to validate the proof for the special number 1729"}]
    )

    print(code_completion.choices[0].message.content)
    ```
  </Tab>
</Tabs>

#### Your Codestral requests will show up on Portkey logs with the code snippets rendered beautifully!

<Frame>
  <img src="https://mintcdn.com/portkey-docs/wAHXB_jjwLt8bYcN/images/llms/mistral.png?fit=max&auto=format&n=wAHXB_jjwLt8bYcN&q=85&s=652dc8317ef2ed012d3e12e6de839f7e" width="1312" height="2656" data-path="images/llms/mistral.png" />
</Frame>

## Codestral v/s Mistral API Endpoint

Here's a handy guide for when you might want to make your requests to the Codestral endpoint v/s the original Mistral API endpoint:

<Frame>
  <img src="https://mintcdn.com/portkey-docs/wAHXB_jjwLt8bYcN/images/llms/codestral.png?fit=max&auto=format&n=wAHXB_jjwLt8bYcN&q=85&s=8d085cdff51174c645db04a89fdb844b" width="1838" height="1246" data-path="images/llms/codestral.png" />
</Frame>

[For more, check out Mistral's Code Generation guide here](https://docs.mistral.ai/capabilities/code%5Fgeneration/#operation/listModels).

***

## Managing Mistral AI Prompts

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

### Mistral 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 Mistral Tool Calling and makes it interoperable across multiple providers. With Portkey Prompts, you can templatize various your prompts & tool schemas as well.

<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: "your_mistral_model_name",
        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="your_mistral_model_name",
        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": "your_mistral_model_name",
           "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>
</Tabs>

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