UNPKG

@hashgraphonline/conversational-agent

Version:

Hashgraph Online conversational AI agent implementing HCS-10 communication, HCS-2 registries, and content inscription on Hedera

115 lines (113 loc) 3.63 kB
import { BaseMessage } from '@langchain/core/messages'; import { TokenCounter } from './TokenCounter'; /** * Result of adding a message to the memory window */ export interface AddMessageResult { /** Whether the message was successfully added */ added: boolean; /** Messages that were pruned to make room */ prunedMessages: BaseMessage[]; /** Current token count after operation */ currentTokenCount: number; /** Remaining token capacity */ remainingCapacity: number; } /** * Memory window that manages conversation history with token-based size limits * Automatically prunes old messages to stay within token limits while preserving conversational context */ export declare class MemoryWindow { private messages; private maxTokens; private reserveTokens; private tokenCounter; private systemPrompt; private systemPromptTokens; static readonly DEFAULT_MAX_TOKENS = 8000; static readonly DEFAULT_RESERVE_TOKENS = 1000; static readonly PRUNING_BATCH_SIZE = 2; constructor(maxTokens?: number, reserveTokens?: number, tokenCounter?: TokenCounter); /** * Add a message to the memory window, pruning old messages if necessary * @param message - The message to add * @returns Result of the add operation including any pruned messages */ addMessage(message: BaseMessage): AddMessageResult; /** * Prune old messages to fit within token limits * Removes messages in pairs to maintain conversational flow * @returns Array of pruned messages */ pruneToFit(): BaseMessage[]; /** * Get current token count including system prompt and messages * @returns Current token count */ getCurrentTokenCount(): number; /** * Get remaining token capacity before hitting the reserve limit * @returns Remaining tokens that can be used */ getRemainingTokenCapacity(): number; /** * Check if a message can be added without exceeding limits * @param message - The message to check * @returns True if message can be added within reserve limits */ canAddMessage(message: BaseMessage): boolean; /** * Get all messages in the memory window * @returns Copy of current messages array */ getMessages(): BaseMessage[]; /** * Clear all messages from the memory window */ clear(): void; /** * Set the system prompt and update token calculations * @param systemPrompt - The system prompt text */ setSystemPrompt(systemPrompt: string): void; /** * Get the current system prompt * @returns Current system prompt */ getSystemPrompt(): string; /** * Get current configuration * @returns Memory window configuration */ getConfig(): { maxTokens: number; reserveTokens: number; currentTokens: number; messageCount: number; systemPromptTokens: number; }; /** * Update token limits * @param maxTokens - New maximum token limit * @param reserveTokens - New reserve token amount */ updateLimits(maxTokens: number, reserveTokens?: number): void; /** * Get statistics about the memory window * @returns Memory usage statistics */ getStats(): { totalMessages: number; currentTokens: number; maxTokens: number; reserveTokens: number; systemPromptTokens: number; usagePercentage: number; remainingCapacity: number; canAcceptMore: boolean; }; /** * Clean up resources */ dispose(): void; }