/** * Redis Cache Service - Caching layer for embeddings, queries, and deduplication * Reduces OpenAI API costs by ~70% through intelligent caching */ export interface CacheMetrics { hits: number; misses: number; hitRate: number; } export declare class RedisCacheService { private redis; private connected; private fallbackMode; private metrics; constructor(redisUrl?: string); /** * Generate SHA256 hash for cache key */ private hashKey; /** * Build cache key for embeddings: emb:{model}:{sha256(text)} */ private buildEmbeddingKey; /** * Build cache key for query results: query:{project_id}:{sha256(query+params)} */ private buildQueryKey; /** * Build dedupe key: dedupe:{project_id}:{content_sha} */ private buildDedupeKey; /** * Build budget tracking key: budget:{YYYYMMDD}:{project_id} */ private buildBudgetKey; /** * Get cached embedding vector * @returns Cached embedding vector or null if not found */ getCachedEmbedding(text: string, model: string): Promise; /** * Store embedding in cache * @param ttlSeconds Time-to-live in seconds (default: 60 days) */ setCachedEmbedding(text: string, model: string, embedding: number[], ttlSeconds?: number): Promise; /** * Get cached query results */ getCachedQuery(projectId: string, query: string, params?: Record): Promise; /** * Store query results in cache * @param ttlSeconds Time-to-live in seconds (default: 5 minutes) */ setCachedQuery(projectId: string, query: string, results: any[], params?: Record, ttlSeconds?: number): Promise; /** * Check if content has been ingested recently (dedupe) * @returns true if duplicate, false if new content */ checkDedupe(projectId: string, contentSha: string): Promise; /** * Mark content as ingested (dedupe tracking) * @param ttlSeconds Time-to-live in seconds (default: 48 hours) */ setDedupe(projectId: string, contentSha: string, ttlSeconds?: number): Promise; /** * Increment token usage for budget tracking * @returns Total tokens used today for this project */ incrementTokenUsage(projectId: string, tokens: number): Promise; /** * Get token usage for a project on a specific date * @param date Optional date string (YYYYMMDD), defaults to today */ getTokenUsage(projectId: string, date?: string): Promise; /** * Get cache metrics (hit rate, total hits/misses) */ getMetrics(): CacheMetrics; /** * Reset metrics (useful for testing) */ resetMetrics(): void; /** * Check if Redis is connected and operational */ isConnected(): boolean; /** * Close Redis connection */ close(): Promise; } //# sourceMappingURL=redis-cache.service.d.ts.map