@ruvector/ruvllm 4.0.0 → 4.1.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 (171) hide show
  1. package/README.md +449 -158
  2. package/bin/cli.js +1066 -0
  3. package/bin/gpu-delegate.js +67 -0
  4. package/bin/ruvllm-adapters.js +5 -0
  5. package/bin/ruvllm-gpu-loop.js +5 -0
  6. package/bin/serve.js +265 -0
  7. package/dist/cjs/benchmarks/embedding-benchmark.d.ts +102 -0
  8. package/dist/cjs/benchmarks/embedding-benchmark.d.ts.map +1 -0
  9. package/dist/cjs/benchmarks/embedding-benchmark.js +436 -0
  10. package/dist/cjs/benchmarks/index.d.ts +34 -0
  11. package/dist/cjs/benchmarks/index.d.ts.map +1 -0
  12. package/dist/cjs/benchmarks/index.js +132 -0
  13. package/dist/cjs/benchmarks/model-comparison.d.ts +71 -0
  14. package/dist/cjs/benchmarks/model-comparison.d.ts.map +1 -0
  15. package/dist/cjs/benchmarks/model-comparison.js +476 -0
  16. package/dist/cjs/benchmarks/routing-benchmark.d.ts +70 -0
  17. package/dist/cjs/benchmarks/routing-benchmark.d.ts.map +1 -0
  18. package/dist/cjs/benchmarks/routing-benchmark.js +289 -0
  19. package/dist/cjs/contrastive.d.ts +229 -0
  20. package/dist/cjs/contrastive.d.ts.map +1 -0
  21. package/dist/cjs/contrastive.js +589 -0
  22. package/dist/cjs/engine.d.ts +160 -0
  23. package/dist/cjs/engine.d.ts.map +1 -0
  24. package/dist/cjs/engine.js +552 -0
  25. package/dist/cjs/export.d.ts +182 -0
  26. package/dist/cjs/export.d.ts.map +1 -0
  27. package/dist/cjs/export.js +422 -0
  28. package/dist/cjs/federated.d.ts +233 -0
  29. package/dist/cjs/federated.d.ts.map +1 -0
  30. package/dist/cjs/federated.js +525 -0
  31. package/dist/cjs/index.d.ts +68 -0
  32. package/dist/cjs/index.d.ts.map +1 -0
  33. package/dist/cjs/index.js +104 -0
  34. package/dist/cjs/intelligence.d.ts +136 -0
  35. package/dist/cjs/intelligence.d.ts.map +1 -0
  36. package/dist/cjs/intelligence.js +226 -0
  37. package/dist/cjs/lora.d.ts +251 -0
  38. package/dist/cjs/lora.d.ts.map +1 -0
  39. package/dist/cjs/lora.js +509 -0
  40. package/dist/cjs/models.d.ts +129 -0
  41. package/dist/cjs/models.d.ts.map +1 -0
  42. package/dist/cjs/models.js +323 -0
  43. package/dist/cjs/native.d.ts +140 -0
  44. package/dist/cjs/native.d.ts.map +1 -0
  45. package/dist/cjs/native.js +98 -0
  46. package/dist/cjs/session.d.ts +80 -0
  47. package/dist/cjs/session.d.ts.map +1 -0
  48. package/dist/cjs/session.js +203 -0
  49. package/dist/cjs/simd.d.ts +90 -0
  50. package/dist/cjs/simd.d.ts.map +1 -0
  51. package/dist/cjs/simd.js +209 -0
  52. package/dist/cjs/sona.d.ts +223 -0
  53. package/dist/cjs/sona.d.ts.map +1 -0
  54. package/dist/cjs/sona.js +562 -0
  55. package/dist/cjs/streaming.d.ts +55 -0
  56. package/dist/cjs/streaming.d.ts.map +1 -0
  57. package/dist/cjs/streaming.js +131 -0
  58. package/dist/cjs/training.d.ts +312 -0
  59. package/dist/cjs/training.d.ts.map +1 -0
  60. package/dist/cjs/training.js +610 -0
  61. package/dist/cjs/types.d.ts +696 -0
  62. package/dist/cjs/types.d.ts.map +1 -0
  63. package/dist/cjs/types.js +6 -0
  64. package/dist/esm/benchmarks/embedding-benchmark.d.ts +102 -0
  65. package/dist/esm/benchmarks/embedding-benchmark.d.ts.map +1 -0
  66. package/dist/esm/benchmarks/embedding-benchmark.js +427 -0
  67. package/dist/esm/benchmarks/index.d.ts +34 -0
  68. package/dist/esm/benchmarks/index.d.ts.map +1 -0
  69. package/dist/esm/benchmarks/index.js +110 -0
  70. package/dist/esm/benchmarks/model-comparison.d.ts +71 -0
  71. package/dist/esm/benchmarks/model-comparison.d.ts.map +1 -0
  72. package/dist/esm/benchmarks/model-comparison.js +434 -0
  73. package/dist/esm/benchmarks/routing-benchmark.d.ts +70 -0
  74. package/dist/esm/benchmarks/routing-benchmark.d.ts.map +1 -0
  75. package/dist/esm/benchmarks/routing-benchmark.js +283 -0
  76. package/dist/esm/contrastive.d.ts +229 -0
  77. package/dist/esm/contrastive.d.ts.map +1 -0
  78. package/dist/esm/contrastive.js +578 -0
  79. package/dist/esm/engine.d.ts +160 -0
  80. package/dist/esm/engine.d.ts.map +1 -0
  81. package/dist/esm/engine.js +548 -0
  82. package/dist/esm/export.d.ts +182 -0
  83. package/dist/esm/export.d.ts.map +1 -0
  84. package/dist/esm/export.js +414 -0
  85. package/dist/esm/federated.d.ts +233 -0
  86. package/dist/esm/federated.d.ts.map +1 -0
  87. package/dist/esm/federated.js +520 -0
  88. package/dist/esm/index.d.ts +68 -0
  89. package/dist/esm/index.d.ts.map +1 -0
  90. package/dist/esm/index.js +84 -0
  91. package/dist/esm/intelligence.d.ts +136 -0
  92. package/dist/esm/intelligence.d.ts.map +1 -0
  93. package/dist/esm/intelligence.js +188 -0
  94. package/dist/esm/lora.d.ts +251 -0
  95. package/dist/esm/lora.d.ts.map +1 -0
  96. package/dist/esm/lora.js +504 -0
  97. package/dist/esm/models.d.ts +129 -0
  98. package/dist/esm/models.d.ts.map +1 -0
  99. package/dist/esm/models.js +282 -0
  100. package/dist/esm/native.d.ts +140 -0
  101. package/dist/esm/native.d.ts.map +1 -0
  102. package/dist/esm/native.js +100 -0
  103. package/dist/esm/session.d.ts +80 -0
  104. package/dist/esm/session.d.ts.map +1 -0
  105. package/dist/esm/session.js +199 -0
  106. package/dist/esm/simd.d.ts +90 -0
  107. package/dist/esm/simd.d.ts.map +1 -0
  108. package/dist/esm/simd.js +205 -0
  109. package/dist/esm/sona.d.ts +223 -0
  110. package/dist/esm/sona.d.ts.map +1 -0
  111. package/dist/esm/sona.js +556 -0
  112. package/dist/esm/streaming.d.ts +55 -0
  113. package/dist/esm/streaming.d.ts.map +1 -0
  114. package/dist/esm/streaming.js +126 -0
  115. package/dist/esm/training.d.ts +312 -0
  116. package/dist/esm/training.d.ts.map +1 -0
  117. package/dist/esm/training.js +603 -0
  118. package/dist/esm/types.d.ts +696 -0
  119. package/dist/esm/types.d.ts.map +1 -0
  120. package/dist/esm/types.js +5 -0
  121. package/gpu/_load.cjs +38 -0
  122. package/gpu/_load.mjs +33 -0
  123. package/gpu/adapters.cjs +3 -0
  124. package/gpu/adapters.mjs +5 -0
  125. package/gpu/engine.cjs +3 -0
  126. package/gpu/engine.mjs +5 -0
  127. package/gpu/fixture.cjs +3 -0
  128. package/gpu/fixture.mjs +5 -0
  129. package/gpu/gpu-host.cjs +3 -0
  130. package/gpu/gpu-host.mjs +5 -0
  131. package/gpu/gpu-loop.cjs +3 -0
  132. package/gpu/gpu-loop.mjs +5 -0
  133. package/gpu/gpu-spool-adapter.cjs +3 -0
  134. package/gpu/gpu-spool-adapter.mjs +5 -0
  135. package/gpu/vast-host-adapter.cjs +3 -0
  136. package/gpu/vast-host-adapter.mjs +5 -0
  137. package/package.json +159 -49
  138. package/scripts/ensemble-model-compare.js +287 -0
  139. package/scripts/fix-esm-extensions.mjs +220 -0
  140. package/scripts/huggingface/README.md +537 -0
  141. package/scripts/huggingface/publish.sh +112 -0
  142. package/scripts/hybrid-model-compare.js +373 -0
  143. package/scripts/improved-model-compare.js +288 -0
  144. package/scripts/optimized-model-compare.js +364 -0
  145. package/scripts/real-model-compare.js +280 -0
  146. package/scripts/smoke-esm.mjs +82 -0
  147. package/scripts/training/agentic-flow-capabilities.json +329 -0
  148. package/scripts/training/claude-code-synth.js +505 -0
  149. package/scripts/training/claude-flow-capabilities.json +1322 -0
  150. package/scripts/training/claude-hard-negatives.js +222 -0
  151. package/scripts/training/contrastive-finetune.js +517 -0
  152. package/scripts/training/ecosystem-triplets.jsonl +1467 -0
  153. package/scripts/training/generate-ecosystem-triplets.js +1324 -0
  154. package/scripts/training/routing-dataset.js +634 -0
  155. package/scripts/training/ruvector-capabilities.json +798 -0
  156. package/scripts/training/validate-ecosystem.js +381 -0
  157. package/scripts/training/validation-results.json +23 -0
  158. package/GPU-LOOP.md +0 -229
  159. package/LICENSE +0 -201
  160. package/NOTICE +0 -9
  161. package/examples/gpu-loop.example.json +0 -26
  162. package/src/adapters-cli.mjs +0 -23
  163. package/src/adapters.mjs +0 -91
  164. package/src/cli.mjs +0 -30
  165. package/src/engine.mjs +0 -238
  166. package/src/fixture.mjs +0 -38
  167. package/src/gpu-host.mjs +0 -47
  168. package/src/gpu-loop-cli.mjs +0 -67
  169. package/src/gpu-loop.mjs +0 -184
  170. package/src/gpu-spool-adapter.mjs +0 -80
  171. package/src/vast-host-adapter.mjs +0 -274
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+ /**
3
+ * Native bindings loader for RuvLLM
4
+ *
5
+ * Automatically loads the correct native binary for the current platform.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.getNativeModule = getNativeModule;
9
+ exports.version = version;
10
+ exports.hasSimdSupport = hasSimdSupport;
11
+ const path_1 = require("path");
12
+ // Try to load the native module
13
+ let nativeModule = null;
14
+ // Platform-specific package names
15
+ const PLATFORM_PACKAGES = {
16
+ 'darwin-x64': '@ruvector/ruvllm-darwin-x64',
17
+ 'darwin-arm64': '@ruvector/ruvllm-darwin-arm64',
18
+ 'linux-x64': '@ruvector/ruvllm-linux-x64-gnu',
19
+ 'linux-arm64': '@ruvector/ruvllm-linux-arm64-gnu',
20
+ 'win32-x64': '@ruvector/ruvllm-win32-x64-msvc',
21
+ };
22
+ function getPlatformKey() {
23
+ const platform = process.platform;
24
+ const arch = process.arch;
25
+ return `${platform}-${arch}`;
26
+ }
27
+ function loadNativeModule() {
28
+ if (nativeModule) {
29
+ return nativeModule;
30
+ }
31
+ // An explicit binary (e.g. one built locally with `npm run build:native`)
32
+ // wins over the installed platform package. Failing to load it is an
33
+ // error, not a silent fallback to a different binary.
34
+ const override = process.env.RUVLLM_NATIVE_PATH;
35
+ if (override) {
36
+ try {
37
+ // resolve(): a relative path means relative to the working directory,
38
+ // not to this file.
39
+ nativeModule = normalize(require((0, path_1.resolve)(override)));
40
+ return nativeModule;
41
+ }
42
+ catch (e) {
43
+ throw new Error(`RUVLLM_NATIVE_PATH=${override} could not be loaded: ${e.message}`);
44
+ }
45
+ }
46
+ const platformKey = getPlatformKey();
47
+ const packageName = PLATFORM_PACKAGES[platformKey];
48
+ if (!packageName) {
49
+ // Silently fail - JS fallback will be used
50
+ return null;
51
+ }
52
+ // `napi build --platform` names its output ruvllm.<platform>.node
53
+ const platformFile = `ruvllm.${packageName.replace('@ruvector/ruvllm-', '')}.node`;
54
+ // Try loading from optional dependencies
55
+ const attempts = [
56
+ // Try the platform-specific package
57
+ () => require(packageName),
58
+ // Try loading from local .node file (CJS build)
59
+ () => require((0, path_1.join)(__dirname, '..', '..', 'ruvllm.node')),
60
+ // Try loading from local .node file (root)
61
+ () => require((0, path_1.join)(__dirname, '..', 'ruvllm.node')),
62
+ // Output of `npm run build:native` in the package root
63
+ () => require((0, path_1.join)(__dirname, '..', '..', platformFile)),
64
+ ];
65
+ for (const attempt of attempts) {
66
+ try {
67
+ nativeModule = normalize(attempt());
68
+ return nativeModule;
69
+ }
70
+ catch {
71
+ // Continue to next attempt
72
+ }
73
+ }
74
+ // Silently fall back to JS implementation
75
+ return null;
76
+ }
77
+ // Normalize: native exports RuvLlmEngine, we expose as RuvLLMEngine
78
+ function normalize(raw) {
79
+ return {
80
+ RuvLLMEngine: raw.RuvLLMEngine ?? raw.RuvLlmEngine,
81
+ SimdOperations: raw.SimdOperations,
82
+ version: raw.version,
83
+ hasSimdSupport: raw.hasSimdSupport,
84
+ };
85
+ }
86
+ // Export functions to get native bindings
87
+ function getNativeModule() {
88
+ return loadNativeModule();
89
+ }
90
+ function version() {
91
+ const mod = loadNativeModule();
92
+ return mod?.version() ?? '0.1.0-js';
93
+ }
94
+ function hasSimdSupport() {
95
+ const mod = loadNativeModule();
96
+ return mod?.hasSimdSupport() ?? false;
97
+ }
98
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL25hdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7R0FJRzs7QUEwUEgsMENBRUM7QUFFRCwwQkFHQztBQUVELHdDQUdDO0FBcFFELCtCQUFxQztBQUVyQyxnQ0FBZ0M7QUFDaEMsSUFBSSxZQUFZLEdBQXdCLElBQUksQ0FBQztBQWtLN0Msa0NBQWtDO0FBQ2xDLE1BQU0saUJBQWlCLEdBQTJCO0lBQ2hELFlBQVksRUFBRSw2QkFBNkI7SUFDM0MsY0FBYyxFQUFFLCtCQUErQjtJQUMvQyxXQUFXLEVBQUUsZ0NBQWdDO0lBQzdDLGFBQWEsRUFBRSxrQ0FBa0M7SUFDakQsV0FBVyxFQUFFLGlDQUFpQztDQUMvQyxDQUFDO0FBRUYsU0FBUyxjQUFjO0lBQ3JCLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUM7SUFDbEMsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztJQUMxQixPQUFPLEdBQUcsUUFBUSxJQUFJLElBQUksRUFBRSxDQUFDO0FBQy9CLENBQUM7QUFFRCxTQUFTLGdCQUFnQjtJQUN2QixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2pCLE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7SUFFRCwwRUFBMEU7SUFDMUUscUVBQXFFO0lBQ3JFLHNEQUFzRDtJQUN0RCxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDO0lBQ2hELElBQUksUUFBUSxFQUFFLENBQUM7UUFDYixJQUFJLENBQUM7WUFDSCxzRUFBc0U7WUFDdEUsb0JBQW9CO1lBQ3BCLFlBQVksR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUEsY0FBTyxFQUFDLFFBQVEsQ0FBQyxDQUFvQixDQUFDLENBQUM7WUFDeEUsT0FBTyxZQUFZLENBQUM7UUFDdEIsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxNQUFNLElBQUksS0FBSyxDQUNiLHNCQUFzQixRQUFRLHlCQUEwQixDQUFXLENBQUMsT0FBTyxFQUFFLENBQzlFLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sV0FBVyxHQUFHLGNBQWMsRUFBRSxDQUFDO0lBQ3JDLE1BQU0sV0FBVyxHQUFHLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBRW5ELElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNqQiwyQ0FBMkM7UUFDM0MsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQ0Qsa0VBQWtFO0lBQ2xFLE1BQU0sWUFBWSxHQUFHLFVBQVUsV0FBVyxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDO0lBRW5GLHlDQUF5QztJQUN6QyxNQUFNLFFBQVEsR0FBRztRQUNmLG9DQUFvQztRQUNwQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDO1FBQzFCLGdEQUFnRDtRQUNoRCxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBQSxXQUFJLEVBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDekQsMkNBQTJDO1FBQzNDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFBLFdBQUksRUFBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ25ELHVEQUF1RDtRQUN2RCxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBQSxXQUFJLEVBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUM7S0FDekQsQ0FBQztJQUVGLEtBQUssTUFBTSxPQUFPLElBQUksUUFBUSxFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDO1lBQ0gsWUFBWSxHQUFHLFNBQVMsQ0FBQyxPQUFPLEVBQXFCLENBQUMsQ0FBQztZQUN2RCxPQUFPLFlBQVksQ0FBQztRQUN0QixDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsMkJBQTJCO1FBQzdCLENBQUM7SUFDSCxDQUFDO0lBRUQsMENBQTBDO0lBQzFDLE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVELG9FQUFvRTtBQUNwRSxTQUFTLFNBQVMsQ0FBQyxHQUFvQjtJQUNyQyxPQUFPO1FBQ0wsWUFBWSxFQUFFLEdBQUcsQ0FBQyxZQUFZLElBQUksR0FBRyxDQUFDLFlBQWE7UUFDbkQsY0FBYyxFQUFFLEdBQUcsQ0FBQyxjQUFjO1FBQ2xDLE9BQU8sRUFBRSxHQUFHLENBQUMsT0FBTztRQUNwQixjQUFjLEVBQUUsR0FBRyxDQUFDLGNBQWM7S0FDbkMsQ0FBQztBQUNKLENBQUM7QUFFRCwwQ0FBMEM7QUFDMUMsU0FBZ0IsZUFBZTtJQUM3QixPQUFPLGdCQUFnQixFQUFFLENBQUM7QUFDNUIsQ0FBQztBQUVELFNBQWdCLE9BQU87SUFDckIsTUFBTSxHQUFHLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztJQUMvQixPQUFPLEdBQUcsRUFBRSxPQUFPLEVBQUUsSUFBSSxVQUFVLENBQUM7QUFDdEMsQ0FBQztBQUVELFNBQWdCLGNBQWM7SUFDNUIsTUFBTSxHQUFHLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztJQUMvQixPQUFPLEdBQUcsRUFBRSxjQUFjLEVBQUUsSUFBSSxLQUFLLENBQUM7QUFDeEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTmF0aXZlIGJpbmRpbmdzIGxvYWRlciBmb3IgUnV2TExNXG4gKlxuICogQXV0b21hdGljYWxseSBsb2FkcyB0aGUgY29ycmVjdCBuYXRpdmUgYmluYXJ5IGZvciB0aGUgY3VycmVudCBwbGF0Zm9ybS5cbiAqL1xuXG5pbXBvcnQgeyBqb2luLCByZXNvbHZlIH0gZnJvbSAncGF0aCc7XG5cbi8vIFRyeSB0byBsb2FkIHRoZSBuYXRpdmUgbW9kdWxlXG5sZXQgbmF0aXZlTW9kdWxlOiBOYXRpdmVSdXZMTE0gfCBudWxsID0gbnVsbDtcblxuaW50ZXJmYWNlIE5hdGl2ZVJ1dkxMTSB7XG4gIC8vIE5hdGl2ZSBleHBvcnRzIFJ1dkxsbUVuZ2luZSAoY2FtZWxDYXNlKSwgd2Ugbm9ybWFsaXplIHRvIFJ1dkxMTUVuZ2luZVxuICBSdXZMTE1FbmdpbmU6IG5ldyAoY29uZmlnPzogTmF0aXZlQ29uZmlnKSA9PiBOYXRpdmVFbmdpbmU7XG4gIFNpbWRPcGVyYXRpb25zOiBuZXcgKCkgPT4gTmF0aXZlU2ltZE9wcztcbiAgdmVyc2lvbjogKCkgPT4gc3RyaW5nO1xuICBoYXNTaW1kU3VwcG9ydDogKCkgPT4gYm9vbGVhbjtcbn1cblxuLy8gUmF3IG5hdGl2ZSBtb2R1bGUgaW50ZXJmYWNlIChhY3R1YWwgZXhwb3J0IG5hbWVzKVxuaW50ZXJmYWNlIFJhd05hdGl2ZU1vZHVsZSB7XG4gIFJ1dkxsbUVuZ2luZT86IG5ldyAoY29uZmlnPzogTmF0aXZlQ29uZmlnKSA9PiBOYXRpdmVFbmdpbmU7XG4gIFJ1dkxMTUVuZ2luZT86IG5ldyAoY29uZmlnPzogTmF0aXZlQ29uZmlnKSA9PiBOYXRpdmVFbmdpbmU7XG4gIFNpbWRPcGVyYXRpb25zOiBuZXcgKCkgPT4gTmF0aXZlU2ltZE9wcztcbiAgdmVyc2lvbjogKCkgPT4gc3RyaW5nO1xuICBoYXNTaW1kU3VwcG9ydDogKCkgPT4gYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIE5hdGl2ZUNvbmZpZyB7XG4gIGVtYmVkZGluZ19kaW0/OiBudW1iZXI7XG4gIHJvdXRlcl9oaWRkZW5fZGltPzogbnVtYmVyO1xuICBobnN3X20/OiBudW1iZXI7XG4gIGhuc3dfZWZfY29uc3RydWN0aW9uPzogbnVtYmVyO1xuICBobnN3X2VmX3NlYXJjaD86IG51bWJlcjtcbiAgbGVhcm5pbmdfZW5hYmxlZD86IGJvb2xlYW47XG4gIHF1YWxpdHlfdGhyZXNob2xkPzogbnVtYmVyO1xuICBld2NfbGFtYmRhPzogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgTmF0aXZlRW5naW5lIHtcbiAgcXVlcnkodGV4dDogc3RyaW5nLCBjb25maWc/OiBOYXRpdmVHZW5Db25maWcpOiBOYXRpdmVRdWVyeVJlc3BvbnNlO1xuICAvKipcbiAgICogQnVpbGRzIHdpdGggYGxvYWRNb2RlbGAgcmV0dXJuIGEgZ2VuZXJhdGlvbiByZXN1bHQgYW5kIHRocm93IHdoaWxlIG5vXG4gICAqIG1vZGVsIGlzIGxvYWRlZDsgb2xkZXIgYnVpbGRzICh0aGUgMi4wLnggcGxhdGZvcm0gcGFja2FnZXMpIHJldHVybiBhXG4gICAqIHN0cmluZyB0aGF0IGlzIG5vdCBtb2RlbCBvdXRwdXQsIHNvIHRoZSB3cmFwcGVyIG5ldmVyIGNhbGxzIHRoZW0uXG4gICAqL1xuICBnZW5lcmF0ZShwcm9tcHQ6IHN0cmluZywgY29uZmlnPzogTmF0aXZlR2VuQ29uZmlnKTogTmF0aXZlR2VuZXJhdGlvblJlc3VsdCB8IHN0cmluZztcbiAgLyoqXG4gICAqIFByZXNlbnQgb24gYnVpbGRzIHNpbmNlIG1vZGVsIGxvYWRpbmcgd2FzIGFkZGVkLiBUaG9zZSBidWlsdCB3aXRob3V0IHRoZVxuICAgKiBgY2FuZGxlYCBmZWF0dXJlIHRocm93IGBSVVZMTE1fTk9fSU5GRVJFTkNFX0JBQ0tFTkRgOyBzZWVcbiAgICogYHN1cHBvcnRzTW9kZWxMb2FkaW5nYC5cbiAgICovXG4gIGxvYWRNb2RlbD8ocGF0aDogc3RyaW5nLCBvcHRpb25zPzogTmF0aXZlTG9hZE1vZGVsT3B0aW9ucyk6IE5hdGl2ZU1vZGVsSW5mbztcbiAgLyoqIFdoZXRoZXIgdGhlIGJpbmFyeSB3YXMgYnVpbHQgd2l0aCB0aGUgYGNhbmRsZWAgZmVhdHVyZSAoYWJzZW50IG9uIG9sZGVyIGJ1aWxkcykuICovXG4gIHN1cHBvcnRzTW9kZWxMb2FkaW5nPygpOiBib29sZWFuO1xuICB1bmxvYWRNb2RlbD8oKTogdm9pZDtcbiAgaXNNb2RlbExvYWRlZD8oKTogYm9vbGVhbjtcbiAgbW9kZWxJbmZvPygpOiBOYXRpdmVNb2RlbEluZm8gfCBudWxsO1xuICBjaGF0PyhtZXNzYWdlczogTmF0aXZlQ2hhdE1lc3NhZ2VbXSwgY29uZmlnPzogTmF0aXZlR2VuQ29uZmlnKTogTmF0aXZlR2VuZXJhdGlvblJlc3VsdDtcbiAgcm91dGUodGV4dDogc3RyaW5nKTogTmF0aXZlUm91dGluZ0RlY2lzaW9uO1xuICBzZWFyY2hNZW1vcnkodGV4dDogc3RyaW5nLCBrPzogbnVtYmVyKTogTmF0aXZlTWVtb3J5UmVzdWx0W107XG4gIC8qKiBDdXJyZW50IG5hdGl2ZSBidWlsZHMgcmV0dXJuIGEgVVVJRCBzdHJpbmc7IG9sZGVyIG9uZXMgcmV0dXJuZWQgYSBudW1iZXIuICovXG4gIGFkZE1lbW9yeShjb250ZW50OiBzdHJpbmcsIG1ldGFkYXRhPzogc3RyaW5nKTogc3RyaW5nIHwgbnVtYmVyO1xuICBmZWVkYmFjayhyZXF1ZXN0SWQ6IHN0cmluZywgcmF0aW5nOiBudW1iZXIsIGNvcnJlY3Rpb24/OiBzdHJpbmcpOiBib29sZWFuO1xuICBzdGF0cygpOiBOYXRpdmVTdGF0cztcbiAgZm9yY2VMZWFybigpOiBzdHJpbmc7XG4gIGVtYmVkKHRleHQ6IHN0cmluZyk6IG51bWJlcltdO1xuICBzaW1pbGFyaXR5KHRleHQxOiBzdHJpbmcsIHRleHQyOiBzdHJpbmcpOiBudW1iZXI7XG4gIGhhc1NpbWQoKTogYm9vbGVhbjtcbiAgc2ltZENhcGFiaWxpdGllcygpOiBzdHJpbmdbXTtcbn1cblxuLy8gbmFwaS1ycyByZWFkcyBgI1tuYXBpKG9iamVjdCldYCBmaWVsZHMgYnkgdGhlaXIgY2FtZWxDYXNlIG5hbWVzOyBzbmFrZV9jYXNlXG4vLyBrZXlzIGFyZSBzaWxlbnRseSBpZ25vcmVkICh3aGljaCBpcyBob3cgYG1heFRva2Vuc2AgdXNlZCB0byBiZSBkcm9wcGVkKS5cbmludGVyZmFjZSBOYXRpdmVHZW5Db25maWcge1xuICBtYXhUb2tlbnM/OiBudW1iZXI7XG4gIHRlbXBlcmF0dXJlPzogbnVtYmVyO1xuICB0b3BQPzogbnVtYmVyO1xuICB0b3BLPzogbnVtYmVyO1xuICByZXBldGl0aW9uUGVuYWx0eT86IG51bWJlcjtcbiAgc3RvcFNlcXVlbmNlcz86IHN0cmluZ1tdO1xuICBzZWVkPzogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgTmF0aXZlTG9hZE1vZGVsT3B0aW9ucyB7XG4gIG1heENvbnRleHQ/OiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBOYXRpdmVDaGF0TWVzc2FnZSB7XG4gIHJvbGU6IHN0cmluZztcbiAgY29udGVudDogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgTmF0aXZlR2VuZXJhdGlvblJlc3VsdCB7XG4gIHRleHQ6IHN0cmluZztcbiAgcHJvbXB0VG9rZW5zOiBudW1iZXI7XG4gIGNvbXBsZXRpb25Ub2tlbnM6IG51bWJlcjtcbiAgZmluaXNoUmVhc29uOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBOYXRpdmVNb2RlbEluZm8ge1xuICBuYW1lOiBzdHJpbmc7XG4gIGFyY2hpdGVjdHVyZTogc3RyaW5nO1xuICBudW1QYXJhbWV0ZXJzOiBudW1iZXI7XG4gIHZvY2FiU2l6ZTogbnVtYmVyO1xuICBoaWRkZW5TaXplOiBudW1iZXI7XG4gIG51bUxheWVyczogbnVtYmVyO1xuICBtYXhDb250ZXh0TGVuZ3RoOiBudW1iZXI7XG4gIHF1YW50aXphdGlvbj86IHN0cmluZyB8IG51bGw7XG4gIG1lbW9yeVVzYWdlQnl0ZXM6IG51bWJlcjtcbiAgY2hhdFRlbXBsYXRlPzogc3RyaW5nIHwgbnVsbDtcbn1cblxuLy8gbmFwaS1ycyBjYW1lbENhc2VzIFJ1c3Qgc3RydWN0IGZpZWxkcyB3aGVuIGl0IGJ1aWxkcyB0aGUgSlMgb2JqZWN0LCBzbyB0aGVcbi8vIHJlYWwgbmF0aXZlIHNoYXBlIGlzIGNhbWVsQ2FzZS4gVGhlc2UgaW50ZXJmYWNlcyBwcmV2aW91c2x5IGRlY2xhcmVkIG9ubHlcbi8vIHNuYWtlX2Nhc2UsIHdoaWNoIGlzIHdoeSB0aGUgd3JhcHBlcidzIHNuYWtlX2Nhc2UgcmVhZHMgdHlwZWNoZWNrZWQgd2hpbGVcbi8vIHNpbGVudGx5IHlpZWxkaW5nIHVuZGVmaW5lZCBhdCBydW50aW1lLiBCb3RoIHNwZWxsaW5ncyBhcmUgZGVjbGFyZWQg4oCUXG4vLyBjYW1lbENhc2UgcmVxdWlyZWQsIHNuYWtlX2Nhc2Ugb3B0aW9uYWwg4oCUIHNvIG9sZGVyIG5hdGl2ZSBidWlsZHMgc3RpbGwgZml0LlxuaW50ZXJmYWNlIE5hdGl2ZVF1ZXJ5UmVzcG9uc2Uge1xuICB0ZXh0OiBzdHJpbmc7XG4gIGNvbmZpZGVuY2U6IG51bWJlcjtcbiAgbW9kZWw6IHN0cmluZztcbiAgY29udGV4dFNpemU6IG51bWJlcjtcbiAgbGF0ZW5jeU1zOiBudW1iZXI7XG4gIHJlcXVlc3RJZDogc3RyaW5nO1xuICAvKiogQnVpbGRzIHdpdGggYGxvYWRNb2RlbGAgYWxzbyByZXBvcnQgdG9rZW4gdXNhZ2UuICovXG4gIHByb21wdFRva2Vucz86IG51bWJlcjtcbiAgY29tcGxldGlvblRva2Vucz86IG51bWJlcjtcbiAgZmluaXNoUmVhc29uPzogc3RyaW5nO1xuICBjb250ZXh0X3NpemU/OiBudW1iZXI7XG4gIGxhdGVuY3lfbXM/OiBudW1iZXI7XG4gIHJlcXVlc3RfaWQ/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBOYXRpdmVSb3V0aW5nRGVjaXNpb24ge1xuICBtb2RlbDogc3RyaW5nO1xuICBjb250ZXh0U2l6ZTogbnVtYmVyO1xuICB0ZW1wZXJhdHVyZTogbnVtYmVyO1xuICB0b3BfcD86IG51bWJlcjtcbiAgdG9wUDogbnVtYmVyO1xuICBjb25maWRlbmNlOiBudW1iZXI7XG4gIGNvbnRleHRfc2l6ZT86IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIE5hdGl2ZU1lbW9yeVJlc3VsdCB7XG4gIGlkOiBzdHJpbmcgfCBudW1iZXI7XG4gIC8qKiBEaXN0YW5jZSAoc21hbGxlciBpcyBjbG9zZXIpIGFzIHJlcG9ydGVkIGJ5IHRoZSBjdXJyZW50IG5hdGl2ZSBidWlsZC4gKi9cbiAgZGlzdGFuY2U/OiBudW1iZXI7XG4gIC8qKiBTaW1pbGFyaXR5LCBlbWl0dGVkIGJ5IG9sZGVyIG5hdGl2ZSBidWlsZHMuICovXG4gIHNjb3JlPzogbnVtYmVyO1xuICBjb250ZW50OiBzdHJpbmc7XG4gIG1ldGFkYXRhOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBOYXRpdmVTdGF0cyB7XG4gIHRvdGFsX3F1ZXJpZXM6IG51bWJlcjtcbiAgbWVtb3J5X25vZGVzOiBudW1iZXI7XG4gIHBhdHRlcm5zX2xlYXJuZWQ6IG51bWJlcjtcbiAgYXZnX2xhdGVuY3lfbXM6IG51bWJlcjtcbiAgY2FjaGVfaGl0X3JhdGU6IG51bWJlcjtcbiAgcm91dGVyX2FjY3VyYWN5OiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBOYXRpdmVTaW1kT3BzIHtcbiAgZG90UHJvZHVjdChhOiBudW1iZXJbXSwgYjogbnVtYmVyW10pOiBudW1iZXI7XG4gIGNvc2luZVNpbWlsYXJpdHkoYTogbnVtYmVyW10sIGI6IG51bWJlcltdKTogbnVtYmVyO1xuICBsMkRpc3RhbmNlKGE6IG51bWJlcltdLCBiOiBudW1iZXJbXSk6IG51bWJlcjtcbiAgbWF0dmVjKG1hdHJpeDogbnVtYmVyW11bXSwgdmVjdG9yOiBudW1iZXJbXSk6IG51bWJlcltdO1xuICBzb2Z0bWF4KGlucHV0OiBudW1iZXJbXSk6IG51bWJlcltdO1xufVxuXG4vLyBQbGF0Zm9ybS1zcGVjaWZpYyBwYWNrYWdlIG5hbWVzXG5jb25zdCBQTEFURk9STV9QQUNLQUdFUzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgJ2Rhcndpbi14NjQnOiAnQHJ1dmVjdG9yL3J1dmxsbS1kYXJ3aW4teDY0JyxcbiAgJ2Rhcndpbi1hcm02NCc6ICdAcnV2ZWN0b3IvcnV2bGxtLWRhcndpbi1hcm02NCcsXG4gICdsaW51eC14NjQnOiAnQHJ1dmVjdG9yL3J1dmxsbS1saW51eC14NjQtZ251JyxcbiAgJ2xpbnV4LWFybTY0JzogJ0BydXZlY3Rvci9ydXZsbG0tbGludXgtYXJtNjQtZ251JyxcbiAgJ3dpbjMyLXg2NCc6ICdAcnV2ZWN0b3IvcnV2bGxtLXdpbjMyLXg2NC1tc3ZjJyxcbn07XG5cbmZ1bmN0aW9uIGdldFBsYXRmb3JtS2V5KCk6IHN0cmluZyB7XG4gIGNvbnN0IHBsYXRmb3JtID0gcHJvY2Vzcy5wbGF0Zm9ybTtcbiAgY29uc3QgYXJjaCA9IHByb2Nlc3MuYXJjaDtcbiAgcmV0dXJuIGAke3BsYXRmb3JtfS0ke2FyY2h9YDtcbn1cblxuZnVuY3Rpb24gbG9hZE5hdGl2ZU1vZHVsZSgpOiBOYXRpdmVSdXZMTE0gfCBudWxsIHtcbiAgaWYgKG5hdGl2ZU1vZHVsZSkge1xuICAgIHJldHVybiBuYXRpdmVNb2R1bGU7XG4gIH1cblxuICAvLyBBbiBleHBsaWNpdCBiaW5hcnkgKGUuZy4gb25lIGJ1aWx0IGxvY2FsbHkgd2l0aCBgbnBtIHJ1biBidWlsZDpuYXRpdmVgKVxuICAvLyB3aW5zIG92ZXIgdGhlIGluc3RhbGxlZCBwbGF0Zm9ybSBwYWNrYWdlLiBGYWlsaW5nIHRvIGxvYWQgaXQgaXMgYW5cbiAgLy8gZXJyb3IsIG5vdCBhIHNpbGVudCBmYWxsYmFjayB0byBhIGRpZmZlcmVudCBiaW5hcnkuXG4gIGNvbnN0IG92ZXJyaWRlID0gcHJvY2Vzcy5lbnYuUlVWTExNX05BVElWRV9QQVRIO1xuICBpZiAob3ZlcnJpZGUpIHtcbiAgICB0cnkge1xuICAgICAgLy8gcmVzb2x2ZSgpOiBhIHJlbGF0aXZlIHBhdGggbWVhbnMgcmVsYXRpdmUgdG8gdGhlIHdvcmtpbmcgZGlyZWN0b3J5LFxuICAgICAgLy8gbm90IHRvIHRoaXMgZmlsZS5cbiAgICAgIG5hdGl2ZU1vZHVsZSA9IG5vcm1hbGl6ZShyZXF1aXJlKHJlc29sdmUob3ZlcnJpZGUpKSBhcyBSYXdOYXRpdmVNb2R1bGUpO1xuICAgICAgcmV0dXJuIG5hdGl2ZU1vZHVsZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBSVVZMTE1fTkFUSVZFX1BBVEg9JHtvdmVycmlkZX0gY291bGQgbm90IGJlIGxvYWRlZDogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBwbGF0Zm9ybUtleSA9IGdldFBsYXRmb3JtS2V5KCk7XG4gIGNvbnN0IHBhY2thZ2VOYW1lID0gUExBVEZPUk1fUEFDS0FHRVNbcGxhdGZvcm1LZXldO1xuXG4gIGlmICghcGFja2FnZU5hbWUpIHtcbiAgICAvLyBTaWxlbnRseSBmYWlsIC0gSlMgZmFsbGJhY2sgd2lsbCBiZSB1c2VkXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgLy8gYG5hcGkgYnVpbGQgLS1wbGF0Zm9ybWAgbmFtZXMgaXRzIG91dHB1dCBydXZsbG0uPHBsYXRmb3JtPi5ub2RlXG4gIGNvbnN0IHBsYXRmb3JtRmlsZSA9IGBydXZsbG0uJHtwYWNrYWdlTmFtZS5yZXBsYWNlKCdAcnV2ZWN0b3IvcnV2bGxtLScsICcnKX0ubm9kZWA7XG5cbiAgLy8gVHJ5IGxvYWRpbmcgZnJvbSBvcHRpb25hbCBkZXBlbmRlbmNpZXNcbiAgY29uc3QgYXR0ZW1wdHMgPSBbXG4gICAgLy8gVHJ5IHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBwYWNrYWdlXG4gICAgKCkgPT4gcmVxdWlyZShwYWNrYWdlTmFtZSksXG4gICAgLy8gVHJ5IGxvYWRpbmcgZnJvbSBsb2NhbCAubm9kZSBmaWxlIChDSlMgYnVpbGQpXG4gICAgKCkgPT4gcmVxdWlyZShqb2luKF9fZGlybmFtZSwgJy4uJywgJy4uJywgJ3J1dmxsbS5ub2RlJykpLFxuICAgIC8vIFRyeSBsb2FkaW5nIGZyb20gbG9jYWwgLm5vZGUgZmlsZSAocm9vdClcbiAgICAoKSA9PiByZXF1aXJlKGpvaW4oX19kaXJuYW1lLCAnLi4nLCAncnV2bGxtLm5vZGUnKSksXG4gICAgLy8gT3V0cHV0IG9mIGBucG0gcnVuIGJ1aWxkOm5hdGl2ZWAgaW4gdGhlIHBhY2thZ2Ugcm9vdFxuICAgICgpID0+IHJlcXVpcmUoam9pbihfX2Rpcm5hbWUsICcuLicsICcuLicsIHBsYXRmb3JtRmlsZSkpLFxuICBdO1xuXG4gIGZvciAoY29uc3QgYXR0ZW1wdCBvZiBhdHRlbXB0cykge1xuICAgIHRyeSB7XG4gICAgICBuYXRpdmVNb2R1bGUgPSBub3JtYWxpemUoYXR0ZW1wdCgpIGFzIFJhd05hdGl2ZU1vZHVsZSk7XG4gICAgICByZXR1cm4gbmF0aXZlTW9kdWxlO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gQ29udGludWUgdG8gbmV4dCBhdHRlbXB0XG4gICAgfVxuICB9XG5cbiAgLy8gU2lsZW50bHkgZmFsbCBiYWNrIHRvIEpTIGltcGxlbWVudGF0aW9uXG4gIHJldHVybiBudWxsO1xufVxuXG4vLyBOb3JtYWxpemU6IG5hdGl2ZSBleHBvcnRzIFJ1dkxsbUVuZ2luZSwgd2UgZXhwb3NlIGFzIFJ1dkxMTUVuZ2luZVxuZnVuY3Rpb24gbm9ybWFsaXplKHJhdzogUmF3TmF0aXZlTW9kdWxlKTogTmF0aXZlUnV2TExNIHtcbiAgcmV0dXJuIHtcbiAgICBSdXZMTE1FbmdpbmU6IHJhdy5SdXZMTE1FbmdpbmUgPz8gcmF3LlJ1dkxsbUVuZ2luZSEsXG4gICAgU2ltZE9wZXJhdGlvbnM6IHJhdy5TaW1kT3BlcmF0aW9ucyxcbiAgICB2ZXJzaW9uOiByYXcudmVyc2lvbixcbiAgICBoYXNTaW1kU3VwcG9ydDogcmF3Lmhhc1NpbWRTdXBwb3J0LFxuICB9O1xufVxuXG4vLyBFeHBvcnQgZnVuY3Rpb25zIHRvIGdldCBuYXRpdmUgYmluZGluZ3NcbmV4cG9ydCBmdW5jdGlvbiBnZXROYXRpdmVNb2R1bGUoKTogTmF0aXZlUnV2TExNIHwgbnVsbCB7XG4gIHJldHVybiBsb2FkTmF0aXZlTW9kdWxlKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2ZXJzaW9uKCk6IHN0cmluZyB7XG4gIGNvbnN0IG1vZCA9IGxvYWROYXRpdmVNb2R1bGUoKTtcbiAgcmV0dXJuIG1vZD8udmVyc2lvbigpID8/ICcwLjEuMC1qcyc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNTaW1kU3VwcG9ydCgpOiBib29sZWFuIHtcbiAgY29uc3QgbW9kID0gbG9hZE5hdGl2ZU1vZHVsZSgpO1xuICByZXR1cm4gbW9kPy5oYXNTaW1kU3VwcG9ydCgpID8/IGZhbHNlO1xufVxuXG4vLyBFeHBvcnQgdHlwZXMgZm9yIGludGVybmFsIHVzZVxuZXhwb3J0IHR5cGUge1xuICBOYXRpdmVSdXZMTE0sXG4gIE5hdGl2ZUNvbmZpZyxcbiAgTmF0aXZlRW5naW5lLFxuICBOYXRpdmVHZW5Db25maWcsXG4gIE5hdGl2ZUxvYWRNb2RlbE9wdGlvbnMsXG4gIE5hdGl2ZUNoYXRNZXNzYWdlLFxuICBOYXRpdmVHZW5lcmF0aW9uUmVzdWx0LFxuICBOYXRpdmVNb2RlbEluZm8sXG4gIE5hdGl2ZVF1ZXJ5UmVzcG9uc2UsXG4gIE5hdGl2ZVJvdXRpbmdEZWNpc2lvbixcbiAgTmF0aXZlTWVtb3J5UmVzdWx0LFxuICBOYXRpdmVTdGF0cyxcbiAgTmF0aXZlU2ltZE9wcyxcbn07XG4iXX0=
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Session Management for multi-turn conversations
3
+ */
4
+ import { ConversationSession, ConversationMessage, QueryResponse, GenerationConfig } from './types';
5
+ /**
6
+ * Session Manager for multi-turn conversations
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * import { RuvLLM, SessionManager } from '@ruvector/ruvllm';
11
+ *
12
+ * const llm = new RuvLLM();
13
+ * const sessions = new SessionManager(llm);
14
+ *
15
+ * // Create a new session
16
+ * const session = sessions.create();
17
+ *
18
+ * // Chat with context
19
+ * const response1 = sessions.chat(session.id, 'What is Python?');
20
+ * const response2 = sessions.chat(session.id, 'How do I install it?');
21
+ * // Second query automatically has context from first
22
+ * ```
23
+ */
24
+ export declare class SessionManager {
25
+ private sessions;
26
+ private llm;
27
+ constructor(llm: {
28
+ query: (text: string, config?: GenerationConfig) => QueryResponse;
29
+ addMemory: (content: string, metadata?: Record<string, unknown>) => number;
30
+ });
31
+ /**
32
+ * Create a new conversation session
33
+ */
34
+ create(metadata?: Record<string, unknown>): ConversationSession;
35
+ /**
36
+ * Get session by ID
37
+ */
38
+ get(sessionId: string): ConversationSession | undefined;
39
+ /**
40
+ * Chat within a session (maintains context)
41
+ */
42
+ chat(sessionId: string, message: string, config?: GenerationConfig): QueryResponse;
43
+ /**
44
+ * Add system message to session
45
+ */
46
+ addSystemMessage(sessionId: string, content: string): void;
47
+ /**
48
+ * Add context to session (persisted to memory)
49
+ */
50
+ addContext(sessionId: string, context: string): number;
51
+ /**
52
+ * Get conversation history
53
+ */
54
+ getHistory(sessionId: string, limit?: number): ConversationMessage[];
55
+ /**
56
+ * Clear session history (keep session active)
57
+ */
58
+ clearHistory(sessionId: string): void;
59
+ /**
60
+ * End and delete session
61
+ */
62
+ end(sessionId: string): boolean;
63
+ /**
64
+ * List all active sessions
65
+ */
66
+ list(): ConversationSession[];
67
+ /**
68
+ * Export session as JSON
69
+ */
70
+ export(sessionId: string): string | null;
71
+ /**
72
+ * Import session from JSON
73
+ */
74
+ import(json: string): ConversationSession;
75
+ /**
76
+ * Build context string from recent messages
77
+ */
78
+ private buildContext;
79
+ }
80
+ //# sourceMappingURL=session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/session.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,aAAa,EACb,gBAAgB,EACjB,MAAM,SAAS,CAAC;AAEjB;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAA+C;IAC/D,OAAO,CAAC,GAAG,CAAoJ;gBAEnJ,GAAG,EAAE;QAAE,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,gBAAgB,KAAK,aAAa,CAAC;QAAC,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAAA;KAAE;IAIlK;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,mBAAmB;IAe/D;;OAEG;IACH,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,mBAAmB,GAAG,SAAS;IAIvD;;OAEG;IACH,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,gBAAgB,GAAG,aAAa;IAiClF;;OAEG;IACH,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAc1D;;OAEG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM;IAmBtD;;OAEG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,mBAAmB,EAAE;IAUpE;;OAEG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IASrC;;OAEG;IACH,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAI/B;;OAEG;IACH,IAAI,IAAI,mBAAmB,EAAE;IAI7B;;OAEG;IACH,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IASxC;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB;IAezC;;OAEG;IACH,OAAO,CAAC,YAAY;CA2BrB"}
@@ -0,0 +1,203 @@
1
+ "use strict";
2
+ /**
3
+ * Session Management for multi-turn conversations
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.SessionManager = void 0;
7
+ /**
8
+ * Session Manager for multi-turn conversations
9
+ *
10
+ * @example
11
+ * ```typescript
12
+ * import { RuvLLM, SessionManager } from '@ruvector/ruvllm';
13
+ *
14
+ * const llm = new RuvLLM();
15
+ * const sessions = new SessionManager(llm);
16
+ *
17
+ * // Create a new session
18
+ * const session = sessions.create();
19
+ *
20
+ * // Chat with context
21
+ * const response1 = sessions.chat(session.id, 'What is Python?');
22
+ * const response2 = sessions.chat(session.id, 'How do I install it?');
23
+ * // Second query automatically has context from first
24
+ * ```
25
+ */
26
+ class SessionManager {
27
+ constructor(llm) {
28
+ this.sessions = new Map();
29
+ this.llm = llm;
30
+ }
31
+ /**
32
+ * Create a new conversation session
33
+ */
34
+ create(metadata) {
35
+ const id = `session-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
36
+ const session = {
37
+ id,
38
+ createdAt: new Date(),
39
+ messageCount: 0,
40
+ messages: [],
41
+ context: [],
42
+ activeMemoryIds: [],
43
+ metadata: metadata ?? {},
44
+ };
45
+ this.sessions.set(id, session);
46
+ return session;
47
+ }
48
+ /**
49
+ * Get session by ID
50
+ */
51
+ get(sessionId) {
52
+ return this.sessions.get(sessionId);
53
+ }
54
+ /**
55
+ * Chat within a session (maintains context)
56
+ */
57
+ chat(sessionId, message, config) {
58
+ const session = this.sessions.get(sessionId);
59
+ if (!session) {
60
+ throw new Error(`Session not found: ${sessionId}`);
61
+ }
62
+ // Add user message
63
+ session.messages.push({
64
+ role: 'user',
65
+ content: message,
66
+ timestamp: new Date(),
67
+ });
68
+ // Build context from recent messages
69
+ const contextWindow = this.buildContext(session);
70
+ // Query with context
71
+ const prompt = contextWindow ? `${contextWindow}\n\nUser: ${message}` : message;
72
+ const response = this.llm.query(prompt, config);
73
+ // Add assistant response
74
+ session.messages.push({
75
+ role: 'assistant',
76
+ content: response.text,
77
+ timestamp: new Date(),
78
+ requestId: response.requestId,
79
+ });
80
+ session.messageCount = session.messages.length;
81
+ return response;
82
+ }
83
+ /**
84
+ * Add system message to session
85
+ */
86
+ addSystemMessage(sessionId, content) {
87
+ const session = this.sessions.get(sessionId);
88
+ if (!session) {
89
+ throw new Error(`Session not found: ${sessionId}`);
90
+ }
91
+ session.messages.push({
92
+ role: 'system',
93
+ content,
94
+ timestamp: new Date(),
95
+ });
96
+ session.messageCount = session.messages.length;
97
+ }
98
+ /**
99
+ * Add context to session (persisted to memory)
100
+ */
101
+ addContext(sessionId, context) {
102
+ const session = this.sessions.get(sessionId);
103
+ if (!session) {
104
+ throw new Error(`Session not found: ${sessionId}`);
105
+ }
106
+ session.context.push(context);
107
+ // Also store in memory for retrieval
108
+ const memoryId = this.llm.addMemory(context, {
109
+ sessionId,
110
+ type: 'context',
111
+ timestamp: new Date().toISOString(),
112
+ });
113
+ session.activeMemoryIds.push(memoryId);
114
+ return memoryId;
115
+ }
116
+ /**
117
+ * Get conversation history
118
+ */
119
+ getHistory(sessionId, limit) {
120
+ const session = this.sessions.get(sessionId);
121
+ if (!session) {
122
+ return [];
123
+ }
124
+ const messages = session.messages;
125
+ return limit ? messages.slice(-limit) : messages;
126
+ }
127
+ /**
128
+ * Clear session history (keep session active)
129
+ */
130
+ clearHistory(sessionId) {
131
+ const session = this.sessions.get(sessionId);
132
+ if (session) {
133
+ session.messages = [];
134
+ session.context = [];
135
+ session.messageCount = 0;
136
+ }
137
+ }
138
+ /**
139
+ * End and delete session
140
+ */
141
+ end(sessionId) {
142
+ return this.sessions.delete(sessionId);
143
+ }
144
+ /**
145
+ * List all active sessions
146
+ */
147
+ list() {
148
+ return Array.from(this.sessions.values());
149
+ }
150
+ /**
151
+ * Export session as JSON
152
+ */
153
+ export(sessionId) {
154
+ const session = this.sessions.get(sessionId);
155
+ if (!session) {
156
+ return null;
157
+ }
158
+ return JSON.stringify(session, null, 2);
159
+ }
160
+ /**
161
+ * Import session from JSON
162
+ */
163
+ import(json) {
164
+ const data = JSON.parse(json);
165
+ const session = {
166
+ ...data,
167
+ createdAt: new Date(data.createdAt),
168
+ messages: data.messages.map((m) => ({
169
+ ...m,
170
+ timestamp: new Date(m.timestamp),
171
+ })),
172
+ };
173
+ this.sessions.set(session.id, session);
174
+ return session;
175
+ }
176
+ /**
177
+ * Build context string from recent messages
178
+ */
179
+ buildContext(session, maxMessages = 10) {
180
+ const recent = session.messages.slice(-maxMessages);
181
+ if (recent.length === 0) {
182
+ return '';
183
+ }
184
+ const contextParts = [];
185
+ // Add persistent context
186
+ if (session.context.length > 0) {
187
+ contextParts.push('Context:\n' + session.context.join('\n'));
188
+ }
189
+ // Add conversation history
190
+ const history = recent
191
+ .map(m => {
192
+ const role = m.role === 'user' ? 'User' : m.role === 'assistant' ? 'Assistant' : 'System';
193
+ return `${role}: ${m.content}`;
194
+ })
195
+ .join('\n');
196
+ if (history) {
197
+ contextParts.push('Conversation:\n' + history);
198
+ }
199
+ return contextParts.join('\n\n');
200
+ }
201
+ }
202
+ exports.SessionManager = SessionManager;
203
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXNzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7R0FFRzs7O0FBU0g7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtCRztBQUNILE1BQWEsY0FBYztJQUl6QixZQUFZLEdBQXNKO1FBSDFKLGFBQVEsR0FBcUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUk3RCxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUNqQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLENBQUMsUUFBa0M7UUFDdkMsTUFBTSxFQUFFLEdBQUcsV0FBVyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDN0UsTUFBTSxPQUFPLEdBQXdCO1lBQ25DLEVBQUU7WUFDRixTQUFTLEVBQUUsSUFBSSxJQUFJLEVBQUU7WUFDckIsWUFBWSxFQUFFLENBQUM7WUFDZixRQUFRLEVBQUUsRUFBRTtZQUNaLE9BQU8sRUFBRSxFQUFFO1lBQ1gsZUFBZSxFQUFFLEVBQUU7WUFDbkIsUUFBUSxFQUFFLFFBQVEsSUFBSSxFQUFFO1NBQ3pCLENBQUM7UUFDRixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDL0IsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsR0FBRyxDQUFDLFNBQWlCO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSSxDQUFDLFNBQWlCLEVBQUUsT0FBZSxFQUFFLE1BQXlCO1FBQ2hFLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxR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QyxJQUFJLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztZQUMxRixPQUFPLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNqQyxDQUFDLENBQUM7YUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFZCxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ1osWUFBWSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxPQUFPLENBQUMsQ0FBQztRQUNqRCxDQUFDO1FBRUQsT0FBTyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ25DLENBQUM7Q0FDRjtBQS9NRCx3Q0ErTUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNlc3Npb24gTWFuYWdlbWVudCBmb3IgbXVsdGktdHVybiBjb252ZXJzYXRpb25zXG4gKi9cblxuaW1wb3J0IHtcbiAgQ29udmVyc2F0aW9uU2Vzc2lvbixcbiAgQ29udmVyc2F0aW9uTWVzc2FnZSxcbiAgUXVlcnlSZXNwb25zZSxcbiAgR2VuZXJhdGlvbkNvbmZpZyxcbn0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogU2Vzc2lvbiBNYW5hZ2VyIGZvciBtdWx0aS10dXJuIGNvbnZlcnNhdGlvbnNcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgUnV2TExNLCBTZXNzaW9uTWFuYWdlciB9IGZyb20gJ0BydXZlY3Rvci9ydXZsbG0nO1xuICpcbiAqIGNvbnN0IGxsbSA9IG5ldyBSdXZMTE0oKTtcbiAqIGNvbnN0IHNlc3Npb25zID0gbmV3IFNlc3Npb25NYW5hZ2VyKGxsbSk7XG4gKlxuICogLy8gQ3JlYXRlIGEgbmV3IHNlc3Npb25cbiAqIGNvbnN0IHNlc3Npb24gPSBzZXNzaW9ucy5jcmVhdGUoKTtcbiAqXG4gKiAvLyBDaGF0IHdpdGggY29udGV4dFxuICogY29uc3QgcmVzcG9uc2UxID0gc2Vzc2lvbnMuY2hhdChzZXNzaW9uLmlkLCAnV2hhdCBpcyBQeXRob24/Jyk7XG4gKiBjb25zdCByZXNwb25zZTIgPSBzZXNzaW9ucy5jaGF0KHNlc3Npb24uaWQsICdIb3cgZG8gSSBpbnN0YWxsIGl0PycpO1xuICogLy8gU2Vjb25kIHF1ZXJ5IGF1dG9tYXRpY2FsbHkgaGFzIGNvbnRleHQgZnJvbSBmaXJzdFxuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBTZXNzaW9uTWFuYWdlciB7XG4gIHByaXZhdGUgc2Vzc2lvbnM6IE1hcDxzdHJpbmcsIENvbnZlcnNhdGlvblNlc3Npb24+ID0gbmV3IE1hcCgpO1xuICBwcml2YXRlIGxsbTogeyBxdWVyeTogKHRleHQ6IHN0cmluZywgY29uZmlnPzogR2VuZXJhdGlvbkNvbmZpZykgPT4gUXVlcnlSZXNwb25zZTsgYWRkTWVtb3J5OiAoY29udGVudDogc3RyaW5nLCBtZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiBudW1iZXIgfTtcblxuICBjb25zdHJ1Y3RvcihsbG06IHsgcXVlcnk6ICh0ZXh0OiBzdHJpbmcsIGNvbmZpZz86IEdlbmVyYXRpb25Db25maWcpID0+IFF1ZXJ5UmVzcG9uc2U7IGFkZE1lbW9yeTogKGNvbnRlbnQ6IHN0cmluZywgbWV0YWRhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4gbnVtYmVyIH0pIHtcbiAgICB0aGlzLmxsbSA9IGxsbTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgY29udmVyc2F0aW9uIHNlc3Npb25cbiAgICovXG4gIGNyZWF0ZShtZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogQ29udmVyc2F0aW9uU2Vzc2lvbiB7XG4gICAgY29uc3QgaWQgPSBgc2Vzc2lvbi0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMiwgOCl9YDtcbiAgICBjb25zdCBzZXNzaW9uOiBDb252ZXJzYXRpb25TZXNzaW9uID0ge1xuICAgICAgaWQsXG4gICAgICBjcmVhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICBtZXNzYWdlQ291bnQ6IDAsXG4gICAgICBtZXNzYWdlczogW10sXG4gICAgICBjb250ZXh0OiBbXSxcbiAgICAgIGFjdGl2ZU1lbW9yeUlkczogW10sXG4gICAgICBtZXRhZGF0YTogbWV0YWRhdGEgPz8ge30sXG4gICAgfTtcbiAgICB0aGlzLnNlc3Npb25zLnNldChpZCwgc2Vzc2lvbik7XG4gICAgcmV0dXJuIHNlc3Npb247XG4gIH1cblxuICAvKipcbiAgICogR2V0IHNlc3Npb24gYnkgSURcbiAgICovXG4gIGdldChzZXNzaW9uSWQ6IHN0cmluZyk6IENvbnZlcnNhdGlvblNlc3Npb24gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnNlc3Npb25zLmdldChzZXNzaW9uSWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoYXQgd2l0aGluIGEgc2Vzc2lvbiAobWFpbnRhaW5zIGNvbnRleHQpXG4gICAqL1xuICBjaGF0KHNlc3Npb25JZDogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcsIGNvbmZpZz86IEdlbmVyYXRpb25Db25maWcpOiBRdWVyeVJlc3BvbnNlIHtcbiAgICBjb25zdCBzZXNzaW9uID0gdGhpcy5zZXNzaW9ucy5nZXQoc2Vzc2lvbklkKTtcbiAgICBpZiAoIXNlc3Npb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgU2Vzc2lvbiBub3QgZm91bmQ6ICR7c2Vzc2lvbklkfWApO1xuICAgIH1cblxuICAgIC8vIEFkZCB1c2VyIG1lc3NhZ2VcbiAgICBzZXNzaW9uLm1lc3NhZ2VzLnB1c2goe1xuICAgICAgcm9sZTogJ3VzZXInLFxuICAgICAgY29udGVudDogbWVzc2FnZSxcbiAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKSxcbiAgICB9KTtcblxuICAgIC8vIEJ1aWxkIGNvbnRleHQgZnJvbSByZWNlbnQgbWVzc2FnZXNcbiAgICBjb25zdCBjb250ZXh0V2luZG93ID0gdGhpcy5idWlsZENvbnRleHQoc2Vzc2lvbik7XG5cbiAgICAvLyBRdWVyeSB3aXRoIGNvbnRleHRcbiAgICBjb25zdCBwcm9tcHQgPSBjb250ZXh0V2luZG93ID8gYCR7Y29udGV4dFdpbmRvd31cXG5cXG5Vc2VyOiAke21lc3NhZ2V9YCA6IG1lc3NhZ2U7XG4gICAgY29uc3QgcmVzcG9uc2UgPSB0aGlzLmxsbS5xdWVyeShwcm9tcHQsIGNvbmZpZyk7XG5cbiAgICAvLyBBZGQgYXNzaXN0YW50IHJlc3BvbnNlXG4gICAgc2Vzc2lvbi5tZXNzYWdlcy5wdXNoKHtcbiAgICAgIHJvbGU6ICdhc3Npc3RhbnQnLFxuICAgICAgY29udGVudDogcmVzcG9uc2UudGV4dCxcbiAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKSxcbiAgICAgIHJlcXVlc3RJZDogcmVzcG9uc2UucmVxdWVzdElkLFxuICAgIH0pO1xuXG4gICAgc2Vzc2lvbi5tZXNzYWdlQ291bnQgPSBzZXNzaW9uLm1lc3NhZ2VzLmxlbmd0aDtcblxuICAgIHJldHVybiByZXNwb25zZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgc3lzdGVtIG1lc3NhZ2UgdG8gc2Vzc2lvblxuICAgKi9cbiAgYWRkU3lzdGVtTWVzc2FnZShzZXNzaW9uSWQ6IHN0cmluZywgY29udGVudDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbnMuZ2V0KHNlc3Npb25JZCk7XG4gICAgaWYgKCFzZXNzaW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFNlc3Npb24gbm90IGZvdW5kOiAke3Nlc3Npb25JZH1gKTtcbiAgICB9XG5cbiAgICBzZXNzaW9uLm1lc3NhZ2VzLnB1c2goe1xuICAgICAgcm9sZTogJ3N5c3RlbScsXG4gICAgICBjb250ZW50LFxuICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLFxuICAgIH0pO1xuICAgIHNlc3Npb24ubWVzc2FnZUNvdW50ID0gc2Vzc2lvbi5tZXNzYWdlcy5sZW5ndGg7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGNvbnRleHQgdG8gc2Vzc2lvbiAocGVyc2lzdGVkIHRvIG1lbW9yeSlcbiAgICovXG4gIGFkZENvbnRleHQoc2Vzc2lvbklkOiBzdHJpbmcsIGNvbnRleHQ6IHN0cmluZyk6IG51bWJlciB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbnMuZ2V0KHNlc3Npb25JZCk7XG4gICAgaWYgKCFzZXNzaW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFNlc3Npb24gbm90IGZvdW5kOiAke3Nlc3Npb25JZH1gKTtcbiAgICB9XG5cbiAgICBzZXNzaW9uLmNvbnRleHQucHVzaChjb250ZXh0KTtcblxuICAgIC8vIEFsc28gc3RvcmUgaW4gbWVtb3J5IGZvciByZXRyaWV2YWxcbiAgICBjb25zdCBtZW1vcnlJZCA9IHRoaXMubGxtLmFkZE1lbW9yeShjb250ZXh0LCB7XG4gICAgICBzZXNzaW9uSWQsXG4gICAgICB0eXBlOiAnY29udGV4dCcsXG4gICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICB9KTtcblxuICAgIHNlc3Npb24uYWN0aXZlTWVtb3J5SWRzLnB1c2gobWVtb3J5SWQpO1xuICAgIHJldHVybiBtZW1vcnlJZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY29udmVyc2F0aW9uIGhpc3RvcnlcbiAgICovXG4gIGdldEhpc3Rvcnkoc2Vzc2lvbklkOiBzdHJpbmcsIGxpbWl0PzogbnVtYmVyKTogQ29udmVyc2F0aW9uTWVzc2FnZVtdIHtcbiAgICBjb25zdCBzZXNzaW9uID0gdGhpcy5zZXNzaW9ucy5nZXQoc2Vzc2lvbklkKTtcbiAgICBpZiAoIXNlc3Npb24pIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCBtZXNzYWdlcyA9IHNlc3Npb24ubWVzc2FnZXM7XG4gICAgcmV0dXJuIGxpbWl0ID8gbWVzc2FnZXMuc2xpY2UoLWxpbWl0KSA6IG1lc3NhZ2VzO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIHNlc3Npb24gaGlzdG9yeSAoa2VlcCBzZXNzaW9uIGFjdGl2ZSlcbiAgICovXG4gIGNsZWFySGlzdG9yeShzZXNzaW9uSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHNlc3Npb24gPSB0aGlzLnNlc3Npb25zLmdldChzZXNzaW9uSWQpO1xuICAgIGlmIChzZXNzaW9uKSB7XG4gICAgICBzZXNzaW9uLm1lc3NhZ2VzID0gW107XG4gICAgICBzZXNzaW9uLmNvbnRleHQgPSBbXTtcbiAgICAgIHNlc3Npb24ubWVzc2FnZUNvdW50ID0gMDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRW5kIGFuZCBkZWxldGUgc2Vzc2lvblxuICAgKi9cbiAgZW5kKHNlc3Npb25JZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbnMuZGVsZXRlKHNlc3Npb25JZCk7XG4gIH1cblxuICAvKipcbiAgICogTGlzdCBhbGwgYWN0aXZlIHNlc3Npb25zXG4gICAqL1xuICBsaXN0KCk6IENvbnZlcnNhdGlvblNlc3Npb25bXSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5zZXNzaW9ucy52YWx1ZXMoKSk7XG4gIH1cblxuICAvKipcbiAgICogRXhwb3J0IHNlc3Npb24gYXMgSlNPTlxuICAgKi9cbiAgZXhwb3J0KHNlc3Npb25JZDogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbnMuZ2V0KHNlc3Npb25JZCk7XG4gICAgaWYgKCFzZXNzaW9uKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoc2Vzc2lvbiwgbnVsbCwgMik7XG4gIH1cblxuICAvKipcbiAgICogSW1wb3J0IHNlc3Npb24gZnJvbSBKU09OXG4gICAqL1xuICBpbXBvcnQoanNvbjogc3RyaW5nKTogQ29udmVyc2F0aW9uU2Vzc2lvbiB7XG4gICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoanNvbik7XG4gICAgY29uc3Qgc2Vzc2lvbjogQ29udmVyc2F0aW9uU2Vzc2lvbiA9IHtcbiAgICAgIC4uLmRhdGEsXG4gICAgICBjcmVhdGVkQXQ6IG5ldyBEYXRlKGRhdGEuY3JlYXRlZEF0KSxcbiAgICAgIG1lc3NhZ2VzOiBkYXRhLm1lc3NhZ2VzLm1hcCgobTogQ29udmVyc2F0aW9uTWVzc2FnZSkgPT4gKHtcbiAgICAgICAgLi4ubSxcbiAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZShtLnRpbWVzdGFtcCksXG4gICAgICB9KSksXG4gICAgfTtcblxuICAgIHRoaXMuc2Vzc2lvbnMuc2V0KHNlc3Npb24uaWQsIHNlc3Npb24pO1xuICAgIHJldHVybiBzZXNzaW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGNvbnRleHQgc3RyaW5nIGZyb20gcmVjZW50IG1lc3NhZ2VzXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkQ29udGV4dChzZXNzaW9uOiBDb252ZXJzYXRpb25TZXNzaW9uLCBtYXhNZXNzYWdlcyA9IDEwKTogc3RyaW5nIHtcbiAgICBjb25zdCByZWNlbnQgPSBzZXNzaW9uLm1lc3NhZ2VzLnNsaWNlKC1tYXhNZXNzYWdlcyk7XG4gICAgaWYgKHJlY2VudC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBjb25zdCBjb250ZXh0UGFydHM6IHN0cmluZ1tdID0gW107XG5cbiAgICAvLyBBZGQgcGVyc2lzdGVudCBjb250ZXh0XG4gICAgaWYgKHNlc3Npb24uY29udGV4dC5sZW5ndGggPiAwKSB7XG4gICAgICBjb250ZXh0UGFydHMucHVzaCgnQ29udGV4dDpcXG4nICsgc2Vzc2lvbi5jb250ZXh0LmpvaW4oJ1xcbicpKTtcbiAgICB9XG5cbiAgICAvLyBBZGQgY29udmVyc2F0aW9uIGhpc3RvcnlcbiAgICBjb25zdCBoaXN0b3J5ID0gcmVjZW50XG4gICAgICAubWFwKG0gPT4ge1xuICAgICAgICBjb25zdCByb2xlID0gbS5yb2xlID09PSAndXNlcicgPyAnVXNlcicgOiBtLnJvbGUgPT09ICdhc3Npc3RhbnQnID8gJ0Fzc2lzdGFudCcgOiAnU3lzdGVtJztcbiAgICAgICAgcmV0dXJuIGAke3JvbGV9OiAke20uY29udGVudH1gO1xuICAgICAgfSlcbiAgICAgIC5qb2luKCdcXG4nKTtcblxuICAgIGlmIChoaXN0b3J5KSB7XG4gICAgICBjb250ZXh0UGFydHMucHVzaCgnQ29udmVyc2F0aW9uOlxcbicgKyBoaXN0b3J5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udGV4dFBhcnRzLmpvaW4oJ1xcblxcbicpO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,90 @@
1
+ /**
2
+ * SIMD Operations for vector computations
3
+ *
4
+ * Uses native SIMD instructions (AVX2/AVX512/SSE4.1/NEON) when available,
5
+ * falls back to JavaScript implementations otherwise.
6
+ */
7
+ /**
8
+ * SIMD Operations class
9
+ *
10
+ * Provides hardware-accelerated vector operations when native module is available.
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * import { SimdOps } from '@ruvector/ruvllm';
15
+ *
16
+ * const simd = new SimdOps();
17
+ *
18
+ * // Compute dot product
19
+ * const result = simd.dotProduct([1, 2, 3], [4, 5, 6]);
20
+ * console.log(result); // 32
21
+ *
22
+ * // Check capabilities
23
+ * console.log(simd.capabilities()); // ['AVX2', 'FMA']
24
+ * ```
25
+ */
26
+ export declare class SimdOps {
27
+ private native;
28
+ constructor();
29
+ /**
30
+ * Compute dot product of two vectors
31
+ */
32
+ dotProduct(a: number[], b: number[]): number;
33
+ /**
34
+ * Compute cosine similarity between two vectors
35
+ */
36
+ cosineSimilarity(a: number[], b: number[]): number;
37
+ /**
38
+ * Compute L2 (Euclidean) distance between two vectors
39
+ */
40
+ l2Distance(a: number[], b: number[]): number;
41
+ /**
42
+ * Matrix-vector multiplication
43
+ */
44
+ matvec(matrix: number[][], vector: number[]): number[];
45
+ /**
46
+ * Softmax activation function
47
+ */
48
+ softmax(input: number[]): number[];
49
+ /**
50
+ * Element-wise addition
51
+ */
52
+ add(a: number[], b: number[]): number[];
53
+ /**
54
+ * Element-wise multiplication
55
+ */
56
+ mul(a: number[], b: number[]): number[];
57
+ /**
58
+ * Scale vector by scalar
59
+ */
60
+ scale(a: number[], scalar: number): number[];
61
+ /**
62
+ * Normalize vector to unit length
63
+ */
64
+ normalize(a: number[]): number[];
65
+ /**
66
+ * ReLU activation
67
+ */
68
+ relu(input: number[]): number[];
69
+ /**
70
+ * GELU activation (approximate)
71
+ */
72
+ gelu(input: number[]): number[];
73
+ /**
74
+ * Sigmoid activation
75
+ */
76
+ sigmoid(input: number[]): number[];
77
+ /**
78
+ * Layer normalization
79
+ */
80
+ layerNorm(input: number[], eps?: number): number[];
81
+ /**
82
+ * Check if native SIMD is available
83
+ */
84
+ isNative(): boolean;
85
+ /**
86
+ * Get available SIMD capabilities
87
+ */
88
+ capabilities(): string[];
89
+ }
90
+ //# sourceMappingURL=simd.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simd.d.ts","sourceRoot":"","sources":["../../src/simd.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,OAAO;IAClB,OAAO,CAAC,MAAM,CAA8B;;IAa5C;;OAEG;IACH,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM;IAc5C;;OAEG;IACH,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM;IAqBlD;;OAEG;IACH,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM;IAe5C;;OAEG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE;IAStD;;OAEG;IACH,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE;IAYlC;;OAEG;IACH,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE;IASvC;;OAEG;IACH,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE;IASvC;;OAEG;IACH,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE;IAI5C;;OAEG;IACH,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE;IAKhC;;OAEG;IACH,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE;IAI/B;;OAEG;IACH,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE;IAM/B;;OAEG;IACH,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE;IAIlC;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,GAAG,SAAO,GAAG,MAAM,EAAE;IAOhD;;OAEG;IACH,QAAQ,IAAI,OAAO;IAInB;;OAEG;IACH,YAAY,IAAI,MAAM,EAAE;CAkBzB"}