Skip to content

Commit 87a5d27

Browse files
authoredJun 13, 2024··
feat (core): introduce InvalidMessageRoleError. (#1936)
1 parent e0d0d46 commit 87a5d27

File tree

4 files changed

+48
-3
lines changed

4 files changed

+48
-3
lines changed
 

‎.changeset/stale-steaks-bake.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'ai': patch
3+
---
4+
5+
feat (core): introduce InvalidMessageRoleError.

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

+5-3
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { CoreMessage } from '../prompt/message';
88
import { detectImageMimeType } from '../util/detect-image-mimetype';
99
import { convertDataContentToUint8Array } from './data-content';
1010
import { ValidatedPrompt } from './get-validated-prompt';
11+
import { InvalidMessageRoleError } from './invalid-message-role-error';
1112

1213
export function convertToLanguageModelPrompt(
1314
prompt: ValidatedPrompt,
@@ -47,7 +48,8 @@ export function convertToLanguageModelPrompt(
4748
export function convertToLanguageModelMessage(
4849
message: CoreMessage,
4950
): LanguageModelV1Message {
50-
switch (message.role) {
51+
const role = message.role;
52+
switch (role) {
5153
case 'system': {
5254
return { role: 'system', content: message.content };
5355
}
@@ -114,8 +116,8 @@ export function convertToLanguageModelMessage(
114116
}
115117

116118
default: {
117-
const _exhaustiveCheck: never = message;
118-
throw new Error(`Unsupported message role: ${_exhaustiveCheck}`);
119+
const _exhaustiveCheck: never = role;
120+
throw new InvalidMessageRoleError({ role: _exhaustiveCheck });
119121
}
120122
}
121123
}

‎packages/core/core/prompt/index.ts

+1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
export * from './content-part';
22
export * from './convert-to-core-messages';
33
export * from './data-content';
4+
export * from './invalid-message-role-error';
45
export * from './message';
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
export class InvalidMessageRoleError extends Error {
2+
readonly role: string;
3+
4+
constructor({
5+
role,
6+
message = `Invalid message role: '${role}'. Must be one of: "system", "user", "assistant", "tool".`,
7+
}: {
8+
role: string;
9+
message?: string;
10+
}) {
11+
super(message);
12+
13+
this.name = 'AI_InvalidMessageRoleError';
14+
15+
this.role = role;
16+
}
17+
18+
static isInvalidMessageRoleError(
19+
error: unknown,
20+
): error is InvalidMessageRoleError {
21+
return (
22+
error instanceof Error &&
23+
error.name === 'AI_InvalidMessageRoleError' &&
24+
typeof (error as InvalidMessageRoleError).role === 'string'
25+
);
26+
}
27+
28+
toJSON() {
29+
return {
30+
name: this.name,
31+
message: this.message,
32+
stack: this.stack,
33+
34+
role: this.role,
35+
};
36+
}
37+
}

0 commit comments

Comments
 (0)
Please sign in to comment.