UNPKG

@rokmohar/medusa-plugin-meilisearch

Version:
157 lines 10 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.MeiliSearchEmbedder = void 0; /** * MeiliSearch Embedder Service for AI-powered semantic search * Handles vector search configuration and embedding management */ class MeiliSearchEmbedder { config_; client_; constructor(config, client) { this.config_ = config; this.client_ = client; } /** * Check if vector search is enabled and properly configured */ isVectorSearchEnabled() { return this.config_.vectorSearch?.enabled === true; } /** * Configure embedders for an index based on vectorSearch configuration */ async configureEmbedders(indexKey) { const { vectorSearch } = this.config_; if (!vectorSearch?.enabled) { return; } try { const embedderConfig = this.createEmbedderConfig(vectorSearch.embedding); const embedders = { default: embedderConfig, }; await this.client_.index(indexKey).updateEmbedders(embedders); // Successfully configured embedders } catch { // Failed to configure embedders - continue without vector search // Don't throw - let the system continue without vector search } } /** * Create embedder configuration based on provider settings */ createEmbedderConfig(embeddingConfig) { const baseConfig = { dimensions: this.config_.vectorSearch?.dimensions ?? this.getDefaultDimensions(embeddingConfig.model), distribution: { mean: 0.7, sigma: 0.3, }, binaryQuantized: false, }; switch (embeddingConfig.provider) { case 'ollama': return { source: 'ollama', url: embeddingConfig.ngrokUrl ? `${embeddingConfig.ngrokUrl}/api/embed` : `${embeddingConfig.baseUrl}/api/embed`, model: embeddingConfig.model, documentTemplate: this.createDocumentTemplate(), ...baseConfig, }; case 'openai': return { source: 'openAi', apiKey: embeddingConfig.apiKey, model: embeddingConfig.model, url: embeddingConfig.baseUrl ? `${embeddingConfig.baseUrl}/embeddings` : 'https://api.openai.com/v1/embeddings', documentTemplate: this.createDocumentTemplate(), documentTemplateMaxBytes: 500, ...baseConfig, }; default: { const _exhaustiveCheck = embeddingConfig; throw new Error(`Unsupported embedding provider: ${String(_exhaustiveCheck)}`); } } } /** * Get default dimensions for common embedding models */ getDefaultDimensions(model) { const modelDimensions = { 'nomic-embed-text': 768, 'text-embedding-3-small': 1536, }; return modelDimensions[model] ?? 768; } /** * Create document template for embedding generation */ createDocumentTemplate() { const { embeddingFields = ['title', 'description'] } = this.config_.vectorSearch ?? {}; // Create a template that combines the specified fields const fieldTemplates = embeddingFields.map((field) => { return `{{doc.${field}}}`; }); return fieldTemplates.join(' '); } /** * Enhance search options with vector search parameters */ enhanceSearchOptions(searchOptions, semanticSearch, semanticRatio) { if (!semanticSearch || !this.isVectorSearchEnabled()) { return searchOptions; } if (semanticRatio >= 1.0) { // Pure semantic search return { ...searchOptions, hybrid: { embedder: 'default', semanticRatio: 1.0, }, }; } else if (semanticRatio > 0.0) { // Hybrid search return { ...searchOptions, hybrid: { embedder: 'default', semanticRatio, }, }; } // semanticRatio = 0.0 means pure keyword search (no hybrid options) return searchOptions; } /** * Get embedder configuration status for admin panel */ getVectorSearchStatus() { const { vectorSearch } = this.config_; if (!vectorSearch?.enabled) { return { enabled: false, embeddingFields: [], semanticRatio: 0.5, }; } return { enabled: true, provider: vectorSearch.embedding.provider, model: vectorSearch.embedding.model, dimensions: vectorSearch.dimensions ?? this.getDefaultDimensions(vectorSearch.embedding.model), embeddingFields: vectorSearch.embeddingFields ?? ['title', 'description'], semanticRatio: vectorSearch.semanticRatio ?? 0.5, }; } } exports.MeiliSearchEmbedder = MeiliSearchEmbedder; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1iZWRkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9tZWlsaXNlYXJjaC91dGlscy9lbWJlZGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFHQTs7O0dBR0c7QUFDSCxNQUFhLG1CQUFtQjtJQUNYLE9BQU8sQ0FBMEI7SUFDakMsT0FBTyxDQUFhO0lBRXZDLFlBQVksTUFBZ0MsRUFBRSxNQUFtQjtRQUMvRCxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQTtRQUNyQixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQTtJQUN2QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxxQkFBcUI7UUFDbkIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxPQUFPLEtBQUssSUFBSSxDQUFBO0lBQ3BELENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxRQUFnQjtRQUN2QyxNQUFNLEVBQUUsWUFBWSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQTtRQUVyQyxJQUFJLENBQUMsWUFBWSxFQUFFLE9BQU8sRUFBRSxDQUFDO1lBQzNCLE9BQU07UUFDUixDQUFDO1FBRUQsSUFBSSxDQUFDO1lBQ0gsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQTtZQUN4RSxNQUFNLFNBQVMsR0FBYztnQkFDM0IsT0FBTyxFQUFFLGNBQWM7YUFDeEIsQ0FBQTtZQUVELE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFBO1lBQzdELG9DQUFvQztRQUN0QyxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsaUVBQWlFO1lBQ2pFLDhEQUE4RDtRQUNoRSxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ssb0JBQW9CLENB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