diff --git a/agentscope-extensions/agentscope-extensions-agui/src/main/java/io/agentscope/core/agui/converter/AguiMessageConverter.java b/agentscope-extensions/agentscope-extensions-agui/src/main/java/io/agentscope/core/agui/converter/AguiMessageConverter.java
index 78ee08a22..54aaab50e 100644
--- a/agentscope-extensions/agentscope-extensions-agui/src/main/java/io/agentscope/core/agui/converter/AguiMessageConverter.java
+++ b/agentscope-extensions/agentscope-extensions-agui/src/main/java/io/agentscope/core/agui/converter/AguiMessageConverter.java
@@ -19,12 +19,18 @@
import io.agentscope.core.agui.model.AguiFunctionCall;
import io.agentscope.core.agui.model.AguiMessage;
import io.agentscope.core.agui.model.AguiToolCall;
+import io.agentscope.core.message.AudioBlock;
+import io.agentscope.core.message.Base64Source;
import io.agentscope.core.message.ContentBlock;
+import io.agentscope.core.message.ImageBlock;
import io.agentscope.core.message.Msg;
import io.agentscope.core.message.MsgRole;
+import io.agentscope.core.message.Source;
import io.agentscope.core.message.TextBlock;
import io.agentscope.core.message.ToolResultBlock;
import io.agentscope.core.message.ToolUseBlock;
+import io.agentscope.core.message.URLSource;
+import io.agentscope.core.message.VideoBlock;
import io.agentscope.core.util.JsonException;
import io.agentscope.core.util.JsonUtils;
import java.util.ArrayList;
@@ -37,6 +43,17 @@
*
*
This class handles the bidirectional conversion between the AG-UI protocol's
* message format and AgentScope's internal message format.
+ *
+ *
Supports multimodal input per AG-UI protocol:
+ *
+ * - {@code text} → {@link TextBlock}
+ * - {@code image} → {@link ImageBlock}
+ * - {@code video} → {@link VideoBlock}
+ * - {@code audio} → {@link AudioBlock}
+ * - {@code document} → {@link TextBlock} (with description)
+ *
+ *
+ * See https://docs.ag-ui.com/concepts/messages.md for AG-UI InputContent spec.
*/
public class AguiMessageConverter {
/**
@@ -54,8 +71,20 @@ public Msg toMsg(AguiMessage aguiMessage) {
MsgRole role = convertRole(aguiMessage.getRole());
List blocks = new ArrayList<>();
- // Add text content if present
- if (aguiMessage.getContent() != null && !aguiMessage.getContent().isEmpty()) {
+ // Handle multimodal content (InputContent array per AG-UI protocol)
+ if (aguiMessage.isMultimodalContent()) {
+ List