> ## Documentation Index > Fetch the complete documentation index at: https://openrouter.ai/docs/llms.txt > Use this file to discover all available pages before exploring further. # ChatMessages Chat completion message with role-based discrimination ## Supported Types ### ChatAssistantMessage ```go theme={null} chatMessages := components.CreateChatMessagesAssistant(components.ChatAssistantMessage{/* values here */}) ``` ### ChatDeveloperMessage ```go theme={null} chatMessages := components.CreateChatMessagesDeveloper(components.ChatDeveloperMessage{/* values here */}) ``` ### ChatSystemMessage ```go theme={null} chatMessages := components.CreateChatMessagesSystem(components.ChatSystemMessage{/* values here */}) ``` ### ChatToolMessage ```go theme={null} chatMessages := components.CreateChatMessagesTool(components.ChatToolMessage{/* values here */}) ``` ### ChatUserMessage ```go theme={null} chatMessages := components.CreateChatMessagesUser(components.ChatUserMessage{/* values here */}) ``` ## Union Discrimination Use the `Type` field to determine which variant is active, then access the corresponding field: ```go theme={null} switch chatMessages.Type { case components.ChatMessagesTypeAssistant: // chatMessages.ChatAssistantMessage is populated case components.ChatMessagesTypeDeveloper: // chatMessages.ChatDeveloperMessage is populated case components.ChatMessagesTypeSystem: // chatMessages.ChatSystemMessage is populated case components.ChatMessagesTypeTool: // chatMessages.ChatToolMessage is populated case components.ChatMessagesTypeUser: // chatMessages.ChatUserMessage is populated } ```