@maximem/synap-js-sdk 0.5.14 → 0.5.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/anish/maximemai/maximem_synap-js-parity/synap/sdk/js/dist/onnx-encoder-4RSL6ID4.cjs","../src/cache/onnx-encoder.ts"],"names":[],"mappings":"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","file":"/Users/anish/maximemai/maximem_synap-js-parity/synap/sdk/js/dist/onnx-encoder-4RSL6ID4.cjs","sourcesContent":[null,"/**\n * The local embedding model, Node only: the same int8 ONNX file the Python SDK\n * runs (python/maximem_synap/cache/encoders.py, OnnxEncoder), run the same way:\n * the tokenizer, the model, mean pooling over the attention mask, L2 norm. Both\n * SDKs therefore produce the same vectors, and the thresholds tuned on them in\n * CONTRACT/behavior/anticipation.json (`semantic_match`) hold for both.\n *\n * Used by history search after a compaction and by the anticipation cache to\n * match fetch queries to prefetched items by meaning.\n *\n * `onnxruntime-node` and `@huggingface/tokenizers` are optionalDependencies,\n * reached only through the lazy `import()`s below and only from Node: importing\n * this SDK on Edge or in a browser never loads them (bundle-hygiene.test.ts).\n * When either is missing, `loadOnnxEncoder` returns null and the SDK matches by\n * words, as before.\n *\n * The files are downloaded once, pinned to a revision, into\n * `~/.synap/models/onnx/<repo>/<revision>/` (SYNAP_MODELS_DIR overrides the\n * root; HF_ENDPOINT points at a mirror). For an air-gapped machine, copy the\n * three files there beforehand.\n */\nimport type { Encoder } from './history-search.js';\n\n/** The model's max_seq_length, as in Python. */\nconst MAX_TOKENS = 128;\nconst FILES = (onnxFile: string) => ['tokenizer.json', 'tokenizer_config.json', onnxFile];\n\nexport interface ModelRef {\n repo: string;\n revision: string;\n file: string;\n}\n\n/** `onnx:<repo>@<revision>/<file>`, or null for any other kind. */\nexport function parseModelId(model: string): ModelRef | null {\n const m = /^onnx:([^@]+)@([0-9a-f]+)\\/(.+)$/.exec(model);\n return m ? { repo: m[1]!, revision: m[2]!, file: m[3]! } : null;\n}\n\n/** True when this process can run the model at all (Node, not Edge or a browser). */\nexport function canRunLocalModel(): boolean {\n const p = (globalThis as { process?: { versions?: { node?: string } } }).process;\n return typeof p?.versions?.node === 'string';\n}\n\nasync function ensureFiles(ref: ModelRef, modelsDir: string | undefined): Promise<string> {\n const fs = await import('node:fs/promises');\n const path = await import('node:path');\n const os = await import('node:os');\n const env = (globalThis as { process?: { env?: Record<string, string | undefined> } }).process?.env ?? {};\n const root = modelsDir ?? env['SYNAP_MODELS_DIR'] ?? path.join(os.homedir(), '.synap', 'models');\n const dir = path.join(root, 'onnx', ...ref.repo.split('/'), ref.revision);\n const endpoint = (env['HF_ENDPOINT'] ?? 'https://huggingface.co').replace(/\\/+$/, '');\n for (const file of FILES(ref.file)) {\n const target = path.join(dir, ...file.split('/'));\n try {\n await fs.access(target);\n continue;\n } catch {\n /* not downloaded yet */\n }\n await fs.mkdir(path.dirname(target), { recursive: true });\n const res = await fetch(`${endpoint}/${ref.repo}/resolve/${ref.revision}/${file}`);\n if (!res.ok) throw new Error(`model download failed: ${file}: HTTP ${res.status}`);\n // Written aside and renamed, so an interrupted download is never mistaken\n // for a complete file on the next start.\n const partial = `${target}.partial-${Date.now()}`;\n await fs.writeFile(partial, new Uint8Array(await res.arrayBuffer()));\n await fs.rename(partial, target);\n }\n return dir;\n}\n\n/**\n * Load the model, downloading it on first use. Returns null when the optional\n * packages are not installed, this is not Node, or anything fails: the caller\n * then matches by words, as it did without a model.\n */\nexport async function loadOnnxEncoder(\n model: string,\n options: { modelsDir?: string } = {},\n): Promise<Encoder | null> {\n const ref = parseModelId(model);\n if (!ref || !canRunLocalModel()) return null;\n try {\n const [ort, tok] = await Promise.all([\n import(/* @vite-ignore */ 'onnxruntime-node'),\n import(/* @vite-ignore */ '@huggingface/tokenizers'),\n ]);\n const dir = await ensureFiles(ref, options.modelsDir);\n const fs = await import('node:fs/promises');\n const path = await import('node:path');\n const os = await import('node:os');\n const read = async (f: string) => JSON.parse(await fs.readFile(path.join(dir, ...f.split('/')), 'utf8'));\n const tokenizer = new tok.Tokenizer(await read('tokenizer.json'), await read('tokenizer_config.json'));\n const threads = Math.max(1, Math.min(4, Math.floor((os.cpus()?.length ?? 2) / 2)));\n const session = await ort.InferenceSession.create(path.join(dir, ...ref.file.split('/')), {\n intraOpNumThreads: threads,\n executionProviders: ['cpu'],\n });\n const needsTypeIds = session.inputNames.includes('token_type_ids');\n\n const embedOne = async (text: string): Promise<number[]> => {\n let { ids } = tokenizer.encode(text);\n // <s> A </s>, A cut so the whole fits: what Python's truncation does.\n if (ids.length > MAX_TOKENS) ids = [...ids.slice(0, MAX_TOKENS - 1), ids[ids.length - 1]!];\n const n = ids.length;\n const shape = [1, n];\n const feeds: Record<string, unknown> = {\n input_ids: new ort.Tensor('int64', BigInt64Array.from(ids, (x) => BigInt(x)), shape),\n attention_mask: new ort.Tensor('int64', new BigInt64Array(n).fill(1n), shape),\n };\n if (needsTypeIds) feeds['token_type_ids'] = new ort.Tensor('int64', new BigInt64Array(n), shape);\n const out = await session.run(feeds as never);\n const hidden = out[session.outputNames[0]!]!;\n const data = hidden.data as Float32Array;\n const dim = hidden.dims[2]!;\n const pooled = new Array<number>(dim).fill(0);\n for (let t = 0; t < n; t++) for (let d = 0; d < dim; d++) pooled[d]! += data[t * dim + d]!;\n let norm = 0;\n for (let d = 0; d < dim; d++) {\n pooled[d] = pooled[d]! / n;\n norm += pooled[d]! * pooled[d]!;\n }\n norm = Math.sqrt(norm) || 1;\n return pooled.map((x) => x / norm);\n };\n\n return {\n model,\n async encode(texts: string[]): Promise<number[][]> {\n const out: number[][] = [];\n for (const t of texts) out.push(await embedOne(t));\n return out;\n },\n };\n } catch {\n return null;\n }\n}\n"]}
1
+ {"version":3,"sources":["/Users/anish/maximemai/maximem_synap/synap/sdk/js/dist/onnx-encoder-4RSL6ID4.cjs","../src/cache/onnx-encoder.ts"],"names":[],"mappings":"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","file":"/Users/anish/maximemai/maximem_synap/synap/sdk/js/dist/onnx-encoder-4RSL6ID4.cjs","sourcesContent":[null,"/**\n * The local embedding model, Node only: the same int8 ONNX file the Python SDK\n * runs (python/maximem_synap/cache/encoders.py, OnnxEncoder), run the same way:\n * the tokenizer, the model, mean pooling over the attention mask, L2 norm. Both\n * SDKs therefore produce the same vectors, and the thresholds tuned on them in\n * CONTRACT/behavior/anticipation.json (`semantic_match`) hold for both.\n *\n * Used by history search after a compaction and by the anticipation cache to\n * match fetch queries to prefetched items by meaning.\n *\n * `onnxruntime-node` and `@huggingface/tokenizers` are optionalDependencies,\n * reached only through the lazy `import()`s below and only from Node: importing\n * this SDK on Edge or in a browser never loads them (bundle-hygiene.test.ts).\n * When either is missing, `loadOnnxEncoder` returns null and the SDK matches by\n * words, as before.\n *\n * The files are downloaded once, pinned to a revision, into\n * `~/.synap/models/onnx/<repo>/<revision>/` (SYNAP_MODELS_DIR overrides the\n * root; HF_ENDPOINT points at a mirror). For an air-gapped machine, copy the\n * three files there beforehand.\n */\nimport type { Encoder } from './history-search.js';\n\n/** The model's max_seq_length, as in Python. */\nconst MAX_TOKENS = 128;\nconst FILES = (onnxFile: string) => ['tokenizer.json', 'tokenizer_config.json', onnxFile];\n\nexport interface ModelRef {\n repo: string;\n revision: string;\n file: string;\n}\n\n/** `onnx:<repo>@<revision>/<file>`, or null for any other kind. */\nexport function parseModelId(model: string): ModelRef | null {\n const m = /^onnx:([^@]+)@([0-9a-f]+)\\/(.+)$/.exec(model);\n return m ? { repo: m[1]!, revision: m[2]!, file: m[3]! } : null;\n}\n\n/** True when this process can run the model at all (Node, not Edge or a browser). */\nexport function canRunLocalModel(): boolean {\n const p = (globalThis as { process?: { versions?: { node?: string } } }).process;\n return typeof p?.versions?.node === 'string';\n}\n\nasync function ensureFiles(ref: ModelRef, modelsDir: string | undefined): Promise<string> {\n const fs = await import('node:fs/promises');\n const path = await import('node:path');\n const os = await import('node:os');\n const env = (globalThis as { process?: { env?: Record<string, string | undefined> } }).process?.env ?? {};\n const root = modelsDir ?? env['SYNAP_MODELS_DIR'] ?? path.join(os.homedir(), '.synap', 'models');\n const dir = path.join(root, 'onnx', ...ref.repo.split('/'), ref.revision);\n const endpoint = (env['HF_ENDPOINT'] ?? 'https://huggingface.co').replace(/\\/+$/, '');\n for (const file of FILES(ref.file)) {\n const target = path.join(dir, ...file.split('/'));\n try {\n await fs.access(target);\n continue;\n } catch {\n /* not downloaded yet */\n }\n await fs.mkdir(path.dirname(target), { recursive: true });\n const res = await fetch(`${endpoint}/${ref.repo}/resolve/${ref.revision}/${file}`);\n if (!res.ok) throw new Error(`model download failed: ${file}: HTTP ${res.status}`);\n // Written aside and renamed, so an interrupted download is never mistaken\n // for a complete file on the next start.\n const partial = `${target}.partial-${Date.now()}`;\n await fs.writeFile(partial, new Uint8Array(await res.arrayBuffer()));\n await fs.rename(partial, target);\n }\n return dir;\n}\n\n/**\n * Load the model, downloading it on first use. Returns null when the optional\n * packages are not installed, this is not Node, or anything fails: the caller\n * then matches by words, as it did without a model.\n */\nexport async function loadOnnxEncoder(\n model: string,\n options: { modelsDir?: string } = {},\n): Promise<Encoder | null> {\n const ref = parseModelId(model);\n if (!ref || !canRunLocalModel()) return null;\n try {\n const [ort, tok] = await Promise.all([\n import(/* @vite-ignore */ 'onnxruntime-node'),\n import(/* @vite-ignore */ '@huggingface/tokenizers'),\n ]);\n const dir = await ensureFiles(ref, options.modelsDir);\n const fs = await import('node:fs/promises');\n const path = await import('node:path');\n const os = await import('node:os');\n const read = async (f: string) => JSON.parse(await fs.readFile(path.join(dir, ...f.split('/')), 'utf8'));\n const tokenizer = new tok.Tokenizer(await read('tokenizer.json'), await read('tokenizer_config.json'));\n const threads = Math.max(1, Math.min(4, Math.floor((os.cpus()?.length ?? 2) / 2)));\n const session = await ort.InferenceSession.create(path.join(dir, ...ref.file.split('/')), {\n intraOpNumThreads: threads,\n executionProviders: ['cpu'],\n });\n const needsTypeIds = session.inputNames.includes('token_type_ids');\n\n const embedOne = async (text: string): Promise<number[]> => {\n let { ids } = tokenizer.encode(text);\n // <s> A </s>, A cut so the whole fits: what Python's truncation does.\n if (ids.length > MAX_TOKENS) ids = [...ids.slice(0, MAX_TOKENS - 1), ids[ids.length - 1]!];\n const n = ids.length;\n const shape = [1, n];\n const feeds: Record<string, unknown> = {\n input_ids: new ort.Tensor('int64', BigInt64Array.from(ids, (x) => BigInt(x)), shape),\n attention_mask: new ort.Tensor('int64', new BigInt64Array(n).fill(1n), shape),\n };\n if (needsTypeIds) feeds['token_type_ids'] = new ort.Tensor('int64', new BigInt64Array(n), shape);\n const out = await session.run(feeds as never);\n const hidden = out[session.outputNames[0]!]!;\n const data = hidden.data as Float32Array;\n const dim = hidden.dims[2]!;\n const pooled = new Array<number>(dim).fill(0);\n for (let t = 0; t < n; t++) for (let d = 0; d < dim; d++) pooled[d]! += data[t * dim + d]!;\n let norm = 0;\n for (let d = 0; d < dim; d++) {\n pooled[d] = pooled[d]! / n;\n norm += pooled[d]! * pooled[d]!;\n }\n norm = Math.sqrt(norm) || 1;\n return pooled.map((x) => x / norm);\n };\n\n return {\n model,\n async encode(texts: string[]): Promise<number[][]> {\n const out: number[][] = [];\n for (const t of texts) out.push(await embedOne(t));\n return out;\n },\n };\n } catch {\n return null;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/anish/maximemai/maximem_synap-js-parity/synap/sdk/js/dist/stream-client-5GYUWETN.cjs"],"names":[],"mappings":"AAAA;AACE;AACA;AACA;AACA;AACA;AACF,wDAA6B;AAC7B,gCAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACF,oUAAC","file":"/Users/anish/maximemai/maximem_synap-js-parity/synap/sdk/js/dist/stream-client-5GYUWETN.cjs"}
1
+ {"version":3,"sources":["/Users/anish/maximemai/maximem_synap/synap/sdk/js/dist/stream-client-5GYUWETN.cjs"],"names":[],"mappings":"AAAA;AACE;AACA;AACA;AACA;AACA;AACF,wDAA6B;AAC7B,gCAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACF,oUAAC","file":"/Users/anish/maximemai/maximem_synap/synap/sdk/js/dist/stream-client-5GYUWETN.cjs"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@maximem/synap-js-sdk",
3
- "version": "0.5.14",
3
+ "version": "0.5.15",
4
4
  "description": "Native TypeScript SDK for Synap context and memory management",
5
5
  "repository": {
6
6
  "type": "git",