> ## Documentation Index
> Fetch the complete documentation index at: https://www.adaline.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# MessageRole

> Enum for chat message roles in LLM conversations.

# MessageRole

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

## Import

```typescript theme={null}
import type { MessageRole } from '@adaline/api';
```

## Type Definition

```typescript theme={null}
enum MessageRole {
  System = 'system',
  User = 'user',
  Assistant = 'assistant',
  Tool = 'tool'
}
```

## Values

| Value         | Description                                                                                                                |
| ------------- | -------------------------------------------------------------------------------------------------------------------------- |
| `'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

```typescript theme={null}
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

```typescript theme={null}
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

```typescript theme={null}
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

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

***

## Related

* [PromptMessage](/docs/reference/sdk/v2/typescript/types/PromptMessage) — uses `MessageRole` as its `role` field
* [MessageContent](/docs/reference/sdk/v2/typescript/types/MessageContent) — content types carried by each message
