Skip to content

Commit 5b01c13

Browse files
authoredMay 10, 2024··
feat (ai/core): add system message support in messages list (#1551)
1 parent 8e29de3 commit 5b01c13

File tree

6 files changed

+63
-1
lines changed

6 files changed

+63
-1
lines changed
 

‎.changeset/dirty-falcons-love.md

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
'@ai-sdk/anthropic': patch
3+
'ai': patch
4+
---
5+
6+
feat (ai/core): add system message support in messages list
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import { openai } from '@ai-sdk/openai';
2+
import { generateText } from 'ai';
3+
import dotenv from 'dotenv';
4+
5+
dotenv.config();
6+
7+
async function main() {
8+
const result = await generateText({
9+
model: openai('gpt-3.5-turbo'),
10+
messages: [
11+
{ role: 'system', content: 'You are a helpful assistant.' },
12+
{ role: 'user', content: 'What is the capital of France?' },
13+
],
14+
});
15+
16+
console.log(result.text);
17+
}
18+
19+
main().catch(console.error);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import { openai } from '@ai-sdk/openai';
2+
import { generateText } from 'ai';
3+
import dotenv from 'dotenv';
4+
5+
dotenv.config();
6+
7+
async function main() {
8+
const result = await generateText({
9+
model: openai('gpt-3.5-turbo'),
10+
system: 'You are a helpful assistant.',
11+
messages: [{ role: 'user', content: 'What is the capital of France?' }],
12+
});
13+
14+
console.log(result.text);
15+
}
16+
17+
main().catch(console.error);

‎packages/anthropic/src/convert-to-anthropic-messages-prompt.ts

+7-1
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,18 @@ import {
1111
export function convertToAnthropicMessagesPrompt(
1212
prompt: LanguageModelV1Prompt,
1313
): AnthropicMessagesPrompt {
14-
let system: string | undefined;
14+
let system: string | undefined = undefined;
1515
const messages: AnthropicMessage[] = [];
1616

1717
for (const { role, content } of prompt) {
1818
switch (role) {
1919
case 'system': {
20+
if (system != null) {
21+
throw new UnsupportedFunctionalityError({
22+
functionality: 'Multiple system messages',
23+
});
24+
}
25+
2026
system = content;
2127
break;
2228
}

‎packages/core/core/prompt/convert-to-language-model-prompt.ts

+4
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,10 @@ export function convertToLanguageModelPrompt(
3030
languageModelMessages.push(
3131
...prompt.messages.map((message): LanguageModelV1Message => {
3232
switch (message.role) {
33+
case 'system': {
34+
return { role: 'system', content: message.content };
35+
}
36+
3337
case 'user': {
3438
if (typeof message.content === 'string') {
3539
return {

‎packages/core/core/prompt/message.ts

+10
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,20 @@ A message that can be used in the `messages` field of a prompt.
1010
It can be a user message, an assistant message, or a tool message.
1111
*/
1212
export type CoreMessage =
13+
| CoreSystemMessage
1314
| CoreUserMessage
1415
| CoreAssistantMessage
1516
| CoreToolMessage;
1617

18+
/**
19+
A system message. It can contain system information.
20+
21+
Note: using the "system" part of the prompt is strongly preferred
22+
to increase the resilience against prompt injection attacks,
23+
and because not all providers support several system messages.
24+
*/
25+
export type CoreSystemMessage = { role: 'system'; content: string };
26+
1727
/**
1828
* @deprecated Use `CoreMessage` instead.
1929
*/

0 commit comments

Comments
 (0)
Please sign in to comment.