16 writes to Contents
Microsoft.Extensions.AI (5)
ChatCompletion\FunctionInvokingChatClient.cs (3)
1483
newMessage.
Contents
= keptContents;
1651
functionCallMessage.
Contents
= [resultWithRequestMessage.Response.ToolCall];
1786
message.
Contents
= [.. message.Contents];
ChatCompletion\ImageGeneratingChatClient.cs (2)
88
message.
Contents
= requestState.ReplaceImageGenerationFunctionResults(message.Contents);
230
newMessage.
Contents
= newContents;
Microsoft.Extensions.AI.Abstractions.Tests (3)
ChatCompletion\ChatMessageTests.cs (3)
180
message.
Contents
= contents;
184
message.
Contents
= contents;
187
message.
Contents
= null;
Microsoft.Extensions.AI.Evaluation.Integration.Tests (6)
SafetyEvaluatorTests.cs (6)
338
Contents
= [
376
Contents
= [
410
Contents
= [
423
Contents
= [
459
Contents
= [
472
Contents
= [
Microsoft.Extensions.AI.Evaluation.Reporting.Tests (1)
SerializationChainingTests.cs (1)
31
Contents
= [new TextContent("A user message")]
Microsoft.Extensions.AI.Tests (1)
ChatCompletion\DistributedCachingChatClientTest.cs (1)
52
Contents
= [new FunctionCallContent("someCallId", "functionName", new Dictionary<string, object?>
455 references to Contents
Microsoft.AspNetCore.Components.AI (3)
Engine\AgentContext.cs (1)
321
messages[^1].
Contents
.Add(result);
Engine\UIAgent.cs (2)
147
Contents = [.. message.
Contents
]
217
Contents = [.. message.
Contents
],
Microsoft.Extensions.AI (24)
ChatCompletion\FunctionInvokingChatClient.cs (16)
714
Contents = message.
Contents
,
869
message.
Contents
.Any(static c =>
883
message.
Contents
.All(static c =>
895
any |= CopyFunctionCalls(messages[i].
Contents
, ref functionCalls);
931
IList<AIContent> contents = messages[i].
Contents
;
950
IList<AIContent> contents = messages[i].
Contents
;
1226
if (added.Any(static m => m.
Contents
.Any(static c => c is FunctionResultContent { Exception: not null })))
1234
.SelectMany(m => m.
Contents
.OfType<FunctionResultContent>())
1447
for (int j = 0; j < message.
Contents
.Count; j++)
1449
var content = message.
Contents
[j];
1477
if (keptContents?.Count != message.
Contents
.Count)
1622
currentMessage.
Contents
.Add(resultWithRequestMessage.Response.ToolCall);
1750
var content = messages[i].
Contents
;
1786
message.Contents = [.. message.
Contents
];
1788
var functionCall = (FunctionCallContent)message.
Contents
[contentIndex];
1790
message.
Contents
[contentIndex] = new ToolApprovalRequestContent(ComposeApprovalRequestId(functionCall.CallId), functionCall)
ChatCompletion\ImageGeneratingChatClient.cs (4)
88
message.Contents = requestState.ReplaceImageGenerationFunctionResults(message.
Contents
);
171
for (int contentIndex = 0; contentIndex < message.
Contents
.Count; contentIndex++)
173
var content = message.
Contents
[contentIndex];
178
newContents ??= CopyList(message.
Contents
, contentIndex);
ChatReduction\MessageCountingChatReducer.cs (1)
57
else if (!message.
Contents
.Any(m => m is FunctionCallContent or FunctionResultContent))
ChatReduction\SummarizingChatReducer.cs (2)
161
if (!unsummarizedMessages[indexOfFirstMessageToKeep - 1].
Contents
.Any(IsToolRelatedContent))
225
if (!message.
Contents
.Any(IsToolRelatedContent))
Common\OtelMessageSerializer.cs (1)
63
foreach (AIContent content in message.
Contents
)
Microsoft.Extensions.AI.Abstractions (5)
ChatCompletion\ChatMessage.cs (2)
77
/// This property concatenates the text of all <see cref="TextContent"/> objects in <see cref="
Contents
"/>.
80
public string Text =>
Contents
.ConcatText();
ChatCompletion\ChatResponse.cs (1)
149
Contents = message.
Contents
,
ChatCompletion\ChatResponseExtensions.cs (2)
531
CoalesceContent((List<AIContent>)response.Messages[i].
Contents
);
630
message.
Contents
.Add(content);
Microsoft.Extensions.AI.Abstractions.Tests (112)
AssertExtensions.cs (5)
30
Assert.Equal(expectedMessage.
Contents
.Count, chatMessage.
Contents
.Count);
31
for (int j = 0; j < expectedMessage.
Contents
.Count; j++)
33
var expectedItem = expectedMessage.
Contents
[j];
34
var chatItem = chatMessage.
Contents
[j];
ChatCompletion\ChatMessageTests.cs (41)
19
Assert.Empty(message.
Contents
);
23
Assert.NotNull(message.
Contents
);
24
Assert.Same(message.
Contents
, message.
Contents
);
25
Assert.Empty(message.
Contents
);
40
Assert.Same(message.
Contents
, message.
Contents
);
43
Assert.Empty(message.
Contents
);
47
Assert.Single(message.
Contents
);
48
TextContent tc = Assert.IsType<TextContent>(message.
Contents
[0]);
66
Assert.Empty(message.
Contents
);
70
Assert.Empty(message.
Contents
);
74
Assert.Empty(message.
Contents
);
78
Assert.Empty(message.
Contents
);
97
Assert.Same(message.
Contents
, message.
Contents
);
100
Assert.Empty(message.
Contents
);
105
Assert.Equal(messageCount, message.
Contents
.Count);
108
TextContent tc = Assert.IsType<TextContent>(message.
Contents
[i]);
154
TextContent textContent = Assert.IsType<TextContent>(message.
Contents
[3]);
159
((TextContent)message.
Contents
[3]).Text = "text-3";
170
Assert.IsType<List<AIContent>>(new ChatMessage().
Contents
);
177
Assert.Empty(message.
Contents
);
182
Assert.Same(contents, message.
Contents
);
185
Assert.Same(contents, message.
Contents
);
188
Assert.NotNull(message.
Contents
);
189
Assert.NotSame(contents, message.
Contents
);
190
Assert.Empty(message.
Contents
);
281
((TextContent)chatMessage.
Contents
[0]).Text = "content-1-override"; // Override the content of the first text content item that has the "content-1" content
293
Assert.NotNull(deserializedMessage.
Contents
);
294
Assert.Equal(items.Count, deserializedMessage.
Contents
.Count);
296
var textContent = deserializedMessage.
Contents
[0] as TextContent;
303
var dataContent = deserializedMessage.
Contents
[1] as DataContent;
311
dataContent = deserializedMessage.
Contents
[2] as DataContent;
319
textContent = deserializedMessage.
Contents
[3] as TextContent;
326
var functionCallContent = deserializedMessage.
Contents
[4] as FunctionCallContent;
334
var functionResultContent = deserializedMessage.
Contents
[5] as FunctionResultContent;
382
Assert.Equal(3, result.
Contents
.Count);
384
var textContent = Assert.IsType<TextContent>(result.
Contents
[0]);
387
var funcCall = Assert.IsType<FunctionCallContent>(result.
Contents
[1]);
393
var funcResult = Assert.IsType<FunctionResultContent>(result.
Contents
[2]);
ChatCompletion\ChatResponseUpdateExtensionsTests.cs (45)
672
Assert.Equal(expected.Count + (gapLength * ((numSequences - 1) + (gapBeginningEnd ? 2 : 0))), message.
Contents
.Count);
674
TextContent[] contents = message.
Contents
.OfType<TextContent>().ToArray();
709
Assert.Equal(8, message.
Contents
.Count);
710
Assert.Equal("ABC", Assert.IsType<TextContent>(message.
Contents
[0]).Text);
711
Assert.Equal("DEF", Assert.IsType<TextReasoningContent>(message.
Contents
[1]).Text);
712
Assert.Equal("GH", Assert.IsType<TextContent>(message.
Contents
[2]).Text);
713
Assert.Equal("IJ", Assert.IsType<TextReasoningContent>(message.
Contents
[3]).Text);
714
Assert.Equal("K", Assert.IsType<TextContent>(message.
Contents
[4]).Text);
715
Assert.Equal("L", Assert.IsType<TextReasoningContent>(message.
Contents
[5]).Text);
716
Assert.Equal("MN", Assert.IsType<TextContent>(message.
Contents
[6]).Text);
717
Assert.Equal("OP", Assert.IsType<TextReasoningContent>(message.
Contents
[7]).Text);
739
Assert.Equal(5, message.
Contents
.Count);
741
Assert.Equal("A", Assert.IsType<TextReasoningContent>(message.
Contents
[0]).Text);
742
Assert.Equal("1", ((TextReasoningContent)message.
Contents
[0]).ProtectedData);
744
Assert.Equal("B", Assert.IsType<TextReasoningContent>(message.
Contents
[1]).Text);
745
Assert.Equal("2", ((TextReasoningContent)message.
Contents
[1]).ProtectedData);
747
Assert.Equal("CDE", Assert.IsType<TextReasoningContent>(message.
Contents
[2]).Text);
748
Assert.Equal("3", ((TextReasoningContent)message.
Contents
[2]).ProtectedData);
750
Assert.Equal("F", Assert.IsType<TextReasoningContent>(message.
Contents
[3]).Text);
751
Assert.Equal("4", ((TextReasoningContent)message.
Contents
[3]).ProtectedData);
753
Assert.Equal("GH", Assert.IsType<TextReasoningContent>(message.
Contents
[4]).Text);
754
Assert.Null(((TextReasoningContent)message.
Contents
[4]).ProtectedData);
784
Assert.Equal(12, message.
Contents
.Count);
785
Assert.Equal("ABC", Assert.IsType<TextContent>(message.
Contents
[0]).Text);
786
Assert.Equal("D", Assert.IsType<TextContent>(message.
Contents
[1]).Text);
787
Assert.Equal("E", Assert.IsType<TextContent>(message.
Contents
[2]).Text);
788
Assert.Equal("F", Assert.IsType<TextContent>(message.
Contents
[3]).Text);
789
Assert.Equal("GH", Assert.IsType<TextContent>(message.
Contents
[4]).Text);
790
Assert.Equal("I", Assert.IsType<TextContent>(message.
Contents
[5]).Text);
791
Assert.Equal("J", Assert.IsType<TextContent>(message.
Contents
[6]).Text);
792
Assert.Equal("K", Assert.IsType<TextContent>(message.
Contents
[7]).Text);
793
Assert.Equal("L", Assert.IsType<TextContent>(message.
Contents
[8]).Text);
794
Assert.Equal("MN", Assert.IsType<TextContent>(message.
Contents
[9]).Text);
795
Assert.Equal("O", Assert.IsType<TextContent>(message.
Contents
[10]).Text);
796
Assert.Equal("P", Assert.IsType<TextContent>(message.
Contents
[11]).Text);
816
Assert.Equal("Hello, world!", Assert.IsType<TextContent>(Assert.Single(Assert.Single(response.Messages).
Contents
)).Text);
953
Assert.Equal(4, message.
Contents
.Count);
957
Assert.IsType<TextContent>(message.
Contents
[0]).Text);
960
var imageResults = message.
Contents
.OfType<ImageGenerationToolResultContent>().ToArray();
1001
var imageResults = message.
Contents
.OfType<ImageGenerationToolResultContent>().ToArray();
1043
var webSearchCalls = message.
Contents
.OfType<WebSearchToolCallContent>().ToArray();
1074
var ws1 = Assert.Single(message.
Contents
.OfType<WebSearchToolCallContent>());
1094
var webSearchCalls = message.
Contents
.OfType<WebSearchToolCallContent>().ToArray();
1132
var ws1First = Assert.Single(response1.Messages.SelectMany(m => m.
Contents
).OfType<WebSearchToolCallContent>());
1138
var ws1Second = Assert.Single(response2.Messages.SelectMany(m => m.
Contents
).OfType<WebSearchToolCallContent>());
Contents\AIContentTests.cs (7)
92
foreach (AIContent content in message.
Contents
)
105
Assert.Equal(message.
Contents
.Count, deserialized.
Contents
.Count);
106
for (int i = 0; i < message.
Contents
.Count; i++)
108
Assert.NotNull(message.
Contents
[i]);
109
Assert.Equal(message.
Contents
[i].GetType(), deserialized.
Contents
[i].GetType());
Contents\ToolCallContentTests.cs (7)
64
foreach (var content in message.
Contents
)
77
Assert.Equal(message.
Contents
.Count, deserialized2.
Contents
.Count);
78
for (int i = 0; i < message.
Contents
.Count; i++)
80
Assert.NotNull(deserialized2.
Contents
[i]);
81
Assert.Equal(message.
Contents
[i].GetType(), deserialized2.
Contents
[i].GetType());
Contents\ToolResultContentTests.cs (7)
63
foreach (var content in message.
Contents
)
76
Assert.Equal(message.
Contents
.Count, deserialized2.
Contents
.Count);
77
for (int i = 0; i < message.
Contents
.Count; i++)
79
Assert.NotNull(deserialized2.
Contents
[i]);
80
Assert.Equal(message.
Contents
[i].GetType(), deserialized2.
Contents
[i].GetType());
Microsoft.Extensions.AI.Evaluation (4)
ChatMessageExtensions.cs (3)
100
/// (present within the <see cref="ChatMessage.
Contents
"/> of the <paramref name="message"/>) that are not
116
if (!message.
Contents
.OfType<TextContent>().Any())
139
/// (present within the <see cref="ChatMessage.
Contents
"/> of the <paramref name="messages"/>) that are not
ChatResponseExtensions.cs (1)
21
/// (present within the <see cref="ChatMessage.
Contents
"/> of the <see cref="ChatResponse.Messages"/>) that are not
Microsoft.Extensions.AI.Evaluation.Quality (4)
ChatResponseExtensions.cs (1)
29
foreach (AIContent content in modelResponse.Messages.SelectMany(m => m.
Contents
))
IntentResolutionEvaluator.cs (1)
121
modelResponse.Messages.SelectMany(m => m.
Contents
).OfType<FunctionCallContent>();
TaskAdherenceEvaluator.cs (1)
120
modelResponse.Messages.SelectMany(m => m.
Contents
).OfType<FunctionCallContent>();
ToolCallAccuracyEvaluator.cs (1)
100
modelResponse.Messages.SelectMany(m => m.
Contents
).OfType<FunctionCallContent>();
Microsoft.Extensions.AI.Evaluation.Safety (3)
ChatMessageExtensions.cs (1)
12
=> message.
Contents
.Any(c => c.IsImageWithSupportedFormat());
ContentSafetyServicePayloadUtilities.cs (2)
316
foreach (AIContent content in message.
Contents
)
452
foreach (AIContent content in message.
Contents
)
Microsoft.Extensions.AI.Integration.Tests (18)
ChatClientIntegrationTests.cs (3)
169
var singleTextContent = (TextContent)history[1].
Contents
.Single();
667
((TextContent)message.
Contents
[0]).Text += "!";
701
((TextContent)message.
Contents
[0]).Text += "!";
ImageGeneratingChatClientIntegrationTests.cs (8)
84
var contents = response.Messages.SelectMany(m => m.
Contents
).ToArray();
139
.SelectMany(m => m.
Contents
)
214
var firstToolResultContent = Assert.Single(firstResponse.Messages.SelectMany(m => m.
Contents
).OfType<ImageGenerationToolResultContent>());
220
Assert.Single(secondResponse.Messages.SelectMany(m => m.
Contents
).OfType<ImageGenerationToolResultContent>().SelectMany(t => t.Outputs!.OfType<DataContent>()));
269
var secondToolResultContent = Assert.Single(secondResponse.Messages.SelectMany(m => m.
Contents
).OfType<ImageGenerationToolResultContent>());
314
var firstToolResultContent = Assert.Single(firstResponse.Messages.SelectMany(m => m.
Contents
).OfType<ImageGenerationToolResultContent>());
394
var textContents = userMessage.
Contents
.OfType<TextContent>().ToList();
398
Assert.DoesNotContain(userMessage.
Contents
, c => c == originalImage);
PromptBasedFunctionCallingChatClient.cs (6)
67
for (var itemIndex = 0; itemIndex < message.
Contents
.Count; itemIndex++)
69
if (message.
Contents
[itemIndex] is FunctionResultContent frc)
74
else if (message.
Contents
[itemIndex] is FunctionCallContent fcc)
90
var contentItem = message.
Contents
.SingleOrDefault();
118
message.
Contents
.Add(new FunctionCallContent(id, toolCallParsed.Name!, toolCallParsed.Arguments is { } args ? new ReadOnlyDictionary<string, object?>(args) : null));
122
message.
Contents
.Remove(contentItem);
ReducingChatClientTests.cs (1)
98
foreach (AIContent content in message.
Contents
)
Microsoft.Extensions.AI.OpenAI (43)
MicrosoftExtensionsAIChatExtensions.cs (10)
73
IEnumerable<ChatToolCall>? toolCalls = lastMessage?.
Contents
80
new(OpenAIChatClient.ToOpenAIChatContent(lastMessage?.
Contents
?? [])),
86
outputAudio: lastMessage?.
Contents
.OfType<DataContent>().Where(dc => dc.HasTopLevelMediaType("audio")).Select(a => OpenAIChatModelFactory.ChatOutputAudio(new(a.Data))).FirstOrDefault(),
87
messageAnnotations: ConvertAnnotations(lastMessage?.
Contents
));
195
OpenAIChatClient.ConvertContentParts(acm.Content, resultMessage.
Contents
);
200
resultMessage.
Contents
.Add(fcc);
208
OpenAIChatClient.ConvertContentParts(ucm.Content, resultMessage.
Contents
);
215
OpenAIChatClient.ConvertContentParts(dcm.Content, resultMessage.
Contents
);
222
OpenAIChatClient.ConvertContentParts(scm.Content, resultMessage.
Contents
);
227
resultMessage.
Contents
.Add(new FunctionResultContent(tcm.ToolCallId, ToToolResult(tcm.Content))
OpenAIChatClient.cs (10)
172
var parts = ToOpenAIChatContent(input.
Contents
);
183
foreach (AIContent item in input.
Contents
)
209
foreach (var content in input.
Contents
)
518
returnMessage.
Contents
.Add(aiContent);
526
returnMessage.
Contents
.Add(new TextReasoningContent(reasoningText));
532
returnMessage.
Contents
.Add(new DataContent(audio.AudioBytes.ToMemory(), GetOutputAudioMimeType(chatCompletionOptions))
546
returnMessage.
Contents
.Add(callContent);
553
returnMessage.
Contents
.Add(new ErrorContent(refusal) { ErrorCode = nameof(openAICompletion.Refusal) });
561
TextContent? annotationContent = returnMessage.
Contents
.OfType<TextContent>().FirstOrDefault();
565
returnMessage.
Contents
.Add(annotationContent);
OpenAIResponsesChatClient.cs (23)
165
lastMessage.
Contents
.Add(new ErrorContent(error.Message) { ErrorCode = error.Code.ToString() });
203
((List<AIContent>)message.
Contents
).AddRange(ToAIContents(messageItem.Content));
207
message.
Contents
.Add(CreateReasoningContent(reasoningItem.GetSummaryText(), reasoningItem.EncryptedContent, reasoningItem.Id, outputItem));
213
message.
Contents
.Add(fcc);
217
message.
Contents
.Add(new FunctionResultContent(functionCallOutputItem.CallId, functionCallOutputItem.FunctionOutput) { RawRepresentation = functionCallOutputItem });
221
AddMcpToolCallContent(mtci, message.
Contents
);
237
message.
Contents
.Add(approvalRequest);
246
message.
Contents
.Add(new ToolApprovalResponseContent(
256
message.
Contents
.Add(new CodeInterpreterToolCallContent(cicri.Id)
265
message.
Contents
.Add(CreateCodeInterpreterResultContent(cicri));
269
AddImageGenerationContents(imageGenItem, options, message.
Contents
);
273
message.
Contents
.Add(new WebSearchToolCallContent(wscri.Id)
282
message.
Contents
.Add(new WebSearchToolResultContent(wscri.Id)
292
message.
Contents
.Add(new ToolCallContent(outputItem.Id));
293
message.
Contents
.Add(new ToolResultContent(outputItem.Id) { RawRepresentation = outputItem });
297
message.
Contents
.Add(new ToolCallContent(computerCall.CallId) { RawRepresentation = computerCall });
301
message.
Contents
.Add(new ToolResultContent(computerCallOutput.CallId) { RawRepresentation = computerCallOutput });
305
message.
Contents
.Add(new ToolCallContent(patchCall.CallId) { RawRepresentation = patchCall });
309
message.
Contents
.Add(new ToolResultContent(patchCallOutput.CallId) { RawRepresentation = patchCallOutput });
313
message.
Contents
.Add(new() { RawRepresentation = outputItem });
1317
foreach (AIContent item in input.
Contents
)
1405
foreach (AIContent item in input.
Contents
)
1539
foreach (AIContent item in input.
Contents
)
Microsoft.Extensions.AI.OpenAI.Tests (140)
OpenAIChatClientTests.cs (13)
165
Assert.Single(response.Messages.Single().
Contents
);
839
Assert.Single(response.Messages.Single().
Contents
);
937
Assert.Single(response.Messages.Single().
Contents
);
1035
Assert.Single(response.Messages.Single().
Contents
);
1167
Assert.Single(response.Messages.Single().
Contents
);
1168
FunctionCallContent fcc = Assert.IsType<FunctionCallContent>(response.Messages.Single().
Contents
[0]);
1252
Assert.Single(response.Messages.Single().
Contents
);
1253
TextContent fcc = Assert.IsType<TextContent>(response.Messages.Single().
Contents
[0]);
1489
Assert.Single(response.Messages.Single().
Contents
);
1608
Assert.Single(response.Messages.Single().
Contents
);
1803
var frc = Assert.IsType<FunctionResultContent>(Assert.Single(extMessages[0].
Contents
));
1919
var reasoning = message.
Contents
.OfType<TextReasoningContent>().Single();
1922
var text = message.
Contents
.OfType<TextContent>().Single();
OpenAIConversionTests.cs (38)
871
Assert.Same(messages[0].
Contents
[1].RawRepresentation, items[1]);
872
Assert.Same(messages[0].
Contents
[2].RawRepresentation, items[2]);
876
Assert.Same(messages[1].
Contents
[1].RawRepresentation, items[5]);
877
Assert.Same(messages[2].
Contents
[0].RawRepresentation, items[6]);
907
Assert.Equal(3, message.
Contents
.Count);
908
Assert.Equal("Hello, world!", Assert.IsType<TextContent>(message.
Contents
[0], exactMatch: false).Text);
909
Assert.Equal("http://example.com/image.png", Assert.IsType<UriContent>(message.
Contents
[1], exactMatch: false).Uri.ToString());
910
Assert.Equal("functionName", Assert.IsType<FunctionCallContent>(message.
Contents
[2], exactMatch: false).Name);
938
Assert.Equal(3, message.
Contents
.Count);
939
Assert.Equal("Hello, world!", Assert.IsType<TextContent>(message.
Contents
[0], exactMatch: false).Text);
940
Assert.Equal("http://example.com/image.png", Assert.IsType<UriContent>(message.
Contents
[1], exactMatch: false).Uri.ToString());
941
Assert.Equal("functionName", Assert.IsType<FunctionCallContent>(message.
Contents
[2], exactMatch: false).Name);
1177
Assert.Equal("Function output", convertedMessages[3].
Contents
.OfType<FunctionResultContent>().First().Result);
1232
var textContent = message.
Contents
.OfType<TextContent>().FirstOrDefault();
1233
var functionCall = message.
Contents
.OfType<FunctionCallContent>().FirstOrDefault();
1304
TextContent? textContent = message.
Contents
.OfType<TextContent>().FirstOrDefault();
1311
TextReasoningContent? reasoningContent = message.
Contents
.OfType<TextReasoningContent>().FirstOrDefault();
1318
FunctionCallContent? functionCallContent = message.
Contents
.OfType<FunctionCallContent>().FirstOrDefault();
1326
FunctionResultContent? functionResultContent = message.
Contents
.OfType<FunctionResultContent>().FirstOrDefault();
1335
McpServerToolCallContent? mcpToolCall = message.
Contents
.OfType<McpServerToolCallContent>().FirstOrDefault(c => c.CallId == "mcp_call_123");
1342
McpServerToolResultContent? mcpToolResult = message.
Contents
.OfType<McpServerToolResultContent>().FirstOrDefault(c => c.CallId == "mcp_call_123");
1349
ToolApprovalRequestContent? approvalRequestContent = message.
Contents
.OfType<ToolApprovalRequestContent>().FirstOrDefault();
1363
ToolApprovalResponseContent? approvalResponseContent = message.
Contents
.OfType<ToolApprovalResponseContent>().FirstOrDefault();
1379
WebSearchToolCallContent? webSearchToolCall = message.
Contents
.OfType<WebSearchToolCallContent>().FirstOrDefault(c => c.CallId == "ws_123");
1383
WebSearchToolResultContent? webSearchToolResult = message.
Contents
.OfType<WebSearchToolResultContent>().FirstOrDefault(c => c.CallId == "ws_123");
1388
ToolCallContent? fileSearchToolCall = message.
Contents
.OfType<ToolCallContent>().FirstOrDefault(c => c.CallId == "fs_123");
1392
ToolResultContent? fileSearchToolResult = message.
Contents
.OfType<ToolResultContent>().FirstOrDefault(c => c.CallId == "fs_123");
1397
ToolCallContent? computerToolCall = message.
Contents
.OfType<ToolCallContent>().FirstOrDefault(c => c.CallId == "call_456");
1402
ToolResultContent? computerToolResult = message.
Contents
.OfType<ToolResultContent>().FirstOrDefault(c => c.CallId == "call_456");
1407
ToolCallContent? applyPatchToolCall = message.
Contents
.OfType<ToolCallContent>().FirstOrDefault(c => c.CallId == "call_patch_789");
1412
ToolResultContent? applyPatchToolResult = message.
Contents
.OfType<ToolResultContent>().FirstOrDefault(c => c.CallId == "call_patch_789");
1434
Assert.Empty(message.
Contents
.OfType<ToolApprovalResponseContent>());
1437
AIContent? genericContent = message.
Contents
.FirstOrDefault(c => c.RawRepresentation == mcpApprovalResponseItem);
1458
AIContent content = Assert.Single(message.
Contents
);
1478
AIContent content = Assert.Single(message.
Contents
);
2288
WebSearchToolCallContent wsCall = Assert.Single(messages[0].
Contents
.OfType<WebSearchToolCallContent>());
2304
WebSearchToolCallContent wsCall = Assert.Single(messages[0].
Contents
.OfType<WebSearchToolCallContent>());
2320
WebSearchToolCallContent wsCall = Assert.Single(messages[0].
Contents
.OfType<WebSearchToolCallContent>());
OpenAIHostedFileClientIntegrationTests.cs (3)
285
foreach (var content in msg.
Contents
)
355
foreach (var content in msg.
Contents
)
403
foreach (var content in msg.
Contents
)
OpenAIResponseClientIntegrationTests.cs (28)
49
var toolCallContent = response.Messages.SelectMany(m => m.
Contents
).OfType<CodeInterpreterToolCallContent>().SingleOrDefault();
62
var toolResultContent = response.Messages.SelectMany(m => m.
Contents
).OfType<CodeInterpreterToolResultContent>().FirstOrDefault();
98
var wsCall = m.
Contents
.OfType<WebSearchToolCallContent>().FirstOrDefault();
104
var wsResult = m.
Contents
.OfType<WebSearchToolResultContent>().FirstOrDefault();
117
TextContent tc = m.
Contents
.OfType<TextContent>().First();
165
var igCall = m.
Contents
.OfType<ImageGenerationToolCallContent>().FirstOrDefault();
169
var igResult = m.
Contents
.OfType<ImageGenerationToolResultContent>().FirstOrDefault();
233
Assert.NotEmpty(response.Messages.SelectMany(m => m.
Contents
).OfType<McpServerToolCallContent>());
234
Assert.NotEmpty(response.Messages.SelectMany(m => m.
Contents
).OfType<McpServerToolResultContent>());
235
Assert.Empty(response.Messages.SelectMany(m => m.
Contents
).OfType<ToolApprovalRequestContent>());
288
.SelectMany(m => m.
Contents
)
292
if (approvalResponse.
Contents
.Count == 0)
297
approvalsCount += approvalResponse.
Contents
.Count;
337
Assert.NotEmpty(response.Messages.SelectMany(m => m.
Contents
).OfType<McpServerToolCallContent>());
338
Assert.NotEmpty(response.Messages.SelectMany(m => m.
Contents
).OfType<McpServerToolResultContent>());
342
var allContents = response.Messages.SelectMany(m => m.
Contents
).ToList();
540
var approvalRequest = Assert.Single(response.Messages.SelectMany(m => m.
Contents
).OfType<ToolApprovalRequestContent>());
551
var toolCall = Assert.Single(response.Messages.SelectMany(m => m.
Contents
).OfType<McpServerToolCallContent>());
554
var toolResult = Assert.Single(response.Messages.SelectMany(m => m.
Contents
).OfType<McpServerToolResultContent>());
713
.SelectMany(m => m.
Contents
)
736
.SelectMany(m => m.
Contents
)
751
.SelectMany(m => m.
Contents
)
795
.SelectMany(m => m.
Contents
)
817
.SelectMany(m => m.
Contents
)
832
.SelectMany(m => m.
Contents
)
879
.SelectMany(m => m.
Contents
)
989
.SelectMany(m => m.
Contents
)
1039
.SelectMany(m => m.
Contents
)
OpenAIResponseClientTests.cs (53)
163
Assert.Single(response.Messages.Single().
Contents
);
680
var coalescedReasoning = assistantMessage.
Contents
.OfType<TextReasoningContent>().Single();
1014
Assert.Equal(2, responseMessage.
Contents
.Count);
1015
Assert.Single(responseMessage.
Contents
, content => content is TextReasoningContent);
1016
AIContent computerUserItem = Assert.Single(responseMessage.
Contents
, content => content is ToolCallContent);
1605
approvalRequest = Assert.Single(response.Messages.SelectMany(m => m.
Contents
).OfType<ToolApprovalRequestContent>());
1737
Assert.Equal(3, message.
Contents
.Count);
1739
var call = Assert.IsType<McpServerToolCallContent>(message.
Contents
[0]);
1748
var result = Assert.IsType<McpServerToolResultContent>(message.
Contents
[1]);
2114
Assert.Equal(6, message.
Contents
.Count);
2116
var firstCall = Assert.IsType<McpServerToolCallContent>(message.
Contents
[1]);
2124
var firstResult = Assert.IsType<McpServerToolResultContent>(message.
Contents
[2]);
2128
var secondCall = Assert.IsType<McpServerToolCallContent>(message.
Contents
[3]);
2136
var secondResult = Assert.IsType<McpServerToolResultContent>(message.
Contents
[4]);
2525
Assert.Equal(6, message.
Contents
.Count);
2527
var firstCall = Assert.IsType<McpServerToolCallContent>(message.
Contents
[1]);
2535
var firstResult = Assert.IsType<McpServerToolResultContent>(message.
Contents
[2]);
2539
var secondCall = Assert.IsType<McpServerToolCallContent>(message.
Contents
[3]);
2547
var secondResult = Assert.IsType<McpServerToolResultContent>(message.
Contents
[4]);
2734
Assert.Equal(4, message.
Contents
.Count);
2736
var toolCall = Assert.IsType<McpServerToolCallContent>(message.
Contents
[1]);
2743
var toolResult = Assert.IsType<McpServerToolResultContent>(message.
Contents
[2]);
3106
Assert.Single(response.Messages.Single().
Contents
);
3500
Assert.Equal(3, message.
Contents
.Count);
3502
var codeCall = Assert.IsType<CodeInterpreterToolCallContent>(message.
Contents
[0]);
3508
var codeResult = Assert.IsType<CodeInterpreterToolResultContent>(message.
Contents
[1]);
3511
var textContent = Assert.IsType<TextContent>(message.
Contents
[2]);
3720
Assert.Equal(3, message.
Contents
.Count);
3722
var codeCall = Assert.IsType<CodeInterpreterToolCallContent>(message.
Contents
[0]);
3728
var codeResult = Assert.IsType<CodeInterpreterToolResultContent>(message.
Contents
[1]);
3731
var textContent = Assert.IsType<TextContent>(message.
Contents
[2]);
3844
Assert.Equal(2, message.
Contents
.Count);
3847
var codeCall = Assert.IsType<CodeInterpreterToolCallContent>(message.
Contents
[0]);
3855
var codeResult = Assert.IsType<CodeInterpreterToolResultContent>(message.
Contents
[1]);
5580
var errorContent = lastMessage.
Contents
.OfType<ErrorContent>().FirstOrDefault();
6242
Assert.Single(message.
Contents
.OfType<FunctionCallContent>());
6243
Assert.Single(message.
Contents
.OfType<FunctionResultContent>());
6244
var textContent = Assert.Single(message.
Contents
.OfType<TextContent>());
6323
var errorContent = response.Messages.Last().
Contents
.OfType<ErrorContent>().FirstOrDefault();
6382
var imageContent = userMessage.
Contents
.OfType<UriContent>().FirstOrDefault();
6445
var imageContent = userMessage.
Contents
.OfType<DataContent>().FirstOrDefault();
6528
var contents = response.Messages[0].
Contents
;
7005
var toolCall = Assert.Single(message.
Contents
.OfType<ToolCallContent>());
7010
var toolResult = Assert.Single(message.
Contents
.OfType<ToolResultContent>());
7288
Assert.Equal(3, message.
Contents
.Count);
7290
var wsCall = Assert.IsType<WebSearchToolCallContent>(message.
Contents
[0]);
7294
var wsResult = Assert.IsType<WebSearchToolResultContent>(message.
Contents
[1]);
7310
var textContent = Assert.IsType<TextContent>(message.
Contents
[2]);
7454
var coalescedWsCall = message.
Contents
.OfType<WebSearchToolCallContent>().Single();
7458
var coalescedWsResult = message.
Contents
.OfType<WebSearchToolResultContent>().Single();
7462
var textContent = message.
Contents
.OfType<TextContent>().Single();
8992
var call = Assert.IsType<FunctionCallContent>(Assert.Single(response.Messages[0].
Contents
));
9099
var coalesced = response.Messages[0].
Contents
.OfType<FunctionCallContent>().Single();
test\Libraries\Microsoft.Extensions.AI.Abstractions.Tests\AssertExtensions.cs (5)
30
Assert.Equal(expectedMessage.
Contents
.Count, chatMessage.
Contents
.Count);
31
for (int j = 0; j < expectedMessage.
Contents
.Count; j++)
33
var expectedItem = expectedMessage.
Contents
[j];
34
var chatItem = chatMessage.
Contents
[j];
Microsoft.Extensions.AI.Tests (95)
ChatCompletion\DistributedCachingChatClientTest.cs (9)
729
Assert.NotSame(result2.Messages.Last().
Contents
[0], expectedResponse.Messages.Last().
Contents
[0]);
730
Assert.NotSame(result2.Messages.Last().
Contents
[1], expectedResponse.Messages.Last().
Contents
[1]);
808
Assert.Equal(expectedMessage.
Contents
.Count, actualMessage.
Contents
.Count);
810
for (var itemIndex = 0; itemIndex < expectedMessage.
Contents
.Count; itemIndex++)
812
var expectedItem = expectedMessage.
Contents
[itemIndex];
813
var actualItem = actualMessage.
Contents
[itemIndex];
ChatCompletion\FunctionInvokingChatClientApprovalsTests.cs (2)
2090
input.Select(m => new ChatMessage(m.Role, m.
Contents
.Select(CloneFcc).ToList()) { MessageId = m.MessageId }).ToList();
2140
var allContents = messages.SelectMany(m => m.
Contents
);
ChatCompletion\FunctionInvokingChatClientTests.cs (58)
431
var capturedFrc = Assert.Single(toolMessage.
Contents
.OfType<FunctionResultContent>());
511
var frc = Assert.Single(toolMessage.
Contents
.OfType<FunctionResultContent>());
595
var capturedFrc = Assert.Single(toolMessage.
Contents
.OfType<FunctionResultContent>());
960
assistantMessage.
Contents
.Add(new FunctionCallContent(callId, "Func",
962
toolMessage.
Contents
.Add(new FunctionResultContent(callId, result: callShouldThrow ? "Error: Function failed." : "Success"));
1000
IEnumerable<AIContent> content = finalChat.SelectMany(m => m.
Contents
);
1216
m => Assert.Collection(m.
Contents
,
1219
m => Assert.Collection(m.
Contents
,
1222
m => Assert.Equal("OK bye", Assert.IsType<TextContent>(Assert.Single(m.
Contents
)).Text));
1258
Assert.IsType<FunctionCallContent>(Assert.Single(response.Messages[0].
Contents
));
1259
Assert.IsType<FunctionResultContent>(Assert.Single(response.Messages[1].
Contents
));
1260
Assert.IsType<FunctionCallContent>(Assert.Single(response.Messages[2].
Contents
));
1261
Assert.IsType<FunctionResultContent>(Assert.Single(response.Messages[3].
Contents
));
1262
Assert.IsType<TextContent>(Assert.Single(response.Messages[4].
Contents
));
1361
AIContent[] resultContents = existingSearchResult is not null && existingSearchResult.
Contents
.OfType<FunctionResultContent>().ToList() is { } frcs
1385
var frcs = lastMessage.
Contents
.OfType<FunctionResultContent>().ToList();
1643
if (!chatContents.Any(m => m.
Contents
.OfType<FunctionCallContent>().Any()))
2014
var functionCallMessage = chat.First(m => m.
Contents
.Any(c => c is FunctionCallContent));
2015
var functionCallContent = functionCallMessage.
Contents
.OfType<FunctionCallContent>().First();
2063
Assert.Contains(response.Messages, m => m.
Contents
.Any(c => c is FunctionCallContent fcc && fcc.InformationalOnly));
2064
Assert.DoesNotContain(response.Messages, m => m.
Contents
.Any(c => c is FunctionResultContent));
2135
Assert.Contains(response.Messages, m => m.
Contents
.Any(c => c is FunctionResultContent frc && frc.CallId == "callId1"));
2136
Assert.DoesNotContain(response.Messages, m => m.
Contents
.Any(c => c is FunctionResultContent frc && frc.CallId == "callId2"));
2180
Assert.Contains(response.Messages, m => m.
Contents
.Any(c => c is FunctionCallContent fcc && fcc.CallId == "callId1" && fcc.InformationalOnly));
2183
Assert.Contains(response.Messages, m => m.
Contents
.Any(c => c is FunctionResultContent frc && frc.CallId == "callId1"));
2224
var message = new ChatMessage(ChatRole.Assistant, CloneContents(plan[contents.Count()].
Contents
))
2288
ChatMessage message = new(ChatRole.Assistant, CloneContents(plan[contents.Count()].
Contents
))
2434
Assert.Contains(result.Messages, m => m.
Contents
.OfType<FunctionResultContent>().Any(frc => frc.Result?.ToString() == "FunctionB result"));
2439
Assert.Contains(result.Messages, m => m.
Contents
.OfType<FunctionResultContent>().Any(frc => frc.Result?.ToString() == "FunctionB result"));
2530
Assert.Contains(result.Messages, m => m.
Contents
.OfType<FunctionResultContent>()
2539
Assert.Contains(result.Messages, m => m.
Contents
.OfType<FunctionResultContent>()
2635
Assert.Contains(result.Messages, m => m.
Contents
.OfType<FunctionResultContent>()
2637
Assert.DoesNotContain(result.Messages, m => m.
Contents
.OfType<FunctionResultContent>()
2643
Assert.Contains(result.Messages, m => m.
Contents
.OfType<FunctionResultContent>()
2645
Assert.DoesNotContain(result.Messages, m => m.
Contents
.OfType<FunctionResultContent>()
2738
Assert.Contains(result.Messages, m => m.
Contents
.OfType<FunctionResultContent>()
2740
Assert.Contains(result.Messages, m => m.
Contents
.OfType<FunctionResultContent>()
2746
Assert.Contains(result.Messages, m => m.
Contents
.OfType<FunctionResultContent>()
2748
Assert.Contains(result.Messages, m => m.
Contents
.OfType<FunctionResultContent>()
2840
Assert.Contains(result.Messages, m => m.
Contents
.OfType<FunctionResultContent>()
2842
Assert.DoesNotContain(result.Messages, m => m.
Contents
.OfType<FunctionResultContent>()
2848
Assert.Contains(result.Messages, m => m.
Contents
.OfType<FunctionResultContent>()
2850
Assert.DoesNotContain(result.Messages, m => m.
Contents
.OfType<FunctionResultContent>()
3015
Assert.Contains(result.Messages, m => m.
Contents
.OfType<FunctionResultContent>()
3024
Assert.Contains(result.Messages, m => m.
Contents
.OfType<FunctionResultContent>()
3116
Assert.Contains(result.Messages, m => m.
Contents
.OfType<ToolApprovalRequestContent>().Any(frc => ((FunctionCallContent)frc.ToolCall).Name == "FunctionB"));
3119
Assert.Contains(result.Messages, m => m.
Contents
.OfType<FunctionResultContent>().Any(frc => frc.Result?.ToString() == "FunctionA result"));
3126
Assert.Contains(result.Messages, m => m.
Contents
.OfType<ToolApprovalRequestContent>().Any(frc => ((FunctionCallContent)frc.ToolCall).Name == "FunctionB"));
3129
Assert.Contains(result.Messages, m => m.
Contents
.OfType<FunctionResultContent>().Any(frc => frc.Result?.ToString() == "FunctionA result"));
3222
Assert.Contains(result.Messages, m => m.
Contents
.OfType<ToolApprovalRequestContent>().Any(frc => ((FunctionCallContent)frc.ToolCall).Name == "FunctionB"));
3225
Assert.DoesNotContain(result.Messages, m => m.
Contents
.OfType<FunctionResultContent>()
3233
Assert.Contains(result.Messages, m => m.
Contents
.OfType<ToolApprovalRequestContent>().Any(frc => ((FunctionCallContent)frc.ToolCall).Name == "FunctionB"));
3236
Assert.DoesNotContain(result.Messages, m => m.
Contents
.OfType<FunctionResultContent>()
3500
m.
Contents
.Any(c => c is FunctionCallContent fcc2 && fcc2.CallId == "callId1" && fcc2.InformationalOnly));
3504
m.
Contents
.Any(c => c is FunctionResultContent frc2 && frc2.CallId == "callId1"));
3578
m.
Contents
.Any(c => c is FunctionCallContent fcc2 && fcc2.CallId == "callId1" && fcc2.InformationalOnly));
3582
m.
Contents
.Any(c => c is FunctionResultContent frc2 && frc2.CallId == "callId2"));
3640
m.
Contents
.Any(c => c is FunctionResultContent frc2 && frc2.CallId == "callId1"));
ChatCompletion\ImageGeneratingChatClientTests.cs (3)
337
Assert.Single(message.
Contents
);
339
var imageToolCallContent = Assert.IsType<ImageGenerationToolCallContent>(message.
Contents
[0]);
431
var contents = response.Messages[0].
Contents
;
ChatCompletion\UseDelegateChatClientTests.cs (2)
103
cc.Messages.SelectMany(c => c.
Contents
).OfType<TextContent>().Last().Text += " world";
206
cc.Messages.SelectMany(c => c.
Contents
).OfType<TextContent>().Last().Text += " world (non-streaming)";
ChatReduction\MessageCountingChatReducerTests.cs (4)
143
Assert.DoesNotContain(m.
Contents
, c => c is FunctionCallContent);
144
Assert.DoesNotContain(m.
Contents
, c => c is FunctionResultContent);
150
Assert.DoesNotContain(m.
Contents
, c => c is FunctionCallContent);
151
Assert.DoesNotContain(m.
Contents
, c => c is FunctionResultContent);
ChatReduction\SummarizingChatReducerTests.cs (12)
107
Assert.DoesNotContain(msgs, m => m.
Contents
.Any(c => c is FunctionCallContent or FunctionResultContent or TestInputRequestContent or TestInputResponseContent));
122
Assert.Contains(m.
Contents
, c => c is FunctionCallContent);
123
Assert.Contains(m.
Contents
, c => c is TestInputRequestContent);
125
m => Assert.Contains(m.
Contents
, c => c is FunctionResultContent),
126
m => Assert.Contains(m.
Contents
, c => c is TestInputResponseContent),
203
Assert.DoesNotContain(msgList, m => m.
Contents
.Any(c => c is FunctionCallContent or FunctionResultContent or TestInputRequestContent or TestInputResponseContent));
219
Assert.Contains(resultList, m => m.
Contents
.Any(c => c is FunctionCallContent fc && fc.CallId == "call2"));
220
Assert.Contains(resultList, m => m.
Contents
.Any(c => c is FunctionResultContent fr && fr.CallId == "call2"));
221
Assert.DoesNotContain(resultList, m => m.
Contents
.Any(c => c is FunctionCallContent fc && fc.CallId == "call1"));
222
Assert.DoesNotContain(resultList, m => m.
Contents
.Any(c => c is FunctionResultContent fr && fr.CallId == "call1"));
223
Assert.DoesNotContain(resultList, m => m.
Contents
.Any(c => c is TestInputRequestContent));
224
Assert.DoesNotContain(resultList, m => m.
Contents
.Any(c => c is TestInputResponseContent));
test\Libraries\Microsoft.Extensions.AI.Abstractions.Tests\AssertExtensions.cs (5)
30
Assert.Equal(expectedMessage.
Contents
.Count, chatMessage.
Contents
.Count);
31
for (int j = 0; j < expectedMessage.
Contents
.Count; j++)
33
var expectedItem = expectedMessage.
Contents
[j];
34
var chatItem = chatMessage.
Contents
[j];
Microsoft.Extensions.DataIngestion.Tests (4)
Processors\AlternativeTextEnricherTests.cs (4)
50
Assert.Equal(2, materializedMessages[1].
Contents
.Count);
52
Assert.All(materializedMessages[1].
Contents
, content =>
137
Assert.Equal(batchSize, materializedMessages[1].
Contents
.Count);
139
Assert.All(materializedMessages[1].
Contents
, content =>