Skip to content

Commit 41d772e

Browse files
Merge pull request #302582 from MicrosoftDocs/main
Auto Publish – main to live - 2025-07-11 11:00 UTC
2 parents cc9cbf8 + a98b02b commit 41d772e

9 files changed

+145
-92
lines changed

articles/azure-app-configuration/concept-ai-configuration.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@ Chat completion is an AI capability that produces human-like dialogue responses
4646
| Anthropic | Claude 3.7 Sonnet |
4747
| Google | Gemini 2.5 Pro |
4848
| DeepSeek | DeepSeek-R1 |
49+
| xAI | Grok-3 |
50+
| xAI | Grok-3 Mini |
4951

5052
Azure OpenAI Service supports a diverse set of models from OpenAI. For more information, see [Azure OpenAI Service models](/azure/ai-services/openai/concepts/models). To learn more about models from Anthropic, refer to the [Claude models documentation](https://docs.anthropic.com/docs/about-claude/models/overview).
5153
For more details about models provided by Google, see the [Gemini models documentation](https://ai.google.dev/gemini-api/docs/models).

articles/azure-app-configuration/howto-chat-completion-config.md

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,9 @@ In this section, you create a chat completion configuration in Azure portal usin
2626
1. In Azure portal, navigate to your App configuration store. From the **Operations** menu, select **Configuration explorer** > **Create**, and then select **AI configuration**.
2727

2828
1. Specify the following values:
29-
- **Key**: Type **ChatApp:Model**.
29+
- **Key**: Type **ChatApp:ChatCompletion**.
3030
- **Label**: Leave this value blank.
3131
- **Model**: Select **gpt-4o**.
32-
- **Message**: Add a new message.
33-
- **Role**: Select **user**
34-
- **Content**: Type "What is the capital of France?"
3532

3633
> [!div class="mx-imgBorder"]
3734
> ![Screenshot shows the create new AI configuration form.](./media/create-ai-chat-completion-config.png)
@@ -40,13 +37,13 @@ In this section, you create a chat completion configuration in Azure portal usin
4037

4138
## Add model connection configuration
4239

43-
You successfully added your chat completion configuration named **ChatApp:Model** in the previous section. In this section, you add the connection details for your model, including the endpoint and deployment name. If required by your authentication method, you can also specify an API key using a Key Vault reference.
40+
You successfully added your chat completion configuration named **ChatApp:ChatCompletion** in the previous section. In this section, you add the connection details for your model, including the endpoint and deployment name. If required by your authentication method, you can also specify an API key using a Key Vault reference.
4441

4542
> [!NOTE]
4643
> This tutorial demonstrates how to use chat completion configuration with an Azure OpenAI model. However, the chat completion configuration demonstrated in the tutorial can be applied to any AI model you choose to work with in your application.
4744
>
4845
49-
1. Follow the [Get started with Azure OpenAI Service](/azure/ai-services/openai/overview#get-started-with-azure-openai-service) to create and deploy an Azure OpenAI service resource with a **gpt-4o** model. Note down the deployment name for later use.
46+
1. Follow the [Get started with Azure OpenAI Service](/azure/ai-foundry/openai/how-to/create-resource) to create and deploy an Azure OpenAI service resource with a **gpt-4o** model. Note down the deployment name for later use.
5047

5148
1. In your Azure OpenAI resource, from the **Resource Management** menu, select **Keys and Endpoint** and copy the Azure OpenAI resource endpoint. It should follow the format: `https://<open-ai-resource-name>.openai.azure.com`. If using the API key for authentication, copy the API key as well.
5249

577 Bytes
Loading

articles/azure-app-configuration/quickstart-chat-completion-dotnet.md

Lines changed: 92 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@ ms.collection: ce-skilling-ai-copilot
1717

1818
# Use chat completion configuration in a .NET console app
1919

20-
In this guide, you build an AI chat application and iterate on the prompt using chat completion configuration dynamically loaded from Azure App Configuration.
20+
In this guide, you build an AI chat application and iterate on the prompt using chat completion configuration dynamically loaded from Azure App Configuration.
21+
22+
The full sample source code is available in the [Azure App Configuration GitHub repository](https://github.com/Azure/AppConfiguration/tree/main/examples/DotNetCore/ChatApp).
2123

2224
## Prerequisites
2325

@@ -112,10 +114,10 @@ In this guide, you build an AI chat application and iterate on the prompt using
112114
});
113115
```
114116
115-
1. Define the `ModelConfiguration` class in _Program.cs_ file:
117+
1. Define the `ChatCompletionConfiguration` class in _Program.cs_ file:
116118
117119
```csharp
118-
internal class ModelConfiguration
120+
internal class ChatCompletionConfiguration
119121
{
120122
[ConfigurationKeyName("model")]
121123
public string? Model { get; set; }
@@ -146,10 +148,10 @@ In this guide, you build an AI chat application and iterate on the prompt using
146148
1. Update the _Program.cs_ file to add a helper method `GetChatMessages` to process chat messages:
147149
148150
```csharp
149-
// Helper method to convert configuration messages to chat API format
150-
static IEnumerable<ChatMessage> GetChatMessages(ModelConfiguration modelConfiguration)
151+
// Helper method to convert configuration messages to ChatMessage objects
152+
static IEnumerable<ChatMessage> GetChatMessages(ChatCompletionConfiguration chatCompletionConfiguration)
151153
{
152-
return modelConfiguration.Messages.Select<Message, ChatMessage>(message => message.Role switch
154+
return chatCompletionConfiguration.Messages.Select<Message, ChatMessage>(message => message.Role switch
153155
{
154156
"system" => ChatMessage.CreateSystemMessage(message.Content),
155157
"user" => ChatMessage.CreateUserMessage(message.Content),
@@ -162,31 +164,50 @@ In this guide, you build an AI chat application and iterate on the prompt using
162164
1. Next, update the existing code in the _Program.cs_ file to refresh the configuration from Azure App Configuration, apply the latest AI configuration values to the chat completion settings, and retrieve a response from the AI model.
163165
164166
```csharp
167+
// Initialize chat conversation
168+
var chatConversation = new List<ChatMessage>();
169+
Console.WriteLine("Chat started! What's on your mind?");
170+
165171
while (true)
166172
{
173+
// Get user input
174+
Console.Write("You: ");
175+
string? userInput = Console.ReadLine();
176+
177+
// Exit if user input is empty
178+
if (string.IsNullOrEmpty(userInput))
179+
{
180+
Console.WriteLine("Exiting chat. Goodbye!");
181+
break;
182+
}
183+
184+
chatConversation.Add(ChatMessage.CreateUserMessage(userInput));
185+
167186
// Refresh the configuration from Azure App Configuration
168187
await refresher.RefreshAsync();
169188
170189
// Configure chat completion with AI configuration
171-
var modelConfiguration = configuration.GetSection("ChatApp:Model").Get<ModelConfiguration>();
190+
var chatCompletionConfiguration = configuration.GetSection("ChatApp:ChatCompletion").Get<ChatCompletionConfiguration>();
191+
172192
var requestOptions = new ChatCompletionOptions()
173193
{
174-
MaxOutputTokenCount = modelConfiguration.MaxTokens,
175-
Temperature = modelConfiguration.Temperature,
176-
TopP = modelConfiguration.TopP
194+
MaxOutputTokenCount = chatCompletionConfiguration.MaxTokens,
195+
Temperature = chatCompletionConfiguration.Temperature,
196+
TopP = chatCompletionConfiguration.TopP
177197
};
178198
179-
foreach (var message in modelConfiguration.Messages)
180-
{
181-
Console.WriteLine($"{message.Role}: {message.Content}");
182-
}
199+
// Get latest system message from AI configuration
200+
var chatMessages = new List<ChatMessage>(GetChatMessages(chatCompletionConfiguration));
201+
chatMessages.AddRange(chatConversation);
202+
203+
// Get AI response and add it to chat conversation
204+
var response = await chatClient.CompleteChatAsync(chatMessages, requestOptions);
205+
string aiResponse = response.Value.Content[0].Text;
183206
184-
// Get chat response from AI
185-
var response = await chatClient.CompleteChatAsync(GetChatMessages(modelConfiguration), requestOptions);
186-
Console.WriteLine($"AI response: {response.Value.Content[0].Text}");
207+
Console.WriteLine($"AI: {aiResponse}");
208+
chatConversation.Add(ChatMessage.CreateAssistantMessage(aiResponse));
187209
188-
Console.WriteLine("Press Enter to continue...");
189-
Console.ReadLine();
210+
Console.WriteLine();
190211
}
191212
```
192213
@@ -231,37 +252,55 @@ In this guide, you build an AI chat application and iterate on the prompt using
231252
AzureOpenAIClient azureClient = new(openaiEndpoint, credential);
232253
ChatClient chatClient = azureClient.GetChatClient(deploymentName);
233254
255+
// Initialize chat conversation
256+
var chatConversation = new List<ChatMessage>();
257+
Console.WriteLine("Chat started! What's on your mind?");
258+
234259
while (true)
235260
{
261+
// Get user input
262+
Console.Write("You: ");
263+
string? userInput = Console.ReadLine();
264+
265+
// Exit if user input is empty
266+
if (string.IsNullOrEmpty(userInput))
267+
{
268+
Console.WriteLine("Exiting chat. Goodbye!");
269+
break;
270+
}
271+
272+
chatConversation.Add(ChatMessage.CreateUserMessage(userInput));
273+
236274
// Refresh the configuration from Azure App Configuration
237275
await refresher.RefreshAsync();
238276
239277
// Configure chat completion with AI configuration
240-
var modelConfiguration = configuration.GetSection("ChatApp:Model").Get<ModelConfiguration>();
278+
var chatCompletionConfiguration = configuration.GetSection("ChatApp:ChatCompletion").Get<ChatCompletionConfiguration>();
241279
var requestOptions = new ChatCompletionOptions()
242280
{
243-
MaxOutputTokenCount = modelConfiguration.MaxTokens,
244-
Temperature = modelConfiguration.Temperature,
245-
TopP = modelConfiguration.TopP
281+
MaxOutputTokenCount = chatCompletionConfiguration.MaxTokens,
282+
Temperature = chatCompletionConfiguration.Temperature,
283+
TopP = chatCompletionConfiguration.TopP
246284
};
247285
248-
foreach (var message in modelConfiguration.Messages)
249-
{
250-
Console.WriteLine($"{message.Role}: {message.Content}");
251-
}
286+
// Get latest system message from AI configuration
287+
var chatMessages = new List<ChatMessage>(GetChatMessages(chatCompletionConfiguration));
288+
chatMessages.AddRange(chatConversation);
289+
290+
// Get AI response and add it to chat conversation
291+
var response = await chatClient.CompleteChatAsync(chatMessages, requestOptions);
292+
string aiResponse = response.Value.Content[0].Text;
252293
253-
// Get chat response from AI
254-
var response = await chatClient.CompleteChatAsync(GetChatMessages(modelConfiguration), requestOptions);
255-
Console.WriteLine($"AI response: {response.Value.Content[0].Text}");
294+
Console.WriteLine($"AI: {aiResponse}");
295+
chatConversation.Add(ChatMessage.CreateAssistantMessage(aiResponse));
256296
257-
Console.WriteLine("Press Enter to continue...");
258-
Console.ReadLine();
259-
297+
Console.WriteLine();
260298
}
261299
262-
static IEnumerable<ChatMessage> GetChatMessages(ModelConfiguration modelConfiguration)
300+
// Helper method to convert configuration messages to ChatMessage objects
301+
static IEnumerable<ChatMessage> GetChatMessages(ChatCompletionConfiguration chatCompletionConfiguration)
263302
{
264-
return modelConfiguration.Messages.Select<Message, ChatMessage>(message => message.Role switch
303+
return chatCompletionConfiguration.Messages.Select<Message, ChatMessage>(message => message.Role switch
265304
{
266305
"system" => ChatMessage.CreateSystemMessage(message.Content),
267306
"user" => ChatMessage.CreateUserMessage(message.Content),
@@ -270,7 +309,7 @@ In this guide, you build an AI chat application and iterate on the prompt using
270309
});
271310
}
272311
273-
internal class ModelConfiguration
312+
internal class ChatCompletionConfiguration
274313
{
275314
[ConfigurationKeyName("model")]
276315
public string? Model { get; set; }
@@ -323,29 +362,29 @@ In this guide, you build an AI chat application and iterate on the prompt using
323362
dotnet run
324363
```
325364
326-
You should see the following output:
327365
328-
```Output
329-
system: You are a helpful assistant.
330-
user: What is the capital of France ?
331-
AI response: The capital of France is **Paris**.
332-
Press Enter to continue...
366+
1. Type the message "What is your name?" when prompted with "You:" and then press the Enter key.
333367
368+
```Output
369+
Chat started! What's on your mind?
370+
You: What is your name ?
371+
AI: I’m your helpful assistant! I don’t have a personal name, but you can call me whatever you’d like.
372+
😊 Do you have a name in mind?
334373
```
335374
336-
1. In Azure portal, select the App Configuration store instance that you created. From the **Operations** menu, select **Configuration explorer** and select the **ChatApp:Model** key. Update the value of the Messages property:
375+
1. In Azure portal, select the App Configuration store instance that you created. From the **Operations** menu, select **Configuration explorer** and select the **ChatApp:ChatCompletion** key. Update the value of the Messages property:
337376
- Role: **system**
338-
- Content: "You are a cheerful tour guide".
377+
- Content: "You are a pirate and your name is Eddy."
339378
340-
1. Wait a few moments for the refresh interval to elapse, and then press the Enter key to see the updated AI response in the output.
379+
1. Type the same message when prompted with "You:". Be sure to wait a few moments for the refresh interval to elapse, and then press the Enter key to see the updated AI response in the output.
341380
342381
```Output
343-
system: You are a cheerful tour guide
344-
user: What is the capital of France ?
345-
AI response: Oh là là! The capital of France is the magnificent **Paris**!
346-
Known as the "City of Light" (*La Ville Lumière*), it's famous for its romantic ambiance,
347-
iconic landmarks like the Eiffel Tower, the Louvre Museum, and Notre-Dame Cathedral,
348-
as well as its delicious pastries and charming cafés.
349-
Have you ever been, or is it on your travel bucket list? 😊✨
350-
Press Enter to continue...
382+
Chat started! What's on your mind?
383+
You: What is your name ?
384+
AI: I’m your helpful assistant! I don’t have a personal name, but you can call me whatever you’d like.
385+
😊 Do you have a name in mind?
386+
387+
You: What is your name ?
388+
AI: Arrr, matey! Me name be Eddy, the most fearsome pirate to ever sail the seven seas!
389+
What be yer name, landlubber?
351390
```

articles/backup/blob-backup-configure-manage.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
title: Configure and manage backup for Azure Blobs using Azure Backup
33
description: Learn how to configure and manage operational and vaulted backups for Azure Blobs.
44
ms.topic: how-to
5-
ms.date: 06/18/2025
5+
ms.date: 07/11/2025
66
ms.service: azure-backup
77
author: jyothisuri
88
ms.author: jsuri
@@ -169,7 +169,7 @@ For more information, see [Overview of Azure Business Continuity Center](../busi
169169
You can stop operational backup for your storage account according to your requirement.
170170

171171
>[!NOTE]
172-
>When you remove backups, the **object replication policy** isn't removed from the source. So, you need to remove the policy separately. Stopping protection only dissociates the storage account from the Backup vault (and the backup tools, such as Backup center), and doesnt disable blob point-in-time restore, versioning, and change feed that were configured.
172+
>When you remove backups, Azure Backup automatically deletes the **object replication policy** from the source. If custom locks exist, remove the policy manually. If you stop protection, it disconnects only the storage account from the Backup vault and tools (such as Backup center). This action doesn't disable blob point-in-time restore, versioning, or change feed settings.
173173
174174
To stop backup for a storage account, follow these steps:
175175

articles/backup/blob-backup-support-matrix.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
title: Support matrix for Azure Blobs backup
33
description: Provides a summary of support settings and limitations when backing up Azure Blobs.
44
ms.topic: reference
5-
ms.date: 07/02/2025
5+
ms.date: 07/11/2025
66
ms.custom: references_regions, engagement-fy24
77
ms.service: azure-backup
88
author: jyothisuri
@@ -66,6 +66,8 @@ Operational backup of blobs uses blob point-in-time restore, blob versioning, so
6666
- The storage accounts to be backed up must contain *a minimum of one container*. If the storage account doesn't contain any containers or if no containers are selected, an error may appear when you configure backup.
6767
- Only `$web` and `$root` system containers are supported for vaulted backup.
6868
- If you stop protection (vaulted backup) on a storage account, it doesn't delete the object replication policy created on the storage account. In these scenarios, you need to manually delete the *OR policies*.
69+
- You can avoid disruption to Azure Blob vaulted backups during a storage account failover by following a specific sequence - pause the backup, remove the object replication policy at the storage account level, complete the failover, and then resume the backup. This process doesn't impact existing recovery points. However, it triggers a full re-replication of blobs during the next backup operation. The object replication policy is automatically recreated in the next backup cycle.
70+
- When you remove backups, Azure Backup automatically deletes the **object replication policy** from the source. If custom locks exist, remove the policy manually. If you stop protection, it disconnects only the storage account from the Backup vault and tools (such as Backup center). This action doesn't disable blob point-in-time restore, versioning, or change feed settings.
6971
- Archive tier blob backup isn't supported. Cool and cold tier blobs are restored in hot tier.
7072
- The backup operation isn't supported for blobs that are uploaded by using [Data Lake Storage APIs](/rest/api/storageservices/data-lake-storage-gen2).
7173
- When you delete and recreate a storage account with the same name, **Object Replication** doesn't recognize the change. As a result, future Recovery Points continue to include the older blobs and their versions.

0 commit comments

Comments
 (0)