@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
TypeScript
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;
}