Skip to content

Commit

Permalink
feat (core): introduce InvalidMessageRoleError. (#1936)
Browse files Browse the repository at this point in the history
  • Loading branch information
lgrammel committed Jun 13, 2024
1 parent e0d0d46 commit 87a5d27
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 3 deletions.
5 changes: 5 additions & 0 deletions .changeset/stale-steaks-bake.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'ai': patch
---

feat (core): introduce InvalidMessageRoleError.
8 changes: 5 additions & 3 deletions packages/core/core/prompt/convert-to-language-model-prompt.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import { CoreMessage } from '../prompt/message';
import { detectImageMimeType } from '../util/detect-image-mimetype';
import { convertDataContentToUint8Array } from './data-content';
import { ValidatedPrompt } from './get-validated-prompt';
import { InvalidMessageRoleError } from './invalid-message-role-error';

export function convertToLanguageModelPrompt(
prompt: ValidatedPrompt,
Expand Down Expand Up @@ -47,7 +48,8 @@ export function convertToLanguageModelPrompt(
export function convertToLanguageModelMessage(
message: CoreMessage,
): LanguageModelV1Message {
switch (message.role) {
const role = message.role;
switch (role) {
case 'system': {
return { role: 'system', content: message.content };
}
Expand Down Expand Up @@ -114,8 +116,8 @@ export function convertToLanguageModelMessage(
}

default: {
const _exhaustiveCheck: never = message;
throw new Error(`Unsupported message role: ${_exhaustiveCheck}`);
const _exhaustiveCheck: never = role;
throw new InvalidMessageRoleError({ role: _exhaustiveCheck });
}
}
}
1 change: 1 addition & 0 deletions packages/core/core/prompt/index.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
export * from './content-part';
export * from './convert-to-core-messages';
export * from './data-content';
export * from './invalid-message-role-error';
export * from './message';
37 changes: 37 additions & 0 deletions packages/core/core/prompt/invalid-message-role-error.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
export class InvalidMessageRoleError extends Error {
readonly role: string;

constructor({
role,
message = `Invalid message role: '${role}'. Must be one of: "system", "user", "assistant", "tool".`,
}: {
role: string;
message?: string;
}) {
super(message);

this.name = 'AI_InvalidMessageRoleError';

this.role = role;
}

static isInvalidMessageRoleError(
error: unknown,
): error is InvalidMessageRoleError {
return (
error instanceof Error &&
error.name === 'AI_InvalidMessageRoleError' &&
typeof (error as InvalidMessageRoleError).role === 'string'
);
}

toJSON() {
return {
name: this.name,
message: this.message,
stack: this.stack,

role: this.role,
};
}
}

0 comments on commit 87a5d27

Please sign in to comment.