Azure OpenAI Provider
InfraPrism supports Azure OpenAI deployments, enabling cost tracking for organizations using Microsoft’s Azure-hosted OpenAI models.
Installation
pip install infraprism
Configuration
Azure OpenAI requires additional configuration for your deployment:
from infraprism import InfraPrismAzureOpenAI
client = InfraPrismAzureOpenAI(
azure_endpoint="https://your-resource.openai.azure.com",
api_key="your-azure-api-key",
api_version="2024-02-01",
infraprism_api_key="ip-...",
)
Environment Variables
You can also use environment variables:
export AZURE_OPENAI_ENDPOINT="https://your-resource.openai.azure.com"
export AZURE_OPENAI_API_KEY="your-azure-api-key"
export AZURE_OPENAI_API_VERSION="2024-02-01"
export INFRAPRISM_API_KEY="ip-..."
from infraprism import InfraPrismAzureOpenAI
client = InfraPrismAzureOpenAI() # Reads from environment
Basic Usage
Use your Azure deployment name as the model:
response = client.chat.completions.create(
model="my-gpt4-deployment", # Your deployment name
messages=[{"role": "user", "content": "Hello!"}],
entity_type="customer",
entity_id="acme-corp",
)
print(response.choices[0].message.content)
Cost Attribution
Add entity parameters just like the standard OpenAI provider:
response = client.chat.completions.create(
model="my-gpt4-deployment",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Explain cloud computing"}
],
entity_type="team",
entity_id="infrastructure",
tags={"region": "eastus", "env": "production"},
)
Model Mapping
Azure deployments use custom names. InfraPrism automatically maps deployment names to base models for cost calculation. If you’re using custom deployment names, specify the underlying model:
client = InfraPrismAzureOpenAI(
azure_endpoint="https://your-resource.openai.azure.com",
api_key="your-azure-api-key",
api_version="2024-02-01",
infraprism_api_key="ip-...",
infraprism_model_mapping={
"my-gpt4-deployment": "gpt-4",
"my-gpt35-deployment": "gpt-3.5-turbo",
"my-embedding-deployment": "text-embedding-ada-002",
},
)
Streaming
Streaming is fully supported:
stream = client.chat.completions.create(
model="my-gpt4-deployment",
messages=[{"role": "user", "content": "Write a story"}],
stream=True,
entity_type="project",
entity_id="storytelling",
)
for chunk in stream:
if chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="")
Async Support
from infraprism import AsyncInfraPrismAzureOpenAI
import asyncio
async def main():
client = AsyncInfraPrismAzureOpenAI(
azure_endpoint="https://your-resource.openai.azure.com",
api_key="your-azure-api-key",
api_version="2024-02-01",
)
response = await client.chat.completions.create(
model="my-gpt4-deployment",
messages=[{"role": "user", "content": "Hello!"}],
entity_type="customer",
entity_id="acme-corp",
)
print(response.choices[0].message.content)
asyncio.run(main())
Embeddings
Track embedding costs from Azure deployments:
response = client.embeddings.create(
model="my-embedding-deployment",
input="The quick brown fox",
entity_type="project",
entity_id="search-index",
)
Multiple Deployments
You can create multiple clients for different Azure resources:
# US East deployment
client_east = InfraPrismAzureOpenAI(
azure_endpoint="https://my-resource-eastus.openai.azure.com",
api_key="key-east",
infraprism_api_key="ip-...",
)
# EU West deployment
client_west = InfraPrismAzureOpenAI(
azure_endpoint="https://my-resource-westeu.openai.azure.com",
api_key="key-west",
infraprism_api_key="ip-...",
)
# Track which region is used
response = client_east.chat.completions.create(
model="gpt4-deployment",
messages=[{"role": "user", "content": "Hello"}],
entity_type="customer",
entity_id="acme-corp",
tags={"region": "eastus"},
)
Azure AD Authentication
For Azure AD authentication, use the azure_ad_token_provider:
from azure.identity import DefaultAzureCredential, get_bearer_token_provider
from infraprism import InfraPrismAzureOpenAI
token_provider = get_bearer_token_provider(
DefaultAzureCredential(),
"https://cognitiveservices.azure.com/.default"
)
client = InfraPrismAzureOpenAI(
azure_endpoint="https://your-resource.openai.azure.com",
azure_ad_token_provider=token_provider,
api_version="2024-02-01",
infraprism_api_key="ip-...",
)
Pricing
Azure OpenAI pricing varies by region and commitment tier. InfraPrism uses standard Azure pricing by default. For custom pricing (e.g., PTU commitments), contact us to configure custom rates.
Error Handling
Azure-specific errors are passed through:
from openai import AzureOpenAIError
try:
response = client.chat.completions.create(
model="my-deployment",
messages=[{"role": "user", "content": "Hello"}],
entity_type="customer",
entity_id="acme-corp",
)
except AzureOpenAIError as e:
print(f"Azure error: {e}")
Next Steps
- OpenAI Provider - Standard OpenAI integration
- Cost Attribution - Tagging best practices
- Configuration - All configuration options