73 writes to Contents
Microsoft.Extensions.AI (3)
ChatCompletion\FunctionInvokingChatClient.cs (2)
583
updateToYield.
Contents
= updatedContents;
656
Contents
= message.Contents,
ChatCompletion\ImageGeneratingChatClient.cs (1)
115
modifiedUpdate.
Contents
= newContents;
Microsoft.Extensions.AI.Abstractions (2)
ChatCompletion\ChatResponse.cs (1)
152
Contents
= message.Contents,
ChatCompletion\ChatResponseUpdate.cs (1)
74
Contents
= Contents,
Microsoft.Extensions.AI.Abstractions.Tests (43)
ChatCompletion\ChatResponseUpdateExtensionsTests.cs (37)
35
new() {
Contents
= [new UsageContent(new() { InputTokenCount = 1, OutputTokenCount = 2 })] },
36
new() {
Contents
= [new UsageContent(new() { InputTokenCount = 4, OutputTokenCount = 5 })] },
662
updates.Add(new() {
Contents
= [new DataContent("data:image/png;base64,aGVsbG8=")] });
692
new() {
Contents
= [new TextReasoningContent("D")] },
693
new() {
Contents
= [new TextReasoningContent("E")] },
694
new() {
Contents
= [new TextReasoningContent("F")] },
697
new() {
Contents
= [new TextReasoningContent("I")] },
698
new() {
Contents
= [new TextReasoningContent("J")] },
700
new() {
Contents
= [new TextReasoningContent("L")] },
703
new() {
Contents
= [new TextReasoningContent("O")] },
704
new() {
Contents
= [new TextReasoningContent("P")] },
727
new() {
Contents
= [new TextReasoningContent("A") { ProtectedData = "1" }] },
728
new() {
Contents
= [new TextReasoningContent("B") { ProtectedData = "2" }] },
729
new() {
Contents
= [new TextReasoningContent("C")] },
730
new() {
Contents
= [new TextReasoningContent("D")] },
731
new() {
Contents
= [new TextReasoningContent("E") { ProtectedData = "3" }] },
732
new() {
Contents
= [new TextReasoningContent("F") { ProtectedData = "4" }] },
733
new() {
Contents
= [new TextReasoningContent("G")] },
734
new() {
Contents
= [new TextReasoningContent("H")] },
767
new() {
Contents
= [new TextContent("D") { Annotations = [new()] }] },
768
new() {
Contents
= [new TextContent("E") { Annotations = [new()] }] },
769
new() {
Contents
= [new TextContent("F") { Annotations = [new()] }] },
770
new() {
Contents
= [new TextContent("G") { Annotations = [] }] },
771
new() {
Contents
= [new TextContent("H") { Annotations = [] }] },
772
new() {
Contents
= [new TextContent("I") { Annotations = [new()] }] },
773
new() {
Contents
= [new TextContent("J") { Annotations = [new()] }] },
775
new() {
Contents
= [new TextContent("L") { Annotations = [new()] }] },
778
new() {
Contents
= [new TextContent("O") { Annotations = [new()] }] },
779
new() {
Contents
= [new TextContent("P") { Annotations = [new()] }] },
806
new() {
Contents
= [new UsageContent(new() { TotalTokenCount = 42 })] },
934
new() {
Contents
= [new ImageGenerationToolResultContent { ImageId = "img1", Outputs = [image1] }] },
937
new() {
Contents
= [new ImageGenerationToolResultContent { ImageId = "img2", Outputs = [image2] }] },
940
new() {
Contents
= [new ImageGenerationToolResultContent { ImageId = "img1", Outputs = [image3] }] },
943
new() {
Contents
= [new ImageGenerationToolResultContent { ImageId = "img2", Outputs = [image4] }] },
988
new() {
Contents
= [new ImageGenerationToolResultContent { ImageId = null, Outputs = [image1] }] },
991
new() {
Contents
= [new ImageGenerationToolResultContent { ImageId = "", Outputs = [image2] }] },
994
new() {
Contents
= [new ImageGenerationToolResultContent { ImageId = null, Outputs = [image3] }] },
ChatCompletion\ChatResponseUpdateTests.cs (6)
49
update.
Contents
= newList;
51
update.
Contents
= null;
90
Contents
=
119
Contents
=
184
Contents
= originalContents,
311
Contents
= sharedContents
Microsoft.Extensions.AI.OpenAI.Tests (1)
OpenAIConversionTests.cs (1)
1213
Contents
=
Microsoft.Extensions.AI.Tests (24)
ChatCompletion\DistributedCachingChatClientTest.cs (8)
253
Contents
=
266
Contents
= [new FunctionCallContent("someCallId", "someFn", new Dictionary<string, object?> { ["arg1"] = "value1" })],
270
Contents
= [new UsageContent(new() { InputTokenCount = 123, OutputTokenCount = 456, TotalTokenCount = 99999 })],
316
new() { Role = ChatRole.Assistant,
Contents
= [new FunctionCallContent("callId1", "separator")] },
369
new() { Role = ChatRole.Assistant,
Contents
= [new TextContent("Hello")] },
370
new() { Role = ChatRole.Assistant,
Contents
= [new TextContent(" world, ")] },
374
Contents
=
385
Contents
=
ChatCompletion\FunctionInvokingChatClientTests.cs (3)
1192
new() {
Contents
= [new FunctionCallContent("callId1", "Func1", new Dictionary<string, object?> { ["text"] = "Input 1" })] },
1193
new() {
Contents
= [new FunctionCallContent("callId2", "Func1", new Dictionary<string, object?> { ["text"] = "Input 2" })] }
1198
updates = [new() {
Contents
= [new TextContent("OK bye")] }];
ChatCompletion\OpenTelemetryChatClientTests.cs (13)
83
Contents
= [new UsageContent(new()
375
yield return new() {
Contents
= [new TextReasoningContent("This is reasoning")] };
376
yield return new() {
Contents
= [new FunctionCallContent("call-123", "GetWeather", new Dictionary<string, object?> { ["location"] = "Seattle" })] };
377
yield return new() {
Contents
= [new FunctionResultContent("call-123", "72°F and sunny")] };
378
yield return new() {
Contents
= [new DataContent(Convert.FromBase64String("aGVsbG8gd29ybGQ="), "image/png")] };
379
yield return new() {
Contents
= [new UriContent(new Uri("https://example.com/image.jpg"), "image/jpeg")] };
380
yield return new() {
Contents
= [new HostedFileContent("file-abc123")] };
629
yield return new() {
Contents
= [new CodeInterpreterToolCallContent { CallId = "ci-call-1", Inputs = [new TextContent("print('hello')")] }] };
630
yield return new() {
Contents
= [new CodeInterpreterToolResultContent { CallId = "ci-call-1", Outputs = [new TextContent("hello")] }] };
631
yield return new() {
Contents
= [new ImageGenerationToolCallContent { ImageId = "img-123" }] };
632
yield return new() {
Contents
= [new ImageGenerationToolResultContent { ImageId = "img-123", Outputs = [new UriContent(new Uri("https://example.com/image.png"), "image/png")] }] };
633
yield return new() {
Contents
= [new McpServerToolCallContent("mcp-call-1", "myTool", "myServer") { Arguments = new Dictionary<string, object?> { ["param1"] = "value1" } }] };
634
yield return new() {
Contents
= [new McpServerToolResultContent("mcp-call-1") { Output = [new TextContent("Tool result")] }] };
130 references to Contents
Aspire.Dashboard (3)
Model\Assistant\AIHelpers.cs (3)
334
foreach (var item in update.
Contents
.OfType<TextContent>())
353
var contentsList = filter is null ? update.
Contents
: update.
Contents
.Where(filter).ToList();
Microsoft.Extensions.AI (5)
ChatCompletion\FunctionInvokingChatClient.cs (3)
521
_ = CopyFunctionCalls(update.
Contents
, ref functionCallContents);
525
IList<AIContent> contents = update.
Contents
;
581
if (TryReplaceFunctionCallsWithApprovalRequests(updateToYield.
Contents
, out var updatedContents))
ChatCompletion\ImageGeneratingChatClient.cs (2)
109
var newContents = requestState.ReplaceImageGenerationFunctionResults(update.
Contents
);
111
if (!ReferenceEquals(newContents, update.
Contents
))
Microsoft.Extensions.AI.Abstractions (6)
ChatCompletion\ChatResponse.cs (1)
137
extra.
Contents
.Add(new UsageContent(usage));
ChatCompletion\ChatResponseExtensions.cs (3)
87
var contentsList = filter is null ? update.
Contents
: update.
Contents
.Where(filter).ToList();
567
foreach (var content in update.
Contents
)
ChatCompletion\ChatResponseUpdate.cs (2)
74
Contents =
Contents
,
97
/// This property concatenates the text of all <see cref="TextContent"/> objects in <see cref="
Contents
"/>.
Microsoft.Extensions.AI.Abstractions.Tests (31)
ChatCompletion\ChatResponseUpdateTests.cs (31)
20
Assert.Empty(update.
Contents
);
43
Assert.Empty(update.
Contents
);
44
update.
Contents
.Add(new TextContent("text"));
45
Assert.Single(update.
Contents
);
47
Assert.Same(update.
Contents
, update.
Contents
);
50
Assert.Same(newList, update.
Contents
);
52
Assert.NotNull(update.
Contents
);
53
Assert.Empty(update.
Contents
);
101
TextContent textContent = Assert.IsType<TextContent>(update.
Contents
[3]);
106
((TextContent)update.
Contents
[3]).Text = "text-3";
108
Assert.Same(textContent, update.
Contents
[3]);
140
Assert.Equal(5, result.
Contents
.Count);
142
Assert.IsType<TextContent>(result.
Contents
[0]);
143
Assert.Equal("text-1", ((TextContent)result.
Contents
[0]).Text);
145
Assert.IsType<DataContent>(result.
Contents
[1]);
146
Assert.Equal("data:image/png;base64,aGVsbG8=", ((DataContent)result.
Contents
[1]).Uri);
148
Assert.IsType<FunctionCallContent>(result.
Contents
[2]);
149
Assert.Equal("fc1", ((FunctionCallContent)result.
Contents
[2]).Name);
151
Assert.IsType<DataContent>(result.
Contents
[3]);
152
Assert.Equal("data"u8.ToArray(), ((DataContent)result.
Contents
[3]).Data.ToArray());
154
Assert.IsType<TextContent>(result.
Contents
[4]);
155
Assert.Equal("text-2", ((TextContent)result.
Contents
[4]).Text);
213
Assert.Same(original.
Contents
, clone.
Contents
);
242
Assert.Empty(clone.
Contents
); // Contents property initializes to empty list
258
Assert.Empty(clone.
Contents
);
323
Assert.Same(original.
Contents
, clone.
Contents
);
326
Assert.Equal(2, original.
Contents
.Count);
327
Assert.Equal(2, clone.
Contents
.Count);
Microsoft.Extensions.AI.Integration.Tests (1)
ChatClientIntegrationTests.cs (1)
159
UsageContent usage = chunks.SelectMany(c => c.
Contents
).OfType<UsageContent>().Single();
Microsoft.Extensions.AI.OpenAI (15)
MicrosoftExtensionsAIChatExtensions.cs (3)
148
var usage = update.
Contents
.FirstOrDefault(c => c is UsageContent) is UsageContent usageContent ?
155
var toolCallUpdates = update.
Contents
.OfType<FunctionCallContent>().Select((fcc, index) =>
165
new(OpenAIChatClient.ToOpenAIChatContent(update.
Contents
)),
OpenAIAssistantsChatClient.cs (5)
181
ruUpdate.
Contents
.Add(new UsageContent(new()
196
ruUpdate.
Contents
.Add(fcc);
284
if (textUpdate.
Contents
.Count == 0)
287
textUpdate.
Contents
.Add(new TextContent(string.Empty));
290
(((TextContent)textUpdate.
Contents
[0]).Annotations ??= []).Add(new CitationAnnotation
OpenAIChatClient.cs (6)
378
ConvertContentParts(update.ContentUpdate, responseUpdate.
Contents
);
385
responseUpdate.
Contents
.Add(new TextReasoningContent(reasoningText));
390
responseUpdate.
Contents
.Add(new DataContent(audioUpdate.AudioBytesUpdate.ToMemory(), GetOutputAudioMimeType(options))
425
responseUpdate.
Contents
.Add(new UsageContent(FromOpenAIUsage(tokenUsage))
457
responseUpdate.
Contents
.Add(callContent);
465
responseUpdate.
Contents
.Add(new ErrorContent(refusal.ToString()) { ErrorCode = "Refusal" });
OpenAIResponsesChatClient.cs (1)
449
AddMcpToolCallContent(mtci, mcpUpdate.
Contents
);
Microsoft.Extensions.AI.OpenAI.Tests (53)
OpenAIChatClientTests.cs (5)
255
Assert.Equal(i == 10 ? 0 : 1, updates[i].
Contents
.Count);
259
UsageContent usage = updates.SelectMany(u => u.
Contents
).OfType<UsageContent>().Single();
1347
FunctionCallContent fcc = Assert.IsType<FunctionCallContent>(Assert.Single(updates[updates.Count - 1].
Contents
));
1352
UsageContent usage = updates.SelectMany(u => u.
Contents
).OfType<UsageContent>().Single();
2008
string reasoningText = string.Concat(updates.SelectMany(u => u.
Contents
).OfType<TextReasoningContent>().Select(r => r.Text));
OpenAIResponseClientTests.cs (48)
328
Assert.Single(updates[i].
Contents
);
331
var reasoning = Assert.IsType<TextReasoningContent>(updates[i].
Contents
.Single());
338
Assert.Single(updates[i].
Contents
);
343
Assert.Empty(updates[i].
Contents
);
349
UsageContent usage = updates.SelectMany(u => u.
Contents
).OfType<UsageContent>().Single();
461
Assert.Single(u.
Contents
);
463
var reasoning = Assert.IsType<TextReasoningContent>(u.
Contents
.Single());
468
var allReasoningText = string.Concat(reasoningUpdates.Select(u => u.
Contents
.OfType<TextReasoningContent>().First().Text));
476
UsageContent usage = updates.SelectMany(u => u.
Contents
).OfType<UsageContent>().Single();
570
var reasoningContents = updates.SelectMany(u => u.
Contents
).OfType<TextReasoningContent>().ToList();
682
Assert.Equal((i >= 4 && i <= 12) || i == 16 ? 1 : 0, updates[i].
Contents
.Count);
691
UsageContent usage = updates.SelectMany(u => u.
Contents
).OfType<UsageContent>().Single();
920
Assert.Equal(i >= 3 ? 1 : 0, updates[i].
Contents
.Count);
925
AIContent content = Assert.Single(updates[3].
Contents
);
930
UsageContent usage = Assert.IsType<UsageContent>(Assert.Single(updates[4].
Contents
));
2654
Assert.Equal((i >= 5 && i <= 13) || i == 17 ? 1 : 0, updates[i].
Contents
.Count);
2738
Assert.Single(updates[i].
Contents
);
2748
Assert.Empty(updates[i].
Contents
);
2754
Assert.Single(updates[i].
Contents
);
3208
u.
Contents
!= null && u.
Contents
.Any(c => c is CodeInterpreterToolCallContent)).ToList();
3217
var content = update.
Contents
.OfType<CodeInterpreterToolCallContent>().First();
3236
u.
Contents
!= null && u.
Contents
.Any(c => c is CodeInterpreterToolResultContent)).ToList();
5165
var refusalUpdate = updates.FirstOrDefault(u => u.
Contents
.Any(c => c is ErrorContent ec && ec.ErrorCode == "Refusal"));
5168
var errorContent = refusalUpdate.
Contents
.OfType<ErrorContent>().First();
5223
var errorUpdate = updates.FirstOrDefault(u => u.
Contents
.Any(c => c is ErrorContent));
5226
var errorContent = errorUpdate.
Contents
.OfType<ErrorContent>().First();
5266
var errorUpdate = updates.FirstOrDefault(u => u.
Contents
.Any(c => c is ErrorContent));
5269
var errorContent = errorUpdate.
Contents
.OfType<ErrorContent>().First();
5309
var errorUpdate = updates.FirstOrDefault(u => u.
Contents
.Any(c => c is ErrorContent));
5312
var errorContent = errorUpdate.
Contents
.OfType<ErrorContent>().First();
5352
var annotatedUpdate = updates.FirstOrDefault(u => u.
Contents
.Any(c => c.Annotations?.Count > 0));
5354
Assert.NotEmpty(annotatedUpdate.
Contents
.First().Annotations!);
5740
u.
Contents
!= null && u.
Contents
.Any(c => c is ImageGenerationToolCallContent));
5742
var toolCall = toolCallUpdate.
Contents
.OfType<ImageGenerationToolCallContent>().First();
5747
u.
Contents
!= null && u.
Contents
.Any(c => c is ImageGenerationToolResultContent result &&
5753
u.
Contents
!= null && u.
Contents
.Any(c => c is UsageContent));
5755
var usage = completionUpdate.
Contents
.OfType<UsageContent>().First();
5853
u.
Contents
!= null && u.
Contents
.Any(c => c is ImageGenerationToolResultContent result &&
5862
u.
Contents
.OfType<ImageGenerationToolResultContent>().Any(result =>
5899
u.
Contents
!= null && u.
Contents
.Any(c => c is ImageGenerationToolCallContent));
5901
var toolCall = toolCallUpdate.
Contents
.OfType<ImageGenerationToolCallContent>().First();
Microsoft.Extensions.AI.Tests (16)
ChatCompletion\DistributedCachingChatClientTest.cs (8)
346
Assert.Collection(update.
Contents
,
356
c => Assert.IsType<FunctionCallContent>(Assert.Single(c.
Contents
)),
425
var content = Assert.IsType<TextContent>(Assert.Single(item.
Contents
));
842
Assert.Equal(expectedItem.
Contents
.Count, actualItem.
Contents
.Count);
844
for (var itemIndex = 0; itemIndex < expectedItem.
Contents
.Count; itemIndex++)
846
var expectedItemItem = expectedItem.
Contents
[itemIndex];
847
var actualItemItem = actualItem.
Contents
[itemIndex];
ChatCompletion\FunctionInvokingChatClientApprovalsTests.cs (6)
996
var functionCall = update.
Contents
.OfType<FunctionCallContent>().First();
1075
Assert.Equal("Text 1", update.
Contents
.OfType<TextContent>().First().Text);
1081
Assert.Equal("Text 2", update.
Contents
.OfType<TextContent>().First().Text);
1087
var approvalRequest1 = update.
Contents
.OfType<FunctionApprovalRequestContent>().First();
1095
var approvalRequest2 = update.
Contents
.OfType<FunctionApprovalRequestContent>().First();
1103
var approvalRequest3 = update.
Contents
.OfType<FunctionApprovalRequestContent>().First();
ChatCompletion\ImageGeneratingChatClientTests.cs (2)
381
Assert.Single(update.
Contents
);
383
var imageToolCallContent = Assert.IsType<ImageGenerationToolCallContent>(update.
Contents
[0]);