@langchain/core
Version:
Core LangChain.js abstractions and schemas
241 lines (240 loc) • 12.9 kB
TypeScript
import type { BaseCallbackConfig } from "../callbacks/manager.js";
import { AIMessage, HumanMessage, SystemMessage, BaseMessage, ChatMessage, type BaseMessageLike, MessageContent } from "../messages/index.js";
import { type ChatPromptValueInterface } from "../prompt_values.js";
import type { InputValues, PartialValues } from "../utils/types/index.js";
import { Runnable } from "../runnables/base.js";
import { BaseStringPromptTemplate } from "./string.js";
import { BasePromptTemplate, type BasePromptTemplateInput, type TypedPromptInputValues } from "./base.js";
import { PromptTemplateInput, ExtractedFStringParams } from "./prompt.js";
import { ImagePromptTemplate } from "./image.js";
import { TemplateFormat } from "./template.js";
/**
* Abstract class that serves as a base for creating message prompt
* templates. It defines how to format messages for different roles in a
* conversation.
*/
export declare abstract class BaseMessagePromptTemplate<RunInput extends InputValues = any, RunOutput extends BaseMessage[] = BaseMessage[]> extends Runnable<RunInput, RunOutput> {
lc_namespace: string[];
lc_serializable: boolean;
abstract inputVariables: Array<Extract<keyof RunInput, string>>;
/**
* Method that takes an object of TypedPromptInputValues and returns a
* promise that resolves to an array of BaseMessage instances.
* @param values Object of TypedPromptInputValues
* @returns Formatted array of BaseMessages
*/
abstract formatMessages(values: TypedPromptInputValues<RunInput>): Promise<RunOutput>;
/**
* Calls the formatMessages method with the provided input and options.
* @param input Input for the formatMessages method
* @param options Optional BaseCallbackConfig
* @returns Formatted output messages
*/
invoke(input: RunInput, options?: BaseCallbackConfig): Promise<RunOutput>;
}
/**
* Interface for the fields of a MessagePlaceholder.
*/
export interface MessagesPlaceholderFields<T extends string> {
variableName: T;
optional?: boolean;
}
/**
* Class that represents a placeholder for messages in a chat prompt. It
* extends the BaseMessagePromptTemplate.
*/
export declare class MessagesPlaceholder<RunInput extends InputValues = any> extends BaseMessagePromptTemplate<RunInput> implements MessagesPlaceholderFields<Extract<keyof RunInput, string>> {
static lc_name(): string;
variableName: Extract<keyof RunInput, string>;
optional: boolean;
constructor(variableName: Extract<keyof RunInput, string>);
constructor(fields: MessagesPlaceholderFields<Extract<keyof RunInput, string>>);
get inputVariables(): Extract<keyof RunInput, string>[];
formatMessages(values: TypedPromptInputValues<RunInput>): Promise<BaseMessage[]>;
}
/**
* Interface for the fields of a MessageStringPromptTemplate.
*/
export interface MessageStringPromptTemplateFields<T extends InputValues = any> {
prompt: BaseStringPromptTemplate<T, string>;
}
/**
* Abstract class that serves as a base for creating message string prompt
* templates. It extends the BaseMessagePromptTemplate.
*/
export declare abstract class BaseMessageStringPromptTemplate<RunInput extends InputValues = any> extends BaseMessagePromptTemplate<RunInput> {
prompt: BaseStringPromptTemplate<InputValues<Extract<keyof RunInput, string>>, string>;
constructor(prompt: BaseStringPromptTemplate<InputValues<Extract<keyof RunInput, string>>>);
constructor(fields: MessageStringPromptTemplateFields<InputValues<Extract<keyof RunInput, string>>>);
get inputVariables(): Extract<Extract<keyof RunInput, string>, string>[];
abstract format(values: TypedPromptInputValues<RunInput>): Promise<BaseMessage>;
formatMessages(values: TypedPromptInputValues<RunInput>): Promise<BaseMessage[]>;
}
/**
* Abstract class that serves as a base for creating chat prompt
* templates. It extends the BasePromptTemplate.
*/
export declare abstract class BaseChatPromptTemplate<RunInput extends InputValues = any, PartialVariableName extends string = any> extends BasePromptTemplate<RunInput, ChatPromptValueInterface, PartialVariableName> {
constructor(input: BasePromptTemplateInput<RunInput, PartialVariableName>);
abstract formatMessages(values: TypedPromptInputValues<RunInput>): Promise<BaseMessage[]>;
format(values: TypedPromptInputValues<RunInput>): Promise<string>;
formatPromptValue(values: TypedPromptInputValues<RunInput>): Promise<ChatPromptValueInterface>;
}
/**
* Interface for the fields of a ChatMessagePromptTemplate.
*/
export interface ChatMessagePromptTemplateFields<T extends InputValues = any> extends MessageStringPromptTemplateFields<T> {
role: string;
}
/**
* Class that represents a chat message prompt template. It extends the
* BaseMessageStringPromptTemplate.
*/
export declare class ChatMessagePromptTemplate<RunInput extends InputValues = any> extends BaseMessageStringPromptTemplate<RunInput> {
static lc_name(): string;
role: string;
constructor(prompt: BaseStringPromptTemplate<InputValues<Extract<keyof RunInput, string>>>, role: string);
constructor(fields: ChatMessagePromptTemplateFields<InputValues<Extract<keyof RunInput, string>>>);
format(values: RunInput): Promise<BaseMessage>;
static fromTemplate<RunInput extends InputValues = Symbol, T extends string = string>(template: T, role: string, options?: {
templateFormat?: TemplateFormat;
}): ChatMessagePromptTemplate<ExtractedFStringParams<T, RunInput>>;
}
interface _TextTemplateParam {
text?: string | Record<string, any>;
}
interface _ImageTemplateParam {
image_url?: string | Record<string, any>;
}
type MessageClass = typeof HumanMessage | typeof AIMessage | typeof SystemMessage;
type ChatMessageClass = typeof ChatMessage;
interface _StringImageMessagePromptTemplateOptions<Format extends TemplateFormat = TemplateFormat> extends Record<string, unknown> {
templateFormat?: Format;
}
declare class _StringImageMessagePromptTemplate<RunInput extends InputValues = any, RunOutput extends BaseMessage[] = BaseMessage[]> extends BaseMessagePromptTemplate<RunInput, RunOutput> {
lc_namespace: string[];
lc_serializable: boolean;
inputVariables: Array<Extract<keyof RunInput, string>>;
additionalOptions: _StringImageMessagePromptTemplateOptions;
prompt: BaseStringPromptTemplate<InputValues<Extract<keyof RunInput, string>>, string> | Array<BaseStringPromptTemplate<InputValues<Extract<keyof RunInput, string>>, string> | ImagePromptTemplate<InputValues<Extract<keyof RunInput, string>>, string> | MessageStringPromptTemplateFields<InputValues<Extract<keyof RunInput, string>>>>;
protected messageClass?: MessageClass;
static _messageClass(): MessageClass;
protected chatMessageClass?: ChatMessageClass;
constructor(
/** @TODO When we come up with a better way to type prompt templates, fix this */
fields: any, additionalOptions?: _StringImageMessagePromptTemplateOptions);
createMessage(content: MessageContent): any;
getRoleFromMessageClass(name: string): "human" | "ai" | "system" | "chat";
static fromTemplate(template: string | Array<string | _TextTemplateParam | _ImageTemplateParam>, additionalOptions?: _StringImageMessagePromptTemplateOptions): _StringImageMessagePromptTemplate<any, BaseMessage[]>;
format(input: TypedPromptInputValues<RunInput>): Promise<BaseMessage>;
formatMessages(values: RunInput): Promise<RunOutput>;
}
/**
* Class that represents a human message prompt template. It extends the
* BaseMessageStringPromptTemplate.
* @example
* ```typescript
* const message = HumanMessagePromptTemplate.fromTemplate("{text}");
* const formatted = await message.format({ text: "Hello world!" });
*
* const chatPrompt = ChatPromptTemplate.fromMessages([message]);
* const formattedChatPrompt = await chatPrompt.invoke({
* text: "Hello world!",
* });
* ```
*/
export declare class HumanMessagePromptTemplate<RunInput extends InputValues = any> extends _StringImageMessagePromptTemplate<RunInput> {
static _messageClass(): typeof HumanMessage;
static lc_name(): string;
}
/**
* Class that represents an AI message prompt template. It extends the
* BaseMessageStringPromptTemplate.
*/
export declare class AIMessagePromptTemplate<RunInput extends InputValues = any> extends _StringImageMessagePromptTemplate<RunInput> {
static _messageClass(): typeof AIMessage;
static lc_name(): string;
}
/**
* Class that represents a system message prompt template. It extends the
* BaseMessageStringPromptTemplate.
* @example
* ```typescript
* const message = SystemMessagePromptTemplate.fromTemplate("{text}");
* const formatted = await message.format({ text: "Hello world!" });
*
* const chatPrompt = ChatPromptTemplate.fromMessages([message]);
* const formattedChatPrompt = await chatPrompt.invoke({
* text: "Hello world!",
* });
* ```
*/
export declare class SystemMessagePromptTemplate<RunInput extends InputValues = any> extends _StringImageMessagePromptTemplate<RunInput> {
static _messageClass(): typeof SystemMessage;
static lc_name(): string;
}
/**
* Interface for the input of a ChatPromptTemplate.
*/
export interface ChatPromptTemplateInput<RunInput extends InputValues = any, PartialVariableName extends string = any> extends BasePromptTemplateInput<RunInput, PartialVariableName> {
/**
* The prompt messages
*/
promptMessages: Array<BaseMessagePromptTemplate | BaseMessage>;
/**
* Whether to try validating the template on initialization
*
* @defaultValue `true`
*/
validateTemplate?: boolean;
/**
* The formatting method to use on the prompt.
* @default "f-string"
*/
templateFormat?: TemplateFormat;
}
export type BaseMessagePromptTemplateLike = BaseMessagePromptTemplate | BaseMessageLike;
/**
* Class that represents a chat prompt. It extends the
* BaseChatPromptTemplate and uses an array of BaseMessagePromptTemplate
* instances to format a series of messages for a conversation.
* @example
* ```typescript
* const message = SystemMessagePromptTemplate.fromTemplate("{text}");
* const chatPrompt = ChatPromptTemplate.fromMessages([
* ["ai", "You are a helpful assistant."],
* message,
* ]);
* const formattedChatPrompt = await chatPrompt.invoke({
* text: "Hello world!",
* });
* ```
*/
export declare class ChatPromptTemplate<RunInput extends InputValues = any, PartialVariableName extends string = any> extends BaseChatPromptTemplate<RunInput, PartialVariableName> implements ChatPromptTemplateInput<RunInput, PartialVariableName> {
static lc_name(): string;
get lc_aliases(): Record<string, string>;
promptMessages: Array<BaseMessagePromptTemplate | BaseMessage>;
validateTemplate: boolean;
templateFormat: TemplateFormat;
constructor(input: ChatPromptTemplateInput<RunInput, PartialVariableName>);
_getPromptType(): "chat";
private _parseImagePrompts;
formatMessages(values: TypedPromptInputValues<RunInput>): Promise<BaseMessage[]>;
partial<NewPartialVariableName extends string>(values: PartialValues<NewPartialVariableName>): Promise<ChatPromptTemplate<InputValues<Exclude<Extract<keyof RunInput, string>, NewPartialVariableName>>, any>>;
/**
* Load prompt template from a template f-string
*/
static fromTemplate<RunInput extends InputValues = Symbol, T extends string = string>(template: T, options?: Omit<PromptTemplateInput<RunInput, string, "f-string">, "template" | "inputVariables">): ChatPromptTemplate<ExtractedFStringParams<T, RunInput>>;
static fromTemplate<RunInput extends InputValues = Symbol, T extends string = string>(template: T, options?: Omit<PromptTemplateInput<RunInput, string>, "template" | "inputVariables">): ChatPromptTemplate<ExtractedFStringParams<T, RunInput>>;
static fromTemplate<RunInput extends InputValues = Symbol, T extends string = string>(template: T, options?: Omit<PromptTemplateInput<RunInput, string, "mustache">, "template" | "inputVariables">): ChatPromptTemplate<InputValues>;
/**
* Create a chat model-specific prompt from individual chat messages
* or message-like tuples.
* @param promptMessages Messages to be passed to the chat model
* @returns A new ChatPromptTemplate
*/
static fromMessages<RunInput extends InputValues = any, Extra extends ChatPromptTemplateInput<RunInput> = ChatPromptTemplateInput<RunInput>>(promptMessages: (ChatPromptTemplate<InputValues, string> | BaseMessagePromptTemplateLike)[], extra?: Omit<Extra, "inputVariables" | "promptMessages" | "partialVariables">): ChatPromptTemplate<RunInput>;
/** @deprecated Renamed to .fromMessages */
static fromPromptMessages<RunInput extends InputValues = any>(promptMessages: (ChatPromptTemplate<InputValues, string> | BaseMessagePromptTemplateLike)[]): ChatPromptTemplate<RunInput>;
}
export {};