@lobehub/chat
Version:
Lobe Chat - an open-source, high-performance chatbot framework that supports speech synthesis, multimodal, and extensible Function Call plugin system. Supports one-click free deployment of your private ChatGPT/LLM web application.
39 lines (31 loc) • 1.25 kB
text/typescript
import { ChatMessage } from '@/types/message';
import { OpenAIChatMessage } from '@/types/openai/chat';
import { encodeAsync } from '@/utils/tokenizer';
export const getMessagesTokenCount = async (messages: OpenAIChatMessage[]) =>
encodeAsync(messages.map((m) => m.content).join(''));
export const getMessageById = (messages: ChatMessage[], id: string) =>
messages.find((m) => m.id === id);
const getSlicedMessages = (
messages: ChatMessage[],
options: {
enableHistoryCount?: boolean;
historyCount?: number;
includeNewUserMessage?: boolean;
},
): ChatMessage[] => {
// if historyCount is not enabled, return all messages
if (!options.enableHistoryCount || options.historyCount === undefined) return messages;
// if user send message, history will include this message so the total length should +1
const messagesCount = !!options.includeNewUserMessage
? options.historyCount + 1
: options.historyCount;
// if historyCount is negative or set to 0, return empty array
if (messagesCount <= 0) return [];
// if historyCount is positive, return last N messages
return messages.slice(-messagesCount);
};
export const chatHelpers = {
getMessageById,
getMessagesTokenCount,
getSlicedMessages,
};