UNPKG

seekmix

Version:

🔍 A local semantic caching library for Node.js.

65 lines (54 loc) 2.42 kB
import { SeekMix, BgeM3EmbeddingProvider } from '../index.js'; try { process.loadEnvFile(); } catch (e) { } async function expensiveApiCall(query) { console.log(` 🔄 Making API call for: "${query}"`); await new Promise(resolve => setTimeout(resolve, 500)); return `Answer for: "${query}" — generated at ${new Date().toISOString()}`; } async function main() { const cache = new SeekMix({ ttl: 60 * 60, similarityThreshold: 0.77, dropIndex: true, embeddingProvider: new BgeM3EmbeddingProvider() }); await cache.connect(); console.log('Connected using BAAI bge-m3 (via OpenRouter)\n'); const seeds = [ { query: 'Best restaurants in New York', result: 'Try Le Bernardin, Eleven Madison Park, or Per Se.' }, { query: 'Cómo hacer pasta al dente', result: 'Hierve agua con sal, añade la pasta y cocina 1-2 min menos de lo indicado.' }, { query: 'Tips for a good night sleep', result: 'Avoid screens, keep a regular schedule, and maintain a cool room.' }, { query: '東京のおすすめ観光地', result: '浅草寺、新宿御苑、東京タワーがおすすめです。' }, ]; console.log('--- Seeding cache ---'); for (const { query, result } of seeds) { await cache.set(query, result); console.log(` ✅ Stored: "${query}"`); } const queries = [ 'Where should I eat in New York?', 'Cuál es el truco para cocinar pasta', 'How can I improve my sleep quality?', '東京で何を見るべきですか', 'Best hiking trails in Patagonia', ]; console.log('\n--- Semantic search demo ---'); for (const query of queries) { console.log(`\nQuery: "${query}"`); const hit = await cache.get(query); if (hit) { console.log(` ✅ CACHE HIT (similarity: ${(1 - hit.score).toFixed(4)})`); console.log(` Original: "${hit.query}"`); console.log(` Answer: ${hit.result}`); } else { console.log(' ❌ CACHE MISS'); const result = await expensiveApiCall(query); await cache.set(query, result); console.log(` Answer: ${result}`); console.log(' Saved to cache for future similar queries.'); } } await cache.disconnect(); console.log('\nDone.'); } main().catch(console.error);