pi-smart-router 0.5.0 → 0.6.0

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.
Files changed (69) hide show
  1. package/README.md +63 -1
  2. package/config/operator-config.json.example +64 -0
  3. package/dist/config/defaults.d.ts.map +1 -1
  4. package/dist/config/defaults.js +3 -0
  5. package/dist/config/defaults.js.map +1 -1
  6. package/dist/domain/matching/embedding-provider.d.ts +19 -4
  7. package/dist/domain/matching/embedding-provider.d.ts.map +1 -1
  8. package/dist/domain/matching/embedding-provider.js +46 -13
  9. package/dist/domain/matching/embedding-provider.js.map +1 -1
  10. package/dist/domain/matching/hydra-matcher.d.ts +38 -2
  11. package/dist/domain/matching/hydra-matcher.d.ts.map +1 -1
  12. package/dist/domain/matching/hydra-matcher.js +89 -6
  13. package/dist/domain/matching/hydra-matcher.js.map +1 -1
  14. package/dist/domain/matching/modernbert-heads.d.ts +74 -0
  15. package/dist/domain/matching/modernbert-heads.d.ts.map +1 -0
  16. package/dist/domain/matching/modernbert-heads.js +198 -0
  17. package/dist/domain/matching/modernbert-heads.js.map +1 -0
  18. package/dist/domain/pinning/flip-flop-guard.d.ts +56 -0
  19. package/dist/domain/pinning/flip-flop-guard.d.ts.map +1 -0
  20. package/dist/domain/pinning/flip-flop-guard.js +118 -0
  21. package/dist/domain/pinning/flip-flop-guard.js.map +1 -0
  22. package/dist/domain/pinning/session-pinner.d.ts +22 -0
  23. package/dist/domain/pinning/session-pinner.d.ts.map +1 -1
  24. package/dist/domain/pinning/session-pinner.js +91 -2
  25. package/dist/domain/pinning/session-pinner.js.map +1 -1
  26. package/dist/domain/pipeline/router-pipeline.d.ts +14 -0
  27. package/dist/domain/pipeline/router-pipeline.d.ts.map +1 -1
  28. package/dist/domain/pipeline/router-pipeline.js +85 -3
  29. package/dist/domain/pipeline/router-pipeline.js.map +1 -1
  30. package/dist/domain/triage/entropy-check.d.ts +77 -0
  31. package/dist/domain/triage/entropy-check.d.ts.map +1 -0
  32. package/dist/domain/triage/entropy-check.js +196 -0
  33. package/dist/domain/triage/entropy-check.js.map +1 -0
  34. package/dist/domain/triage/triage-engine.d.ts +14 -2
  35. package/dist/domain/triage/triage-engine.d.ts.map +1 -1
  36. package/dist/domain/triage/triage-engine.js +33 -5
  37. package/dist/domain/triage/triage-engine.js.map +1 -1
  38. package/dist/domain/types/entities.d.ts +2 -0
  39. package/dist/domain/types/entities.d.ts.map +1 -1
  40. package/dist/domain/types/schemas.d.ts +44 -0
  41. package/dist/domain/types/schemas.d.ts.map +1 -1
  42. package/dist/domain/types/schemas.js +35 -0
  43. package/dist/domain/types/schemas.js.map +1 -1
  44. package/dist/infrastructure/hardware/throughput-meter.d.ts +42 -0
  45. package/dist/infrastructure/hardware/throughput-meter.d.ts.map +1 -0
  46. package/dist/infrastructure/hardware/throughput-meter.js +88 -0
  47. package/dist/infrastructure/hardware/throughput-meter.js.map +1 -0
  48. package/dist/infrastructure/persistence/sqlite-store.d.ts.map +1 -1
  49. package/dist/infrastructure/persistence/sqlite-store.js +2 -1
  50. package/dist/infrastructure/persistence/sqlite-store.js.map +1 -1
  51. package/dist/infrastructure/telemetry/routing-telemetry.d.ts +18 -1
  52. package/dist/infrastructure/telemetry/routing-telemetry.d.ts.map +1 -1
  53. package/dist/infrastructure/telemetry/routing-telemetry.js +83 -1
  54. package/dist/infrastructure/telemetry/routing-telemetry.js.map +1 -1
  55. package/package.json +2 -1
  56. package/src/config/defaults.ts +3 -0
  57. package/src/domain/matching/embedding-provider.ts +66 -17
  58. package/src/domain/matching/hydra-matcher.ts +130 -8
  59. package/src/domain/matching/modernbert-heads.ts +323 -0
  60. package/src/domain/pinning/flip-flop-guard.ts +155 -0
  61. package/src/domain/pinning/session-pinner.ts +154 -2
  62. package/src/domain/pipeline/router-pipeline.ts +110 -2
  63. package/src/domain/triage/entropy-check.ts +251 -0
  64. package/src/domain/triage/triage-engine.ts +41 -5
  65. package/src/domain/types/entities.ts +2 -0
  66. package/src/domain/types/schemas.ts +48 -0
  67. package/src/infrastructure/hardware/throughput-meter.ts +129 -0
  68. package/src/infrastructure/persistence/sqlite-store.ts +2 -0
  69. package/src/infrastructure/telemetry/routing-telemetry.ts +118 -3
package/README.md CHANGED
@@ -538,13 +538,74 @@ Additional operator defaults:
538
538
  | Key | Default | Purpose |
539
539
  |-----|---------|---------|
540
540
  | `loop_escalation.threshold` | 3 | Consecutive identical failures before escalating to frontier |
