{"_id":"@aid-on/memory-rag","name":"@aid-on/memory-rag","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"@aid-on/memory-rag","version":"1.0.0","description":"Vercel AI SDK対応のインメモリRAG実装 - In-memory RAG implementation with Vercel AI SDK support","main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"build":"tsup","dev":"tsup --watch","type-check":"tsc --noEmit","lint":"eslint src --ext .ts","test":"NODE_ENV=test vitest run","test:watch":"NODE_ENV=test vitest","test:coverage":"NODE_ENV=test vitest run --coverage","prepublishOnly":"npm run build && npm run type-check","demo:dev":"vite","demo:build":"vite build","demo:preview":"vite preview"},"keywords":["rag","retrieval-augmented-generation","vector-search","embeddings","ai","llm","memory","vercel-ai-sdk","typescript","openai","anthropic","in-memory"],"author":{"name":"aid-on"},"license":"MIT","engines":{"node":">=16.0.0"},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/Aid-On/memory-rag.git"},"homepage":"https://Aid-On.github.io/memory-rag/","bugs":{"url":"https://github.com/Aid-On/memory-rag/issues"},"dependencies":{"@ai-sdk/openai":"^2.0.0","ai":"^5.0.0","zod":"^3.0.0"},"devDependencies":{"@types/node":"^20.0.0","@types/react":"^19.1.9","@types/react-dom":"^19.1.7","@typescript-eslint/eslint-plugin":"^8.0.0","@typescript-eslint/parser":"^8.0.0","@vitejs/plugin-react":"^5.0.0","@vitest/coverage-v8":"^2.0.0","eslint":"^8.0.0","react":"^19.1.1","react-dom":"^19.1.1","tsup":"^8.0.0","typescript":"^5.0.0","vite":"^5.0.0","vitest":"^2.0.0"},"peerDependencies":{"@ai-sdk/anthropic":"^2.0.0","@ai-sdk/cohere":"^2.0.0","@ai-sdk/google":"^2.0.0"},"peerDependenciesMeta":{"@ai-sdk/anthropic":{"optional":true},"@ai-sdk/google":{"optional":true},"@ai-sdk/cohere":{"optional":true}},"_id":"@aid-on/memory-rag@1.0.0","gitHead":"a6e3ee48d5287c0dafea10dd3050e30ba5d1ef5a","_nodeVersion":"20.10.0","_npmVersion":"10.2.3","dist":{"integrity":"sha512-jQ682WzumOdFNaccsGJRW69dcYNNAw8AKcRapBFEntI1M1Wn4ZX/wsZxEAPsrPXF/AtFjKXOdaxEzYJnSWolCA==","shasum":"70bd0d6815ecfd9ca43f7b54189ef3e174bfe879","tarball":"https://registry.npmjs.org/@aid-on/memory-rag/-/memory-rag-1.0.0.tgz","fileCount":8,"unpackedSize":167566,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQD6F5oFRkaspBSVr3ZBOxjcwB34jDCgYSycYNYwRyeFiAIhAKODmCWfmkuBbCXc+uy5f+XFxmywh0RjxiOAZMjwLPVs"}]},"_npmUser":{"name":"aid-on","email":"hiromi.motodera@aid-on.org"},"directories":{},"maintainers":[{"name":"aid-on","email":"hiromi.motodera@aid-on.org"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/memory-rag_1.0.0_1754781330597_0.5848275196044537"},"_hasShrinkwrap":false}},"time":{"created":"2025-08-09T23:15:30.537Z","1.0.0":"2025-08-09T23:15:30.849Z","modified":"2025-08-09T23:15:31.453Z"},"maintainers":[{"name":"aid-on","email":"hiromi.motodera@aid-on.org"}],"description":"Vercel AI SDK対応のインメモリRAG実装 - In-memory RAG implementation with Vercel AI SDK support","homepage":"https://Aid-On.github.io/memory-rag/","keywords":["rag","retrieval-augmented-generation","vector-search","embeddings","ai","llm","memory","vercel-ai-sdk","typescript","openai","anthropic","in-memory"],"repository":{"type":"git","url":"git+https://github.com/Aid-On/memory-rag.git"},"author":{"name":"aid-on"},"bugs":{"url":"https://github.com/Aid-On/memory-rag/issues"},"license":"MIT","readme":"# @aid-on/memory-rag\n\n🚀 A lightweight, provider-agnostic in-memory RAG (Retrieval-Augmented Generation) library with seamless Vercel AI SDK integration.\n\n## ✨ Features\n\n- 🧠 **In-Memory Vector Store**: Lightning-fast similarity search without external dependencies\n- 🔌 **Multi-Provider Support**: Works with OpenAI, Anthropic, Google, Cohere, and more via Vercel AI SDK\n- ⚡ **Zero Configuration**: Get started with sensible defaults, customize when needed\n- 📦 **Modular Architecture**: Clean separation between vector storage, RAG service, and providers\n- 🎯 **TypeScript First**: Complete type safety with full IntelliSense support\n- 🔄 **Session Isolation**: Manage multiple independent knowledge bases per user/session\n- 🤖 **Vercel AI SDK Native**: Built-in streaming, tools, and edge runtime support\n- 📏 **Smart Chunking**: Automatic document chunking with configurable size and overlap\n- 🎨 **Flexible API**: Use high-level helpers or low-level components directly\n\n## 📦 Installation\n\n```bash\nnpm install @aid-on/memory-rag\n\n# Install optional peer dependencies based on your needs:\nnpm install @ai-sdk/anthropic  # For Claude models\nnpm install @ai-sdk/google     # For Gemini models\nnpm install @ai-sdk/cohere     # For Cohere models\n```\n\n## 🚀 Quick Start\n\n### Basic Usage\n\n```typescript\nimport { createSimpleRAG } from '@aid-on/memory-rag';\n\n// Create a RAG instance with OpenAI (default)\nconst rag = createSimpleRAG();\n\n// Add documents to the knowledge base\nawait rag.addDocument('RAG combines retrieval and generation for better AI responses.');\nawait rag.addDocument('Vector embeddings capture semantic meaning of text.');\n\n// Search and generate an answer\nconst response = await rag.search('What is RAG?', 3);\nconsole.log(response.answer);\n// Output: RAG (Retrieval-Augmented Generation) combines retrieval and generation...\n```\n\n### Using Specific Providers\n\n```typescript\nimport { InMemoryVectorStore, RAGService } from '@aid-on/memory-rag';\nimport { openai } from '@ai-sdk/openai';\nimport { anthropic } from '@ai-sdk/anthropic';\n\n// Mix and match providers for embeddings and LLM\nconst store = new InMemoryVectorStore(\n  openai.embedding('text-embedding-3-large')\n);\nconst service = new RAGService(\n  anthropic('claude-3-haiku-20240307')\n);\n\n// Add documents with metadata\nawait store.addDocument(\n  'Advanced RAG techniques include hybrid search and reranking.',\n  { source: 'docs', topic: 'rag-advanced' }\n);\n\n// Search with answer generation\nconst results = await service.search(store, 'advanced RAG', 5, true);\nconsole.log(results.answer);\n```\n\n### Session-Based Knowledge Isolation\n\n```typescript\nimport { getStore, RAGService } from '@aid-on/memory-rag';\n\n// Create isolated stores for different users/sessions\nconst userStore = getStore('user-123');\nconst adminStore = getStore('admin-456');\n\n// Each session maintains its own knowledge base\nawait userStore.addDocument('User dashboard shows personal metrics.');\nawait adminStore.addDocument('Admin panel includes system monitoring.');\n\n// Queries only search within the session's knowledge\nconst service = new RAGService();\nconst userResults = await service.search(userStore, 'dashboard features');\n// Returns only user-specific results\n```\n\n## 🛠️ Core API\n\n### Factory Functions\n\n#### `createInMemoryRAG(options?)`\nFactory function for creating a complete RAG system.\n\n```typescript\nconst rag = createInMemoryRAG({\n  llmProvider: 'openai',        // or 'anthropic', 'google', 'cohere'\n  embeddingProvider: 'openai',   // or any supported provider\n  llmModel: 'gpt-4o-mini',      // optional: specific model\n  embeddingModel: 'text-embedding-3-small', // optional\n  config: {\n    vectorStore: {\n      maxDocuments: 1000,        // max documents to store\n      chunkSize: 500,            // characters per chunk\n      chunkOverlap: 50           // overlap between chunks\n    },\n    search: {\n      defaultTopK: 5,            // default results to return\n      minScore: 0.5              // minimum similarity score\n    }\n  }\n});\n```\n\n#### `createSimpleRAG()`\nQuick start function with OpenAI defaults.\n\n### Core Classes\n\n#### `InMemoryVectorStore`\nIn-memory vector storage with similarity search.\n\n```typescript\nclass InMemoryVectorStore {\n  constructor(embeddingProvider?: EmbeddingProvider | EmbeddingModel | string);\n  \n  async addDocument(content: string, metadata?: DocumentMetadata): Promise<string>;\n  async removeDocument(id: string): Promise<boolean>;\n  async search(query: string, topK?: number): Promise<SearchResult[]>;\n  clear(): void;\n  size(): number;\n  getStats(): StoreStats;\n}\n```\n\n#### `RAGService`\nOrchestrates RAG operations with LLM integration.\n\n```typescript\nclass RAGService {\n  constructor(llmProvider?: LLMProvider | LanguageModel | string);\n  \n  async search(\n    store: IVectorStore,\n    query: string,\n    topK?: number,\n    generateAnswer?: boolean\n  ): Promise<RAGSearchResult>;\n  \n  async addDocument(\n    store: IVectorStore,\n    content: string,\n    metadata?: DocumentMetadata,\n    useChunks?: boolean,\n    chunkSize?: number\n  ): Promise<AddDocumentResult>;\n}\n```\n\n## 🔗 Vercel AI SDK Integration\n\n### Stream RAG Responses\n\nPerfect for chat applications with real-time streaming:\n\n```typescript\nimport { streamRAGResponse } from '@aid-on/memory-rag';\n\n// In your API route or server action\nconst stream = await streamRAGResponse({\n  messages: [\n    { role: 'user', content: 'Explain vector embeddings' }\n  ],\n  sessionId: 'user-123',\n  enableRAG: true,           // Enable RAG context\n  topK: 3,                   // Number of documents to retrieve\n  model: 'gpt-4o-mini',      // LLM model\n  temperature: 0.7           // Response creativity\n});\n\n// Return stream to client\nreturn new Response(stream);\n```\n\n### RAG as AI Tool\n\nIntegrate RAG with Vercel AI SDK's tool system:\n\n```typescript\nimport { createRAGTool } from '@aid-on/memory-rag';\nimport { generateText } from 'ai';\n\nconst ragTool = createRAGTool('session-123');\n\nconst result = await generateText({\n  model: openai('gpt-4'),\n  tools: {\n    searchKnowledge: ragTool.search,\n    addKnowledge: ragTool.add\n  },\n  prompt: 'Help me understand our documentation'\n});\n```\n\n## ⚙️ Configuration\n\n### Environment Variables\n\nConfigure defaults via environment variables:\n\n```env\n# Provider selection\nMEMORY_RAG_LLM_PROVIDER=openai\nMEMORY_RAG_EMBEDDING_PROVIDER=openai\n\n# Model selection\nMEMORY_RAG_MODEL=gpt-4o-mini\nMEMORY_RAG_EMBEDDING_MODEL=text-embedding-3-small\n\n# API Keys (if not set elsewhere)\nOPENAI_API_KEY=sk-...\nANTHROPIC_API_KEY=sk-ant-...\n```\n\n### Runtime Configuration\n\n```typescript\nimport { setConfig } from '@aid-on/memory-rag';\n\nsetConfig({\n  defaultProvider: {\n    llm: 'anthropic',\n    embedding: 'openai',  // Mix providers\n  },\n  vectorStore: {\n    maxDocuments: 10000,   // Increase capacity\n    chunkSize: 1000,       // Larger chunks\n    chunkOverlap: 100      // More context overlap\n  },\n  search: {\n    defaultTopK: 10,       // Return more results\n    minScore: 0.7          // Higher quality threshold\n  },\n});\n```\n\n## 🔧 Advanced Features\n\n### Smart Document Chunking\n\n```typescript\nconst service = new RAGService();\n\n// Automatically chunks large documents\nconst result = await service.addDocument(\n  store,\n  longArticle,  // 10,000+ characters\n  { source: 'blog', author: 'John' },\n  true,         // Enable auto-chunking\n  1000          // Characters per chunk\n);\n\nconsole.log(`Added ${result.documentIds.length} chunks`);\n```\n\n### Bulk Document Import\n\n```typescript\nconst documents = [\n  { content: 'Getting started guide...', metadata: { type: 'tutorial' } },\n  { content: 'API reference...', metadata: { type: 'reference' } },\n  { content: 'Best practices...', metadata: { type: 'guide' } },\n];\n\n// Efficiently add multiple documents\nconst results = await service.bulkAddDocuments(store, documents);\nconsole.log(`Imported ${results.documentIds.length} documents`);\n```\n\n### Custom Provider Registration\n\n```typescript\nimport { \n  registerLanguageModelProvider, \n  registerEmbeddingModelProvider \n} from '@aid-on/memory-rag';\n\n// Register a custom provider\nregisterLanguageModelProvider('custom-llm', (model) => {\n  return {\n    async generateText({ messages }) {\n      // Your custom implementation\n      return 'Generated response';\n    }\n  };\n});\n\n// Use the custom provider\nconst service = new RAGService('custom-llm');\n```\n\n### Metadata Filtering\n\n```typescript\n// Add documents with rich metadata\nawait store.addDocument('Python tutorial', {\n  language: 'python',\n  level: 'beginner',\n  updated: '2024-01'\n});\n\n// Future: Query with metadata filters\n// const results = await store.search('tutorial', {\n//   filter: { language: 'python', level: 'beginner' }\n// });\n```\n\n## 🎯 Real-World Use Cases\n\n### 💬 **Conversational AI**\nBuild chatbots that remember context and provide accurate, grounded responses.\n\n### 📚 **Documentation Assistant**\nCreate an AI that can answer questions about your codebase, API, or product docs.\n\n### 🔍 **Semantic Search Engine**\nImplement intelligent search that understands intent, not just keywords.\n\n### 🤖 **Customer Support Bot**\nDeploy AI agents that can access your knowledge base to resolve customer queries.\n\n### 📝 **Content Generation**\nGenerate articles, summaries, or reports augmented with factual information.\n\n### 🎓 **Educational Tutor**\nBuild personalized learning assistants with access to course materials.\n\n## 🏗️ Architecture\n\n```\n@aid-on/memory-rag\n├── 📁 types/          # TypeScript interfaces & types\n├── 📁 providers/      # Provider abstraction layer\n│   ├── factory.ts     # Provider factory pattern\n│   ├── base.ts        # Base provider classes\n│   └── vercel-ai.ts   # Vercel AI SDK adapter\n├── 📁 stores/         # Vector storage layer\n│   └── in-memory.ts   # In-memory vector store\n├── 📁 services/       # Business logic\n│   ├── rag-service.ts # RAG orchestration\n│   └── store-manager.ts # Session management\n├── 📁 integrations/   # Framework integrations\n│   └── vercel-ai.ts   # Vercel AI SDK tools\n└── 📄 index.ts        # Public API exports\n```\n\n### Design Principles\n\n- **Provider Agnostic**: Swap LLM/embedding providers without changing code\n- **Memory Efficient**: Optimized for in-memory operations\n- **Type Safe**: Full TypeScript with strict typing\n- **Modular**: Use only what you need\n- **Edge Ready**: Works in serverless and edge environments\n\n## 🧪 Development\n\n```bash\n# Install dependencies\nnpm install\n\n# Run tests\nnpm test\n\n# Run tests in watch mode\nnpm run test:watch\n\n# Generate coverage report\nnpm run test:coverage\n\n# Build the library\nnpm run build\n\n# Type checking\nnpm run type-check\n\n# Linting\nnpm run lint\n```\n\n## 🚀 Performance\n\n- **Fast Embedding**: ~50ms per document (varies by provider)\n- **Instant Search**: <10ms for 1000 documents\n- **Low Memory**: ~1MB per 100 documents\n- **Zero Cold Start**: No external services to initialize\n\n## 🔒 Security\n\n- No data persistence by default\n- Session isolation for multi-tenant apps\n- Provider API keys stay on your server\n- Works in secure edge environments\n\n## 📄 License\n\nMIT © [Aid-On](https://github.com/Aid-On)\n\n## 🤝 Contributing\n\nWe welcome contributions! Please see our [Contributing Guide](https://github.com/Aid-On/memory-rag/blob/main/CONTRIBUTING.md) for details.\n\n## 🔗 Resources\n\n- [GitHub Repository](https://github.com/Aid-On/memory-rag)\n- [NPM Package](https://www.npmjs.com/package/@aid-on/memory-rag)\n- [API Documentation](https://Aid-On.github.io/memory-rag/)\n- [Examples & Demos](https://github.com/Aid-On/memory-rag/tree/main/examples)\n- [Report Issues](https://github.com/Aid-On/memory-rag/issues)\n- [Discussions](https://github.com/Aid-On/memory-rag/discussions)\n\n---\n\nBuilt with ❤️ by the Aid-On team","readmeFilename":"README.md","_rev":"1-c5f20b8cdd1dcf5c80cb2edcf70f4fbe"}