{"id":"3cf78d99-019d-494f-8f44-28dfc42ae621","shortId":"EnPqN5","kind":"skill","title":"azure-ai-openai-dotnet","tagline":"Azure OpenAI SDK for .NET. Client library for Azure OpenAI and OpenAI services. Use for chat completions, embeddings, image generation, audio transcription, and assistants.","description":"# Azure.AI.OpenAI (.NET)\n\nClient library for Azure OpenAI Service providing access to OpenAI models including GPT-4, GPT-4o, embeddings, DALL-E, and Whisper.\n\n## Installation\n\n```bash\ndotnet add package Azure.AI.OpenAI\n\n# For OpenAI (non-Azure) compatibility\ndotnet add package OpenAI\n```\n\n**Current Version**: 2.1.0 (stable)\n\n## Environment Variables\n\n```bash\nAZURE_OPENAI_ENDPOINT=https://<resource-name>.openai.azure.com\nAZURE_OPENAI_API_KEY=<api-key>                    # For key-based auth\nAZURE_OPENAI_DEPLOYMENT_NAME=gpt-4o-mini          # Your deployment name\n```\n\n## Client Hierarchy\n\n```\nAzureOpenAIClient (top-level)\n├── GetChatClient(deploymentName)      → ChatClient\n├── GetEmbeddingClient(deploymentName) → EmbeddingClient\n├── GetImageClient(deploymentName)     → ImageClient\n├── GetAudioClient(deploymentName)     → AudioClient\n└── GetAssistantClient()               → AssistantClient\n```\n\n## Authentication\n\n### API Key Authentication\n\n```csharp\nusing Azure;\nusing Azure.AI.OpenAI;\n\nAzureOpenAIClient client = new(\n    new Uri(Environment.GetEnvironmentVariable(\"AZURE_OPENAI_ENDPOINT\")!),\n    new AzureKeyCredential(Environment.GetEnvironmentVariable(\"AZURE_OPENAI_API_KEY\")!));\n```\n\n### Microsoft Entra ID (Recommended for Production)\n\n```csharp\nusing Azure.Identity;\nusing Azure.AI.OpenAI;\n\nAzureOpenAIClient client = new(\n    new Uri(Environment.GetEnvironmentVariable(\"AZURE_OPENAI_ENDPOINT\")!),\n    new DefaultAzureCredential());\n```\n\n### Using OpenAI SDK Directly with Azure\n\n```csharp\nusing Azure.Identity;\nusing OpenAI;\nusing OpenAI.Chat;\nusing System.ClientModel.Primitives;\n\n#pragma warning disable OPENAI001\n\nBearerTokenPolicy tokenPolicy = new(\n    new DefaultAzureCredential(),\n    \"https://cognitiveservices.azure.com/.default\");\n\nChatClient client = new(\n    model: \"gpt-4o-mini\",\n    authenticationPolicy: tokenPolicy,\n    options: new OpenAIClientOptions()\n    {\n        Endpoint = new Uri(\"https://YOUR-RESOURCE.openai.azure.com/openai/v1\")\n    });\n```\n\n## Chat Completions\n\n### Basic Chat\n\n```csharp\nusing Azure.AI.OpenAI;\nusing OpenAI.Chat;\n\nAzureOpenAIClient azureClient = new(\n    new Uri(endpoint),\n    new DefaultAzureCredential());\n\nChatClient chatClient = azureClient.GetChatClient(\"gpt-4o-mini\");\n\nChatCompletion completion = chatClient.CompleteChat(\n[\n    new SystemChatMessage(\"You are a helpful assistant.\"),\n    new UserChatMessage(\"What is Azure OpenAI?\")\n]);\n\nConsole.WriteLine(completion.Content[0].Text);\n```\n\n### Async Chat\n\n```csharp\nChatCompletion completion = await chatClient.CompleteChatAsync(\n[\n    new SystemChatMessage(\"You are a helpful assistant.\"),\n    new UserChatMessage(\"Explain cloud computing in simple terms.\")\n]);\n\nConsole.WriteLine($\"Response: {completion.Content[0].Text}\");\nConsole.WriteLine($\"Tokens used: {completion.Usage.TotalTokenCount}\");\n```\n\n### Streaming Chat\n\n```csharp\nawait foreach (StreamingChatCompletionUpdate update \n    in chatClient.CompleteChatStreamingAsync(messages))\n{\n    if (update.ContentUpdate.Count > 0)\n    {\n        Console.Write(update.ContentUpdate[0].Text);\n    }\n}\n```\n\n### Chat with Options\n\n```csharp\nChatCompletionOptions options = new()\n{\n    MaxOutputTokenCount = 1000,\n    Temperature = 0.7f,\n    TopP = 0.95f,\n    FrequencyPenalty = 0,\n    PresencePenalty = 0\n};\n\nChatCompletion completion = await chatClient.CompleteChatAsync(messages, options);\n```\n\n### Multi-turn Conversation\n\n```csharp\nList<ChatMessage> messages = new()\n{\n    new SystemChatMessage(\"You are a helpful assistant.\"),\n    new UserChatMessage(\"Hi, can you help me?\"),\n    new AssistantChatMessage(\"Of course! What do you need help with?\"),\n    new UserChatMessage(\"What's the capital of France?\")\n};\n\nChatCompletion completion = await chatClient.CompleteChatAsync(messages);\nmessages.Add(new AssistantChatMessage(completion.Content[0].Text));\n```\n\n## Structured Outputs (JSON Schema)\n\n```csharp\nusing System.Text.Json;\n\nChatCompletionOptions options = new()\n{\n    ResponseFormat = ChatResponseFormat.CreateJsonSchemaFormat(\n        jsonSchemaFormatName: \"math_reasoning\",\n        jsonSchema: BinaryData.FromBytes(\"\"\"\n            {\n                \"type\": \"object\",\n                \"properties\": {\n                    \"steps\": {\n                        \"type\": \"array\",\n                        \"items\": {\n                            \"type\": \"object\",\n                            \"properties\": {\n                                \"explanation\": { \"type\": \"string\" },\n                                \"output\": { \"type\": \"string\" }\n                            },\n                            \"required\": [\"explanation\", \"output\"],\n                            \"additionalProperties\": false\n                        }\n                    },\n                    \"final_answer\": { \"type\": \"string\" }\n                },\n                \"required\": [\"steps\", \"final_answer\"],\n                \"additionalProperties\": false\n            }\n            \"\"\"u8.ToArray()),\n        jsonSchemaIsStrict: true)\n};\n\nChatCompletion completion = await chatClient.CompleteChatAsync(\n    [new UserChatMessage(\"How can I solve 8x + 7 = -23?\")],\n    options);\n\nusing JsonDocument json = JsonDocument.Parse(completion.Content[0].Text);\nConsole.WriteLine($\"Answer: {json.RootElement.GetProperty(\"final_answer\")}\");\n```\n\n## Reasoning Models (o1, o4-mini)\n\n```csharp\nChatCompletionOptions options = new()\n{\n    ReasoningEffortLevel = ChatReasoningEffortLevel.Low,\n    MaxOutputTokenCount = 100000\n};\n\nChatCompletion completion = await chatClient.CompleteChatAsync(\n[\n    new DeveloperChatMessage(\"You are a helpful assistant\"),\n    new UserChatMessage(\"Explain the theory of relativity\")\n], options);\n```\n\n## Azure AI Search Integration (RAG)\n\n```csharp\nusing Azure.AI.OpenAI.Chat;\n\n#pragma warning disable AOAI001\n\nChatCompletionOptions options = new();\noptions.AddDataSource(new AzureSearchChatDataSource()\n{\n    Endpoint = new Uri(searchEndpoint),\n    IndexName = searchIndex,\n    Authentication = DataSourceAuthentication.FromApiKey(searchKey)\n});\n\nChatCompletion completion = await chatClient.CompleteChatAsync(\n    [new UserChatMessage(\"What health plans are available?\")],\n    options);\n\nChatMessageContext context = completion.GetMessageContext();\nif (context?.Intent is not null)\n{\n    Console.WriteLine($\"Intent: {context.Intent}\");\n}\nforeach (ChatCitation citation in context?.Citations ?? [])\n{\n    Console.WriteLine($\"Citation: {citation.Content}\");\n}\n```\n\n## Embeddings\n\n```csharp\nusing OpenAI.Embeddings;\n\nEmbeddingClient embeddingClient = azureClient.GetEmbeddingClient(\"text-embedding-ada-002\");\n\nOpenAIEmbedding embedding = await embeddingClient.GenerateEmbeddingAsync(\"Hello, world!\");\nReadOnlyMemory<float> vector = embedding.ToFloats();\n\nConsole.WriteLine($\"Embedding dimensions: {vector.Length}\");\n```\n\n### Batch Embeddings\n\n```csharp\nList<string> inputs = new()\n{\n    \"First document text\",\n    \"Second document text\",\n    \"Third document text\"\n};\n\nOpenAIEmbeddingCollection embeddings = await embeddingClient.GenerateEmbeddingsAsync(inputs);\n\nforeach (OpenAIEmbedding emb in embeddings)\n{\n    Console.WriteLine($\"Index {emb.Index}: {emb.ToFloats().Length} dimensions\");\n}\n```\n\n## Image Generation (DALL-E)\n\n```csharp\nusing OpenAI.Images;\n\nImageClient imageClient = azureClient.GetImageClient(\"dall-e-3\");\n\nGeneratedImage image = await imageClient.GenerateImageAsync(\n    \"A futuristic city skyline at sunset\",\n    new ImageGenerationOptions\n    {\n        Size = GeneratedImageSize.W1024xH1024,\n        Quality = GeneratedImageQuality.High,\n        Style = GeneratedImageStyle.Vivid\n    });\n\nConsole.WriteLine($\"Image URL: {image.ImageUri}\");\n```\n\n## Audio (Whisper)\n\n### Transcription\n\n```csharp\nusing OpenAI.Audio;\n\nAudioClient audioClient = azureClient.GetAudioClient(\"whisper\");\n\nAudioTranscription transcription = await audioClient.TranscribeAudioAsync(\n    \"audio.mp3\",\n    new AudioTranscriptionOptions\n    {\n        ResponseFormat = AudioTranscriptionFormat.Verbose,\n        Language = \"en\"\n    });\n\nConsole.WriteLine(transcription.Text);\n```\n\n### Text-to-Speech\n\n```csharp\nBinaryData speech = await audioClient.GenerateSpeechAsync(\n    \"Hello, welcome to Azure OpenAI!\",\n    GeneratedSpeechVoice.Alloy,\n    new SpeechGenerationOptions\n    {\n        SpeedRatio = 1.0f,\n        ResponseFormat = GeneratedSpeechFormat.Mp3\n    });\n\nawait File.WriteAllBytesAsync(\"output.mp3\", speech.ToArray());\n```\n\n## Function Calling (Tools)\n\n```csharp\nChatTool getCurrentWeatherTool = ChatTool.CreateFunctionTool(\n    functionName: \"get_current_weather\",\n    functionDescription: \"Get the current weather in a given location\",\n    functionParameters: BinaryData.FromString(\"\"\"\n        {\n            \"type\": \"object\",\n            \"properties\": {\n                \"location\": {\n                    \"type\": \"string\",\n                    \"description\": \"The city and state, e.g. San Francisco, CA\"\n                },\n                \"unit\": {\n                    \"type\": \"string\",\n                    \"enum\": [\"celsius\", \"fahrenheit\"]\n                }\n            },\n            \"required\": [\"location\"]\n        }\n        \"\"\"));\n\nChatCompletionOptions options = new()\n{\n    Tools = { getCurrentWeatherTool }\n};\n\nChatCompletion completion = await chatClient.CompleteChatAsync(\n    [new UserChatMessage(\"What's the weather in Seattle?\")],\n    options);\n\nif (completion.FinishReason == ChatFinishReason.ToolCalls)\n{\n    foreach (ChatToolCall toolCall in completion.ToolCalls)\n    {\n        Console.WriteLine($\"Function: {toolCall.FunctionName}\");\n        Console.WriteLine($\"Arguments: {toolCall.FunctionArguments}\");\n    }\n}\n```\n\n## Key Types Reference\n\n| Type | Purpose |\n|------|---------|\n| `AzureOpenAIClient` | Top-level client for Azure OpenAI |\n| `ChatClient` | Chat completions |\n| `EmbeddingClient` | Text embeddings |\n| `ImageClient` | Image generation (DALL-E) |\n| `AudioClient` | Audio transcription/TTS |\n| `ChatCompletion` | Chat response |\n| `ChatCompletionOptions` | Request configuration |\n| `StreamingChatCompletionUpdate` | Streaming response chunk |\n| `ChatMessage` | Base message type |\n| `SystemChatMessage` | System prompt |\n| `UserChatMessage` | User input |\n| `AssistantChatMessage` | Assistant response |\n| `DeveloperChatMessage` | Developer message (reasoning models) |\n| `ChatTool` | Function/tool definition |\n| `ChatToolCall` | Tool invocation request |\n\n## Best Practices\n\n1. **Use Entra ID in production** — Avoid API keys; use `DefaultAzureCredential`\n2. **Reuse client instances** — Create once, share across requests\n3. **Handle rate limits** — Implement exponential backoff for 429 errors\n4. **Stream for long responses** — Use `CompleteChatStreamingAsync` for better UX\n5. **Set appropriate timeouts** — Long completions may need extended timeouts\n6. **Use structured outputs** — JSON schema ensures consistent response format\n7. **Monitor token usage** — Track `completion.Usage` for cost management\n8. **Validate tool calls** — Always validate function arguments before execution\n\n## Error Handling\n\n```csharp\nusing Azure;\n\ntry\n{\n    ChatCompletion completion = await chatClient.CompleteChatAsync(messages);\n}\ncatch (RequestFailedException ex) when (ex.Status == 429)\n{\n    Console.WriteLine(\"Rate limited. Retry after delay.\");\n    await Task.Delay(TimeSpan.FromSeconds(10));\n}\ncatch (RequestFailedException ex) when (ex.Status == 400)\n{\n    Console.WriteLine($\"Bad request: {ex.Message}\");\n}\ncatch (RequestFailedException ex)\n{\n    Console.WriteLine($\"Azure OpenAI error: {ex.Status} - {ex.Message}\");\n}\n```\n\n## Related SDKs\n\n| SDK | Purpose | Install |\n|-----|---------|---------|\n| `Azure.AI.OpenAI` | Azure OpenAI client (this SDK) | `dotnet add package Azure.AI.OpenAI` |\n| `OpenAI` | OpenAI compatibility | `dotnet add package OpenAI` |\n| `Azure.Identity` | Authentication | `dotnet add package Azure.Identity` |\n| `Azure.Search.Documents` | AI Search for RAG | `dotnet add package Azure.Search.Documents` |\n\n## Reference Links\n\n| Resource | URL |\n|----------|-----|\n| NuGet Package | https://www.nuget.org/packages/Azure.AI.OpenAI |\n| API Reference | https://learn.microsoft.com/dotnet/api/azure.ai.openai |\n| Migration Guide (1.0→2.0) | https://learn.microsoft.com/azure/ai-services/openai/how-to/dotnet-migration |\n| Quickstart | https://learn.microsoft.com/azure/ai-services/openai/quickstart |\n| GitHub Source | https://github.com/Azure/azure-sdk-for-net/tree/main/sdk/openai/Azure.AI.OpenAI |\n\n## When to Use\nThis skill is applicable to execute the workflow or actions described in the overview.\n\n## Limitations\n- Use this skill only when the task clearly matches the scope described above.\n- Do not treat the output as a substitute for environment-specific validation, testing, or expert review.\n- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.","tags":["azure","openai","dotnet","antigravity","awesome","skills","sickn33","agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding"],"capabilities":["skill","source-sickn33","skill-azure-ai-openai-dotnet","topic-agent-skills","topic-agentic-skills","topic-ai-agent-skills","topic-ai-agents","topic-ai-coding","topic-ai-workflows","topic-antigravity","topic-antigravity-skills","topic-claude-code","topic-claude-code-skills","topic-codex-cli","topic-codex-skills"],"categories":["antigravity-awesome-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/sickn33/antigravity-awesome-skills/azure-ai-openai-dotnet","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add sickn33/antigravity-awesome-skills","source_repo":"https://github.com/sickn33/antigravity-awesome-skills","install_from":"skills.sh"}},"qualityScore":"0.700","qualityRationale":"deterministic score 0.70 from registry signals: · indexed on github topic:agent-skills · 34964 github stars · SKILL.md body (12,821 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-25T00:50:31.198Z","embedding":null,"createdAt":"2026-04-18T21:31:57.139Z","updatedAt":"2026-04-25T00:50:31.198Z","lastSeenAt":"2026-04-25T00:50:31.198Z","tsv":"'-23':446 '-4':45 '/.default':195 '/azure/ai-services/openai/how-to/dotnet-migration':1019 '/azure/ai-services/openai/quickstart':1023 '/azure/azure-sdk-for-net/tree/main/sdk/openai/azure.ai.openai':1028 '/dotnet/api/azure.ai.openai':1012 '/openai/v1':214 '/packages/azure.ai.openai':1007 '0':257,284,302,305,323,325,381,453 '0.7':317 '0.95':320 '002':564 '1':837 '1.0':687,1015 '10':942 '1000':315 '100000':473 '2':848 '2.0':1016 '2.1.0':73 '3':623,857 '4':867 '400':948 '429':865,932 '4o':48,97,202,237 '5':877 '6':887 '7':445,897 '8':906 '8x':444 'access':39 'across':855 'action':1041 'ada':563 'add':58,68,974,981,987,996 'additionalproperti':419,429 'ai':3,494,991 'alway':910 'answer':422,428,456,459 'aoai001':504 'api':84,123,145,844,1008 'applic':1035 'appropri':879 'argument':770,913 'array':405 'ask':1079 'assist':29,248,272,346,484,821 'assistantchatmessag':355,379,820 'assistantcli':121 'async':259 'audio':26,646,798 'audio.mp3':660 'audiocli':119,652,653,797 'audioclient.generatespeechasync':677 'audioclient.transcribeaudioasync':659 'audiotranscript':656 'audiotranscriptionformat.verbose':664 'audiotranscriptionopt':662 'auth':90 'authent':122,125,517,985 'authenticationpolici':204 'avail':530 'avoid':843 'await':264,293,328,374,436,476,522,567,595,626,658,676,691,747,924,939 'azur':2,6,14,35,65,78,82,91,128,137,143,164,174,253,493,681,783,920,957,968 'azure-ai-openai-dotnet':1 'azure.ai.openai':30,60,130,157,221,967,976 'azure.ai.openai.chat':500 'azure.identity':155,177,984,989 'azure.search.documents':990,998 'azurecli':225 'azureclient.getaudioclient':654 'azureclient.getchatclient':234 'azureclient.getembeddingclient':559 'azureclient.getimageclient':619 'azurekeycredenti':141 'azureopenaicli':104,131,158,224,777 'azuresearchchatdatasourc':510 'backoff':863 'bad':950 'base':89,811 'bash':56,77 'basic':217 'batch':578 'bearertokenpolici':188 'best':835 'better':875 'binarydata':674 'binarydata.frombytes':399 'binarydata.fromstring':716 'boundari':1087 'ca':731 'call':696,909 'capit':369 'catch':927,943,953 'celsius':736 'chat':21,215,218,260,291,307,786,801 'chatcit':545 'chatclient':110,196,232,233,785 'chatclient.completechat':241 'chatclient.completechatasync':265,329,375,437,477,523,748,925 'chatclient.completechatstreamingasync':298 'chatcomplet':239,262,326,372,434,474,520,745,800,922 'chatcompletionopt':311,390,467,505,740,803 'chatfinishreason.toolcalls':760 'chatmessag':810 'chatmessagecontext':532 'chatreasoningeffortlevel.low':471 'chatresponseformat.createjsonschemaformat':394 'chattool':699,828 'chattool.createfunctiontool':701 'chattoolcal':762,831 'chunk':809 'citat':546,549,551 'citation.content':552 'citi':630,725 'clarif':1081 'clear':1054 'client':11,32,102,132,159,197,781,850,970 'cloud':276 'cognitiveservices.azure.com':194 'cognitiveservices.azure.com/.default':193 'compat':66,979 'complet':22,216,240,263,327,373,435,475,521,746,787,882,923 'completechatstreamingasync':873 'completion.content':256,283,380,452 'completion.finishreason':759 'completion.getmessagecontext':534 'completion.toolcalls':765 'completion.usage':902 'completion.usage.totaltokencount':289 'comput':277 'configur':805 'consist':894 'console.write':303 'console.writeline':255,281,286,455,541,550,574,603,642,667,766,769,933,949,956 'context':533,536,548 'context.intent':543 'convers':335 'cost':904 'cours':357 'creat':852 'criteria':1090 'csharp':126,153,175,219,261,292,310,336,387,466,498,554,580,614,649,673,698,918 'current':71,704,709 'dall':51,612,621,795 'dall-':50,611,620,794 'datasourceauthentication.fromapikey':518 'defaultazurecredenti':168,192,231,847 'definit':830 'delay':938 'deploy':93,100 'deploymentnam':109,112,115,118 'describ':1042,1058 'descript':723 'develop':824 'developerchatmessag':479,823 'dimens':576,608 'direct':172 'disabl':186,503 'document':585,588,591 'dotnet':5,57,67,973,980,986,995 'e':52,613,622,796 'e.g':728 'emb':600 'emb.index':605 'emb.tofloats':606 'embed':23,49,553,562,566,575,579,594,602,790 'embedding.tofloats':573 'embeddingcli':113,557,558,788 'embeddingclient.generateembeddingasync':568 'embeddingclient.generateembeddingsasync':596 'en':666 'endpoint':80,139,166,209,229,511 'ensur':893 'entra':148,839 'enum':735 'environ':75,1070 'environment-specif':1069 'environment.getenvironmentvariable':136,142,163 'error':866,916,959 'ex':929,945,955 'ex.message':952,961 'ex.status':931,947,960 'execut':915,1037 'expert':1075 'explain':275,487 'explan':410,417 'exponenti':862 'extend':885 'f':318,321,688 'fahrenheit':737 'fals':420,430 'file.writeallbytesasync':692 'final':421,427,458 'first':584 'foreach':294,544,598,761 'format':896 'franc':371 'francisco':730 'frequencypenalti':322 'function':695,767,912 'function/tool':829 'functiondescript':706 'functionnam':702 'functionparamet':715 'futurist':629 'generat':25,610,793 'generatedimag':624 'generatedimagequality.high':639 'generatedimagesize.w1024xh1024':637 'generatedimagestyle.vivid':641 'generatedspeechformat.mp3':690 'generatedspeechvoice.alloy':683 'get':703,707 'getassistantcli':120 'getaudiocli':117 'getchatcli':108 'getcurrentweathertool':700,744 'getembeddingcli':111 'getimagecli':114 'github':1024 'github.com':1027 'github.com/azure/azure-sdk-for-net/tree/main/sdk/openai/azure.ai.openai':1026 'given':713 'gpt':44,47,96,201,236 'gpt-4o':46 'gpt-4o-mini':95,200,235 'guid':1014 'handl':858,917 'health':527 'hello':569,678 'help':247,271,345,352,362,483 'hi':349 'hierarchi':103 'id':149,840 'imag':24,609,625,643,792 'image.imageuri':645 'imagecli':116,617,618,791 'imageclient.generateimageasync':627 'imagegenerationopt':635 'implement':861 'includ':43 'index':604 'indexnam':515 'input':582,597,819,1084 'instal':55,966 'instanc':851 'integr':496 'intent':537,542 'invoc':833 'item':406 'json':385,450,891 'json.rootelement.getproperty':457 'jsondocu':449 'jsondocument.parse':451 'jsonschema':398 'jsonschemaformatnam':395 'jsonschemaisstrict':432 'key':85,88,124,146,772,845 'key-bas':87 'languag':665 'learn.microsoft.com':1011,1018,1022 'learn.microsoft.com/azure/ai-services/openai/how-to/dotnet-migration':1017 'learn.microsoft.com/azure/ai-services/openai/quickstart':1021 'learn.microsoft.com/dotnet/api/azure.ai.openai':1010 'length':607 'level':107,780 'librari':12,33 'limit':860,935,1046 'link':1000 'list':337,581 'locat':714,720,739 'long':870,881 'manag':905 'match':1055 'math':396 'maxoutputtokencount':314,472 'may':883 'messag':299,330,338,376,812,825,926 'messages.add':377 'microsoft':147 'migrat':1013 'mini':98,203,238,465 'miss':1092 'model':42,199,461,827 'monitor':898 'multi':333 'multi-turn':332 'name':94,101 'need':361,884 'net':10,31 'new':133,134,140,160,161,167,190,191,198,207,210,226,227,230,242,249,266,273,313,339,340,347,354,364,378,392,438,469,478,485,507,509,512,524,583,634,661,684,742,749 'non':64 'non-azur':63 'nuget':1003 'null':540 'o1':462 'o4':464 'o4-mini':463 'object':401,408,718 'openai':4,7,15,17,36,41,62,70,79,83,92,138,144,165,170,179,254,682,784,958,969,977,978,983 'openai.audio':651 'openai.azure.com':81 'openai.chat':181,223 'openai.embeddings':556 'openai.images':616 'openai001':187 'openaiclientopt':208 'openaiembed':565,599 'openaiembeddingcollect':593 'option':206,309,312,331,391,447,468,492,506,531,741,757 'options.adddatasource':508 'output':384,413,418,890,1064 'output.mp3':693 'overview':1045 'packag':59,69,975,982,988,997,1004 'permiss':1085 'plan':528 'practic':836 'pragma':184,501 'presencepenalti':324 'product':152,842 'prompt':816 'properti':402,409,719 'provid':38 'purpos':776,965 'qualiti':638 'quickstart':1020 'rag':497,994 'rate':859,934 'readonlymemori':571 'reason':397,460,826 'reasoningeffortlevel':470 'recommend':150 'refer':774,999,1009 'relat':491,962 'request':804,834,856,951 'requestfailedexcept':928,944,954 'requir':416,425,738,1083 'resourc':1001 'respons':282,802,808,822,871,895 'responseformat':393,663,689 'retri':936 'reus':849 'review':1076 'safeti':1086 'san':729 'schema':386,892 'scope':1057 'sdk':8,171,964,972 'sdks':963 'search':495,992 'searchendpoint':514 'searchindex':516 'searchkey':519 'seattl':756 'second':587 'servic':18,37 'set':878 'share':854 'simpl':279 'size':636 'skill':1033,1049 'skill-azure-ai-openai-dotnet' 'skylin':631 'solv':443 'sourc':1025 'source-sickn33' 'specif':1071 'speech':672,675 'speech.toarray':694 'speechgenerationopt':685 'speedratio':686 'stabl':74 'state':727 'step':403,426 'stop':1077 'stream':290,807,868 'streamingchatcompletionupd':295,806 'string':412,415,424,722,734 'structur':383,889 'style':640 'substitut':1067 'success':1089 'sunset':633 'system':815 'system.clientmodel.primitives':183 'system.text.json':389 'systemchatmessag':243,267,341,814 'task':1053 'task.delay':940 'temperatur':316 'term':280 'test':1073 'text':258,285,306,382,454,561,586,589,592,670,789 'text-embedding-ada':560 'text-to-speech':669 'theori':489 'third':590 'timeout':880,886 'timespan.fromseconds':941 'token':287,899 'tokenpolici':189,205 'tool':697,743,832,908 'toolcal':763 'toolcall.functionarguments':771 'toolcall.functionname':768 'top':106,779 'top-level':105,778 'topic-agent-skills' 'topic-agentic-skills' 'topic-ai-agent-skills' 'topic-ai-agents' 'topic-ai-coding' 'topic-ai-workflows' 'topic-antigravity' 'topic-antigravity-skills' 'topic-claude-code' 'topic-claude-code-skills' 'topic-codex-cli' 'topic-codex-skills' 'topp':319 'track':901 'transcript':27,648,657 'transcription.text':668 'transcription/tts':799 'treat':1062 'tri':921 'true':433 'turn':334 'type':400,404,407,411,414,423,717,721,733,773,775,813 'u8.toarray':431 'unit':732 'updat':296 'update.contentupdate':304 'update.contentupdate.count':301 'uri':135,162,211,228,513 'url':644,1002 'usag':900 'use':19,127,129,154,156,169,176,178,180,182,220,222,288,388,448,499,555,615,650,838,846,872,888,919,1031,1047 'user':818 'userchatmessag':250,274,348,365,439,486,525,750,817 'ux':876 'valid':907,911,1072 'variabl':76 'vector':572 'vector.length':577 'version':72 'warn':185,502 'weather':705,710,754 'welcom':679 'whisper':54,647,655 'workflow':1039 'world':570 'www.nuget.org':1006 'www.nuget.org/packages/azure.ai.openai':1005 'your-resource.openai.azure.com':213 'your-resource.openai.azure.com/openai/v1':212","prices":[{"id":"28cd9674-90d3-4f1d-bc88-5927c6e01bff","listingId":"3cf78d99-019d-494f-8f44-28dfc42ae621","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"sickn33","category":"antigravity-awesome-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T21:31:57.139Z"}],"sources":[{"listingId":"3cf78d99-019d-494f-8f44-28dfc42ae621","source":"github","sourceId":"sickn33/antigravity-awesome-skills/azure-ai-openai-dotnet","sourceUrl":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/azure-ai-openai-dotnet","isPrimary":false,"firstSeenAt":"2026-04-18T21:31:57.139Z","lastSeenAt":"2026-04-25T00:50:31.198Z"}],"details":{"listingId":"3cf78d99-019d-494f-8f44-28dfc42ae621","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"sickn33","slug":"azure-ai-openai-dotnet","github":{"repo":"sickn33/antigravity-awesome-skills","stars":34964,"topics":["agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding","ai-workflows","antigravity","antigravity-skills","claude-code","claude-code-skills","codex-cli","codex-skills","cursor","cursor-skills","developer-tools","gemini-cli","gemini-skills","kiro","mcp","skill-library"],"license":"mit","html_url":"https://github.com/sickn33/antigravity-awesome-skills","pushed_at":"2026-04-24T06:41:17Z","description":"Installable GitHub library of 1,400+ agentic skills for Claude Code, Cursor, Codex CLI, Gemini CLI, Antigravity, and more. Includes installer CLI, bundles, workflows, and official/community skill collections.","skill_md_sha":"a00f5c1ef789a4edbdd0763a247c8edc8e6a8662","skill_md_path":"skills/azure-ai-openai-dotnet/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/azure-ai-openai-dotnet"},"layout":"multi","source":"github","category":"antigravity-awesome-skills","frontmatter":{"name":"azure-ai-openai-dotnet","description":"Azure OpenAI SDK for .NET. Client library for Azure OpenAI and OpenAI services. Use for chat completions, embeddings, image generation, audio transcription, and assistants."},"skills_sh_url":"https://skills.sh/sickn33/antigravity-awesome-skills/azure-ai-openai-dotnet"},"updatedAt":"2026-04-25T00:50:31.198Z"}}