{"record":{"id":"b959eae8c2adabf0","repo":"microsoft/autogen","slug":"invalid-message-type-b959ea","errorCode":null,"errorMessage":"Invalid message type","messagePattern":"Invalid message type","errorType":"exception","errorClass":"ArgumentException","httpStatus":null,"severity":"error","filePath":"dotnet/src/AutoGen.OpenAI/Agent/OpenAIChatAgent.cs","lineNumber":123,"sourceCode":"        var settings = this.CreateChatCompletionsOptions(options);\n        var response = this.chatClient.CompleteChatStreamingAsync(chatHistory, settings, cancellationToken);\n        await foreach (var update in response.WithCancellation(cancellationToken))\n        {\n            if (update.ContentUpdate.Count > 1)\n            {\n                throw new InvalidOperationException(\"Only one choice is supported in streaming response\");\n            }\n\n            yield return new MessageEnvelope<StreamingChatCompletionUpdate>(update, from: this.Name);\n        }\n    }\n\n    private IEnumerable<ChatMessage> CreateChatMessages(IEnumerable<IMessage> messages)\n    {\n        var oaiMessages = messages.Select(m => m switch\n        {\n            IMessage<ChatMessage> chatMessage => chatMessage.Content,\n            _ => throw new ArgumentException(\"Invalid message type\")\n        });\n\n        // add system message if there's no system message in messages\n        if (!oaiMessages.Any(m => m is SystemChatMessage) && systemMessage is not null)\n        {\n            oaiMessages = new[] { new SystemChatMessage(systemMessage) }.Concat(oaiMessages);\n        }\n\n        return oaiMessages;\n    }\n\n    private ChatCompletionOptions CreateChatCompletionsOptions(GenerateReplyOptions? options)\n    {\n        var option = new ChatCompletionOptions()\n        {\n            Seed = this.options.Seed,\n            Temperature = options?.Temperature ?? this.options.Temperature,\n            MaxOutputTokenCount = options?.MaxToken ?? this.options.MaxOutputTokenCount,","sourceCodeStart":105,"sourceCodeEnd":141,"githubUrl":"https://github.com/microsoft/autogen/blob/027ecf0a379bcc1d09956d46d12d44a3ad9cee14/dotnet/src/AutoGen.OpenAI/Agent/OpenAIChatAgent.cs#L105-L141","documentation":"ArgumentException thrown by OpenAIChatAgent.CreateChatMessages: this agent only accepts messages that are IMessage<ChatMessage> envelopes (the official OpenAI SDK ChatMessage type). It performs no conversion of TextMessage or other AutoGen types itself — that is the job of the OpenAIChatRequestMessageConnector middleware.","triggerScenarios":"Calling GenerateReplyAsync/GenerateStreamingReplyAsync on a bare OpenAIChatAgent with TextMessage, IMessage<string>, or any non-MessageEnvelope<ChatMessage> input.","commonSituations":"Using OpenAIChatAgent directly without calling RegisterMessageConnector(); migrating code from AutoGen.OpenAI.V1 where types differ; assuming the agent does its own message translation.","solutions":["Register the message connector: agent.RegisterMessageConnector() wraps the agent with OpenAIChatRequestMessageConnector which converts TextMessage et al. to ChatMessage","Or convert messages yourself to MessageEnvelope.Create(new UserChatMessage(\"...\")) before sending","Verify no middleware is stripping ChatMessage envelopes back into plain messages"],"exampleFix":"// before\nvar agent = new OpenAIChatAgent(chatClient, name: \"assistant\");\nawait agent.SendAsync(\"hi\"); // ArgumentException: Invalid message type\n\n// after\nvar agent = new OpenAIChatAgent(chatClient, name: \"assistant\")\n    .RegisterMessageConnector();\nawait agent.SendAsync(\"hi\");","handlingStrategy":"type-guard","validationCode":"// ensure every message is a ChatMessage envelope before calling a bare OpenAIChatAgent\nbool ok = messages.All(m => m is IMessage<ChatMessage>);","typeGuard":"static bool IsChatMessageEnvelope(IMessage m) => m is IMessage<ChatMessage>;","tryCatchPattern":"catch (ArgumentException ex) when (ex.Message == \"Invalid message type\") { /* register message connector and retry */ }","preventionTips":["Always chain .RegisterMessageConnector() on OpenAIChatAgent","Wrap agent construction in a factory that applies required middlewares","Integration-test one send per agent configuration"],"tags":["autogen","dotnet","openai","message-connector","setup"],"backgroundTag":null,"analyzedSha":"027ecf0a379bcc1d09956d46d12d44a3ad9cee14","analyzedAt":"2026-08-15T03:38:00.719Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}