Skip to main content

MessageRole

Defines the four message roles used in chat conversations with LLMs.

Import

import type { MessageRole } from '@adaline/api';

Type Definition

enum MessageRole {
  System = 'system',
  User = 'user',
  Assistant = 'assistant',
  Tool = 'tool'
}

Values

ValueDescription
'system'System instructions that set the model’s behavior, persona, or constraints. Typically the first message in a conversation.
'user'Messages from the end user or application providing input to the model.
'assistant'Responses generated by the model, including text replies and tool call requests.
'tool'Responses from tool/function executions, returned after the model requests a tool call.

Examples

Role-specific Messages

import type { PromptMessage, MessageRole } from '@adaline/api';

const systemMessage: PromptMessage = {
  role: 'system',
  content: [{ modality: 'text', value: 'You are a helpful assistant.' }]
};

const userMessage: PromptMessage = {
  role: 'user',
  content: [{ modality: 'text', value: 'What is the weather in Paris?' }]
};

const assistantMessage: PromptMessage = {
  role: 'assistant',
  content: [{
    modality: 'tool-call',
    index: 0,
    id: 'call_123',
    name: 'get_weather',
    arguments: JSON.stringify({ city: 'Paris' })
  }]
};

const toolMessage: PromptMessage = {
  role: 'tool',
  content: [{
    modality: 'tool-response',
    index: 0,
    id: 'call_123',
    name: 'get_weather',
    data: JSON.stringify({ temp: 24, conditions: 'sunny' })
  }]
};

Filtering Messages by Role

import type { PromptMessage } from '@adaline/api';

const messages: PromptMessage[] = [/* conversation history */];

const systemMessages = messages.filter(m => m.role === 'system');
const userMessages = messages.filter(m => m.role === 'user');
const assistantMessages = messages.filter(m => m.role === 'assistant');
const toolMessages = messages.filter(m => m.role === 'tool');

// Get the system prompt
const systemPrompt = messages.find(m => m.role === 'system');
if (systemPrompt) {
  const text = systemPrompt.content
    .filter(c => c.modality === 'text')
    .map(c => c.value)
    .join(' ');
  console.log(`System prompt: ${text}`);
}

Counting Messages by Role

function countByRole(messages: PromptMessage[]): Record<string, number> {
  return messages.reduce((acc, m) => {
    acc[m.role] = (acc[m.role] || 0) + 1;
    return acc;
  }, {} as Record<string, number>);
}

const counts = countByRole(messages);
// { system: 1, user: 5, assistant: 5, tool: 2 }

Type Guard

function isValidRole(role: string): role is MessageRole {
  return ['system', 'user', 'assistant', 'tool'].includes(role);
}