{"_id":"@aquiles-ai/aquiles-rag-client","_rev":"4-e9c2fbb8445013eac5888a6c7694a8a6","name":"@aquiles-ai/aquiles-rag-client","dist-tags":{"latest":"1.5.2"},"versions":{"1.0.0":{"name":"@aquiles-ai/aquiles-rag-client","version":"1.0.0","keywords":["rag","aquiles","embeddings","vector-search"],"author":{"name":"Aquiles-ai / Fredy Rivera"},"license":"Apache-2.0","_id":"@aquiles-ai/aquiles-rag-client@1.0.0","maintainers":[{"name":"f4k3r22","email":"fredyriveraacevedo13@gmail.com"}],"dist":{"shasum":"abb4807f09cbd37b049c2d49677ca00650a2c850","tarball":"https://registry.npmjs.org/@aquiles-ai/aquiles-rag-client/-/aquiles-rag-client-1.0.0.tgz","fileCount":5,"integrity":"sha512-KlBhj2cWt0Ogn4LqShRu52Nfr6/0j8GU2QvErF9SCYOAx1TU1/vJ92XyWAuJ+2JQ2PiGl4rwuNjowCh86TtN0w==","signatures":[{"sig":"MEUCIQCgC4zQVF1t+h1czxFuRjTQCP6l8R/Wki6T+s44HvqMwwIgZS1KcsKQqO1i9rvOtDTOZAQ31vESj1kPIOIK+BLCmWE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":13364},"main":"dist/index.js","types":"dist/index.d.ts","scripts":{"test":"node dist/example.js","build":"tsc","prepare":"npm run build"},"_npmUser":{"name":"f4k3r22","email":"fredyriveraacevedo13@gmail.com"},"_npmVersion":"11.6.2","description":"Cliente JavaScript/TypeScript para Aquiles-RAG","directories":{},"_nodeVersion":"22.15.0","dependencies":{"axios":"^1.6.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.3.0","@types/node":"^20.10.0"},"_npmOperationalInternal":{"tmp":"tmp/aquiles-rag-client_1.0.0_1764386179312_0.045020645307188634","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"@aquiles-ai/aquiles-rag-client","version":"1.5.0","keywords":["rag","aquiles","embeddings","vector-search","ai","vector-database","semantic-search"],"author":{"name":"Aquiles-ai / Fredy Rivera"},"license":"Apache-2.0","_id":"@aquiles-ai/aquiles-rag-client@1.5.0","maintainers":[{"name":"f4k3r22","email":"fredyriveraacevedo13@gmail.com"}],"homepage":"https://github.com/Aquiles-ai/Aquiles-RAG-TS-Client","bugs":{"url":"https://github.com/Aquiles-ai/Aquiles-RAG-TS-Client/issues"},"dist":{"shasum":"58ec2235502e095020f5856c690d4cb4971814f7","tarball":"https://registry.npmjs.org/@aquiles-ai/aquiles-rag-client/-/aquiles-rag-client-1.5.0.tgz","fileCount":7,"integrity":"sha512-wvjQAbuVc1Chg5oihrm3JxaffAT5bNpPOl1+0QO+REYA/jkqkycbTAGil13RU6YKdvM332tVfD90feJS0miKDA==","signatures":[{"sig":"MEYCIQDpX4QzQF61nBestunzPRRocamhMeu8Ahy2j7Ms22ag/wIhAPRRCUDUZ9ASDqlNoDiPV3yx5BQdxhF1aAeORmWP7orC","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":34310},"main":"dist/index.js","types":"dist/index.d.ts","scripts":{"test":"node dist/example.js","build":"tsc","prepare":"npm run build"},"_npmUser":{"name":"f4k3r22","email":"fredyriveraacevedo13@gmail.com"},"repository":{"url":"git+https://github.com/Aquiles-ai/Aquiles-RAG-TS-Client.git","type":"git"},"_npmVersion":"11.6.2","description":"JavaScript/TypeScript client for Aquiles-RAG","directories":{},"_nodeVersion":"22.15.0","dependencies":{"axios":"^1.6.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"openai":"^6.9.1","typescript":"^5.3.0","@types/node":"^20.10.0"},"peerDependencies":{"openai":"^6.0.0"},"peerDependenciesMeta":{"openai":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/aquiles-rag-client_1.5.0_1764388369503_0.7635690710373904","host":"s3://npm-registry-packages-npm-production"}},"1.5.1":{"name":"@aquiles-ai/aquiles-rag-client","version":"1.5.1","keywords":["rag","aquiles","embeddings","vector-search","ai","vector-database","semantic-search"],"author":{"name":"Aquiles-ai / Fredy Rivera"},"license":"Apache-2.0","_id":"@aquiles-ai/aquiles-rag-client@1.5.1","maintainers":[{"name":"f4k3r22","email":"fredyriveraacevedo13@gmail.com"}],"homepage":"https://github.com/Aquiles-ai/Aquiles-RAG-TS-Client","bugs":{"url":"https://github.com/Aquiles-ai/Aquiles-RAG-TS-Client/issues"},"dist":{"shasum":"adf8b0d6c4f6de6ac38104e8b6691be215d116d5","tarball":"https://registry.npmjs.org/@aquiles-ai/aquiles-rag-client/-/aquiles-rag-client-1.5.1.tgz","fileCount":7,"integrity":"sha512-xmDD5akmm3770YDfg+DG5uDtXK5ZCJkJ9r4MzWhj83r3ytUokNis42OVETcqFL0PNmnKKS87PuRuftASHJ9jPA==","signatures":[{"sig":"MEMCH3DB0dFbvwUaZUd8yRU8CurUECtau9cKf1xADfXkjKkCIFXi7iqAizat2LyJr4/ZvVp1VTdu7rYRL9u2MdzA/ZOK","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":34357},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"06ab615b3d71d6d9dd96cf67817d951f57567b90","scripts":{"test":"node dist/example.js","build":"tsc","prepare":"npm run build"},"_npmUser":{"name":"f4k3r22","email":"fredyriveraacevedo13@gmail.com"},"repository":{"url":"git+https://github.com/Aquiles-ai/Aquiles-RAG-TS-Client.git","type":"git"},"_npmVersion":"11.6.2","description":"JavaScript/TypeScript client for Aquiles-RAG","directories":{},"_nodeVersion":"22.15.0","dependencies":{"axios":"^1.6.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"openai":"^6.9.1","typescript":"^5.3.0","@types/node":"^20.10.0"},"peerDependencies":{"openai":"^6.0.0"},"peerDependenciesMeta":{"openai":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/aquiles-rag-client_1.5.1_1764388641689_0.06000285745643219","host":"s3://npm-registry-packages-npm-production"}},"1.5.2":{"name":"@aquiles-ai/aquiles-rag-client","version":"1.5.2","description":"JavaScript/TypeScript client for Aquiles-RAG","main":"dist/index.js","types":"dist/index.d.ts","publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/Aquiles-ai/Aquiles-RAG-TS-Client.git"},"homepage":"https://github.com/Aquiles-ai/Aquiles-RAG-TS-Client","bugs":{"url":"https://github.com/Aquiles-ai/Aquiles-RAG-TS-Client/issues"},"scripts":{"build":"tsc","prepare":"npm run build","test":"node dist/example.js"},"keywords":["rag","aquiles","embeddings","vector-search","ai","vector-database","semantic-search"],"author":{"name":"Aquiles-ai / Fredy Rivera"},"license":"Apache-2.0","dependencies":{"axios":"^1.6.0"},"devDependencies":{"@types/node":"^20.10.0","openai":"^6.9.1","typescript":"^5.3.0"},"peerDependencies":{"openai":"^6.0.0"},"peerDependenciesMeta":{"openai":{"optional":true}},"gitHead":"3c7c9be5d4c61b363579ce9d0a083922548a21be","_id":"@aquiles-ai/aquiles-rag-client@1.5.2","_nodeVersion":"22.15.0","_npmVersion":"11.6.2","dist":{"integrity":"sha512-jN3Xzk/x6DqOdIwqjxtFm2rM4INtpPTm0fc/5Lk5xU9ljOixkxfib1xHUvRmEVUrHVOaROT3+cG86qQAl9VonA==","shasum":"4c43120061ccf0ab018efde8085e44ba6c0c8fc3","tarball":"https://registry.npmjs.org/@aquiles-ai/aquiles-rag-client/-/aquiles-rag-client-1.5.2.tgz","fileCount":7,"unpackedSize":34401,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCsBP8pkoKXmafF446hh5Ogrqhtp2aiRj4HOsl+Pofy1gIhAIp6dsuZ8AJRCMMW3eY1N6b2x23B+7NQYd1akwScdThA"}]},"_npmUser":{"name":"f4k3r22","email":"fredyriveraacevedo13@gmail.com"},"directories":{},"maintainers":[{"name":"f4k3r22","email":"fredyriveraacevedo13@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/aquiles-rag-client_1.5.2_1764771682664_0.2633112684405188"},"_hasShrinkwrap":false}},"time":{"created":"2025-11-29T03:16:19.150Z","modified":"2025-12-03T14:21:23.110Z","1.0.0":"2025-11-29T03:16:19.506Z","1.5.0":"2025-11-29T03:52:49.698Z","1.5.1":"2025-11-29T03:57:21.946Z","1.5.2":"2025-12-03T14:21:22.882Z"},"bugs":{"url":"https://github.com/Aquiles-ai/Aquiles-RAG-TS-Client/issues"},"author":{"name":"Aquiles-ai / Fredy Rivera"},"license":"Apache-2.0","homepage":"https://github.com/Aquiles-ai/Aquiles-RAG-TS-Client","keywords":["rag","aquiles","embeddings","vector-search","ai","vector-database","semantic-search"],"repository":{"type":"git","url":"git+https://github.com/Aquiles-ai/Aquiles-RAG-TS-Client.git"},"description":"JavaScript/TypeScript client for Aquiles-RAG","maintainers":[{"name":"f4k3r22","email":"fredyriveraacevedo13@gmail.com"}],"readme":"# Aquiles-RAG-TS-Client\n\nJavaScript/TypeScript client to interact with the [Aquiles-RAG service](https://github.com/Aquiles-ai/Aquiles-RAG)\n\n## Installation\n\n```bash\nnpm i @aquiles-ai/aquiles-rag-client\n```\n\n## Features\n\n- ✅ Full TypeScript support\n- ✅ Asynchronous client based on Promises\n- ✅ Automatic text chunking\n- ✅ Support for custom metadata\n- ✅ Reranking functions\n- ✅ Vector index management\n\n## Basic Usage\n\n```typescript\nimport { AsyncAquilesRAG } from '@aquiles-ai/aquiles-rag-client';\nimport OpenAI from \"openai\";\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\nasync function getEmbedding(text: string): Promise<number[]> {\n  if (!text) return [];\n\n  const resp = await openai.embeddings.create({\n    model: \"text-embedding-3-small\",\n    input: text,\n    encoding_format: \"float\",\n  });\n\n  const emb = (resp as any)?.data?.[0]?.embedding;\n  if (!Array.isArray(emb)) throw new Error(\"Invalid embedding\");\n\n  return emb.map(Number);\n}\n\nasync function main() {\n  // Initialize the client\n  const client = new AsyncAquilesRAG({\n    host: 'http://127.0.0.1:5500',\n    apiKey: 'dummy-api-key',\n    timeout: 30000,\n  });\n\n  try {\n    // Create an index\n    console.log('Creating index...');\n    await client.createIndex('my_index', 1536, 'FLOAT32', true);\n    console.log('✓ Index created successfully');\n\n    // Send document to RAG\n    console.log('Sending document to RAG...');\n    const text = `\n      Artificial Intelligence is a field of computer science that focuses on \n      creating systems capable of performing tasks that normally require human intelligence.\n      RAG (Retrieval Augmented Generation) is a technique that combines information retrieval\n      with text generation to produce more accurate and grounded responses.\n    `.repeat(5);\n\n    const results = await client.sendRAG(\n      getEmbedding,\n      'my_index',\n      'ai_document',\n      text,\n      {\n        dtype: 'FLOAT32',\n      }\n    );\n\n    console.log(`✓ Successfully sent ${results.length} chunks`);\n    \n    // Show results details\n    results.forEach((result, idx) => {\n      if (result.error) {\n        console.log(`  Chunk ${idx + 1}: ❌ Error - ${result.error}`);\n      } else {\n        console.log(`  Chunk ${idx + 1}: ✓ ${result.status} - Key: ${result.key}`);\n      }\n    });\n\n    // Perform a query\n    console.log('\\nPerforming query...');\n    const queryEmbedding = await getEmbedding('RAG (Retrieval Augmented Generation)');\n\n    const queryResults = await client.query('my_index', queryEmbedding, {\n      topK: 5,\n      cosineDistanceThreshold: 0.5,\n    });\n\n    console.log(`✓ Query results: Found ${queryResults.length} results`);\n    \n    if (queryResults.length === 0) {\n      console.log('  No results found. Try adjusting the cosineDistanceThreshold.');\n    } else {\n      queryResults.forEach((result, idx) => {\n        console.log(`\\n  Result ${idx + 1}:`);\n        console.log(`    Name: ${result.name_chunk}`);\n        console.log(`    Score: ${result.score}`);\n        console.log(`    Text: ${result.raw_text.substring(0, 150)}...`);\n        \n        if (result.metadata) {\n          console.log(`    Metadata:`, JSON.stringify(result.metadata, null, 6));\n        }\n        \n        if (result.embedding_model) {\n          console.log(`    Model: ${result.embedding_model}`);\n        }\n      });\n    }\n\n    // Rerank results (if available)\n    //if (queryResults.length > 0) {\n    //  console.log('\\nReranking results...');\n    //  try {\n    //    const reranked = await client.reranker('What is RAG?', queryResults);\n    //    console.log(`✓ ${reranked.length} results reranked`);\n        \n    //    reranked.forEach((result, idx) => {\n    //      console.log(`\\n  Reranked ${idx + 1}:`);\n    //      console.log(`    Score: ${result.score || 'N/A'}`);\n    //      console.log(`    Content: ${JSON.stringify(result).substring(0, 100)}...`);\n    //    });\n    //  } catch (error) {\n    //    console.log('  Reranking not available or failed:', (error as Error).message);\n    //  }\n    //}\n\n    // Drop index (optional)\n    // console.log('\\nDropping index...');\n    // const dropResult = await client.dropIndex('my_index', true);\n    // console.log('✓ Index deleted:', dropResult);\n\n  } catch (error) {\n    console.error('❌ Error during execution:', error);\n    if (error instanceof Error) {\n      console.error('   Message:', error.message);\n      console.error('   Stack:', error.stack);\n    }\n  }\n}\n\nmain();\n```\n\n## API\n\n### Constructor\n\n```typescript\nnew AsyncAquilesRAG(options?: AquilesRAGOptions)\n```\n\n**Options:**\n- `host`: Base server URL (default: `http://127.0.0.1:5500`)\n- `apiKey`: API key for authentication (optional)\n- `timeout`: Timeout in milliseconds (default: `30000`)\n\n### Methods\n\n#### `createIndex(indexName, embeddingsDim, dtype, deleteIfExists)`\n\nCreates a new vector index.\n\n**Parameters:**\n- `indexName` (string): Unique index name\n- `embeddingsDim` (number): Embedding dimensionality (default: 768)\n- `dtype` ('FLOAT32' | 'FLOAT64' | 'FLOAT16'): Data type (default: 'FLOAT32')\n- `deleteIfExists` (boolean): Delete existing index (default: false)\n\n#### `query(index, embedding, options)`\n\nQueries the vector index.\n\n**Parameters:**\n- `index` (string): Index name\n- `embedding` (number[]): Query embedding vector\n- `options` (object):\n  - `dtype`: Data type\n  - `topK`: Number of results (default: 5)\n  - `cosineDistanceThreshold`: Distance threshold (default: 0.6)\n  - `embeddingModel`: Model identifier\n  - `metadata`: Metadata filters\n\n#### `sendRAG(embeddingFunc, index, nameChunk, rawText, options)`\n\nSends a document to RAG by splitting it into chunks.\n\n**Parameters:**\n- `embeddingFunc` (function): Function that generates embeddings\n- `index` (string): Index name\n- `nameChunk` (string): Base name for chunks\n- `rawText` (string): Full text to process\n- `options` (object):\n  - `dtype`: Data type\n  - `embeddingModel`: Model identifier\n  - `metadata`: Document metadata\n\n#### `dropIndex(indexName, deleteDocs)`\n\nDeletes an index.\n\n**Parameters:**\n- `indexName` (string): Index name\n- `deleteDocs` (boolean): Delete documents (default: false)\n\n#### `reranker(query, docs)`\n\nReranks results by relevance.\n\n**Parameters:**\n- `query` (string): Original query\n- `docs` (array | object): Results to rerank\n\n## Allowed Metadata\n\n```typescript\ninterface ChunkMetadata {\n  author?: string;          // Document author\n  language?: string;        // ISO 639-1 code (e.g., \"EN\", \"ES\")\n  topics?: string[];        // List of topics\n  source?: string;          // Content source\n  created_at?: string;      // ISO 8601 date\n  extra?: Record<string, any>; // Additional metadata\n}\n```\n\n## Utility Functions\n\n### `chunkTextByWords(text, chunkSize)`\n\nSplits text into chunks by words.\n\n```typescript\nimport { chunkTextByWords } from '@aquiles-ai/aquiles-rag-client';\n\nconst chunks = chunkTextByWords('Your long text...', 600);\n```\n\n### `extractTextFromChunk(chunk)`\n\nExtracts text from a chunk with different formats.\n\n```typescript\nimport { extractTextFromChunk } from '@aquiles-ai/aquiles-rag-client';\n\nconst text = extractTextFromChunk(result);\n```\n\n## Development\n\n```bash\n# Build\nnpm run build\n\n# Run example\nnpm test\n```\n\n## License\n\nApache 2.0","readmeFilename":"README.md"}