541
+ | `pin_only_fallback` | `false` | Emergency pin-on-first-turn mode — see [Pin-only emergency fallback](#pin-only-emergency-fallback) |
541
542
  | `local.min_memory_gb_full` | 16 | Minimum RAM for full local inference |
542
543
  | `local.battery_threshold_pct` | 20 | Minimum battery to allow local inference |
543
544
  | `pricing.staleness_days` | 14 | Max age before re-fetching pricing data |
544
545
 
546
+ ### Pin-only emergency fallback
547
+
548
+ **Not the default policy.** Multi-stage routing remains the design target. Enable `pin_only_fallback` only when shadow quality retention regresses or as a manual operator safety valve (GitHub [#83](https://github.com/beettlle/pi-smart-router/issues/83), [routing-roadmap.md](docs/routing-roadmap.md) §1).
549
+
550
+ When `pin_only_fallback` is `true` in `config/operator-config.json`:
551
+
552
+ 1. **First turn** — normal multi-stage routing runs and establishes the session pin.
553
+ 2. **Subsequent turns** — the router reuses the pinned model, skipping `turn_envelope`, triage, HyDRA, and sub-routing (`reason_code: pin_only_fallback`).
554
+
555
+ **Manual trigger:** set `"pin_only_fallback": true` in operator config and restart or reload config. Revert to `false` when shadow metrics recover.
556
+
557
+ **Automated trigger (eval harness):** compare shadow QR from `npm run routing:eval-harness` against a frozen baseline aggregate. When mean quality retention drops more than **5 percentage points** (default threshold), enable pin-only fallback:
558
+
559
+ ```bash
560
+ # Score current fixtures
561
+ npm run routing:eval-harness:smoke > shadow-metrics.json
562
+
563
+ # Compare against a saved baseline (same catalog_id + checkpoint_date)
564
+ node --import tsx -e "
565
+ import { readFileSync } from 'node:fs';
566
+ import { evaluatePinOnlyFallbackFromHarness } from './scripts/eval/quality-retention.ts';
567
+ const shadow = JSON.parse(readFileSync('shadow-metrics.json','utf8')).tracks.capability;
568
+ const baseline = JSON.parse(readFileSync('baseline-metrics.json','utf8')).tracks.capability;
569
+ const result = evaluatePinOnlyFallbackFromHarness(shadow, baseline);
570
+ console.log(JSON.stringify(result, null, 2));
571
+ if (result.pin_only_fallback) process.exit(2);
572
+ "
573
+ ```
574
+
575
+ Exit code `2` signals regression above threshold — operators can wire this into CI or a config reload hook. Override semantics: explicit `pin_only_fallback: true` in config always enables emergency mode; explicit `false` disables the automated recommendation.
576
+
577
+ **Telemetry:** when fallback routes a request, telemetry rows include `pin_only_fallback_active: true` (and `reason_code: pin_only_fallback`). Filter operator audit logs on that field to confirm emergency mode is active.
578
+
545
579
  ### HyDRA model cache
546
580
 
547
- The embedding matcher uses `@huggingface/transformers` with the `Xenova/all-MiniLM-L6-v2` ONNX model (384-dim embeddings). Artifacts are downloaded at runtime and cached under `.pi-smart-router/models/` (configurable via `hydra.artifact_cache_path`). This directory is gitignored.
581
+ The embedding matcher uses `@huggingface/transformers` with ONNX models (384-dim embeddings). Artifacts are downloaded at runtime and cached under `.pi-smart-router/models/` (configurable via `hydra.artifact_cache_path`). This directory is gitignored.
582
+
583
+ | Encoder | Model | Context | Default |
584
+ |---------|-------|---------|---------|
585
+ | `minilm` | `Xenova/all-MiniLM-L6-v2` | 512 tokens | yes |
586
+ | `granite` | `ibm-granite/granite-embedding-97m-multilingual-r2` (ONNX) | long context | trial (#80) |
587
+
588
+ Set the encoder in operator config:
589
+
590
+ ```json
591
+ {
592
+ "hydra": {
593
+ "artifact_cache_path": ".pi-smart-router/models/",
594
+ "encoder": "granite"
595
+ }
596
+ }
597
+ ```
598
+
599
+ MiniLM remains the default fallback when `encoder` is omitted. Both encoders produce 384-dim vectors compatible with the SP-115 learned projection head.
600
+
601
+ **Latency budget:** the HyDRA embedding stage targets ~80–120 ms per turn. Compare MiniLM vs Granite on held-out agent turn samples:
602
+
603
+ ```bash
604
+ npm run benchmark:encoder
605
+ # optional: --fixtures path --cache .pi-smart-router/models/
606
+ ```
607
+
608
+ The script reports p50/p95 latency for each encoder and asserts Granite p50/p95 stay within the 120 ms budget ceiling. Requires `@huggingface/transformers` and a one-time ONNX artifact download.
548
609
 
549
610
  ## Architecture
550
611
 
@@ -684,6 +745,7 @@ Contributors must run `npm run build` before publishing or consuming the library
684
745
  | `npm run routing:eval-replay` | Counterfactual replay on eval trace fixtures |
685
746
  | `npm run routing:eval-harness` | Three-track eval harness (capability, cost, continuity) on fixture traces |
686
747
  | `npm run routing:eval-harness:smoke` | Harness summary JSON only (CI smoke; no network) |
748
+ | `npm run benchmark:encoder` | Compare MiniLM vs Granite encoder latency on held-out agent turns |
687
749
 
688
750
  ### Offline eval harness (agent-native routing)
689
751
 
@@ -0,0 +1,64 @@
1
+ {
2
+ "_documentation": {
3
+ "pin_only_fallback": "EMERGENCY ONLY — default false. When true, the router pins on the first turn and reuses that model for all subsequent turns, skipping turn_envelope, triage, HyDRA, and sub-routing. Use when shadow quality retention regresses (>5% vs baseline) or as a manual operator fallback. See docs/routing-roadmap.md §1 and GitHub #83. Automated trigger wiring is SP-162."
4
+ },
5
+ "frugality": {
6
+ "lambda_cost": 0.5,
7
+ "lambda_latency": 0.1,
8
+ "lambda_verbosity": 0.15
9
+ },
10
+ "loop_escalation": {
11
+ "threshold": 3
12
+ },
13
+ "pricing": {
14
+ "staleness_days": 14
15
+ },
16
+ "local": {
17
+ "min_memory_gb_full": 16,
18
+ "min_memory_gb_classification": 8,
19
+ "battery_threshold_pct": 20
20
+ },
21
+ "hydra": {
22
+ "artifact_cache_path": ".pi-smart-router/models/",
23
+ "encoder": "minilm",
24
+ "hydra_heads": "learned_projection",
25
+ "_hydra_heads_documentation": {
26
+ "learned_projection": "Default — SP-115 384×3 linear projection on MiniLM/Granite embeddings (config/hydra-projection-weights.json). Approximates HyDRA K sigmoid heads; keep until calibration Top-1 error exceeds ~10%.",
27
+ "modernbert_k4": "ModernBERT-base [CLS] with K=4 independent sigmoid heads (config/modernbert-k4-heads.json). Migrating from SP-115: train K=4 head weights offline, set hydra_heads to modernbert_k4, and remove or ignore hydra-projection-weights.json. The fourth debugging dimension is predicted for HyDRA fidelity but excluded from the catalog-decoupled shortfall gate (reasoning, code_gen, tool_use only). See docs/routing-roadmap.md §2 P3 and GitHub #81."
28
+ }
29
+ },
30
+ "low_intensity": {
31
+ "weights": {
32
+ "prompt_shortness": 0.08,
33
+ "token_shortness": 0.08,
34
+ "cyclomatic_low": 0.06,
35
+ "trivial_signal": 0.1,
36
+ "complex_inverse": 0.08,
37
+ "triage_verdict": 0.1,
38
+ "turn_type": 0.08,
39
+ "no_tool_context": 0.06,
40
+ "message_shallow": 0.06,
41
+ "prose_ratio": 0.06,
42
+ "requirement_low": 0.12,
43
+ "cluster_signal": 0.12
44
+ },
45
+ "high_threshold": 0.65,
46
+ "low_threshold": 0.35,
47
+ "p_success_alpha": 0.5
48
+ },
49
+ "saar": {
50
+ "planning_turn_buffer": 2,
51
+ "prefix_cache_weight": 0.2,
52
+ "idle_timeout_seconds": 300,
53
+ "switch_threshold": 0.5
54
+ },
55
+ "planning_delegate": {
56
+ "enabled": true,
57
+ "compressed_context": {
58
+ "max_messages": 12,
59
+ "max_tokens": 16384,
60
+ "exclude_execution_history": true
61
+ }
62
+ },
63
+ "pin_only_fallback": false
64
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAKL,KAAK,cAAc,EACpB,MAAM,4BAA4B,CAAC;AAGpC,OAAO,EAAE,gCAAgC,EAAE,mBAAmB,EAAE,oCAAoC,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAEnK,wFAAwF;AACxF,wBAAgB,4BAA4B,CAC1C,IAAI,GAAE,cAAwC,GAC7C,cAAc,CAMhB;AAED,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,cAAc,CA4BnD,CAAC"}
1
+ {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAKL,KAAK,cAAc,EACpB,MAAM,4BAA4B,CAAC;AAGpC,OAAO,EAAE,gCAAgC,EAAE,mBAAmB,EAAE,oCAAoC,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAEnK,wFAAwF;AACxF,wBAAgB,4BAA4B,CAC1C,IAAI,GAAE,cAAwC,GAC7C,cAAc,CAMhB;AAED,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,cAAc,CA+BnD,CAAC"}
@@ -32,6 +32,8 @@ export const DEFAULT_OPERATOR_CONFIG = {
32
32
  },
33
33
  hydra: {
34
34
  artifact_cache_path: '.pi-smart-router/models/',
35
+ encoder: 'minilm',
36
+ hydra_heads: 'learned_projection',
35
37
  },
36
38
  low_intensity: {
37
39
  weights: DEFAULT_LOW_INTENSITY_WEIGHTS,
@@ -41,5 +43,6 @@ export const DEFAULT_OPERATOR_CONFIG = {
41
43
  },
42
44
  saar: DEFAULT_SAAR_CONFIG,
43
45
  planning_delegate: DEFAULT_PLANNING_DELEGATE_CONFIG,
46
+ pin_only_fallback: false,
44
47
  };
45
48
  //# sourceMappingURL=defaults.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,gCAAgC,EAChC,mBAAmB,EACnB,oCAAoC,EACpC,wBAAwB,GAEzB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,6BAA6B,EAAE,MAAM,oCAAoC,CAAC;AAEnF,OAAO,EAAE,gCAAgC,EAAE,mBAAmB,EAAE,oCAAoC,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAEnK,wFAAwF;AACxF,MAAM,UAAU,4BAA4B,CAC1C,OAAuB,uBAAuB;IAE9C,OAAO;QACL,GAAG,IAAI;QACP,IAAI,EAAE,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC;QACzC,iBAAiB,EAAE,oCAAoC,CAAC,IAAI,CAAC,iBAAiB,CAAC;KAChF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,uBAAuB,GAA6B;IAC/D,SAAS,EAAE;QACT,WAAW,EAAE,GAAG;QAChB,cAAc,EAAE,GAAG;QACnB,gBAAgB,EAAE,IAAI;KACvB;IACD,eAAe,EAAE;QACf,SAAS,EAAE,CAAC;KACb;IACD,OAAO,EAAE;QACP,cAAc,EAAE,EAAE;KACnB;IACD,KAAK,EAAE;QACL,kBAAkB,EAAE,EAAE;QACtB,4BAA4B,EAAE,CAAC;QAC/B,qBAAqB,EAAE,EAAE;KAC1B;IACD,KAAK,EAAE;QACL,mBAAmB,EAAE,0BAA0B;KAChD;IACD,aAAa,EAAE;QACb,OAAO,EAAE,6BAA6B;QACtC,cAAc,EAAE,IAAI;QACpB,aAAa,EAAE,IAAI;QACnB,eAAe,EAAE,GAAG;KACrB;IACD,IAAI,EAAE,mBAAmB;IACzB,iBAAiB,EAAE,gCAAgC;CAC3C,CAAC"}
1
+ {"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,gCAAgC,EAChC,mBAAmB,EACnB,oCAAoC,EACpC,wBAAwB,GAEzB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,6BAA6B,EAAE,MAAM,oCAAoC,CAAC;AAEnF,OAAO,EAAE,gCAAgC,EAAE,mBAAmB,EAAE,oCAAoC,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAEnK,wFAAwF;AACxF,MAAM,UAAU,4BAA4B,CAC1C,OAAuB,uBAAuB;IAE9C,OAAO;QACL,GAAG,IAAI;QACP,IAAI,EAAE,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC;QACzC,iBAAiB,EAAE,oCAAoC,CAAC,IAAI,CAAC,iBAAiB,CAAC;KAChF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,uBAAuB,GAA6B;IAC/D,SAAS,EAAE;QACT,WAAW,EAAE,GAAG;QAChB,cAAc,EAAE,GAAG;QACnB,gBAAgB,EAAE,IAAI;KACvB;IACD,eAAe,EAAE;QACf,SAAS,EAAE,CAAC;KACb;IACD,OAAO,EAAE;QACP,cAAc,EAAE,EAAE;KACnB;IACD,KAAK,EAAE;QACL,kBAAkB,EAAE,EAAE;QACtB,4BAA4B,EAAE,CAAC;QAC/B,qBAAqB,EAAE,EAAE;KAC1B;IACD,KAAK,EAAE;QACL,mBAAmB,EAAE,0BAA0B;QAC/C,OAAO,EAAE,QAAQ;QACjB,WAAW,EAAE,oBAAoB;KAClC;IACD,aAAa,EAAE;QACb,OAAO,EAAE,6BAA6B;QACtC,cAAc,EAAE,IAAI;QACpB,aAAa,EAAE,IAAI;QACnB,eAAe,EAAE,GAAG;KACrB;IACD,IAAI,EAAE,mBAAmB;IACzB,iBAAiB,EAAE,gCAAgC;IACnD,iBAAiB,EAAE,KAAK;CAChB,CAAC"}
@@ -1,11 +1,19 @@
1
1
  /**
2
- * Shared MiniLM ONNX text embedder — SP-100.
2
+ * Shared ONNX text embedders — SP-100 (MiniLM), SP-156 (Granite trial).
3
3
  *
4
- * Embeds prompt text via Xenova/all-MiniLM-L6-v2 (384-dim) for HyDRA requirement
5
- * projection and semantic cluster matching. One ONNX session per instance; share
6
- * across matchers via a single factory call and coordinated dispose().
4
+ * Embeds prompt text for HyDRA requirement projection and semantic cluster
5
+ * matching. One ONNX session per instance; share across matchers via a single
6
+ * factory call and coordinated dispose().
7
7
  */
8
+ import type { Encoder } from '../types/schemas.js';
8
9
  export declare const EMBEDDING_DIM = 384;
10
+ /** MiniLM ONNX model (384-dim, 512-token context). */
11
+ export declare const MINILM_ONNX_MODEL = "Xenova/all-MiniLM-L6-v2";
12
+ /**
13
+ * Granite 97M ONNX artifact for @huggingface/transformers.
14
+ * Source weights: ibm-granite/granite-embedding-97m-multilingual-r2 (384-dim).
15
+ */
16
+ export declare const GRANITE_ONNX_MODEL = "onnx-community/granite-embedding-97m-multilingual-r2-ONNX";
9
17
  export interface TextEmbedder {
10
18
  embed(text: string): Promise<Float32Array>;
11
19
  dispose(): Promise<void>;
@@ -18,4 +26,11 @@ export interface TextEmbedder {
18
26
  * Install: `npm i @huggingface/transformers`
19
27
  */
20
28
  export declare function createOnnxTextEmbedder(artifactCachePath: string): Promise<TextEmbedder>;
29
+ /**
30
+ * Granite 97M long-context embedder (384-dim ONNX drop-in for SP-115 head).
31
+ * Model: ibm-granite/granite-embedding-97m-multilingual-r2 via ONNX runtime.
32
+ */
33
+ export declare function createGraniteOnnxTextEmbedder(artifactCachePath: string): Promise<TextEmbedder>;
34
+ /** Select ONNX text embedder by operator encoder flag. */
35
+ export declare function createTextEmbedder(encoder: Encoder | undefined, artifactCachePath: string): Promise<TextEmbedder>;
21
36
  //# sourceMappingURL=embedding-provider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"embedding-provider.d.ts","sourceRoot":"","sources":["../../../src/domain/matching/embedding-provider.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,eAAO,MAAM,aAAa,MAAM,CAAC;AAEjC,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAC3C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAqBD;;;;;;GAMG;AACH,wBAAsB,sBAAsB,CAC1C,iBAAiB,EAAE,MAAM,GACxB,OAAO,CAAC,YAAY,CAAC,CAmCvB"}
1
+ {"version":3,"file":"embedding-provider.d.ts","sourceRoot":"","sources":["../../../src/domain/matching/embedding-provider.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAGnD,eAAO,MAAM,aAAa,MAAM,CAAC;AAEjC,sDAAsD;AACtD,eAAO,MAAM,iBAAiB,4BAA4B,CAAC;AAE3D;;;GAGG;AACH,eAAO,MAAM,kBAAkB,8DAC8B,CAAC;AAE9D,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAC3C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AA+DD;;;;;;GAMG;AACH,wBAAsB,sBAAsB,CAC1C,iBAAiB,EAAE,MAAM,GACxB,OAAO,CAAC,YAAY,CAAC,CAEvB;AAED;;;GAGG;AACH,wBAAsB,6BAA6B,CACjD,iBAAiB,EAAE,MAAM,GACxB,OAAO,CAAC,YAAY,CAAC,CAEvB;AAED,0DAA0D;AAC1D,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,OAAO,YAAkB,EAClC,iBAAiB,EAAE,MAAM,GACxB,OAAO,CAAC,YAAY,CAAC,CAWvB"}
@@ -1,28 +1,31 @@
1
1
  /**
2
- * Shared MiniLM ONNX text embedder — SP-100.
2
+ * Shared ONNX text embedders — SP-100 (MiniLM), SP-156 (Granite trial).
3
3
  *
4
- * Embeds prompt text via Xenova/all-MiniLM-L6-v2 (384-dim) for HyDRA requirement
5
- * projection and semantic cluster matching. One ONNX session per instance; share
6
- * across matchers via a single factory call and coordinated dispose().
4
+ * Embeds prompt text for HyDRA requirement projection and semantic cluster
5
+ * matching. One ONNX session per instance; share across matchers via a single
6
+ * factory call and coordinated dispose().
7
7
  */
8
+ import { DEFAULT_ENCODER } from '../types/schemas.js';
8
9
  export const EMBEDDING_DIM = 384;
10
+ /** MiniLM ONNX model (384-dim, 512-token context). */
11
+ export const MINILM_ONNX_MODEL = 'Xenova/all-MiniLM-L6-v2';
9
12
  /**
10
- * Creates a TextEmbedder backed by @huggingface/transformers ONNX runtime.
11
- * Model: Xenova/all-MiniLM-L6-v2 (384-dim).
12
- *
13
- * The package is loaded dynamically — not required at compile time.
14
- * Install: `npm i @huggingface/transformers`
13
+ * Granite 97M ONNX artifact for @huggingface/transformers.
14
+ * Source weights: ibm-granite/granite-embedding-97m-multilingual-r2 (384-dim).
15
15
  */
16
- export async function createOnnxTextEmbedder(artifactCachePath) {
16
+ export const GRANITE_ONNX_MODEL = 'onnx-community/granite-embedding-97m-multilingual-r2-ONNX';
17
+ async function loadTransformersModule() {
17
18
  const moduleName = '@huggingface/transformers';
18
- let mod;
19
19
  try {
20
- mod = (await import(moduleName));
20
+ return (await import(moduleName));
21
21
  }
22
22
  catch {
23
23
  throw new Error(`ONNX embedding requires ${moduleName}. Install: npm i ${moduleName}`);
24
24
  }
25
- const extractor = await mod.pipeline('feature-extraction', 'Xenova/all-MiniLM-L6-v2', { cache_dir: artifactCachePath });
25
+ }
26
+ async function createOnnxFeatureEmbedder(modelId, artifactCachePath) {
27
+ const mod = await loadTransformersModule();
28
+ const extractor = await mod.pipeline('feature-extraction', modelId, { cache_dir: artifactCachePath });
26
29
  return {
27
30
  async embed(text) {
28
31
  const output = await extractor(text, {
@@ -39,4 +42,34 @@ export async function createOnnxTextEmbedder(artifactCachePath) {
39
42
  },
40
43
  };
41
44
  }
45
+ /**
46
+ * Creates a TextEmbedder backed by @huggingface/transformers ONNX runtime.
47
+ * Model: Xenova/all-MiniLM-L6-v2 (384-dim).
48
+ *
49
+ * The package is loaded dynamically — not required at compile time.
50
+ * Install: `npm i @huggingface/transformers`
51
+ */
52
+ export async function createOnnxTextEmbedder(artifactCachePath) {
53
+ return createOnnxFeatureEmbedder(MINILM_ONNX_MODEL, artifactCachePath);
54
+ }
55
+ /**
56
+ * Granite 97M long-context embedder (384-dim ONNX drop-in for SP-115 head).
57
+ * Model: ibm-granite/granite-embedding-97m-multilingual-r2 via ONNX runtime.
58
+ */
59
+ export async function createGraniteOnnxTextEmbedder(artifactCachePath) {
60
+ return createOnnxFeatureEmbedder(GRANITE_ONNX_MODEL, artifactCachePath);
61
+ }
62
+ /** Select ONNX text embedder by operator encoder flag. */
63
+ export async function createTextEmbedder(encoder = DEFAULT_ENCODER, artifactCachePath) {
64
+ switch (encoder) {
65
+ case 'granite':
66
+ return createGraniteOnnxTextEmbedder(artifactCachePath);
67
+ case 'minilm':
68
+ return createOnnxTextEmbedder(artifactCachePath);
69
+ default: {
70
+ const _exhaustive = encoder;
71
+ throw new Error(`Unsupported encoder: ${String(_exhaustive)}`);
72
+ }
73
+ }
74
+ }
42
75
  //# sourceMappingURL=embedding-provider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"embedding-provider.js","sourceRoot":"","sources":["../../../src/domain/matching/embedding-provider.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,CAAC;AA0BjC;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,iBAAyB;IAEzB,MAAM,UAAU,GAAG,2BAA2B,CAAC;IAC/C,IAAI,GAAuB,CAAC;IAC5B,IAAI,CAAC;QACH,GAAG,GAAG,CAAC,MAAM,MAAM,CAAC,UAAU,CAAC,CAAuB,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CACb,2BAA2B,UAAU,oBAAoB,UAAU,EAAE,CACtE,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAoB,MAAM,GAAG,CAAC,QAAQ,CACnD,oBAAoB,EACpB,yBAAyB,EACzB,EAAE,SAAS,EAAE,iBAAiB,EAAE,CACjC,CAAC;IAEF,OAAO;QACL,KAAK,CAAC,KAAK,CAAC,IAAY;YACtB,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,IAAI,EAAE;gBACnC,OAAO,EAAE,MAAM;gBACf,SAAS,EAAE,IAAI;aAChB,CAAC,CAAC;YACH,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,aAAa,EAAE,CAAC;gBACzC,MAAM,IAAI,KAAK,CACb,sCAAsC,aAAa,SAAS,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CACjF,CAAC;YACJ,CAAC;YACD,OAAO,MAAM,CAAC,IAAI,CAAC;QACrB,CAAC;QAED,KAAK,CAAC,OAAO;YACX,kEAAkE;QACpE,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"embedding-provider.js","sourceRoot":"","sources":["../../../src/domain/matching/embedding-provider.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,CAAC;AAEjC,sDAAsD;AACtD,MAAM,CAAC,MAAM,iBAAiB,GAAG,yBAAyB,CAAC;AAE3D;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAC7B,2DAA2D,CAAC;AA0B9D,KAAK,UAAU,sBAAsB;IACnC,MAAM,UAAU,GAAG,2BAA2B,CAAC;IAC/C,IAAI,CAAC;QACH,OAAO,CAAC,MAAM,MAAM,CAAC,UAAU,CAAC,CAAuB,CAAC;IAC1D,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CACb,2BAA2B,UAAU,oBAAoB,UAAU,EAAE,CACtE,CAAC;IACJ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,yBAAyB,CACtC,OAAe,EACf,iBAAyB;IAEzB,MAAM,GAAG,GAAG,MAAM,sBAAsB,EAAE,CAAC;IAC3C,MAAM,SAAS,GAAoB,MAAM,GAAG,CAAC,QAAQ,CACnD,oBAAoB,EACpB,OAAO,EACP,EAAE,SAAS,EAAE,iBAAiB,EAAE,CACjC,CAAC;IAEF,OAAO;QACL,KAAK,CAAC,KAAK,CAAC,IAAY;YACtB,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,IAAI,EAAE;gBACnC,OAAO,EAAE,MAAM;gBACf,SAAS,EAAE,IAAI;aAChB,CAAC,CAAC;YACH,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,aAAa,EAAE,CAAC;gBACzC,MAAM,IAAI,KAAK,CACb,sCAAsC,aAAa,SAAS,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CACjF,CAAC;YACJ,CAAC;YACD,OAAO,MAAM,CAAC,IAAI,CAAC;QACrB,CAAC;QAED,KAAK,CAAC,OAAO;YACX,kEAAkE;QACpE,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,iBAAyB;IAEzB,OAAO,yBAAyB,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,CAAC;AACzE,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,iBAAyB;IAEzB,OAAO,yBAAyB,CAAC,kBAAkB,EAAE,iBAAiB,CAAC,CAAC;AAC1E,CAAC;AAED,0DAA0D;AAC1D,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,UAAmB,eAAe,EAClC,iBAAyB;IAEzB,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,SAAS;YACZ,OAAO,6BAA6B,CAAC,iBAAiB,CAAC,CAAC;QAC1D,KAAK,QAAQ;YACX,OAAO,sBAAsB,CAAC,iBAAiB,CAAC,CAAC;QACnD,OAAO,CAAC,CAAC,CAAC;YACR,MAAM,WAAW,GAAU,OAAO,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,wBAAwB,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -12,6 +12,8 @@
12
12
  */
13
13
  import { z } from 'zod';
14
14
  import { EMBEDDING_DIM, type TextEmbedder } from './embedding-provider.js';
15
+ import { type K4CapabilityVector, type ModernBertHeadsPredictor } from './modernbert-heads.js';
16
+ import type { Encoder, HydraConfig, HydraHeads } from '../types/schemas.js';
15
17
  import { type FrugalityWeights } from '../scoring/multi-objective.js';
16
18
  import type { CandidateScore, ModelProfile, RoutingRequest } from '../types/index.js';
17
19
  export interface RequirementVector {
@@ -32,9 +34,12 @@ export interface MatchResult {
32
34
  }
33
35
  export interface HydraMatcherConfig {
34
36
  readonly artifactCachePath: string;
37
+ readonly encoder?: Encoder;
38
+ readonly hydraHeads?: HydraHeads;
35
39
  readonly budgetMs?: number;
36
40
  readonly frugality?: FrugalityWeights;
37
41
  readonly projectionWeightsPath?: string;
42
+ readonly k4HeadWeightsPath?: string;
38
43
  }
39
44
  export declare const DEFAULT_HYDRA_PROJECTION_WEIGHTS_PATH: string;
40
45
  export declare const HYDRA_PROJECTION_OUTPUT_DIM = 3;
@@ -74,30 +79,61 @@ export declare function resolveHydraProjectionWeights(options?: LoadHydraProject
74
79
  * provided; otherwise falls back to deterministic mean-pooled-thirds placeholder.
75
80
  */
76
81
  export declare function projectToRequirements(embedding: Float32Array, weights?: HydraProjectionWeights | null): RequirementVector;
82
+ /**
83
+ * Map ModernBERT K=4 head output to the 3-dim requirement vector used by the
84
+ * catalog-decoupled shortfall gate. The debugging dimension is predicted for
85
+ * HyDRA fidelity but excluded from shortfall matching (SP-159, routing-roadmap §2 P3).
86
+ */
87
+ export declare function k4CapabilityVectorToRequirements(vector: K4CapabilityVector): RequirementVector;
77
88
  /**
78
89
  * Adapts a shared TextEmbedder for HyDRA requirement extraction.
79
90
  * dispose() delegates to the underlying embedder for shared lifecycle.
80
91
  */
81
92
  export declare function wrapHydraEmbeddingProvider(embedder: TextEmbedder, projectionWeights?: HydraProjectionWeights | null): EmbeddingProvider;
93
+ /**
94
+ * Adapts a ModernBERT K=4 heads predictor for HyDRA requirement extraction.
95
+ * Debugging dimension is dropped before shortfall gate evaluation.
96
+ */
97
+ export declare function wrapModernBertHeadsEmbeddingProvider(predictor: ModernBertHeadsPredictor): EmbeddingProvider;
82
98
  export declare class HydraMatcher {
83
99
  private readonly provider;
84
100
  private readonly budgetMs;
85
101
  private readonly frugality;
102
+ private readonly hydraHeads;
86
103
  private readonly projectionWeights;
87
104
  constructor(provider: EmbeddingProvider, config: HydraMatcherConfig);
88
- /** Whether learned projection weights were loaded at init. */
105
+ /** Active requirement head mode from operator hydra config. */
106
+ hydraHeadsMode(): HydraHeads;
107
+ /** Whether ModernBERT K=4 heads mode is active. */
108
+ usesModernBertK4(): boolean;
109
+ /** Whether learned SP-115 projection weights were loaded at init. */
89
110
  usesLearnedProjection(): boolean;
90
111
  match(request: RoutingRequest, fleet: readonly ModelProfile[]): Promise<MatchResult>;
91
112
  dispose(): Promise<void>;
92
113
  private validateRequirements;
93
114
  }
94
115
  export interface CreateOnnxEmbeddingProviderOptions {
116
+ readonly encoder?: Encoder;
95
117
  readonly projectionWeightsPath?: string;
96
118
  }
119
+ export interface CreateHydraEmbeddingProviderOptions extends CreateOnnxEmbeddingProviderOptions {
120
+ readonly hydraHeads?: HydraHeads;
121
+ readonly k4HeadWeightsPath?: string;
122
+ }
97
123
  /**
98
124
  * Creates an EmbeddingProvider backed by the shared ONNX text embedder.
99
- * For multi-matcher setups, create one TextEmbedder via createOnnxTextEmbedder
125
+ * For multi-matcher setups, create one TextEmbedder via createTextEmbedder
100
126
  * and pass wrapHydraEmbeddingProvider(embedder) to HyDRA while sharing embed().
101
127
  */
102
128
  export declare function createOnnxEmbeddingProvider(artifactCachePath: string, options?: CreateOnnxEmbeddingProviderOptions): Promise<EmbeddingProvider>;
129
+ /**
130
+ * Creates an EmbeddingProvider for the configured hydra_heads mode:
131
+ * - `learned_projection` — MiniLM/Granite embedder + SP-115 linear projection (or placeholder)
132
+ * - `modernbert_k4` — ModernBERT-base [CLS] with K=4 sigmoid heads (debugging excluded from shortfall)
133
+ */
134
+ export declare function createHydraEmbeddingProvider(artifactCachePath: string, options?: CreateHydraEmbeddingProviderOptions): Promise<EmbeddingProvider>;
135
+ /**
136
+ * Bootstrap HyDRA matcher from operator hydra config (encoder, heads, artifact path).
137
+ */
138
+ export declare function createHydraMatcherFromHydraConfig(hydraConfig: Pick<HydraConfig, 'artifact_cache_path'> & Partial<Pick<HydraConfig, 'encoder' | 'hydra_heads'>>, options?: Omit<HydraMatcherConfig, 'artifactCachePath' | 'encoder' | 'hydraHeads'>): Promise<HydraMatcher>;
103
139
  //# sourceMappingURL=hydra-matcher.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"hydra-matcher.d.ts","sourceRoot":"","sources":["../../../src/domain/matching/hydra-matcher.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hydra-matcher.d.ts","sourceRoot":"","sources":["../../../src/domain/matching/hydra-matcher.ts"],"names":[],"mappings":"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"}
@@ -15,7 +15,9 @@ import { resolve } from 'node:path';
15
15
  import { z } from 'zod';
16
16
  import { DEFAULT_OPERATOR_CONFIG } from '../../config/defaults.js';
17
17
  import { buildHydraInput } from './hydra-input.js';
18
- import { createOnnxTextEmbedder, EMBEDDING_DIM, } from './embedding-provider.js';
18
+ import { createTextEmbedder, EMBEDDING_DIM, } from './embedding-provider.js';
19
+ import { createModernBertHeadsPredictor, } from './modernbert-heads.js';
20
+ import { DEFAULT_ENCODER, DEFAULT_HYDRA_HEADS } from '../types/schemas.js';
19
21
  import { scoreMultiObjective, } from '../scoring/multi-objective.js';
20
22
  const DEFAULT_BUDGET_MS = 100;
21
23
  const MIN_BUDGET_MS = 80;
@@ -165,6 +167,19 @@ export function projectToRequirements(embedding, weights) {
165
167
  }
166
168
  return projectToRequirementsPlaceholder(embedding);
167
169
  }
170
+ // ─── K=4 → requirement vector (catalog shortfall uses 3 dims only) ───────────
171
+ /**
172
+ * Map ModernBERT K=4 head output to the 3-dim requirement vector used by the
173
+ * catalog-decoupled shortfall gate. The debugging dimension is predicted for
174
+ * HyDRA fidelity but excluded from shortfall matching (SP-159, routing-roadmap §2 P3).
175
+ */
176
+ export function k4CapabilityVectorToRequirements(vector) {
177
+ return {
178
+ reasoning: vector.reasoning,
179
+ code_gen: vector.code_gen,
180
+ tool_use: vector.tool_use,
181
+ };
182
+ }
168
183
  // ─── HyDRA embedding adapter ─────────────────────────────────────────────────
169
184
  /**
170
185
  * Adapts a shared TextEmbedder for HyDRA requirement extraction.
@@ -181,11 +196,27 @@ export function wrapHydraEmbeddingProvider(embedder, projectionWeights) {
181
196
  },
182
197
  };
183
198
  }
199
+ /**
200
+ * Adapts a ModernBERT K=4 heads predictor for HyDRA requirement extraction.
201
+ * Debugging dimension is dropped before shortfall gate evaluation.
202
+ */
203
+ export function wrapModernBertHeadsEmbeddingProvider(predictor) {
204
+ return {
205
+ async extractRequirements(text) {
206
+ const k4 = await predictor.predictCapabilities(text);
207
+ return k4CapabilityVectorToRequirements(k4);
208
+ },
209
+ async dispose() {
210
+ await predictor.dispose();
211
+ },
212
+ };
213
+ }
184
214
  // ─── HydraMatcher ────────────────────────────────────────────────────────────
185
215
  export class HydraMatcher {
186
216
  provider;
187
217
  budgetMs;
188
218
  frugality;
219
+ hydraHeads;
189
220
  projectionWeights;
190
221
  constructor(provider, config) {
191
222
  const budget = config.budgetMs ?? DEFAULT_BUDGET_MS;
@@ -195,11 +226,23 @@ export class HydraMatcher {
195
226
  this.provider = provider;
196
227
  this.budgetMs = budget;
197
228
  this.frugality = config.frugality ?? DEFAULT_OPERATOR_CONFIG.frugality;
198
- this.projectionWeights = resolveHydraProjectionWeights(config.projectionWeightsPath ? { filePath: config.projectionWeightsPath } : undefined);
229
+ this.hydraHeads = config.hydraHeads ?? DEFAULT_HYDRA_HEADS;
230
+ this.projectionWeights =
231
+ this.hydraHeads === 'learned_projection'
232
+ ? resolveHydraProjectionWeights(config.projectionWeightsPath ? { filePath: config.projectionWeightsPath } : undefined)
233
+ : null;
234
+ }
235
+ /** Active requirement head mode from operator hydra config. */
236
+ hydraHeadsMode() {
237
+ return this.hydraHeads;
199
238
  }
200
- /** Whether learned projection weights were loaded at init. */
239
+ /** Whether ModernBERT K=4 heads mode is active. */
240
+ usesModernBertK4() {
241
+ return this.hydraHeads === 'modernbert_k4';
242
+ }
243
+ /** Whether learned SP-115 projection weights were loaded at init. */
201
244
  usesLearnedProjection() {
202
- return this.projectionWeights !== null;
245
+ return this.hydraHeads === 'learned_projection' && this.projectionWeights !== null;
203
246
  }
204
247
  async match(request, fleet) {
205
248
  const start = performance.now();
@@ -264,12 +307,52 @@ export class HydraMatcher {
264
307
  }
265
308
  /**
266
309
  * Creates an EmbeddingProvider backed by the shared ONNX text embedder.
267
- * For multi-matcher setups, create one TextEmbedder via createOnnxTextEmbedder
310
+ * For multi-matcher setups, create one TextEmbedder via createTextEmbedder
268
311
  * and pass wrapHydraEmbeddingProvider(embedder) to HyDRA while sharing embed().
269
312
  */
270
313
  export async function createOnnxEmbeddingProvider(artifactCachePath, options) {
271
- const embedder = await createOnnxTextEmbedder(artifactCachePath);
314
+ const encoder = options?.encoder ?? DEFAULT_ENCODER;
315
+ const embedder = await createTextEmbedder(encoder, artifactCachePath);
272
316
  const projectionWeights = resolveHydraProjectionWeights(options?.projectionWeightsPath ? { filePath: options.projectionWeightsPath } : undefined);
273
317
  return wrapHydraEmbeddingProvider(embedder, projectionWeights);
274
318
  }
319
+ /**
320
+ * Creates an EmbeddingProvider for the configured hydra_heads mode:
321
+ * - `learned_projection` — MiniLM/Granite embedder + SP-115 linear projection (or placeholder)
322
+ * - `modernbert_k4` — ModernBERT-base [CLS] with K=4 sigmoid heads (debugging excluded from shortfall)
323
+ */
324
+ export async function createHydraEmbeddingProvider(artifactCachePath, options) {
325
+ const hydraHeads = options?.hydraHeads ?? DEFAULT_HYDRA_HEADS;
326
+ if (hydraHeads === 'modernbert_k4') {
327
+ const predictorOptions = options?.k4HeadWeightsPath === undefined
328
+ ? undefined
329
+ : { headWeightsPath: options.k4HeadWeightsPath };
330
+ const predictor = await createModernBertHeadsPredictor(artifactCachePath, predictorOptions);
331
+ return wrapModernBertHeadsEmbeddingProvider(predictor);
332
+ }
333
+ return createOnnxEmbeddingProvider(artifactCachePath, options);
334
+ }
335
+ /**
336
+ * Bootstrap HyDRA matcher from operator hydra config (encoder, heads, artifact path).
337
+ */
338
+ export async function createHydraMatcherFromHydraConfig(hydraConfig, options) {
339
+ const encoder = hydraConfig.encoder ?? DEFAULT_ENCODER;
340
+ const hydraHeads = hydraConfig.hydra_heads ?? DEFAULT_HYDRA_HEADS;
341
+ const provider = await createHydraEmbeddingProvider(hydraConfig.artifact_cache_path, {
342
+ encoder,
343
+ hydraHeads,
344
+ ...(options?.projectionWeightsPath === undefined
345
+ ? {}
346
+ : { projectionWeightsPath: options.projectionWeightsPath }),
347
+ ...(options?.k4HeadWeightsPath === undefined
348
+ ? {}
349
+ : { k4HeadWeightsPath: options.k4HeadWeightsPath }),
350
+ });
351
+ return new HydraMatcher(provider, {
352
+ artifactCachePath: hydraConfig.artifact_cache_path,
353
+ encoder,
354
+ hydraHeads,
355
+ ...options,
356
+ });
357
+ }
275
358
  //# sourceMappingURL=hydra-matcher.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"hydra-matcher.js","sourceRoot":"","sources":["../../../src/domain/matching/hydra-matcher.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hydra-matcher.js","sourceRoot":"","sources":["../../../src/domain/matching/hydra-matcher.ts"],"names":[],"mappings":"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"}