@adhd/sox-embedding-provider 0.5.1 → 0.5.2
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.
- package/dist/embedHostConfig.d.ts +120 -0
- package/dist/embedHostConfig.d.ts.map +1 -0
- package/dist/embedHostConfig.js +180 -0
- package/dist/embedHostConfig.js.map +1 -0
- package/dist/embedHostMain.d.ts +46 -0
- package/dist/embedHostMain.d.ts.map +1 -0
- package/dist/embedHostMain.js +192 -0
- package/dist/embedHostMain.js.map +1 -0
- package/dist/errors.d.ts +25 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +35 -0
- package/dist/errors.js.map +1 -0
- package/dist/fastembed.d.ts.map +1 -1
- package/dist/fastembed.js +3 -0
- package/dist/fastembed.js.map +1 -1
- package/dist/fastembedProcessHost.d.ts.map +1 -1
- package/dist/fastembedProcessHost.js +11 -10
- package/dist/fastembedProcessHost.js.map +1 -1
- package/dist/funnelClient.d.ts +97 -0
- package/dist/funnelClient.d.ts.map +1 -0
- package/dist/funnelClient.js +311 -0
- package/dist/funnelClient.js.map +1 -0
- package/dist/index.d.ts +27 -12
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +43 -39
- package/dist/index.js.map +1 -1
- package/dist/onnxStderrFilter.d.ts +2 -1
- package/dist/onnxStderrFilter.d.ts.map +1 -1
- package/dist/onnxStderrFilter.js +2 -1
- package/dist/onnxStderrFilter.js.map +1 -1
- package/dist/package.json +8 -2
- package/dist/sharedFastembedProcess.d.ts +59 -32
- package/dist/sharedFastembedProcess.d.ts.map +1 -1
- package/dist/sharedFastembedProcess.js +100 -41
- package/dist/sharedFastembedProcess.js.map +1 -1
- package/package.json +9 -3
package/dist/fastembed.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { warmupTimeoutMs, isModelCached, WARMUP_CACHE_HIT_ATTEMPTS } from './index.js';
|
|
2
2
|
import { getSharedFastembedProcess } from './sharedFastembedProcess.js';
|
|
3
|
+
import { resolveEmbedHostConfig } from './embedHostConfig.js';
|
|
3
4
|
// BUG-005: MODEL_CONFIGS lives in the side-effect-free `fastembedModels.js`
|
|
4
5
|
// (shared with the child-process host) — see that module's doc comment for
|
|
5
6
|
// why it cannot be imported from this file by the child. Re-exported below
|
|
@@ -82,6 +83,8 @@ export class FastembedProvider {
|
|
|
82
83
|
dimensions: this.embedDim || this.metadata.dimensions,
|
|
83
84
|
last_error: this._lastError,
|
|
84
85
|
execution_provider: this._executionProvider,
|
|
86
|
+
// ADR-0013 D2: the active host-selection posture is visible from one call.
|
|
87
|
+
host: resolveEmbedHostConfig().host,
|
|
85
88
|
};
|
|
86
89
|
}
|
|
87
90
|
async embedSingle(text, _role) {
|
package/dist/fastembed.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fastembed.js","sourceRoot":"","sources":["../src/fastembed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AACvF,OAAO,EAAE,yBAAyB,EAA8B,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"fastembed.js","sourceRoot":"","sources":["../src/fastembed.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fastembedProcessHost.d.ts","sourceRoot":"","sources":["../src/fastembedProcessHost.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyDG;
|
|
1
|
+
{"version":3,"file":"fastembedProcessHost.d.ts","sourceRoot":"","sources":["../src/fastembedProcessHost.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyDG;AA4DH,6EAA6E;AAC7E,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAQ/C;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,IAAI,IAAI,CA8EjD"}
|
|
@@ -97,15 +97,16 @@ import { MODEL_MAP, resolveModelDim } from './fastembedModels.js';
|
|
|
97
97
|
//
|
|
98
98
|
// This lock remains useful regardless: nothing in this process logs the
|
|
99
99
|
// existence of sibling fastembed hosts, and that blindness cost an afternoon
|
|
100
|
-
// of `ps`/`vm_stat` archaeology.
|
|
100
|
+
// of `ps`/`vm_stat` archaeology. It is an OBSERVABILITY aid, not a claim about
|
|
101
|
+
// the cause of any slowdown — the 25-50x class it names is associated with a
|
|
102
|
+
// second host by UNPROVEN hypothesis only.
|
|
101
103
|
//
|
|
102
104
|
// This lock is advisory-only — it never blocks or refuses to load the model
|
|
103
105
|
// (a legitimate second store/project running its own memory-server on the
|
|
104
106
|
// same machine is a real, supported scenario, not a bug). It exists purely
|
|
105
|
-
// so a FUTURE occurrence of
|
|
106
|
-
//
|
|
107
|
-
//
|
|
108
|
-
// diagnose.
|
|
107
|
+
// so a FUTURE occurrence of a second host is a loud, immediately greppable
|
|
108
|
+
// stderr line at model-load time, instead of a silent slowdown that takes an
|
|
109
|
+
// agent an afternoon of `ps`/`vm_stat` archaeology to diagnose.
|
|
109
110
|
// BL-471: `resolveFastembedLockPath()` and `FastembedLockInfo` now live in
|
|
110
111
|
// `./fastembedLock.ts` — the single shared definition imported by both this
|
|
111
112
|
// writer and `sharedFastembedProcess.ts`'s reader. See that module's doc
|
|
@@ -167,11 +168,11 @@ export function checkAndClaimFastembedLock() {
|
|
|
167
168
|
const msg = `another fastembed host process (pid ${prev.pid}, ` +
|
|
168
169
|
`service ${prevService}, ` +
|
|
169
170
|
`started ${prev.startedAt ?? 'unknown'}) is ALREADY RUNNING on this machine. ` +
|
|
170
|
-
`
|
|
171
|
-
`
|
|
172
|
-
`
|
|
173
|
-
`
|
|
174
|
-
|
|
171
|
+
`A second concurrent onnxruntime-node CoreML/ANE host is the leading, UNPROVEN ` +
|
|
172
|
+
`hypothesis for the 25-50x embed-latency class this lock exists to make visible — the ` +
|
|
173
|
+
`measured cause of the live BL-331 slowdown was scheduling QoS, NOT Neural Engine ` +
|
|
174
|
+
`contention (see this file's header). If pid ${prev.pid} is a leaked/orphaned process ` +
|
|
175
|
+
`(check with \`ps -p ${prev.pid}\`), terminate it. Lock file: ${lockPath}`;
|
|
175
176
|
console.error(`[fastembed] WARNING (BL-331): ${msg}`);
|
|
176
177
|
log.warn('embedding_provider.fastembed.competing_host_detected', {
|
|
177
178
|
competing_pid: prev.pid,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fastembedProcessHost.js","sourceRoot":"","sources":["../src/fastembedProcessHost.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyDG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAE9B,OAAO,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAC3F,OAAO,EAAE,wBAAwB,EAAE,4BAA4B,EAA0B,MAAM,oBAAoB,CAAC;AACpH,oEAAoE;AACpE,kEAAkE;AAClE,uEAAuE;AACvE,uEAAuE;AACvE,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAElE,8EAA8E;AAC9E,EAAE;AACF,0EAA0E;AAC1E,6EAA6E;AAC7E,gFAAgF;AAChF,4EAA4E;AAC5E,8EAA8E;AAC9E,6DAA6D;AAC7D,gCAAgC;AAChC,EAAE;AACF,8EAA8E;AAC9E,2EAA2E;AAC3E,uEAAuE;AACvE,gFAAgF;AAChF,8EAA8E;AAC9E,0EAA0E;AAC1E,gCAAgC;AAChC,EAAE;AACF,4EAA4E;AAC5E,gFAAgF;AAChF,gFAAgF;AAChF,6EAA6E;AAC7E,6EAA6E;AAC7E,oEAAoE;AACpE,EAAE;AACF,0EAA0E;AAC1E,iEAAiE;AACjE,iFAAiF;AACjF,8EAA8E;AAC9E,wDAAwD;AACxD,EAAE;AACF,wEAAwE;AACxE,6EAA6E;AAC7E,
|
|
1
|
+
{"version":3,"file":"fastembedProcessHost.js","sourceRoot":"","sources":["../src/fastembedProcessHost.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyDG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAE9B,OAAO,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAC3F,OAAO,EAAE,wBAAwB,EAAE,4BAA4B,EAA0B,MAAM,oBAAoB,CAAC;AACpH,oEAAoE;AACpE,kEAAkE;AAClE,uEAAuE;AACvE,uEAAuE;AACvE,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAElE,8EAA8E;AAC9E,EAAE;AACF,0EAA0E;AAC1E,6EAA6E;AAC7E,gFAAgF;AAChF,4EAA4E;AAC5E,8EAA8E;AAC9E,6DAA6D;AAC7D,gCAAgC;AAChC,EAAE;AACF,8EAA8E;AAC9E,2EAA2E;AAC3E,uEAAuE;AACvE,gFAAgF;AAChF,8EAA8E;AAC9E,0EAA0E;AAC1E,gCAAgC;AAChC,EAAE;AACF,4EAA4E;AAC5E,gFAAgF;AAChF,gFAAgF;AAChF,6EAA6E;AAC7E,6EAA6E;AAC7E,oEAAoE;AACpE,EAAE;AACF,0EAA0E;AAC1E,iEAAiE;AACjE,iFAAiF;AACjF,8EAA8E;AAC9E,wDAAwD;AACxD,EAAE;AACF,wEAAwE;AACxE,6EAA6E;AAC7E,+EAA+E;AAC/E,6EAA6E;AAC7E,2CAA2C;AAC3C,EAAE;AACF,4EAA4E;AAC5E,0EAA0E;AAC1E,2EAA2E;AAC3E,2EAA2E;AAC3E,6EAA6E;AAC7E,gEAAgE;AAChE,2EAA2E;AAC3E,4EAA4E;AAC5E,yEAAyE;AACzE,2CAA2C;AAE3C,6EAA6E;AAC7E,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACpD,IAAI,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,0BAA0B;IACxC,MAAM,QAAQ,GAAG,wBAAwB,EAAE,CAAC;IAC5C,oFAAoF;IACpF,uEAAuE;IACvE,2EAA2E;IAC3E,oEAAoE;IACpE,uEAAuE;IACvE,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IAC7D,uEAAuE;IACvE,8EAA8E;IAC9E,uEAAuE;IACvE,4DAA4D;IAC5D,MAAM,UAAU,GAAG,4BAA4B,EAAE,CAAC;IAClD,IAAI,CAAC;QACH,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA+B,CAAC;YAC3D,MAAM,kBAAkB,GACtB,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ;gBAClC,YAAY,KAAK,SAAS;gBAC1B,IAAI,CAAC,SAAS,KAAK,YAAY,CAAC;YAClC,oEAAoE;YACpE,wEAAwE;YACxE,mEAAmE;YACnE,qEAAqE;YACrE,qEAAqE;YACrE,mEAAmE;YACnE,kCAAkC;YAClC,MAAM,aAAa,GACjB,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ;gBAChC,UAAU,KAAK,SAAS;gBACxB,IAAI,CAAC,OAAO,KAAK,UAAU,CAAC;YAC9B,IACE,OAAO,IAAI,CAAC,GAAG,KAAK,QAAQ;gBAC5B,IAAI,CAAC,GAAG,KAAK,OAAO,CAAC,GAAG;gBACxB,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC;gBACpB,CAAC,kBAAkB;gBACnB,CAAC,aAAa,EACd,CAAC;gBACD,MAAM,WAAW,GAAG,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;gBAChF,MAAM,GAAG,GAAG,uCAAuC,IAAI,CAAC,GAAG,IAAI;oBAC3D,WAAW,WAAW,IAAI;oBAC1B,WAAW,IAAI,CAAC,SAAS,IAAI,SAAS,wCAAwC;oBAC9E,gFAAgF;oBAChF,uFAAuF;oBACvF,mFAAmF;oBACnF,+CAA+C,IAAI,CAAC,GAAG,gCAAgC;oBACvF,uBAAuB,IAAI,CAAC,GAAG,iCAAiC,QAAQ,EAAE,CAAC;gBAC/E,OAAO,CAAC,KAAK,CAAC,iCAAiC,GAAG,EAAE,CAAC,CAAC;gBACtD,GAAG,CAAC,IAAI,CAAC,sDAAsD,EAAE;oBAC/D,aAAa,EAAE,IAAI,CAAC,GAAG;oBACvB,iBAAiB,EAAE,WAAW;oBAC9B,oBAAoB,EAAE,IAAI,CAAC,SAAS,IAAI,SAAS;oBACjD,SAAS,EAAE,QAAQ;iBACpB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,uEAAuE;QACvE,4DAA4D;QAC5D,MAAM,MAAM,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAChE,OAAO,CAAC,KAAK,CAAC,qDAAqD,MAAM,EAAE,CAAC,CAAC;QAC7E,GAAG,CAAC,IAAI,CAAC,gDAAgD,EAAE;YACzD,KAAK,EAAE,MAAM;SACd,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC;QACH,MAAM,IAAI,GAAsB;YAC9B,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAClE,GAAG,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC7D,CAAC;QACF,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IACnD,CAAC;IAAC,MAAM,CAAC;QACP,yEAAyE;IAC3E,CAAC;AACH,CAAC;AA2CD,IAAI,SAAS,GAA4B,IAAI,CAAC;AAC9C,IAAI,aAAa,GAAG,EAAE,CAAC;AACvB,IAAI,gBAAgB,GAAG,EAAE,CAAC;AAE1B,SAAS,yBAAyB;IAChC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC;IACxD,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,gDAAgD,MAAM,EAAE,CAAC,CAAC;QACxE,GAAG,CAAC,IAAI,CAAC,wDAAwD,EAAE;YACjE,QAAQ,EAAE,MAAM;SACjB,CAAC,CAAC;QACH,OAAO,CAAC,MAA2B,EAAE,KAA0B,CAAC,CAAC;IACnE,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ;QAAE,OAAO,CAAC,QAA6B,EAAE,KAA0B,CAAC,CAAC;IACtG,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,KAAK;QAAE,OAAO,CAAC,MAA2B,EAAE,KAA0B,CAAC,CAAC;IAC7H,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;QAAE,OAAO,CAAC,KAA0B,EAAE,KAA0B,CAAC,CAAC;IAClG,OAAO,CAAC,KAA0B,CAAC,CAAC;AACtC,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,KAAa,EAAE,QAAgB;IACtD,IAAI,kBAAkB,GAAG,KAAK,CAAC;IAC/B,IAAI,CAAC,CAAC,SAAS,IAAI,aAAa,KAAK,KAAK,IAAI,gBAAgB,KAAK,QAAQ,CAAC,EAAE,CAAC;QAC7E,6EAA6E;QAC7E,uEAAuE;QACvE,sBAAsB;QACtB,0BAA0B,EAAE,CAAC;QAE7B,MAAM,EAAE,aAAa,EAAE,cAAc,EAAE,EAAE,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;QACxE,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC;QAC5C,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAA2B,CAAC;QAC5D,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC;QAC5D,MAAM,SAAS,GAAmB,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAA2B,CAAC;QAExF,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE5C,MAAM,kBAAkB,GAAG,yBAAyB,EAAE,CAAC;QACvD,SAAS,GAAG,CAAC,MAAM,aAAa,CAAC,IAAI,CAAC;YACpC,KAAK,EAAE,SAA2D;YAClE,QAAQ;YACR,kBAAkB;YAClB,oBAAoB,EAAE,KAAK;SAC5B,CAAC,CAAgC,CAAC;QAEnC,aAAa,GAAG,KAAK,CAAC;QACtB,gBAAgB,GAAG,QAAQ,CAAC;QAC5B,kBAAkB,GAAG,kBAAkB,CAAC,CAAC,CAAE,CAAC;IAC9C,CAAC;IAED,qFAAqF;IACrF,4EAA4E;IAC5E,6EAA6E;IAC7E,4EAA4E;IAC5E,yEAAyE;IACzE,yEAAyE;IACzE,yEAAyE;IACzE,kEAAkE;IAClE,MAAM,GAAG,GAAG,eAAe,CAAC,KAAK,EAAE,SAAS,CAAC,mBAAmB,EAAE,CAAC,CAAC;IACpE,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,gDAAgD,KAAK,oBAAoB,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM;YACtG,8FAA8F,CACjG,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,kBAAkB,EAAE,CAAC;AACrC,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,QAA0B,EAAE,KAAe;IAC1E,MAAM,OAAO,GAAe,EAAE,CAAC;IAC/B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC;QACrD,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;YACxB,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,+EAA+E;AAC/E,EAAE;AACF,0EAA0E;AAC1E,6EAA6E;AAC7E,6EAA6E;AAC7E,0EAA0E;AAE1E,IAAI,MAAM,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;AAE9C,SAAS,OAAO,CAAC,IAAyB;IACxC,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACnC,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,SAAS,IAAI,CAAC,GAAwE;IACpF,IAAI,CAAC,OAAO,CAAC,SAAS;QAAE,OAAO;IAC/B,OAAO,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC,GAAiB,EAAE,EAAE;QACxC,IAAI,GAAG,EAAE,CAAC;YACR,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,wDAAwD,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC;QAChG,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,GAAmD;IAC9E,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QACxB,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,EAAE,kBAAkB,EAAE,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC7E,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,kBAAkB,EAAE,CAAC,CAAC;QAC9D,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC1E,CAAC;QACD,OAAO;IACT,CAAC;IAED,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QACzB,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC,CAAC;YACrD,OAAO;QACT,CAAC;QACD,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACjD,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACnD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC1E,CAAC;QACD,OAAO;IACT,CAAC;IAED,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;QAC9B,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC,CAAC;YACrD,OAAO;QACT,CAAC;QACD,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,SAAS,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;YACjE,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;QACnC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC1E,CAAC;QACD,OAAO;IACT,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAgB,EAAE,EAAE;IACzC,IAAI,YAAY,IAAI,GAAG,EAAE,CAAC;QACxB,KAAK,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE;YACvB,OAAO,CAAC,UAAU,EAAE,CAAC;QACvB,CAAC,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IACD,OAAO,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;AACpC,CAAC,CAAC,CAAC;AAEH;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,uBAAuB,CAAC,EAAE,OAAO,EAAE,oBAAoB,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;AAE7F,6EAA6E;AAC7E,2EAA2E;AAC3E,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IACtB,OAAO,CAAC,IAAI,EAAE,CACZ,EAAE,IAAI,EAAE,iBAAiB,EAAE,SAAS,EAAE,sBAAsB,EAAE,EAAE,EAChE,CAAC,GAAiB,EAAE,EAAE;QACpB,IAAI,GAAG,EAAE,CAAC;YACR,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,wEAAwE,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC;QAChH,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* funnelClient.ts — the host-aware `SharedFastembedClient` (SPEC-EMBEDDING-FUNNEL.md §D).
|
|
3
|
+
*
|
|
4
|
+
* A drop-in `SharedFastembedClient` that transparently dials — and, when absent,
|
|
5
|
+
* peer-spawns — the ONE machine-wide embedding host for `(model, ep, cacheDir)`.
|
|
6
|
+
* It is the consumer half of the funnel: N processes each hold a
|
|
7
|
+
* `FunneledFastembedClient`, but `ensureBackend()`'s O_EXCL spawn-lock collapses
|
|
8
|
+
* their concurrent spawn attempts to a single detached host, and the host
|
|
9
|
+
* reaps itself once the last client leaves (see `embedHostMain.ts`).
|
|
10
|
+
*
|
|
11
|
+
* ── Honest failure, never a silent private re-fork ─────────────────────────────
|
|
12
|
+
*
|
|
13
|
+
* Under the default `host: 'shared'`, a failure to bring the host up throws a
|
|
14
|
+
* typed `TransientEmbeddingError` naming the socket — it does NOT fall back to
|
|
15
|
+
* forking a private host. A silent fallback would defeat the entire funnel
|
|
16
|
+
* (each of 535 short-lived CLIs/day would quietly become its own ONNX host) and
|
|
17
|
+
* is exactly the behaviour this design removes. `host: 'private'` is the
|
|
18
|
+
* explicit, typed CI/diagnostics selection (ADR-0013 closed union).
|
|
19
|
+
*
|
|
20
|
+
* ── Circuit breaker ────────────────────────────────────────────────────────────
|
|
21
|
+
*
|
|
22
|
+
* After `ENSURE_FAILURE_THRESHOLD` consecutive failed ensures, the client fails
|
|
23
|
+
* fast with a typed error for `ENSURE_CIRCUIT_COOLDOWN_MS` rather than paying
|
|
24
|
+
* the full `ensureBackend` ready-timeout on every call. The breaker is
|
|
25
|
+
* per-process (a short-lived CLI cannot share it) — it bounds a retrying
|
|
26
|
+
* consumer, not the fleet; that is stated here rather than implied.
|
|
27
|
+
*
|
|
28
|
+
* Leaf module — `@adhd/sox-service-proxy` + node builtins.
|
|
29
|
+
*/
|
|
30
|
+
import type { SharedFastembedClient } from './sharedFastembedProcess.js';
|
|
31
|
+
/** Consecutive failed ensures before the breaker opens. */
|
|
32
|
+
export declare const ENSURE_FAILURE_THRESHOLD = 3;
|
|
33
|
+
/** How long the breaker stays open (fail-fast window) once tripped. */
|
|
34
|
+
export declare const ENSURE_CIRCUIT_COOLDOWN_MS = 10000;
|
|
35
|
+
/** Bound on bringing the host up (`ensureBackend`'s readyTimeoutMs). */
|
|
36
|
+
export declare const HOST_READY_TIMEOUT_MS = 10000;
|
|
37
|
+
/** TEST-ONLY: clear the active-client reference. */
|
|
38
|
+
export declare function __resetActiveFunnelClientForTests(): void;
|
|
39
|
+
export declare class FunneledFastembedClient implements SharedFastembedClient {
|
|
40
|
+
private conn;
|
|
41
|
+
private socketPath;
|
|
42
|
+
private initContext;
|
|
43
|
+
private ensurePromise;
|
|
44
|
+
private _started;
|
|
45
|
+
private _pending;
|
|
46
|
+
private nextId;
|
|
47
|
+
private consecutiveEnsureFailures;
|
|
48
|
+
private circuitOpenUntil;
|
|
49
|
+
constructor();
|
|
50
|
+
/** True once the host has been resolved and the dial connection established. */
|
|
51
|
+
get started(): boolean;
|
|
52
|
+
/** In-flight request count on THIS consumer (not the host's). */
|
|
53
|
+
get pendingCount(): number;
|
|
54
|
+
/** The resolved host socket path, or `null` before the first successful ensure. */
|
|
55
|
+
get hostSocketPath(): string | null;
|
|
56
|
+
request<T = Record<string, unknown>>(payload: Record<string, unknown>, timeoutMs?: number, signal?: AbortSignal): Promise<T>;
|
|
57
|
+
/**
|
|
58
|
+
* NO-OP by design: under `host: 'shared'` the host is shared with every other
|
|
59
|
+
* consumer on the machine — a consumer must never kill it. Its lifetime is
|
|
60
|
+
* governed solely by its own debounced, ref-counted teardown
|
|
61
|
+
* (`embedHostMain.ts`). Kept to satisfy `SharedFastembedClient`.
|
|
62
|
+
*/
|
|
63
|
+
terminate(): Promise<void>;
|
|
64
|
+
private mapError;
|
|
65
|
+
private awaitResponse;
|
|
66
|
+
/** Idempotent: resolves once a host is live and dialed, or throws typed. */
|
|
67
|
+
private ensureHost;
|
|
68
|
+
private doEnsure;
|
|
69
|
+
private noteEnsureFailure;
|
|
70
|
+
/**
|
|
71
|
+
* Ask the live host to tear down and re-fork its PRIVATE pool, then drop this
|
|
72
|
+
* consumer's connection so the next request re-dials the (still-live) host.
|
|
73
|
+
* No-op when no host has been resolved. Public so the module-level
|
|
74
|
+
* `resetSharedFastembedHost()` can target the accessor client.
|
|
75
|
+
*/
|
|
76
|
+
resetHost(): Promise<void>;
|
|
77
|
+
/**
|
|
78
|
+
* Send a control method (`embedding.reset` / `embedding.health`) to the live
|
|
79
|
+
* host, bounded. Returns the result, or `null` when no host is resolved.
|
|
80
|
+
*/
|
|
81
|
+
private control;
|
|
82
|
+
/**
|
|
83
|
+
* Drop this consumer's dial connection. The host stays alive.
|
|
84
|
+
*/
|
|
85
|
+
private dropConnection;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Ask the peer-shared host to tear down and re-fork its PRIVATE pool, then drop
|
|
89
|
+
* this consumer's connection so the next request re-dials the (still-live) host.
|
|
90
|
+
*
|
|
91
|
+
* This is memory-core's heal entry point: under `host: 'shared'`,
|
|
92
|
+
* `terminate()` is a no-op (a consumer must never kill a shared host), so a
|
|
93
|
+
* wedged private child is recovered by asking the host to reset its own pool.
|
|
94
|
+
* A no-op when no host has been resolved yet — nothing to reset.
|
|
95
|
+
*/
|
|
96
|
+
export declare function resetSharedFastembedHost(): Promise<void>;
|
|
97
|
+
//# sourceMappingURL=funnelClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"funnelClient.d.ts","sourceRoot":"","sources":["../src/funnelClient.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAWH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAEzE,2DAA2D;AAC3D,eAAO,MAAM,wBAAwB,IAAI,CAAC;AAC1C,uEAAuE;AACvE,eAAO,MAAM,0BAA0B,QAAS,CAAC;AACjD,wEAAwE;AACxE,eAAO,MAAM,qBAAqB,QAAS,CAAC;AAoB5C,oDAAoD;AACpD,wBAAgB,iCAAiC,IAAI,IAAI,CAExD;AAOD,qBAAa,uBAAwB,YAAW,qBAAqB;IACnE,OAAO,CAAC,IAAI,CAAkC;IAC9C,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,WAAW,CAAoD;IACvE,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,yBAAyB,CAAK;IACtC,OAAO,CAAC,gBAAgB,CAAK;;IAM7B,gFAAgF;IAChF,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,iEAAiE;IACjE,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,mFAAmF;IACnF,IAAI,cAAc,IAAI,MAAM,GAAG,IAAI,CAElC;IAEK,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACvC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,SAAS,CAAC,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,CAAC,CAAC;IAqCb;;;;;OAKG;IACG,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAMhC,OAAO,CAAC,QAAQ;IAchB,OAAO,CAAC,aAAa;IA8DrB,4EAA4E;IAC5E,OAAO,CAAC,UAAU;YASJ,QAAQ;IAiEtB,OAAO,CAAC,iBAAiB;IAOzB;;;;;OAKG;IACG,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAYhC;;;OAGG;YACW,OAAO;IAcrB;;OAEG;IACH,OAAO,CAAC,cAAc;CAKvB;AAED;;;;;;;;GAQG;AACH,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,IAAI,CAAC,CAE9D"}
|
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* funnelClient.ts — the host-aware `SharedFastembedClient` (SPEC-EMBEDDING-FUNNEL.md §D).
|
|
3
|
+
*
|
|
4
|
+
* A drop-in `SharedFastembedClient` that transparently dials — and, when absent,
|
|
5
|
+
* peer-spawns — the ONE machine-wide embedding host for `(model, ep, cacheDir)`.
|
|
6
|
+
* It is the consumer half of the funnel: N processes each hold a
|
|
7
|
+
* `FunneledFastembedClient`, but `ensureBackend()`'s O_EXCL spawn-lock collapses
|
|
8
|
+
* their concurrent spawn attempts to a single detached host, and the host
|
|
9
|
+
* reaps itself once the last client leaves (see `embedHostMain.ts`).
|
|
10
|
+
*
|
|
11
|
+
* ── Honest failure, never a silent private re-fork ─────────────────────────────
|
|
12
|
+
*
|
|
13
|
+
* Under the default `host: 'shared'`, a failure to bring the host up throws a
|
|
14
|
+
* typed `TransientEmbeddingError` naming the socket — it does NOT fall back to
|
|
15
|
+
* forking a private host. A silent fallback would defeat the entire funnel
|
|
16
|
+
* (each of 535 short-lived CLIs/day would quietly become its own ONNX host) and
|
|
17
|
+
* is exactly the behaviour this design removes. `host: 'private'` is the
|
|
18
|
+
* explicit, typed CI/diagnostics selection (ADR-0013 closed union).
|
|
19
|
+
*
|
|
20
|
+
* ── Circuit breaker ────────────────────────────────────────────────────────────
|
|
21
|
+
*
|
|
22
|
+
* After `ENSURE_FAILURE_THRESHOLD` consecutive failed ensures, the client fails
|
|
23
|
+
* fast with a typed error for `ENSURE_CIRCUIT_COOLDOWN_MS` rather than paying
|
|
24
|
+
* the full `ensureBackend` ready-timeout on every call. The breaker is
|
|
25
|
+
* per-process (a short-lived CLI cannot share it) — it bounds a retrying
|
|
26
|
+
* consumer, not the fleet; that is stated here rather than implied.
|
|
27
|
+
*
|
|
28
|
+
* Leaf module — `@adhd/sox-service-proxy` + node builtins.
|
|
29
|
+
*/
|
|
30
|
+
import { dialBackend, ensureBackend, probeSocketLive } from '@adhd/sox-service-proxy';
|
|
31
|
+
import { TransientEmbeddingError, PermanentEmbeddingError } from './errors.js';
|
|
32
|
+
import { embedHostSingletonKey, embedHostSocketPath, resolveEmbedHostConfig, resolveEmbedHostMainPath, resolveEmbedHostStderrLogPath, } from './embedHostConfig.js';
|
|
33
|
+
/** Consecutive failed ensures before the breaker opens. */
|
|
34
|
+
export const ENSURE_FAILURE_THRESHOLD = 3;
|
|
35
|
+
/** How long the breaker stays open (fail-fast window) once tripped. */
|
|
36
|
+
export const ENSURE_CIRCUIT_COOLDOWN_MS = 10_000;
|
|
37
|
+
/** Bound on bringing the host up (`ensureBackend`'s readyTimeoutMs). */
|
|
38
|
+
export const HOST_READY_TIMEOUT_MS = 10_000;
|
|
39
|
+
/** Per-probe connect timeout. */
|
|
40
|
+
const PROBE_TIMEOUT_MS = 250;
|
|
41
|
+
/** Bound on a control call (reset/health) — never hang the caller. */
|
|
42
|
+
const CONTROL_TIMEOUT_MS = 5_000;
|
|
43
|
+
/**
|
|
44
|
+
* The last-constructed funnel client. `resetSharedFastembedHost()` targets it.
|
|
45
|
+
* Production constructs exactly one (via `getSharedFastembedProcess()`); tests
|
|
46
|
+
* that construct extras simply re-point it, which is why the reset helper is
|
|
47
|
+
* explicitly documented as operating on the current accessor client.
|
|
48
|
+
*/
|
|
49
|
+
let _activeClient = null;
|
|
50
|
+
/** TEST-ONLY: clear the active-client reference. */
|
|
51
|
+
export function __resetActiveFunnelClientForTests() {
|
|
52
|
+
_activeClient = null;
|
|
53
|
+
}
|
|
54
|
+
/** Extract a host/model/error message safely. */
|
|
55
|
+
function msg(err) {
|
|
56
|
+
return err instanceof Error ? err.message : String(err);
|
|
57
|
+
}
|
|
58
|
+
export class FunneledFastembedClient {
|
|
59
|
+
conn = null;
|
|
60
|
+
socketPath = null;
|
|
61
|
+
initContext = null;
|
|
62
|
+
ensurePromise = null;
|
|
63
|
+
_started = false;
|
|
64
|
+
_pending = 0;
|
|
65
|
+
nextId = 1;
|
|
66
|
+
consecutiveEnsureFailures = 0;
|
|
67
|
+
circuitOpenUntil = 0;
|
|
68
|
+
constructor() {
|
|
69
|
+
_activeClient = this;
|
|
70
|
+
}
|
|
71
|
+
/** True once the host has been resolved and the dial connection established. */
|
|
72
|
+
get started() {
|
|
73
|
+
return this._started;
|
|
74
|
+
}
|
|
75
|
+
/** In-flight request count on THIS consumer (not the host's). */
|
|
76
|
+
get pendingCount() {
|
|
77
|
+
return this._pending;
|
|
78
|
+
}
|
|
79
|
+
/** The resolved host socket path, or `null` before the first successful ensure. */
|
|
80
|
+
get hostSocketPath() {
|
|
81
|
+
return this.socketPath;
|
|
82
|
+
}
|
|
83
|
+
async request(payload, timeoutMs, signal) {
|
|
84
|
+
const type = typeof payload['type'] === 'string' ? payload['type'] : '';
|
|
85
|
+
if (type === 'init') {
|
|
86
|
+
// The host's identity is keyed on (model, ep, cacheDir), all carried by
|
|
87
|
+
// the init payload. Record it so `ensureHost()` can compute the key; a
|
|
88
|
+
// non-init first request is a programming error, reported honestly below.
|
|
89
|
+
if (!this.initContext) {
|
|
90
|
+
this.initContext = {
|
|
91
|
+
model: String(payload['model'] ?? ''),
|
|
92
|
+
cacheDir: String(payload['cacheDir'] ?? ''),
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
await this.ensureHost();
|
|
97
|
+
const conn = this.conn;
|
|
98
|
+
if (!conn) {
|
|
99
|
+
// ensureHost() guarantees a connection or throws; this is unreachable but
|
|
100
|
+
// keeps the type honest rather than asserting.
|
|
101
|
+
throw new TransientEmbeddingError(`embedding funnel: no connection to host at ${this.socketPath ?? '(unresolved)'}`);
|
|
102
|
+
}
|
|
103
|
+
const id = `embed-funnel-${this.nextId++}`;
|
|
104
|
+
const request = { jsonrpc: '2.0', id, method: `embedding.${type}`, params: payload };
|
|
105
|
+
this._pending++;
|
|
106
|
+
try {
|
|
107
|
+
const resp = await this.awaitResponse(conn.send(request), id, timeoutMs, signal);
|
|
108
|
+
const error = resp.error;
|
|
109
|
+
if (error)
|
|
110
|
+
throw this.mapError(error);
|
|
111
|
+
return resp.result;
|
|
112
|
+
}
|
|
113
|
+
finally {
|
|
114
|
+
this._pending--;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* NO-OP by design: under `host: 'shared'` the host is shared with every other
|
|
119
|
+
* consumer on the machine — a consumer must never kill it. Its lifetime is
|
|
120
|
+
* governed solely by its own debounced, ref-counted teardown
|
|
121
|
+
* (`embedHostMain.ts`). Kept to satisfy `SharedFastembedClient`.
|
|
122
|
+
*/
|
|
123
|
+
async terminate() {
|
|
124
|
+
// Intentionally empty — see the method doc.
|
|
125
|
+
}
|
|
126
|
+
// ── internals ───────────────────────────────────────────────────────────────
|
|
127
|
+
mapError(error) {
|
|
128
|
+
const where = this.socketPath ?? '(unresolved socket)';
|
|
129
|
+
if (error.code === -32001) {
|
|
130
|
+
return new TransientEmbeddingError(`embedding host unavailable at ${where}: ${error.message}`, 1_000);
|
|
131
|
+
}
|
|
132
|
+
if (error.code === -32601) {
|
|
133
|
+
return new PermanentEmbeddingError(`embedding host does not implement the method: ${error.message}`);
|
|
134
|
+
}
|
|
135
|
+
// Application error from the private ONNX host (e.g. "Model not
|
|
136
|
+
// initialized") — preserve the pre-funnel `new Error(message)` shape so
|
|
137
|
+
// `FastembedProvider.initModel()`'s catch/retry logic is unchanged.
|
|
138
|
+
return new Error(error.message);
|
|
139
|
+
}
|
|
140
|
+
awaitResponse(pending, id, timeoutMs, signal) {
|
|
141
|
+
return new Promise((resolve, reject) => {
|
|
142
|
+
let settled = false;
|
|
143
|
+
let timer = null;
|
|
144
|
+
const onAbort = () => {
|
|
145
|
+
if (settled)
|
|
146
|
+
return;
|
|
147
|
+
settle();
|
|
148
|
+
reject(signal?.reason instanceof Error
|
|
149
|
+
? signal.reason
|
|
150
|
+
: new TransientEmbeddingError(`embedding funnel request ${id} aborted`));
|
|
151
|
+
};
|
|
152
|
+
const settle = () => {
|
|
153
|
+
settled = true;
|
|
154
|
+
if (timer)
|
|
155
|
+
clearTimeout(timer);
|
|
156
|
+
if (signal)
|
|
157
|
+
signal.removeEventListener('abort', onAbort);
|
|
158
|
+
};
|
|
159
|
+
if (timeoutMs !== undefined && timeoutMs > 0) {
|
|
160
|
+
timer = setTimeout(() => {
|
|
161
|
+
if (settled)
|
|
162
|
+
return;
|
|
163
|
+
settle();
|
|
164
|
+
reject(new TransientEmbeddingError(`embedding funnel request timed out after ${timeoutMs}ms`, timeoutMs));
|
|
165
|
+
}, timeoutMs);
|
|
166
|
+
}
|
|
167
|
+
if (signal) {
|
|
168
|
+
if (signal.aborted) {
|
|
169
|
+
onAbort();
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
signal.addEventListener('abort', onAbort, { once: true });
|
|
173
|
+
}
|
|
174
|
+
pending.then((resp) => {
|
|
175
|
+
if (settled)
|
|
176
|
+
return;
|
|
177
|
+
settle();
|
|
178
|
+
resolve(resp);
|
|
179
|
+
}, (err) => {
|
|
180
|
+
if (settled)
|
|
181
|
+
return;
|
|
182
|
+
settle();
|
|
183
|
+
reject(new TransientEmbeddingError(`embedding funnel transport error: ${msg(err)}`, 1_000));
|
|
184
|
+
});
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
/** Idempotent: resolves once a host is live and dialed, or throws typed. */
|
|
188
|
+
ensureHost() {
|
|
189
|
+
if (this._started && this.conn?.isConnected())
|
|
190
|
+
return Promise.resolve();
|
|
191
|
+
if (this.ensurePromise)
|
|
192
|
+
return this.ensurePromise;
|
|
193
|
+
this.ensurePromise = this.doEnsure().finally(() => {
|
|
194
|
+
this.ensurePromise = null;
|
|
195
|
+
});
|
|
196
|
+
return this.ensurePromise;
|
|
197
|
+
}
|
|
198
|
+
async doEnsure() {
|
|
199
|
+
if (Date.now() < this.circuitOpenUntil) {
|
|
200
|
+
throw new TransientEmbeddingError(`embedding funnel circuit open for ${this.circuitOpenUntil - Date.now()}ms more after ` +
|
|
201
|
+
`${this.consecutiveEnsureFailures} consecutive ensure failures`, this.circuitOpenUntil - Date.now());
|
|
202
|
+
}
|
|
203
|
+
const cfg = resolveEmbedHostConfig();
|
|
204
|
+
const ctx = this.initContext;
|
|
205
|
+
if (!ctx) {
|
|
206
|
+
throw new TransientEmbeddingError('embedding funnel requires an {type:"init"} request before any other request ' +
|
|
207
|
+
'(the host is keyed on model + cacheDir, which only init carries)');
|
|
208
|
+
}
|
|
209
|
+
const ep = process.env['SOX_EMBED_EXECUTION_PROVIDER'] ?? 'auto';
|
|
210
|
+
const key = embedHostSingletonKey(ctx.model, ep, ctx.cacheDir);
|
|
211
|
+
const socketPath = embedHostSocketPath(cfg, key);
|
|
212
|
+
if (this.socketPath !== socketPath) {
|
|
213
|
+
// The identity changed (a different model/ep/cacheDir). Drop the old dial
|
|
214
|
+
// and re-point. The old host is NOT killed — it self-reaps.
|
|
215
|
+
this.conn?.close();
|
|
216
|
+
this.conn = null;
|
|
217
|
+
this._started = false;
|
|
218
|
+
this.socketPath = socketPath;
|
|
219
|
+
}
|
|
220
|
+
const live = await probeSocketLive(socketPath, PROBE_TIMEOUT_MS);
|
|
221
|
+
if (!live) {
|
|
222
|
+
const result = await ensureBackend({
|
|
223
|
+
socketPath,
|
|
224
|
+
singletonKey: key,
|
|
225
|
+
command: process.execPath,
|
|
226
|
+
args: [resolveEmbedHostMainPath()],
|
|
227
|
+
env: { ...process.env, SOX_EMBED_HOST_SOCKET: socketPath, SOX_EMBED_HOST_KEY: key },
|
|
228
|
+
stderrLogPath: resolveEmbedHostStderrLogPath(cfg),
|
|
229
|
+
readyTimeoutMs: HOST_READY_TIMEOUT_MS,
|
|
230
|
+
});
|
|
231
|
+
if (result.disposition === 'failed') {
|
|
232
|
+
this.noteEnsureFailure();
|
|
233
|
+
throw new TransientEmbeddingError(`embedding funnel could not bring up a host at ${socketPath}: ${result.detail}`, 1_000);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
this.consecutiveEnsureFailures = 0;
|
|
237
|
+
if (!this.conn) {
|
|
238
|
+
this.conn = dialBackend({
|
|
239
|
+
socketPath,
|
|
240
|
+
onDisconnect: () => {
|
|
241
|
+
// The host may have self-reaped (idle) or crashed. The next request's
|
|
242
|
+
// `send()` re-dials and, on failure, re-ensures. Mark unstarted so
|
|
243
|
+
// `ensureHost()` runs the full probe/spawn path again.
|
|
244
|
+
this._started = false;
|
|
245
|
+
},
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
this._started = true;
|
|
249
|
+
}
|
|
250
|
+
noteEnsureFailure() {
|
|
251
|
+
this.consecutiveEnsureFailures++;
|
|
252
|
+
if (this.consecutiveEnsureFailures >= ENSURE_FAILURE_THRESHOLD) {
|
|
253
|
+
this.circuitOpenUntil = Date.now() + ENSURE_CIRCUIT_COOLDOWN_MS;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Ask the live host to tear down and re-fork its PRIVATE pool, then drop this
|
|
258
|
+
* consumer's connection so the next request re-dials the (still-live) host.
|
|
259
|
+
* No-op when no host has been resolved. Public so the module-level
|
|
260
|
+
* `resetSharedFastembedHost()` can target the accessor client.
|
|
261
|
+
*/
|
|
262
|
+
async resetHost() {
|
|
263
|
+
if (!this.socketPath)
|
|
264
|
+
return;
|
|
265
|
+
try {
|
|
266
|
+
await this.control('embedding.reset');
|
|
267
|
+
}
|
|
268
|
+
catch {
|
|
269
|
+
// Best-effort: an unreachable host has either reaped (fine) or is wedged;
|
|
270
|
+
// dropping the connection lets the next request re-ensure.
|
|
271
|
+
}
|
|
272
|
+
finally {
|
|
273
|
+
this.dropConnection();
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* Send a control method (`embedding.reset` / `embedding.health`) to the live
|
|
278
|
+
* host, bounded. Returns the result, or `null` when no host is resolved.
|
|
279
|
+
*/
|
|
280
|
+
async control(method) {
|
|
281
|
+
if (!this.conn || !this.socketPath)
|
|
282
|
+
return null;
|
|
283
|
+
const id = `embed-funnel-ctl-${this.nextId++}`;
|
|
284
|
+
const resp = await this.awaitResponse(this.conn.send({ jsonrpc: '2.0', id, method }), id, CONTROL_TIMEOUT_MS, undefined);
|
|
285
|
+
const error = resp.error;
|
|
286
|
+
if (error)
|
|
287
|
+
throw this.mapError(error);
|
|
288
|
+
return (resp.result ?? {});
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* Drop this consumer's dial connection. The host stays alive.
|
|
292
|
+
*/
|
|
293
|
+
dropConnection() {
|
|
294
|
+
this.conn?.close();
|
|
295
|
+
this.conn = null;
|
|
296
|
+
this._started = false;
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* Ask the peer-shared host to tear down and re-fork its PRIVATE pool, then drop
|
|
301
|
+
* this consumer's connection so the next request re-dials the (still-live) host.
|
|
302
|
+
*
|
|
303
|
+
* This is memory-core's heal entry point: under `host: 'shared'`,
|
|
304
|
+
* `terminate()` is a no-op (a consumer must never kill a shared host), so a
|
|
305
|
+
* wedged private child is recovered by asking the host to reset its own pool.
|
|
306
|
+
* A no-op when no host has been resolved yet — nothing to reset.
|
|
307
|
+
*/
|
|
308
|
+
export async function resetSharedFastembedHost() {
|
|
309
|
+
await _activeClient?.resetHost();
|
|
310
|
+
}
|
|
311
|
+
//# sourceMappingURL=funnelClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"funnelClient.js","sourceRoot":"","sources":["../src/funnelClient.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -14,6 +14,13 @@ export interface EmbeddingHealth {
|
|
|
14
14
|
dimensions: number | null;
|
|
15
15
|
last_error: string | null;
|
|
16
16
|
execution_provider?: string;
|
|
17
|
+
/**
|
|
18
|
+
* The resolved host-selection posture (SPEC-EMBEDDING-FUNNEL.md): `'shared'`
|
|
19
|
+
* funnels through the peer-spawned host, `'private'` is the pre-funnel
|
|
20
|
+
* per-process fork. Reported so an operator can see the active mode from one
|
|
21
|
+
* call (ADR-0013 D2) — never inferred, never a placeholder.
|
|
22
|
+
*/
|
|
23
|
+
host?: 'shared' | 'private';
|
|
17
24
|
}
|
|
18
25
|
export interface EmbeddingProvider {
|
|
19
26
|
readonly metadata: EmbeddingProviderMetadata;
|
|
@@ -30,17 +37,15 @@ export interface EmbeddingProviderConfig {
|
|
|
30
37
|
type: string;
|
|
31
38
|
model: string;
|
|
32
39
|
options?: Record<string, unknown>;
|
|
40
|
+
/**
|
|
41
|
+
* Host-selection posture (SPEC-EMBEDDING-FUNNEL.md; ADR-0013). Defaults to
|
|
42
|
+
* `'shared'` — funnel through the one peer-spawned, self-reaping host.
|
|
43
|
+
* `'private'` is the explicit pre-funnel per-process fork (CI/diagnostics);
|
|
44
|
+
* it is a closed union, never an env toggle, and is reported in `health()`.
|
|
45
|
+
*/
|
|
46
|
+
host?: 'shared' | 'private';
|
|
33
47
|
}
|
|
34
|
-
export
|
|
35
|
-
readonly retryAfterMs: number | undefined;
|
|
36
|
-
constructor(message: string, retryAfterMs?: number);
|
|
37
|
-
}
|
|
38
|
-
export declare class PermanentEmbeddingError extends Error {
|
|
39
|
-
constructor(message: string);
|
|
40
|
-
}
|
|
41
|
-
export declare class ResolutionError extends Error {
|
|
42
|
-
constructor(message: string);
|
|
43
|
-
}
|
|
48
|
+
export { TransientEmbeddingError, PermanentEmbeddingError, ResolutionError } from './errors.js';
|
|
44
49
|
/**
|
|
45
50
|
* Static registration for a fastembed ONNX model.
|
|
46
51
|
* Each model has a known HF repo, dimension, context window, and description.
|
|
@@ -145,8 +150,18 @@ export { getSharedFastembedProcess, SharedFastembedProcessClient, resetSharedFas
|
|
|
145
150
|
* `resolveFastembedPoolSize` (kept for backward compatibility) used to
|
|
146
151
|
* compute as one value — see their doc comments for why the split exists.
|
|
147
152
|
*/
|
|
148
|
-
export type { SharedFastembedClient } from './sharedFastembedProcess.js';
|
|
149
|
-
export { FastembedProcessPool, AdaptiveFastembedProcessPool, type AdaptiveFastembedPoolOptions, FastembedBusyError, resolveFastembedPoolSize, resolveFastembedPoolPin, resolveFastembedPoolCeiling, resolveFastembedAdmissionLimit, } from './sharedFastembedProcess.js';
|
|
153
|
+
export type { SharedFastembedClient, PrivateFastembedProcess } from './sharedFastembedProcess.js';
|
|
154
|
+
export { getPrivateFastembedProcess, FastembedProcessPool, AdaptiveFastembedProcessPool, type AdaptiveFastembedPoolOptions, FastembedBusyError, resolveFastembedPoolSize, resolveFastembedPoolPin, resolveFastembedPoolCeiling, resolveFastembedAdmissionLimit, } from './sharedFastembedProcess.js';
|
|
155
|
+
/**
|
|
156
|
+
* The host-aware client and its heal entry point. `FunneledFastembedClient` is
|
|
157
|
+
* what `getSharedFastembedProcess()` returns by default (`host: 'shared'`):
|
|
158
|
+
* N processes share ONE peer-spawned, self-reaping ONNX host, and a consumer's
|
|
159
|
+
* `terminate()` is a no-op (it must never kill a shared host).
|
|
160
|
+
* `resetSharedFastembedHost()` is the heal path — it asks the live host to
|
|
161
|
+
* re-fork its private pool (memory-core's `reinitEmbedProvider` routes here).
|
|
162
|
+
*/
|
|
163
|
+
export { FunneledFastembedClient, resetSharedFastembedHost } from './funnelClient.js';
|
|
164
|
+
export { resolveEmbedHostConfig, configureEmbedHostHost, resolveEmbedHostSocketDir, embedHostSingletonKey, embedHostSocketPath, resolveEmbedHostMainPath, resolveEmbedHostIdleGraceMs, EMBED_HOST_PROTOCOL_VERSION, type EmbedHostConfig, type EmbedHostMode, } from './embedHostConfig.js';
|
|
150
165
|
export declare function createEmbeddingProvider(config: EmbeddingProviderConfig): Promise<EmbeddingProvider>;
|
|
151
166
|
/**
|
|
152
167
|
* Single source of truth for the fastembed warmup/init timeout budget.
|