@codai/memorai-core
Version:
Simplified advanced memory engine - no tiers, just powerful semantic search with persistence
106 lines • 3.17 kB
TypeScript
/**
* Advanced Semantic Search Engine for Memorai
* Provides fuzzy matching, semantic similarity, and intelligent query understanding
*/
import type { MemoryMetadata, MemoryResult } from '../types/index.js';
import { EmbeddingService } from '../embedding/EmbeddingService.js';
export interface SemanticSearchOptions {
enableFuzzyMatching?: boolean;
fuzzyThreshold?: number;
enableSemanticExpansion?: boolean;
enableTypoTolerance?: boolean;
weightFactors?: {
semantic: number;
fuzzy: number;
recency: number;
frequency: number;
importance: number;
};
contextWindow?: number;
diversityFactor?: number;
limit?: number;
}
export interface SearchContext {
recentQueries: string[];
userPreferences: Record<string, unknown>;
sessionContext: string[];
timeContext: {
timeOfDay: 'morning' | 'afternoon' | 'evening' | 'night';
dayOfWeek: string;
season: string;
};
}
export interface EnhancedMemoryResult extends MemoryResult {
searchScore: number;
fuzzyScore: number;
semanticScore: number;
recencyScore: number;
frequencyScore: number;
contextRelevance: number;
explanation: string;
relatedConcepts: string[];
}
/**
* Advanced semantic search with fuzzy matching and intelligent ranking
*/
export declare class SemanticSearchEngine {
private embeddingService;
private queryCache;
private conceptCache;
constructor(embeddingService: EmbeddingService);
/**
* Perform advanced semantic search with multiple ranking factors
*/
search(query: string, memories: MemoryMetadata[], options?: SemanticSearchOptions, context?: SearchContext): Promise<EnhancedMemoryResult[]>;
/**
* Preprocess query to handle typos and normalize text
*/
private preprocessQuery;
/**
* Get or generate embedding for query with caching
*/ private getQueryEmbedding;
/**
* Expand query with semantically related concepts
*/
private expandQuery;
/**
* Score a single memory against the query
*/
private scoreMemory;
/**
* Calculate semantic similarity score using embeddings
*/
private calculateSemanticScore;
/**
* Calculate fuzzy matching score
*/
private calculateFuzzyScore;
/**
* Calculate recency score (more recent = higher score)
*/
private calculateRecencyScore;
/**
* Calculate frequency score based on access count
*/
private calculateFrequencyScore;
/**
* Calculate context relevance score
*/
private calculateContextRelevance;
/**
* Apply diversity ranking to avoid too similar results
*/
private applyDiversityRanking;
private cosineSimilarity;
private fuzzyMatch;
private jaroWinklerDistance;
private correctTypos;
private generateRelatedConcepts;
private generateExplanation;
private extractRelatedConcepts;
private checkPreferenceMatch;
private calculateTimeRelevance;
private getTimeOfDayScore;
private calculateContentSimilarity;
}
//# sourceMappingURL=SemanticSearchEngine.d.ts.map