UNPKG

@hashgraphonline/conversational-agent

Version:

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

206 lines (204 loc) 7.21 kB
import { BaseMessage } from '@langchain/core/messages'; import { ReferenceId, ContentReference, ContentMetadata, ReferenceResolutionResult, ContentReferenceConfig, ContentReferenceStore, ContentReferenceStats, ContentType, ContentSource } from '../types/content-reference'; /** * Search options for message queries */ interface SearchOptions { /** Whether to perform case-sensitive search */ caseSensitive?: boolean; /** Maximum number of results to return */ limit?: number; /** Whether to use regex pattern matching */ useRegex?: boolean; } /** * Result of storing messages */ interface StoreResult { /** Number of messages successfully stored */ stored: number; /** Number of old messages dropped to make room */ dropped: number; } /** * Storage statistics */ export interface StorageStats { /** Total number of messages currently stored */ totalMessages: number; /** Maximum storage capacity */ maxStorageLimit: number; /** Percentage of storage used */ usagePercentage: number; /** Timestamp of oldest message */ oldestMessageTime: Date | undefined; /** Timestamp of newest message */ newestMessageTime: Date | undefined; } /** * Content storage for managing pruned conversation messages and large content references * Provides searchable storage with time-based querying and automatic cleanup. * * Extended to support reference-based storage for large content to optimize context window usage. */ export declare class ContentStorage implements ContentReferenceStore { private messages; private maxStorage; private idCounter; private contentStore; private referenceConfig; private cleanupTimer?; private referenceStats; static readonly DEFAULT_MAX_STORAGE = 1000; constructor(maxStorage?: number, referenceConfig?: Partial<ContentReferenceConfig>); /** * Store messages in the content storage * Automatically drops oldest messages if storage limit is exceeded * @param messages - Messages to store * @returns Result indicating how many messages were stored and dropped */ storeMessages(messages: BaseMessage[]): StoreResult; /** * Get the most recent messages from storage * @param count - Number of recent messages to retrieve * @returns Array of recent messages in chronological order */ getRecentMessages(count: number): BaseMessage[]; /** * Search for messages containing specific text or patterns * @param query - Search term or regex pattern * @param options - Search configuration options * @returns Array of matching messages */ searchMessages(query: string, options?: SearchOptions): BaseMessage[]; /** * Get messages from a specific time range * @param startTime - Start of time range (inclusive) * @param endTime - End of time range (inclusive) * @returns Array of messages within the time range */ getMessagesFromTimeRange(startTime: Date, endTime: Date): BaseMessage[]; /** * Get storage statistics and usage information * @returns Current storage statistics */ getStorageStats(): StorageStats; /** * Clear all stored messages */ clear(): void; /** * Get total number of stored messages * @returns Number of messages currently in storage */ getTotalStoredMessages(): number; /** * Update the maximum storage limit * @param newLimit - New maximum storage limit */ updateStorageLimit(newLimit: number): void; /** * Get messages by message type * @param messageType - Type of messages to retrieve ('human', 'ai', 'system', etc.) * @param limit - Maximum number of messages to return * @returns Array of messages of the specified type */ getMessagesByType(messageType: string, limit?: number): BaseMessage[]; /** * Get the current storage configuration * @returns Storage configuration object */ getConfig(): { maxStorage: number; currentUsage: number; utilizationPercentage: number; }; /** * Generate a unique ID for stored messages * @returns Unique string identifier */ private generateId; /** * Get messages stored within the last N minutes * @param minutes - Number of minutes to look back * @returns Array of messages from the last N minutes */ getRecentMessagesByTime(minutes: number): BaseMessage[]; /** * Export messages to a JSON-serializable format * @returns Serializable representation of stored messages */ exportMessages(): { content: import('@langchain/core/messages').MessageContent; type: import('@langchain/core/messages').MessageType; storedAt: string; id: string; }[]; /** * Determine if content should be stored as a reference based on size */ shouldUseReference(content: Buffer | string): boolean; /** * Store content and return a reference if it exceeds the size threshold * Otherwise returns null to indicate direct content should be used */ storeContentIfLarge(content: Buffer | string, metadata: { contentType?: ContentType; mimeType?: string; source: ContentSource; mcpToolName?: string; fileName?: string; tags?: string[]; customMetadata?: Record<string, unknown>; }): Promise<ContentReference | null>; /** * Store content and return a reference (implements ContentReferenceStore) */ storeContent(content: Buffer, metadata: Omit<ContentMetadata, 'createdAt' | 'lastAccessedAt' | 'accessCount'>): Promise<ContentReference>; /** * Resolve a reference to its content (implements ContentReferenceStore) */ resolveReference(referenceId: ReferenceId): Promise<ReferenceResolutionResult>; /** * Check if a reference exists and is valid */ hasReference(referenceId: ReferenceId): Promise<boolean>; /** * Mark a reference for cleanup */ cleanupReference(referenceId: ReferenceId): Promise<boolean>; /** * Get current reference storage statistics (implements ContentReferenceStore) */ getStats(): Promise<ContentReferenceStats>; /** * Update reference configuration */ updateConfig(config: Partial<ContentReferenceConfig>): Promise<void>; /** * Perform cleanup based on current policies (implements ContentReferenceStore) */ performCleanup(): Promise<{ cleanedUp: number; errors: string[]; }>; /** * Get reference configuration for debugging */ getReferenceConfig(): ContentReferenceConfig; private enforceReferenceStorageLimits; private calculateExpirationTime; private getCleanupPolicy; private detectContentType; private createContentPreview; private updateStatsAfterStore; private updateReferenceStorageStats; private recordPerformanceMetric; private calculateAverage; private startReferenceCleanupTimer; /** * Clean up resources (enhanced to include reference cleanup) */ dispose(): Promise<void>; } export {};