blazor-devexpress-dot-aiintegration-dot-blazor-dot-chat-dot-messagesenteventargs-3096ba20.md
Returns the collection of AI resources and files attached to the chat message.
Namespace : DevExpress.AIIntegration.Blazor.Chat
Assembly : DevExpress.AIIntegration.Blazor.Chat.v25.2.dll
NuGet Package : DevExpress.AIIntegration.Blazor.Chat
public List<IAIChatMessageContextItem> Contexts { get; }
| Type | Description |
|---|---|
| List<IAIChatMessageContextItem> |
The collection of resources.
|
Use the Contexts property to access the collection of AI resources and files attached to the chat message.
Note
The Contexts collection is populated only for messages in which a user explicitly attaches resources or files. Subsequent messages can reference previously selected resources, but their Contexts collection remains empty.
<DxAIChat Resources="Resources"
MessageSent="OnMessageSent">
</DxAIChat>
@code {
List<AIChatResource> Resources { get; set; } = [];
protected override async Task OnInitializedAsync() {
AIChatResource instructions = await FileResourceProvider.GetTextResourceAsync("instructions",
"Technical Support",
"An assistant that helps troubleshoot technical issues and provides step-by-step solutions.");
AIChatResource documentation = await FileResourceProvider.GetTextResourceAsync("api-reference.md",
"API Reference",
"DevExpress Blazor AI Chat API Reference.");
AIChatResource screenshot = await FileResourceProvider.GetBinaryResourceAsync("ai-chat-image.png",
"AI Chat Screenshot",
"An annotated screenshot of the AI Chat component.",
"image/png");
Resources.Add(instructions);
Resources.Add(documentation);
Resources.Add(screenshot);
await base.OnInitializedAsync();
}
private void OnMessageSent(MessageSentEventArgs args) {
string message = $"Message: {args.Content}.{System.Environment.NewLine}";
if(args.Contexts != null && args.Contexts.Count > 0) {
message += "Included resources: " + string.Join(", ", args.Contexts.Select(c => c.Name));
}
args.Chat.SendMessage(message, ChatRole.Assistant);
}
}
public static class FileResourceProvider
{
public static async Task<AIChatResource> GetTextResourceAsync(string resourceFileName,
string title,
string description) {
string filePath = GetResourcePath(resourceFileName);
string fileContent = await File.ReadAllTextAsync(filePath);
string mime = Path.GetExtension(resourceFileName).ToLower() switch {
".md" => "text/markdown",
".html" => "text/html",
_ => "text/plain"
};
AIChatResource resource = new AIChatResource(resourceFileName,
title,
fileContent,
mime,
description);
return resource;
}
public static async Task<AIChatResource> GetBinaryResourceAsync(string resourceFileName,
string title,
string description,
string mime) {
string filePath = GetResourcePath(resourceFileName);
byte[] fileContent = await File.ReadAllBytesAsync(filePath);
AIChatResource resource = new AIChatResource(resourceFileName,
title,
fileContent,
mime,
description);
return resource;
}
private static string GetResourcePath(string resourceFileName) =>
Path.Combine(AppContext.BaseDirectory, "AiResources", resourceFileName);
}
See Also