48 lines
1.2 KiB
TypeScript
48 lines
1.2 KiB
TypeScript
import { InvalidPromptError } from '@ai-sdk/provider';
|
|
import { ExperimentalMessage } from './message';
|
|
import { Prompt } from './prompt';
|
|
|
|
export type ValidatedPrompt =
|
|
| {
|
|
type: 'prompt';
|
|
prompt: string;
|
|
messages: undefined;
|
|
system?: string;
|
|
}
|
|
| {
|
|
type: 'messages';
|
|
prompt: undefined;
|
|
messages: ExperimentalMessage[];
|
|
system?: string;
|
|
};
|
|
|
|
export function getValidatedPrompt(prompt: Prompt): ValidatedPrompt {
|
|
if (prompt.prompt == null && prompt.messages == null) {
|
|
throw new InvalidPromptError({
|
|
prompt,
|
|
message: 'prompt or messages must be defined',
|
|
});
|
|
}
|
|
|
|
if (prompt.prompt != null && prompt.messages != null) {
|
|
throw new InvalidPromptError({
|
|
prompt,
|
|
message: 'prompt and messages cannot be defined at the same time',
|
|
});
|
|
}
|
|
|
|
return prompt.prompt != null
|
|
? {
|
|
type: 'prompt',
|
|
prompt: prompt.prompt,
|
|
messages: undefined,
|
|
system: prompt.system,
|
|
}
|
|
: {
|
|
type: 'messages',
|
|
prompt: undefined,
|
|
messages: prompt.messages!, // only possible case bc of checks above
|
|
system: prompt.system,
|
|
};
|
|
}
|