Skip to content

Commit 6436e9d

Browse files
authored
Fix Message blocks serialization. (Azure#52653)
* Fix Message blocks serialization. * Fix
1 parent 147e903 commit 6436e9d

File tree

5 files changed

+56
-2
lines changed

5 files changed

+56
-2
lines changed

sdk/ai/Azure.AI.Agents.Persistent/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
### Breaking Changes
88

99
### Bugs Fixed
10+
- Fix issue with image block serialization [issue](https://github.com/Azure/azure-sdk-for-net/issues/52571)
1011

1112
### Other Changes
1213

sdk/ai/Azure.AI.Agents.Persistent/assets.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@
22
"AssetsRepo": "Azure/azure-sdk-assets",
33
"AssetsRepoPrefixPath": "net",
44
"TagPrefix": "net/ai/Azure.AI.Agents.Persistent",
5-
"Tag": "net/ai/Azure.AI.Agents.Persistent_32145de83f"
5+
"Tag": "net/ai/Azure.AI.Agents.Persistent_358ff70ace"
66
}

sdk/ai/Azure.AI.Agents.Persistent/src/Custom/ThreadMessages.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -314,7 +314,7 @@ public virtual Response<PersistentThreadMessage> CreateMessage(
314314
}
315315

316316
// Now serialize the array of JsonElements into a single BinaryData for the request:
317-
var jsonString = JsonSerializer.Serialize(contentBlocks, JsonElementSerializer.Default.ListJsonElement);
317+
var jsonString = JsonSerializer.Serialize(jsonElements, JsonElementSerializer.Default.ListJsonElement);
318318
BinaryData serializedBlocks = BinaryData.FromString(jsonString);
319319

320320
return CreateMessage(

sdk/ai/Azure.AI.Agents.Persistent/tests/AIAgentsTestEnvironment.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,5 +23,6 @@ public class AIAgentsTestEnvironment : TestEnvironment
2323
public string DEEP_RESEARCH_MODEL_DEPLOYMENT_NAME => GetRecordedOptionalVariable("DEEP_RESEARCH_MODEL_DEPLOYMENT_NAME");
2424
public string BING_CONFIGURATION_NAME => GetRecordedOptionalVariable("BING_CONFIGURATION_NAME");
2525
public string PLAYWRIGHT_CONNECTION_ID => GetRecordedOptionalVariable("AZURE_PLAYWRIGHT_CONNECTION_ID");
26+
public string UPLOADED_IMAGE_ID => GetRecordedOptionalVariable("UPLOADED_IMAGE_ID");
2627
}
2728
}

sdk/ai/Azure.AI.Agents.Persistent/tests/PersistentAgentsTests.cs

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2306,6 +2306,58 @@ await ValidateStream(
23062306
);
23072307
}
23082308

2309+
[RecordedTest]
2310+
[TestCase(true, "adani")]
2311+
//TODO: The Image URI is not supported, uncomment this text when the ICM 686545924 will be resolved.
2312+
//[TestCase(false, "trail")]
2313+
public async Task TestImageAsInput(bool useUploaded, string expectedWord)
2314+
{
2315+
PersistentAgentsClient client = GetClient();
2316+
PersistentAgent agent = await GetAgent(
2317+
client: client,
2318+
model: "gpt-4o",
2319+
instruction: "Analyze images from internally uploaded files."
2320+
);
2321+
PersistentAgentThread thread = client.Threads.CreateThread();
2322+
var contentBlocks = new List<MessageInputContentBlock>
2323+
{
2324+
new MessageInputTextBlock("Here is an uploaded file. Please describe it:"),
2325+
};
2326+
if (useUploaded)
2327+
{
2328+
// Note: To get the Image ID, please upload it using sample "Sample_PersistentAgents_ImageFileInputs."
2329+
contentBlocks.Add(new MessageInputImageFileBlock(new MessageImageFileParam(TestEnvironment.UPLOADED_IMAGE_ID)));
2330+
}
2331+
else
2332+
{
2333+
string uri = "https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg";
2334+
contentBlocks.Add(new MessageInputImageUriBlock(new MessageImageUriParam(uri)));
2335+
}
2336+
2337+
PersistentThreadMessage imageMessage = client.Messages.CreateMessage(
2338+
threadId: thread.Id,
2339+
role: MessageRole.User,
2340+
contentBlocks: contentBlocks
2341+
);
2342+
ThreadRun run = client.Runs.CreateRun(
2343+
threadId: thread.Id,
2344+
assistantId: agent.Id
2345+
);
2346+
run = await WaitForRun(client, run);
2347+
List<PersistentThreadMessage> messages = await client.Messages.GetMessagesAsync(threadId: run.ThreadId).ToListAsync();
2348+
Assert.Greater(messages.Count, 0);
2349+
StringBuilder sbResponse = new();
2350+
foreach (PersistentThreadMessage msg in messages)
2351+
{
2352+
if (msg.Role == MessageRole.Agent)
2353+
{
2354+
msg.ContentItems.Where(x => x is MessageTextContent).Select(x => ((MessageTextContent)x).Text).Aggregate(sbResponse, (sbResponse, next) => sbResponse.Append(next));
2355+
}
2356+
}
2357+
string response = sbResponse.ToString().ToLower();
2358+
Assert.That(response.Contains(expectedWord), $"The word {expectedWord} was not found in the response: {response}");
2359+
}
2360+
23092361
#region Helpers
23102362
private static async Task ValidateStream(
23112363
PersistentAgentsClient client,

0 commit comments

Comments
 (0)