.claude/skills/ts-azure-openai/SKILL.md
Azure OpenAI Service — OpenAI models (GPT-4o, DALL-E 3, Whisper) on Azure infrastructure. Use when deploying OpenAI models with enterprise compliance (GDPR, HIPAA, SOC2), Azure-native auth via Managed Identity, content filtering, or VNET-isolated deployments. Same OpenAI API, hosted on Azure.
npx skillsauth add eliferjunior/Claude azure-openaiInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Azure OpenAI Service provides OpenAI's models (GPT-4o, GPT-4o mini, DALL-E 3, Whisper) hosted on Microsoft Azure infrastructure. It offers enterprise features: Managed Identity authentication (no API keys), VNET integration, Azure Policy compliance, content filtering, abuse monitoring, and regional data residency. Uses the same openai Python/TS SDK — just point it at your Azure endpoint.
| Feature | OpenAI (direct) | Azure OpenAI | |---|---|---| | Auth | API Key | API Key or Managed Identity | | Data residency | US primarily | Any Azure region | | Enterprise compliance | Limited | SOC2, HIPAA, ISO 27001 | | Content filtering | ❌ | ✅ Configurable | | VNET isolation | ❌ | ✅ Private endpoints | | Deployment control | Shared | Your own deployments | | Fine-tuning | ✅ | ✅ | | Latency to Azure services | Higher | Lower (co-located) |
pip install openai azure-identity # azure-identity for Managed Identity
# API Key auth (dev/test)
export AZURE_OPENAI_API_KEY=...
export AZURE_OPENAI_ENDPOINT=https://my-resource.openai.azure.com/
# Deployment names (you set these when deploying models in Azure Portal)
export AZURE_OPENAI_DEPLOYMENT=gpt-4o # Your deployment name
from openai import AzureOpenAI
client = AzureOpenAI(
api_key="your_azure_openai_api_key",
azure_endpoint="https://my-resource.openai.azure.com/",
api_version="2024-10-21", # Check docs for latest stable version
)
response = client.chat.completions.create(
model="gpt-4o", # This is your DEPLOYMENT NAME, not the model name
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "What is Azure OpenAI Service?"},
],
max_tokens=1024,
temperature=0.7,
)
print(response.choices[0].message.content)
from openai import AzureOpenAI
from azure.identity import DefaultAzureCredential, get_bearer_token_provider
# DefaultAzureCredential works with:
# - Managed Identity (in Azure VM, AKS, App Service, Functions)
# - Azure CLI (local development)
# - Visual Studio / VS Code credentials
credential = DefaultAzureCredential()
token_provider = get_bearer_token_provider(
credential,
"https://cognitiveservices.azure.com/.default"
)
client = AzureOpenAI(
azure_endpoint="https://my-resource.openai.azure.com/",
azure_ad_token_provider=token_provider,
api_version="2024-10-21",
)
response = client.chat.completions.create(
model="gpt-4o", # deployment name
messages=[{"role": "user", "content": "Hello!"}],
)
print(response.choices[0].message.content)
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.AZURE_OPENAI_API_KEY,
baseURL: `${process.env.AZURE_OPENAI_ENDPOINT}openai/deployments/${process.env.AZURE_OPENAI_DEPLOYMENT}`,
defaultQuery: { "api-version": "2024-10-21" },
defaultHeaders: { "api-key": process.env.AZURE_OPENAI_API_KEY },
});
const response = await client.chat.completions.create({
model: process.env.AZURE_OPENAI_DEPLOYMENT!,
messages: [{ role: "user", content: "Explain TypeScript generics." }],
});
console.log(response.choices[0].message.content);
from openai import AzureOpenAI
client = AzureOpenAI(
api_key="...",
azure_endpoint="https://my-resource.openai.azure.com/",
api_version="2024-10-21",
)
stream = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "Write a sonnet about cloud computing."}],
stream=True,
)
for chunk in stream:
if chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True)
print()
import json
from openai import AzureOpenAI
client = AzureOpenAI(
api_key="...",
azure_endpoint="https://my-resource.openai.azure.com/",
api_version="2024-10-21",
)
tools = [
{
"type": "function",
"function": {
"name": "get_azure_resource_cost",
"description": "Get the cost of an Azure resource for the current month",
"parameters": {
"type": "object",
"properties": {
"resource_group": {"type": "string"},
"resource_name": {"type": "string"},
},
"required": ["resource_group", "resource_name"],
},
},
}
]
messages = [{"role": "user", "content": "How much is my vm-prod01 costing this month?"}]
response = client.chat.completions.create(
model="gpt-4o",
messages=messages,
tools=tools,
tool_choice="auto",
)
if response.choices[0].finish_reason == "tool_calls":
tool_call = response.choices[0].message.tool_calls[0]
args = json.loads(tool_call.function.arguments)
print(f"Called: {tool_call.function.name} with {args}")
messages.append(response.choices[0].message)
messages.append({
"role": "tool",
"tool_call_id": tool_call.id,
"content": json.dumps({"cost_usd": 142.53, "currency": "USD"}),
})
final = client.chat.completions.create(model="gpt-4o", messages=messages)
print(final.choices[0].message.content)
from openai import AzureOpenAI
client = AzureOpenAI(
api_key="...",
azure_endpoint="https://my-resource.openai.azure.com/",
api_version="2024-02-01", # DALL-E uses a different API version
)
response = client.images.generate(
model="dall-e-3", # your DALL-E 3 deployment name
prompt="A futuristic city skyline with solar panels, photorealistic, golden hour",
size="1024x1024",
quality="hd",
n=1,
)
print(response.data[0].url)
print(f"Revised prompt: {response.data[0].revised_prompt}")
from openai import AzureOpenAI
client = AzureOpenAI(
api_key="...",
azure_endpoint="https://my-resource.openai.azure.com/",
api_version="2024-06-01",
)
with open("recording.mp3", "rb") as audio_file:
transcript = client.audio.transcriptions.create(
model="whisper", # your Whisper deployment name
file=audio_file,
language="en",
response_format="text",
)
print(transcript)
from openai import AzureOpenAI
client = AzureOpenAI(
api_key="...",
azure_endpoint="https://my-resource.openai.azure.com/",
api_version="2024-10-21",
)
response = client.embeddings.create(
model="text-embedding-3-large", # deployment name
input=["The quick brown fox", "Jumps over the lazy dog"],
)
for item in response.data:
print(f"Embedding {item.index}: {len(item.embedding)} dims")
A critical Azure OpenAI concept: deployments are your named instances of a model:
Azure Portal:
Resource: my-openai-resource
Deployments:
- Name: "gpt-4o" → Model: gpt-4o (2024-11-20)
- Name: "gpt-4o-mini" → Model: gpt-4o-mini (2024-07-18)
- Name: "text-embed-large" → Model: text-embedding-3-large
In code, model= takes the deployment name you configured, not the OpenAI model name.
Content filters are configured in Azure Portal under your deployment settings:
# When content is filtered, the API returns an error:
from openai import AzureOpenAI, BadRequestError
client = AzureOpenAI(...)
try:
response = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "user_input"}],
)
except BadRequestError as e:
if e.code == "content_filter":
print(f"Content filtered: {e.error.innererror}")
api_version to a stable version — latest is not always most stable.development
Expert guidance for Fireworks AI, the platform for running open-source LLMs (Llama, Mixtral, Qwen, etc.) with enterprise-grade speed and reliability. Helps developers integrate Fireworks' inference API, fine-tune models, and deploy custom model endpoints with function calling and structured output support.
development
Convert any website into clean, structured data with Firecrawl — API-first web scraping service. Use when someone asks to "turn a website into markdown", "scrape website for LLM", "Firecrawl", "extract website content as clean text", "crawl and convert to structured data", or "scrape website for RAG". Covers single-page scraping, full-site crawling, structured extraction, and LLM-ready output.
tools
Expert guidance for Firebase, Google's platform for building and scaling web and mobile applications. Helps developers set up authentication, Firestore/Realtime Database, Cloud Functions, hosting, storage, and analytics using Firebase's SDK and CLI.
development
When the user needs to build file upload functionality for a web application. Use when the user mentions "file upload," "image upload," "upload endpoint," "multipart upload," "presigned URL," "S3 upload," "file validation," "upload to cloud storage," or "accept user files." Handles upload endpoints, file validation (type, size, magic bytes), cloud storage integration, and upload status tracking. For image/video processing after upload, see media-transcoder.