Message Types
Chat message structures and role enumerations for LLM conversations.Overview
Message types define chat messages with roles and multi-modal content arrays.RoleEnum
Message role enumeration for chat messages.Copy
Ask AI
type RoleEnum = 'system' | 'user' | 'assistant' | 'tool';
'system'- System instructions or context'user'- User messages and input'assistant'- AI assistant responses'tool'- Tool/function responses
Copy
Ask AI
import type { Message, RoleEnum } from '@adaline/api';
// System message
const systemMessage: Message = {
role: 'system',
content: [{ modality: 'text', value: 'You are a helpful assistant.' }]
};
// User message
const userMessage: Message = {
role: 'user',
content: [{ modality: 'text', value: 'Hello!' }]
};
// Assistant message
const assistantMessage: Message = {
role: 'assistant',
content: [{ modality: 'text', value: 'Hi! How can I help?' }]
};
// Tool message
const toolMessage: Message = {
role: 'tool',
content: [{
modality: 'tool-response',
id: 'call_123',
name: 'get_weather',
data: JSON.stringify({ temp: 72 })
}]
};
Copy
Ask AI
function isValidRole(role: string): role is RoleEnum {
return ['system', 'user', 'assistant', 'tool'].includes(role);
}
Copy
Ask AI
const messages: Message[] = [...];
// Get all user messages
const userMessages = messages.filter(m => m.role === 'user');
// Get system message
const systemMessage = messages.find(m => m.role === 'system');
Message
Chat message with role and multi-modal content for LLM conversations.Copy
Ask AI
interface Message {
role: RoleEnum;
content: Content[];
}
Examples
Simple Text Message
Copy
Ask AI
import type { Message } from '@adaline/api';
const message: Message = {
role: 'user',
content: [
{ modality: 'text', value: 'Hello, how are you?' }
]
};
System Message
Copy
Ask AI
const systemMessage: Message = {
role: 'system',
content: [
{ modality: 'text', value: 'You are a helpful AI assistant.' }
]
};
Multi-Modal Message
Copy
Ask AI
const multiModal: Message = {
role: 'user',
content: [
{ modality: 'text', value: 'Describe this image' },
{
modality: 'image',
detail: 'high',
value: { type: 'url', url: 'https://example.com/img.jpg' }
}
]
};
Conversation History
Copy
Ask AI
const conversation: Message[] = [
{
role: 'system',
content: [{ modality: 'text', value: 'You are helpful.' }]
},
{
role: 'user',
content: [{ modality: 'text', value: 'What is 2+2?' }]
},
{
role: 'assistant',
content: [{ modality: 'text', value: '2+2 equals 4.' }]
},
{
role: 'user',
content: [{ modality: 'text', value: 'And 3+3?' }]
},
{
role: 'assistant',
content: [{ modality: 'text', value: '3+3 equals 6.' }]
}
];
Tool Call Sequence
Copy
Ask AI
// User asks
const userMsg: Message = {
role: 'user',
content: [{ modality: 'text', value: 'What is the weather in Paris?' }]
};
// Assistant requests tool
const assistantTool: Message = {
role: 'assistant',
content: [{
modality: 'tool-call',
index: 0,
id: 'call_123',
name: 'get_weather',
arguments: JSON.stringify({ city: 'Paris' })
}]
};
// Tool responds
const toolMsg: Message = {
role: 'tool',
content: [{
modality: 'tool-response',
index: 0,
id: 'call_123',
name: 'get_weather',
data: JSON.stringify({ temp: 24, conditions: 'sunny' })
}]
};
// Assistant answers
const assistantAnswer: Message = {
role: 'assistant',
content: [{ modality: 'text', value: 'In Paris it is sunny and 24°C.' }]
};
Using with Deployments
Copy
Ask AI
import { Adaline } from '@adaline/api';
import type { Deployment, Message } from '@adaline/api';
const adaline = new Adaline();
const deployment: Deployment = await adaline.getLatestDeployment({
promptId: 'chat-prompt',
deploymentEnvironmentId: 'production'
});
// Get system messages from deployment
const systemMessages: Message[] = deployment.prompt.messages;
// Add user message
const userMessage: Message = {
role: 'user',
content: [{ modality: 'text', value: 'Hello!' }]
};
// Combine for API call
const allMessages: Message[] = [
...systemMessages,
userMessage
];
Helper Functions
Copy
Ask AI
// Create text message
function createTextMessage(role: Message['role'], text: string): Message {
return {
role,
content: [{ modality: 'text', value: text }]
};
}
// Extract text from message
function getMessageText(message: Message): string {
return message.content
.filter(c => c.modality === 'text')
.map(c => c.value)
.join(' ');
}
// Check if message has images
function hasImages(message: Message): boolean {
return message.content.some(c => c.modality === 'image');
}
// Filter messages by role
function filterByRole(
messages: Message[],
role: Message['role']
): Message[] {
return messages.filter(m => m.role === role);
}
// Count tokens (rough estimate)
function estimateTokens(message: Message): number {
const text = message.content
.filter(c => c.modality === 'text')
.map(c => c.value)
.join(' ');
return Math.ceil(text.length / 4); // Rough estimate
}
// Usage
const msg = createTextMessage('user', 'Hello!');
const text = getMessageText(msg); // 'Hello!'
const hasImg = hasImages(msg); // false
const tokens = estimateTokens(msg); // ~2
Validation
Copy
Ask AI
function isValidMessage(obj: any): obj is Message {
return (
typeof obj === 'object' &&
['system', 'user', 'assistant', 'tool'].includes(obj.role) &&
Array.isArray(obj.content) &&
obj.content.every((c: any) =>
typeof c === 'object' &&
typeof c.modality === 'string'
)
);
}
// Usage
const data = await fetchData();
if (isValidMessage(data)) {
console.log(data.role);
}
JSON Examples
Simple
Copy
Ask AI
{
"role": "user",
"content": [
{ "modality": "text", "value": "Hello!" }
]
}
With Image
Copy
Ask AI
{
"role": "user",
"content": [
{ "modality": "text", "value": "Describe this" },
{
"modality": "image",
"detail": "high",
"value": {
"type": "url",
"url": "https://example.com/image.jpg"
}
}
]
}
Tool Call
Copy
Ask AI
{
"role": "assistant",
"content": [
{
"modality": "tool-call",
"index": 0,
"id": "call_123",
"name": "get_weather",
"arguments": "{\"city\":\"Paris\"}"
}
]
}