> ## Documentation Index
> Fetch the complete documentation index at: https://docs.obiguard.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Azure OpenAI

> Azure OpenAI is a great alternative to accessing the best models including GPT-4 and more in your private environments. Obiguard provides complete support for Azure OpenAI.

With Obiguard, 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](/virtual-keys) system.

<Note>
  Provider Slug. `azure-openai`
</Note>

## Obiguard SDK Integration with Azure OpenAI

Obiguard provides a consistent API to interact with models from various providers. To integrate Azure OpenAI with Obiguard:

### First, add your Azure details to Obiguard's Virtual Keys

**Here's a step-by-step guide:**

1. Request access to Azure OpenAI [here](https://aka.ms/oai/access).
2. Create a resource in the Azure portal [here](https://portal.azure.com/?microsoft%5Fazure%5Fmarketplace%5FItemHideKey=microsoft%5Fopenai%5Ftip#create/Microsoft.CognitiveServicesOpenAI). (This will be your **Resource Name**)
3. Deploy a model in Azure OpenAI Studio [here](https://oai.azure.com/). (This will be your **Deployment Name)**
4. Select your `Foundation Model` from the dropdowon on the modal.
5. Now, on Azure OpenAI studio, go to any playground (chat or completions), click on a UI element called "View code". Note down the API version & API key from here. (This will be your **Azure API Version** & **Azure API Key**)

When you input these details, the foundation model will be auto populated. More details in [this guide](https://learn.microsoft.com/en-us/azure/ai-services/openai/how-to/create-resource?pivots=web-portal).

<Note>
  If you do not want to add your Azure details to Obiguard, you can also directly pass them while instantiating the Obiguard client. [More on that here.](/integrations/llms/azure-openai/azure-openai#making-requests-without-virtual-keys)
</Note>

**Now, let's make a request using this virtual key!**

### 1. Install the Obiguard SDK

Add the Obiguard SDK to your application to interact with Azure OpenAI's API through Obiguard's gateway.

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

### 2. Initialize Obiguard with the Virtual Key

Set up Obiguard with your virtual key as part of the initialization configuration. You can create a [virtual key](/virtual-keys) for Azure in the Obiguard UI.

<Tabs>
  <Tab title="Python SDK">
    ```python theme={null}
    from obiguard import Obiguard

    client = Obiguard(
      obiguard_api_key="sk-obg***",  # Your Obiguard API key
      virtual_key="AZURE_VIRTUAL_KEY"   # Replace with your virtual key for Azure
    )
    ```
  </Tab>
</Tabs>

### **3. Invoke Chat Completions with Azure OpenAI**

Use the Obiguard instance to send requests to your Azure deployments. You can also override the virtual key directly in the API call if needed.

<Tabs>
  <Tab title="Python SDK">
    ```python theme={null}
    completion = client.chat.completions.create(
        messages= [{ "role": 'user', "content": 'Say this is a test' }],
        model= 'custom_model_name'
    )

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

## Image Generation

Obioguard supports multiple modalities for Azure OpenAI and you can make image generation requests through Obioguard's AI Gateway the same way as making completion calls.

<Tabs>
  <Tab title="Obioguard Python SDK">
    ```python theme={null}
    from obiguard import Obiguard

    client = Obiguard(
        obiguard_api_key="sk-obg***",  # Your Obiguard API key
        virtual_key="DALL-E_VIRTUAL_KEY"   # Referencing a Dall-E Azure deployment with Virtual Key
    )

    image = client.images.generate(
      prompt="Lucy in the sky with diamonds",
      size="1024x1024"
    )
    ```
  </Tab>
</Tabs>

Obioguard's fast AI gateway captures the information about the request on your Obioguard Dashboard.
On your logs screen, you'd be able to see this request with the request and response.

<Frame>
  <img src="https://mintcdn.com/obiguard/1Nx7oPvMompXEA4c/images/llms/api.png?fit=max&auto=format&n=1Nx7oPvMompXEA4c&q=85&s=c88854b8517f2b8a566673900b7bc7e1" alt="api" width="2304" height="1568" data-path="images/llms/api.png" />
</Frame>

Log view for an image generation request on Azure OpenAI

More information on image generation is available in the [API Reference](/api-reference/completions-1#create-image).

***

## Making Requests Without Virtual Keys

Here's how you can pass your Azure OpenAI details and secrets directly without using the Virutal Keys feature.

### Key Mapping

In a typical Azure OpenAI request,

```sh theme={null}
curl https://{YOUR_RESOURCE_NAME}.openai.azure.com/openai/deployments/{YOUR_DEPLOYMENT_NAME}/chat/completions?api-version={API_VERSION} \
  -H "Content-Type: application/json" \
  -H "api-key: {YOUR_API_KEY}" \
  -d '{
    "model": "gpt-4o",
    "messages": [
      {
        "role": "system",
        "content": "You are a helpful assistant"
      },
      {
        "role": "user",
        "content": "what is a deer?"
      }
    ]
}'
```

| Parameter             | Node SDK                            | Python SDK                           | REST Headers                   |
| --------------------- | ----------------------------------- | ------------------------------------ | ------------------------------ |
| AZURE RESOURCE NAME   | azureResourceName                   | azure\_resource\_name                | x-obiguard-azure-resource-name |
| AZURE DEPLOYMENT NAME | azureDeploymentId                   | azure\_deployment\_id                | x-obiguard-azure-deployment-id |
| API VERSION           | azureApiVersion                     | azure\_api\_version                  | x-obiguard-azure-api-version   |
| AZURE API KEY         | Authorization: "Bearer + {API_KEY}" | Authorization = "Bearer + {API_KEY}" | Authorization                  |
| AZURE MODEL NAME      | azureModelName                      | azure\_model\_name                   | x-obiguard-azure-model-name    |

### Example

<Tabs>
  <Tab title="Python SDK">
    ```python theme={null}
    from obiguard import Obiguard

    client = Obiguard(
        obiguard_api_key="sk-obg***",  # Your Obiguard API key
        provider = "azure-openai",
        azure_resource_name = "AZURE_RESOURCE_NAME",
        azure_deployment_id = "AZURE_DEPLOYMENT_NAME",
        azure_api_version = "AZURE_API_VERSION",
        azure_model_name = "AZURE_MODEL_NAME",
        Authorization = "Bearer API_KEY"
    )
    ```
  </Tab>

  <Tab title="cURL">
    ```sh theme={null}
    curl https://gateway.obiguard.ai/v1/chat/completions \
      -H "Content-Type: application/json" \
      -H "Authorization: Bearer $AZURE_OPENAI_API_KEY" \
      -H "x-obiguard-api-key: $OBIGUARD_API_KEY" \
      -H "x-obiguard-provider: azure-openai" \
      -H "x-obiguard-azure-resource-name: $AZURE_RESOURCE_NAME" \
      -H "x-obiguard-azure-deployment-id: $AZURE_DEPLOYMENY_ID" \
      -H "x-obiguard-azure-model-name: $AZURE_MODEL_NAME" \
      -H "x-obiguard-azure-api-version: $AZURE_API_VERSION" \
      -d '{
        "model": "gpt-4o",
        "messages": [{"role": "user","content": "Hello!"}]
      }'
    ```
  </Tab>
</Tabs>

### How to Pass JWT (JSON Web Tokens)

If you have configured fine-grained access for Azure OpenAI and need to use `JSON web token (JWT)` in the `Authorization` header instead of the regular `API Key`,
you can use the `forwardHeaders` parameter to do this.

<Tabs>
  <Tab title="Python SDK">
    ```python theme={null}
    from obiguard import Obiguard

    client = Obiguard(
        obiguard_api_key="sk-obg***",  # Your Obiguard API key
        provider = "azure-openai",
        azure_resource_name = "AZURE_RESOURCE_NAME",
        azure_deployment_id = "AZURE_DEPLOYMENT_NAME",
        azure_api_version = "AZURE_API_VERSION",
        azure_model_name = "AZURE_MODEL_NAME",
        Authorization = "Bearer API_KEY", # Pass your JWT here
        forward_headers= [ "Authorization" ]

        )
    ```
  </Tab>
</Tabs>

For further questions on custom Azure deployments or fine-grained access tokens, reach out to us on [support@obiguard.com](mailto:support@obiguard.com).

## Next Steps

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

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