UNPKG

@neureus/sdk

Version:

Neureus Platform SDK - AI-native, edge-first application platform

250 lines (245 loc) 6.63 kB
'use strict'; var ky = require('ky'); function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; } var ky__default = /*#__PURE__*/_interopDefault(ky); // src/vector.ts var VectorClient = class { http; config; constructor(config) { this.config = { apiKey: config.apiKey, baseUrl: config.baseUrl || "https://api.neureus.ai", timeout: config.timeout || 3e4, retries: config.retries || 3, indexName: config.indexName || "default", ...config.namespace !== void 0 && { namespace: config.namespace } }; this.http = ky__default.default.create({ prefixUrl: this.config.baseUrl, timeout: this.config.timeout, retry: { limit: this.config.retries, methods: ["get", "post", "delete"], statusCodes: [408, 413, 429, 500, 502, 503, 504] }, hooks: { beforeRequest: [ (request) => { request.headers.set("Authorization", `Bearer ${this.config.apiKey}`); request.headers.set("Content-Type", "application/json"); request.headers.set("User-Agent", "Neureus-SDK/0.2.0"); } ] } }); } /** * Index management API */ indices = { /** * Create a new vector index * * @example * ```typescript * await vectors.indices.create({ * name: 'documents', * dimension: 1536, // OpenAI ada-002 dimensions * metric: 'cosine', * indexType: 'hnsw' * }); * ``` */ create: async (config) => { return this.http.post("vector/indices", { json: config }).json(); }, /** * List all indices * * @example * ```typescript * const indices = await vectors.indices.list(); * console.log(indices); // [{ name: 'documents', dimension: 1536, ... }] * ``` */ list: async () => { return this.http.get("vector/indices").json(); }, /** * Get index statistics * * @example * ```typescript * const stats = await vectors.indices.stats('documents'); * console.log(stats.vectorCount, stats.memoryUsage); * ``` */ stats: async (indexName) => { return this.http.get(`vector/indices/${indexName}/stats`).json(); }, /** * Drop (delete) an index * * @example * ```typescript * await vectors.indices.drop('old-index'); * ``` */ drop: async (indexName) => { return this.http.delete(`vector/indices/${indexName}`).json(); } }; /** * Upsert (insert or update) a single vector * * @example * ```typescript * const id = await vectors.upsert({ * vectors: [{ * id: 'doc1', * vector: [0.1, 0.2, ...], // embedding vector * metadata: { title: 'Document 1', page: 1 } * }] * }); * ``` */ async upsert(options) { const { vectors, namespace, indexName } = options; if (vectors.length > 1) { return this.http.post("vector/vectors/batch", { json: { batch: { vectors, namespace: namespace || this.config.namespace }, indexName: indexName || this.config.indexName } }).json(); } const result = await this.http.post("vector/vectors", { json: { vector: vectors[0], namespace: namespace || this.config.namespace, indexName: indexName || this.config.indexName } }).json(); return { success: result.success, ids: [result.id], count: 1, message: result.message }; } /** * Get a vector by ID * * @example * ```typescript * const vector = await vectors.get('doc1'); * console.log(vector.metadata, vector.vector); * ``` */ async get(id, namespace) { const params = new URLSearchParams(); if (namespace || this.config.namespace) { params.set("namespace", namespace || this.config.namespace); } return this.http.get(`vector/vectors/${id}`, { searchParams: params }).json(); } /** * Delete a vector by ID * * @example * ```typescript * await vectors.delete('doc1'); * ``` */ async delete(id, namespace, indexName) { const params = new URLSearchParams(); if (namespace || this.config.namespace) { params.set("namespace", namespace || this.config.namespace); } params.set("indexName", indexName || this.config.indexName); return this.http.delete(`vector/vectors/${id}`, { searchParams: params }).json(); } /** * Search for similar vectors * * @example * ```typescript * const results = await vectors.search({ * vector: [0.1, 0.2, ...], // query embedding * topK: 5, * minSimilarity: 0.7, * filter: { page: { $gt: 10 } } * }); * * for (const result of results.matches) { * console.log(result.id, result.score, result.metadata); * } * ``` */ async search(options) { const { indexName, ...searchQuery } = options; return this.http.post("vector/search", { json: { query: { ...searchQuery, namespace: searchQuery.namespace || this.config.namespace }, indexName: indexName || this.config.indexName } }).json(); } /** * Hybrid search (vector + keyword) * * Combines vector similarity search with keyword/text search * for better retrieval accuracy. * * @example * ```typescript * const results = await vectors.hybridSearch({ * vector: [0.1, 0.2, ...], * query: 'machine learning', * topK: 10, * alpha: 0.7 // 70% vector, 30% keyword * }); * ``` */ async hybridSearch(options) { const { indexName, ...searchQuery } = options; return this.http.post("vector/search/hybrid", { json: { query: { ...searchQuery, namespace: searchQuery.namespace || this.config.namespace }, indexName: indexName || this.config.indexName } }).json(); } /** * Clear all vectors in a namespace * * @example * ```typescript * await vectors.clear('temporary-docs'); * ``` */ async clear(namespace, indexName) { const params = new URLSearchParams(); params.set("indexName", indexName || this.config.indexName); return this.http.delete(`vector/namespaces/${namespace}`, { searchParams: params }).json(); } }; function createVectorClient(config) { return new VectorClient(config); } exports.VectorClient = VectorClient; exports.createVectorClient = createVectorClient; //# sourceMappingURL=vector.cjs.map //# sourceMappingURL=vector.cjs.map