{"record":{"id":"693567d8080ab0b9","repo":"microsoft/autogen","slug":"unknown-message-type-message-gettype","errorCode":null,"errorMessage":"Unknown message type: {message.GetType()}","messagePattern":"Unknown message type: (.+?)","errorType":"exception","errorClass":"ArgumentException","httpStatus":null,"severity":"error","filePath":"dotnet/src/AutoGen.OpenAI.V1/Extension/MessageExtension.cs","lineNumber":152,"sourceCode":"                {\n                    if (msg.Role == Role.Function)\n                    {\n                        return [new ChatRequestFunctionMessage(msg.FunctionName, msg.Content)];\n                    }\n                    else\n                    {\n                        return [new ChatRequestUserMessage(msg.Content)];\n                    }\n                }\n                else\n                {\n                    var userMessage = new ChatRequestUserMessage(msg.Content ?? throw new ArgumentException(\"Content is null\"));\n                    return [userMessage];\n                }\n            }\n            else\n            {\n                throw new ArgumentException($\"Unknown message type: {message.GetType()}\");\n            }\n        }\n        else\n        {\n            if (message is TextMessage textMessage)\n            {\n                if (textMessage.Role == Role.System)\n                {\n                    throw new ArgumentException(\"System message is not supported when message.From is the same with agent\");\n                }\n\n                return [new ChatRequestAssistantMessage(textMessage.Content)];\n            }\n            else if (message is ToolCallMessage toolCallMessage)\n            {\n                var assistantMessage = new ChatRequestAssistantMessage(string.Empty);\n                var toolCalls = toolCallMessage.ToolCalls.Select(tc => new ChatCompletionsFunctionToolCall(tc.FunctionName, tc.FunctionName, tc.FunctionArguments));\n                foreach (var tc in toolCalls)","sourceCodeStart":134,"sourceCodeEnd":170,"githubUrl":"https://github.com/microsoft/autogen/blob/027ecf0a379bcc1d09956d46d12d44a3ad9cee14/dotnet/src/AutoGen.OpenAI.V1/Extension/MessageExtension.cs#L134-L170","documentation":"This ArgumentException is the catch-all of the foreign-sender branch of ToOpenAIChatRequestMessage: the message's From differs from the agent name and its type matched none of the handled cases (TextMessage, ImageMessage, ToolCallMessage, ToolCallResultMessage, MultiModalMessage, AggregateMessage), so it cannot be converted.","triggerScenarios":"Sending a custom IMessage implementation, an obscure built-in type, or a message kind the extension doesn't handle (with From set to another agent) to an OpenAI agent via the deprecated conversion path.","commonSituations":"User-defined message types in middleware pipelines; newer AutoGen message types flowing through an older AutoGen.OpenAI.V1 build after a partial package upgrade.","solutions":["Convert custom messages to TextMessage/ImageMessage before they reach the OpenAI connector","Update AutoGen.OpenAI.V1 to a version that supports your message type","Wrap with your own middleware that normalizes unknown message types into TextMessage"],"exampleFix":"// before\nawait agent.SendAsync(new MyCustomMessage(...)); // unknown type\n\n// after\nvar asText = new TextMessage(Role.User, myCustomMessage.ToString(), from: myCustomMessage.From);\nawait agent.SendAsync(asText);","handlingStrategy":"fallback","validationCode":"var known = msg is TextMessage or ImageMessage or ToolCallMessage\n    or ToolCallResultMessage or MultiModalMessage\n    or AggregateMessage<ToolCallMessage, ToolCallResultMessage>;\nif (!known) msg = new TextMessage(Role.User, msg.ToString(), msg.From);","typeGuard":"static bool IsConvertibleForeignMessage(IMessage m) =>\n    m is TextMessage or ImageMessage or ToolCallResultMessage or MultiModalMessage\n    or AggregateMessage<ToolCallMessage, ToolCallResultMessage>;","tryCatchPattern":"catch (ArgumentException ex) when (ex.Message.Contains(\"Unknown message type\"))\n{\n    var flattened = new TextMessage(Role.User, originalMessage.ToString(), originalMessage.From);\n    return await agent.SendAsync(flattened);\n}","preventionTips":["Normalize custom message types to TextMessage before OpenAI agents","Keep AutoGen packages version-aligned","Centralize message construction in one factory"],"tags":["openai","message-type","message-conversion","extension"],"backgroundTag":null,"analyzedSha":"027ecf0a379bcc1d09956d46d12d44a3ad9cee14","analyzedAt":"2026-08-15T03:38:00.719Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}