aegida-console / lib / chat / request-limits.ts
request-limits.ts
Raw
import type { ChatMessage, ChatRequest } from "@/lib/chat/types";

export const MAX_CHAT_REQUEST_MESSAGES = 100;
export const MAX_CHAT_MESSAGE_CHARACTERS = 32_000;
export const MAX_CHAT_REQUEST_CHARACTERS = 128_000;

export function createRequestMessages(
  messages: readonly ChatMessage[],
): ChatRequest["messages"] {
  const newestFirst: ChatRequest["messages"] = [];
  let totalCharacters = 0;

  for (let index = messages.length - 1; index >= 0; index -= 1) {
    const message = messages[index];
    if (message.status !== "complete" || !message.content.trim()) continue;

    const nextTotal = totalCharacters + message.content.length;
    if (
      newestFirst.length === MAX_CHAT_REQUEST_MESSAGES ||
      message.content.length > MAX_CHAT_MESSAGE_CHARACTERS ||
      nextTotal > MAX_CHAT_REQUEST_CHARACTERS
    ) {
      break;
    }

    newestFirst.push({ role: message.role, content: message.content });
    totalCharacters = nextTotal;
  }

  return newestFirst.reverse();
}