@aid-framework/runtime 0.0.0 → 0.1.48

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 (188) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +183 -0
  3. package/dist/.tsbuildinfo +1 -0
  4. package/dist/agents/deep_agents.d.ts +78 -0
  5. package/dist/agents/deep_agents.d.ts.map +1 -0
  6. package/dist/agents/deep_agents.js +477 -0
  7. package/dist/agents/deep_agents.js.map +1 -0
  8. package/dist/agents/engine.d.ts +85 -0
  9. package/dist/agents/engine.d.ts.map +1 -0
  10. package/dist/agents/engine.js +129 -0
  11. package/dist/agents/engine.js.map +1 -0
  12. package/dist/agents/gateway_chat_model.d.ts +151 -0
  13. package/dist/agents/gateway_chat_model.d.ts.map +1 -0
  14. package/dist/agents/gateway_chat_model.js +350 -0
  15. package/dist/agents/gateway_chat_model.js.map +1 -0
  16. package/dist/agents/guardrail_middleware.d.ts +57 -0
  17. package/dist/agents/guardrail_middleware.d.ts.map +1 -0
  18. package/dist/agents/guardrail_middleware.js +85 -0
  19. package/dist/agents/guardrail_middleware.js.map +1 -0
  20. package/dist/agents/guardrails.d.ts +124 -0
  21. package/dist/agents/guardrails.d.ts.map +1 -0
  22. package/dist/agents/guardrails.js +336 -0
  23. package/dist/agents/guardrails.js.map +1 -0
  24. package/dist/agents/index.d.ts +15 -0
  25. package/dist/agents/index.d.ts.map +1 -0
  26. package/dist/agents/index.js +15 -0
  27. package/dist/agents/index.js.map +1 -0
  28. package/dist/agents/ir.d.ts +144 -0
  29. package/dist/agents/ir.d.ts.map +1 -0
  30. package/dist/agents/ir.js +513 -0
  31. package/dist/agents/ir.js.map +1 -0
  32. package/dist/agents/loop.d.ts +145 -0
  33. package/dist/agents/loop.d.ts.map +1 -0
  34. package/dist/agents/loop.js +1025 -0
  35. package/dist/agents/loop.js.map +1 -0
  36. package/dist/agents/memory.d.ts +115 -0
  37. package/dist/agents/memory.d.ts.map +1 -0
  38. package/dist/agents/memory.js +258 -0
  39. package/dist/agents/memory.js.map +1 -0
  40. package/dist/agents/state.d.ts +137 -0
  41. package/dist/agents/state.d.ts.map +1 -0
  42. package/dist/agents/state.js +255 -0
  43. package/dist/agents/state.js.map +1 -0
  44. package/dist/concurrency.d.ts +36 -0
  45. package/dist/concurrency.d.ts.map +1 -0
  46. package/dist/concurrency.js +86 -0
  47. package/dist/concurrency.js.map +1 -0
  48. package/dist/control.d.ts +116 -0
  49. package/dist/control.d.ts.map +1 -0
  50. package/dist/control.js +281 -0
  51. package/dist/control.js.map +1 -0
  52. package/dist/cost.d.ts +95 -0
  53. package/dist/cost.d.ts.map +1 -0
  54. package/dist/cost.js +161 -0
  55. package/dist/cost.js.map +1 -0
  56. package/dist/errors.d.ts +213 -0
  57. package/dist/errors.d.ts.map +1 -0
  58. package/dist/errors.js +316 -0
  59. package/dist/errors.js.map +1 -0
  60. package/dist/evals/dataset.d.ts +45 -0
  61. package/dist/evals/dataset.d.ts.map +1 -0
  62. package/dist/evals/dataset.js +147 -0
  63. package/dist/evals/dataset.js.map +1 -0
  64. package/dist/evals/gate.d.ts +236 -0
  65. package/dist/evals/gate.d.ts.map +1 -0
  66. package/dist/evals/gate.js +572 -0
  67. package/dist/evals/gate.js.map +1 -0
  68. package/dist/evals/metrics.d.ts +141 -0
  69. package/dist/evals/metrics.d.ts.map +1 -0
  70. package/dist/evals/metrics.js +364 -0
  71. package/dist/evals/metrics.js.map +1 -0
  72. package/dist/evals/predicate.d.ts +79 -0
  73. package/dist/evals/predicate.d.ts.map +1 -0
  74. package/dist/evals/predicate.js +178 -0
  75. package/dist/evals/predicate.js.map +1 -0
  76. package/dist/evals/runner.d.ts +94 -0
  77. package/dist/evals/runner.d.ts.map +1 -0
  78. package/dist/evals/runner.js +202 -0
  79. package/dist/evals/runner.js.map +1 -0
  80. package/dist/gateway.d.ts +118 -0
  81. package/dist/gateway.d.ts.map +1 -0
  82. package/dist/gateway.js +250 -0
  83. package/dist/gateway.js.map +1 -0
  84. package/dist/index.d.ts +83 -0
  85. package/dist/index.d.ts.map +1 -0
  86. package/dist/index.js +59 -0
  87. package/dist/index.js.map +1 -0
  88. package/dist/internal/json.d.ts +44 -0
  89. package/dist/internal/json.d.ts.map +1 -0
  90. package/dist/internal/json.js +90 -0
  91. package/dist/internal/json.js.map +1 -0
  92. package/dist/internal/text.d.ts +17 -0
  93. package/dist/internal/text.d.ts.map +1 -0
  94. package/dist/internal/text.js +22 -0
  95. package/dist/internal/text.js.map +1 -0
  96. package/dist/pipeline.d.ts +80 -0
  97. package/dist/pipeline.d.ts.map +1 -0
  98. package/dist/pipeline.js +159 -0
  99. package/dist/pipeline.js.map +1 -0
  100. package/dist/policy.d.ts +52 -0
  101. package/dist/policy.d.ts.map +1 -0
  102. package/dist/policy.js +199 -0
  103. package/dist/policy.js.map +1 -0
  104. package/dist/prompts.d.ts +86 -0
  105. package/dist/prompts.d.ts.map +1 -0
  106. package/dist/prompts.js +337 -0
  107. package/dist/prompts.js.map +1 -0
  108. package/dist/providers/base.d.ts +19 -0
  109. package/dist/providers/base.d.ts.map +1 -0
  110. package/dist/providers/base.js +13 -0
  111. package/dist/providers/base.js.map +1 -0
  112. package/dist/providers/fake.d.ts +98 -0
  113. package/dist/providers/fake.d.ts.map +1 -0
  114. package/dist/providers/fake.js +181 -0
  115. package/dist/providers/fake.js.map +1 -0
  116. package/dist/providers/http.d.ts +62 -0
  117. package/dist/providers/http.d.ts.map +1 -0
  118. package/dist/providers/http.js +245 -0
  119. package/dist/providers/http.js.map +1 -0
  120. package/dist/retrieval/chunking.d.ts +88 -0
  121. package/dist/retrieval/chunking.d.ts.map +1 -0
  122. package/dist/retrieval/chunking.js +188 -0
  123. package/dist/retrieval/chunking.js.map +1 -0
  124. package/dist/retrieval/citations.d.ts +98 -0
  125. package/dist/retrieval/citations.d.ts.map +1 -0
  126. package/dist/retrieval/citations.js +134 -0
  127. package/dist/retrieval/citations.js.map +1 -0
  128. package/dist/retrieval/connectors.d.ts +74 -0
  129. package/dist/retrieval/connectors.d.ts.map +1 -0
  130. package/dist/retrieval/connectors.js +218 -0
  131. package/dist/retrieval/connectors.js.map +1 -0
  132. package/dist/retrieval/embedding.d.ts +116 -0
  133. package/dist/retrieval/embedding.d.ts.map +1 -0
  134. package/dist/retrieval/embedding.js +282 -0
  135. package/dist/retrieval/embedding.js.map +1 -0
  136. package/dist/retrieval/gate.d.ts +52 -0
  137. package/dist/retrieval/gate.d.ts.map +1 -0
  138. package/dist/retrieval/gate.js +91 -0
  139. package/dist/retrieval/gate.js.map +1 -0
  140. package/dist/retrieval/hybrid.d.ts +76 -0
  141. package/dist/retrieval/hybrid.d.ts.map +1 -0
  142. package/dist/retrieval/hybrid.js +150 -0
  143. package/dist/retrieval/hybrid.js.map +1 -0
  144. package/dist/retrieval/metrics.d.ts +126 -0
  145. package/dist/retrieval/metrics.d.ts.map +1 -0
  146. package/dist/retrieval/metrics.js +200 -0
  147. package/dist/retrieval/metrics.js.map +1 -0
  148. package/dist/retrieval/pgvector.d.ts +62 -0
  149. package/dist/retrieval/pgvector.d.ts.map +1 -0
  150. package/dist/retrieval/pgvector.js +262 -0
  151. package/dist/retrieval/pgvector.js.map +1 -0
  152. package/dist/retrieval/rerank.d.ts +61 -0
  153. package/dist/retrieval/rerank.d.ts.map +1 -0
  154. package/dist/retrieval/rerank.js +105 -0
  155. package/dist/retrieval/rerank.js.map +1 -0
  156. package/dist/retrieval/retriever.d.ts +125 -0
  157. package/dist/retrieval/retriever.d.ts.map +1 -0
  158. package/dist/retrieval/retriever.js +281 -0
  159. package/dist/retrieval/retriever.js.map +1 -0
  160. package/dist/retrieval/stores.d.ts +106 -0
  161. package/dist/retrieval/stores.d.ts.map +1 -0
  162. package/dist/retrieval/stores.js +142 -0
  163. package/dist/retrieval/stores.js.map +1 -0
  164. package/dist/retrieval/types.d.ts +314 -0
  165. package/dist/retrieval/types.d.ts.map +1 -0
  166. package/dist/retrieval/types.js +388 -0
  167. package/dist/retrieval/types.js.map +1 -0
  168. package/dist/steps.d.ts +156 -0
  169. package/dist/steps.d.ts.map +1 -0
  170. package/dist/steps.js +199 -0
  171. package/dist/steps.js.map +1 -0
  172. package/dist/structured.d.ts +91 -0
  173. package/dist/structured.d.ts.map +1 -0
  174. package/dist/structured.js +155 -0
  175. package/dist/structured.js.map +1 -0
  176. package/dist/tools.d.ts +100 -0
  177. package/dist/tools.d.ts.map +1 -0
  178. package/dist/tools.js +201 -0
  179. package/dist/tools.js.map +1 -0
  180. package/dist/tracing.d.ts +104 -0
  181. package/dist/tracing.d.ts.map +1 -0
  182. package/dist/tracing.js +155 -0
  183. package/dist/tracing.js.map +1 -0
  184. package/dist/types.d.ts +240 -0
  185. package/dist/types.d.ts.map +1 -0
  186. package/dist/types.js +357 -0
  187. package/dist/types.js.map +1 -0
  188. package/package.json +80 -14
@@ -0,0 +1,181 @@
1
+ /**
2
+ * A deterministic provider for tests.
3
+ *
4
+ * This is not a mock in the "returns a canned value" sense. It is a *seeded
5
+ * simulation* of a probabilistic model: given the same seed and the same request it
6
+ * produces byte-identical output, but it deliberately answers correctly only a
7
+ * configurable fraction of the time. That is the whole point -- it lets the eval gate
8
+ * be tested against genuine non-determinism, so a test can prove that run-to-run
9
+ * variation is tolerated while a real regression is caught.
10
+ *
11
+ * ## One documented divergence from the Python runtime
12
+ *
13
+ * The reference implementation draws its accuracy sample from
14
+ * `random.Random("seed:index:prompt").random()`, which is CPython's Mersenne Twister
15
+ * seeded from a string. That seeding is a CPython implementation detail with no
16
+ * portable equivalent, so this runtime draws from a SHA-256 hash of the same triple
17
+ * instead. The properties the gate depends on are preserved:
18
+ *
19
+ * - the draw is a pure function of `(seed, call index, prompt)`, so a recorded
20
+ * baseline reproduces exactly;
21
+ * - the call index is part of the input, so re-running a dataset re-draws every case
22
+ * and an N-run sample genuinely varies.
23
+ *
24
+ * What is *not* claimed is that the two runtimes draw the same number. They do not,
25
+ * and no test in either runtime should assert that they do.
26
+ */
27
+ import { ProviderError } from '../errors.js';
28
+ import { digestPrefix, sha256Hex } from '../internal/json.js';
29
+ import { CompletionResponse, TokenUsage, ToolCall, } from '../types.js';
30
+ /**
31
+ * One scripted model turn: some text, some tool calls, or both.
32
+ *
33
+ * `calls` is `(name, arguments)` pairs rather than `ToolCall` because a script should not
34
+ * have to invent unique call ids. The provider derives `call_<turn>_<position>` from the
35
+ * turn's position in the script, so two turns calling the same tool still produce
36
+ * distinguishable ids.
37
+ */
38
+ export class ScriptedTurn {
39
+ text;
40
+ calls;
41
+ constructor(text, calls) {
42
+ this.text = text;
43
+ this.calls = calls;
44
+ }
45
+ static answer(text) {
46
+ return new ScriptedTurn(text, []);
47
+ }
48
+ static tool(name, arguments_ = {}) {
49
+ return new ScriptedTurn('', [[name, { ...arguments_ }]]);
50
+ }
51
+ static tools(...calls) {
52
+ return new ScriptedTurn('', calls);
53
+ }
54
+ get finishReason() {
55
+ return this.calls.length > 0 ? 'tool-calls' : 'stop';
56
+ }
57
+ toolCalls(turn) {
58
+ return this.calls.map(([name, arguments_], position) => new ToolCall({ id: `call_${turn}_${position}`, name, arguments: { ...arguments_ } }));
59
+ }
60
+ }
61
+ /** Deterministic, seedable, and optionally inaccurate. */
62
+ export class FakeProvider {
63
+ _responder;
64
+ _answers;
65
+ _script;
66
+ _accuracy;
67
+ _seed;
68
+ _name;
69
+ _failures;
70
+ _tokensPerChar;
71
+ _overheadTokens;
72
+ _served = 0;
73
+ /** Every request this provider has seen, in order. */
74
+ calls = [];
75
+ constructor(options = {}) {
76
+ const accuracy = options.accuracy ?? 1.0;
77
+ if (!(accuracy >= 0.0 && accuracy <= 1.0)) {
78
+ throw new RangeError('accuracy must be between 0.0 and 1.0');
79
+ }
80
+ this._responder = options.responder;
81
+ this._answers = new Map(Object.entries(options.answers ?? {}));
82
+ // A script is consumed one turn per call, then the provider behaves normally -- so a
83
+ // scripted loop that overshoots its script is visible rather than silently answered.
84
+ this._script = [...(options.script ?? [])];
85
+ this._accuracy = accuracy;
86
+ this._seed = options.seed ?? 0;
87
+ this._name = options.name ?? 'fake';
88
+ this._failures = [...(options.failWith ?? [])];
89
+ this._tokensPerChar = options.tokensPerChar ?? 0.25;
90
+ this._overheadTokens = options.overheadTokens ?? 8;
91
+ }
92
+ get name() {
93
+ return this._name;
94
+ }
95
+ get capabilities() {
96
+ return new Set(['tool-calling', 'structured-output', 'long-context']);
97
+ }
98
+ async complete(request, model) {
99
+ this.calls.push(request);
100
+ const index = this.calls.length - 1;
101
+ const failure = this._failures.shift();
102
+ if (failure !== undefined)
103
+ throw new ProviderError(failure);
104
+ const inputTokens = this.countTokens(promptText(request));
105
+ const turn = this._served < this._script.length ? this._script[this._served] : undefined;
106
+ if (turn !== undefined) {
107
+ this._served += 1;
108
+ return new CompletionResponse({
109
+ text: turn.text,
110
+ model: model.name,
111
+ provider: this._name,
112
+ usage: new TokenUsage({
113
+ inputTokens,
114
+ outputTokens: this.countTokens(turn.text),
115
+ }),
116
+ toolCalls: turn.toolCalls(this._served - 1),
117
+ finishReason: turn.finishReason,
118
+ });
119
+ }
120
+ const text = this.respondTo(request, index);
121
+ return new CompletionResponse({
122
+ text,
123
+ model: model.name,
124
+ provider: this._name,
125
+ usage: new TokenUsage({
126
+ inputTokens,
127
+ outputTokens: this.countTokens(text),
128
+ }),
129
+ finishReason: 'stop',
130
+ });
131
+ }
132
+ async close() {
133
+ return;
134
+ }
135
+ respondTo(request, index) {
136
+ if (this._responder !== undefined)
137
+ return this._responder(request, index);
138
+ const prompt = promptText(request);
139
+ let ideal = this._answers.get(prompt);
140
+ if (ideal === undefined) {
141
+ for (const [key, value] of this._answers) {
142
+ if (prompt.includes(key)) {
143
+ ideal = value;
144
+ break;
145
+ }
146
+ }
147
+ }
148
+ if (ideal === undefined) {
149
+ // No expectation to hit, so accuracy does not apply: echo deterministically.
150
+ return `echo:${digestPrefix(`${this._seed}:${prompt}`)}`;
151
+ }
152
+ if (this._accuracy >= 1.0)
153
+ return ideal;
154
+ if (this.draw(prompt, index) < this._accuracy)
155
+ return ideal;
156
+ // A wrong answer must still be deterministic and visibly wrong.
157
+ return `${ideal}#${digestPrefix(`${this._seed + index}:${prompt}`)}`;
158
+ }
159
+ /**
160
+ * A stable pseudo-random draw in `[0, 1)` for this `(seed, index, prompt)` triple.
161
+ *
162
+ * See the module comment: this is a hash, not CPython's PRNG, and the divergence is
163
+ * deliberate and documented.
164
+ */
165
+ draw(prompt, index) {
166
+ const hex = sha256Hex(`${this._seed}:${index}:${prompt}`).slice(0, 16);
167
+ return Number(BigInt(`0x${hex}`)) / 2 ** 64;
168
+ }
169
+ countTokens(text) {
170
+ return Math.trunc(text.length * this._tokensPerChar) + this._overheadTokens;
171
+ }
172
+ }
173
+ /** The concatenated message text, which is what a provider keys its answers on. */
174
+ export function promptText(request) {
175
+ return request.messages.map((message) => message.content).join('\n');
176
+ }
177
+ /** Convenience factory used by the eval-gate tests. */
178
+ export function withAccuracy(accuracy, options = {}) {
179
+ return new FakeProvider({ accuracy, seed: options.seed ?? 0 });
180
+ }
181
+ //# sourceMappingURL=fake.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fake.js","sourceRoot":"","sources":["../../src/providers/fake.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAGL,kBAAkB,EAGlB,UAAU,EACV,QAAQ,GACT,MAAM,aAAa,CAAC;AAMrB;;;;;;;GAOG;AACH,MAAM,OAAO,YAAY;IACd,IAAI,CAAS;IACb,KAAK,CAAoE;IAElF,YACE,IAAY,EACZ,KAAwE;QAExE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,IAAY;QACxB,OAAO,IAAI,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACpC,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,IAAY,EAAE,UAAU,GAAsC,EAAE;QAC1E,OAAO,IAAI,YAAY,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,GAAG,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,CAAC,KAAK,CACV,GAAG,KAAwE;QAE3E,OAAO,IAAI,YAAY,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IACrC,CAAC;IAED,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC;IACvD,CAAC;IAED,SAAS,CAAC,IAAY;QACpB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CACnB,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,QAAQ,EAAE,EAAE,CAC/B,IAAI,QAAQ,CAAC,EAAE,EAAE,EAAE,QAAQ,IAAI,IAAI,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,GAAG,UAAU,EAAE,EAAE,CAAC,CACvF,CAAC;IACJ,CAAC;CACF;AAiBD,0DAA0D;AAC1D,MAAM,OAAO,YAAY;IACN,UAAU,CAAwB;IAClC,QAAQ,CAA8B;IACtC,OAAO,CAA0B;IACjC,SAAS,CAAS;IAClB,KAAK,CAAS;IACd,KAAK,CAAS;IACd,SAAS,CAAW;IACpB,cAAc,CAAS;IACvB,eAAe,CAAS;IACjC,OAAO,GAAG,CAAC,CAAC;IAEpB,sDAAsD;IAC7C,KAAK,GAAwB,EAAE,CAAC;IAEzC,YAAY,OAAO,GAAwB,EAAE;QAC3C,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,GAAG,CAAC;QACzC,IAAI,CAAC,CAAC,QAAQ,IAAI,GAAG,IAAI,QAAQ,IAAI,GAAG,CAAC,EAAE,CAAC;YAC1C,MAAM,IAAI,UAAU,CAAC,sCAAsC,CAAC,CAAC;QAC/D,CAAC;QACD,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC;QACpC,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;QAC/D,qFAAqF;QACrF,qFAAqF;QACrF,IAAI,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC;QAC3C,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC;QAC/B,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,IAAI,MAAM,CAAC;QACpC,IAAI,CAAC,SAAS,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC;QAC/C,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,aAAa,IAAI,IAAI,CAAC;QACpD,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,cAAc,IAAI,CAAC,CAAC;IACrD,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,IAAI,YAAY;QACd,OAAO,IAAI,GAAG,CAAa,CAAC,cAAc,EAAE,mBAAmB,EAAE,cAAc,CAAC,CAAC,CAAC;IACpF,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,OAA0B,EAAE,KAAgB;QACzD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QAEpC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QACvC,IAAI,OAAO,KAAK,SAAS;YAAE,MAAM,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;QAE5D,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;QAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACzF,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC;YAClB,OAAO,IAAI,kBAAkB,CAAC;gBAC5B,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,KAAK,EAAE,KAAK,CAAC,IAAI;gBACjB,QAAQ,EAAE,IAAI,CAAC,KAAK;gBACpB,KAAK,EAAE,IAAI,UAAU,CAAC;oBACpB,WAAW;oBACX,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;iBAC1C,CAAC;gBACF,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;gBAC3C,YAAY,EAAE,IAAI,CAAC,YAAY;aAChC,CAAC,CAAC;QACL,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC5C,OAAO,IAAI,kBAAkB,CAAC;YAC5B,IAAI;YACJ,KAAK,EAAE,KAAK,CAAC,IAAI;YACjB,QAAQ,EAAE,IAAI,CAAC,KAAK;YACpB,KAAK,EAAE,IAAI,UAAU,CAAC;gBACpB,WAAW;gBACX,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;aACrC,CAAC;YACF,YAAY,EAAE,MAAM;SACrB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,KAAK;QACT,OAAO;IACT,CAAC;IAEO,SAAS,CAAC,OAA0B,EAAE,KAAa;QACzD,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAE1E,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;QACnC,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACtC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACzC,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;oBACzB,KAAK,GAAG,KAAK,CAAC;oBACd,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,6EAA6E;YAC7E,OAAO,QAAQ,YAAY,CAAC,GAAG,IAAI,CAAC,KAAK,IAAI,MAAM,EAAE,CAAC,EAAE,CAAC;QAC3D,CAAC;QAED,IAAI,IAAI,CAAC,SAAS,IAAI,GAAG;YAAE,OAAO,KAAK,CAAC;QACxC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS;YAAE,OAAO,KAAK,CAAC;QAC5D,gEAAgE;QAChE,OAAO,GAAG,KAAK,IAAI,YAAY,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,MAAM,EAAE,CAAC,EAAE,CAAC;IACvE,CAAC;IAED;;;;;OAKG;IACK,IAAI,CAAC,MAAc,EAAE,KAAa;QACxC,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC,KAAK,IAAI,KAAK,IAAI,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACvE,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;IAC9C,CAAC;IAEO,WAAW,CAAC,IAAY;QAC9B,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC;IAC9E,CAAC;CACF;AAED,mFAAmF;AACnF,MAAM,UAAU,UAAU,CAAC,OAA0B;IACnD,OAAO,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACvE,CAAC;AAED,uDAAuD;AACvD,MAAM,UAAU,YAAY,CAC1B,QAAgB,EAChB,OAAO,GAA+B,EAAE;IAExC,OAAO,IAAI,YAAY,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC;AACjE,CAAC"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * A provider for any OpenAI-compatible chat-completions endpoint.
3
+ *
4
+ * One adapter covers OpenAI, Azure OpenAI, vLLM, Ollama, Together, Groq and most
5
+ * others, because they all speak the same request and response shape. Providers that
6
+ * diverge are handled by writing a new {@link Provider}, not by adding flags here.
7
+ *
8
+ * Note the capability list: `long-context` is not claimed. Whether a given deployment
9
+ * has a large window is a property of the deployment, not of the wire protocol, so
10
+ * claiming it here would let the gateway route a request that the endpoint then
11
+ * rejects.
12
+ */
13
+ import { type Capability, type CompletionRequest, CompletionResponse, type ModelSpec } from '../types.js';
14
+ import type { Provider } from './base.js';
15
+ /** The public OpenAI endpoint, used when no base URL is configured. */
16
+ export declare const DEFAULT_BASE_URL = "https://api.openai.com/v1";
17
+ export type FetchLike = (url: string, init: {
18
+ readonly method: string;
19
+ readonly headers: Readonly<Record<string, string>>;
20
+ readonly body: string;
21
+ readonly signal?: AbortSignal;
22
+ }) => Promise<{
23
+ readonly ok: boolean;
24
+ readonly status: number;
25
+ text(): Promise<string>;
26
+ }>;
27
+ export interface OpenAICompatibleOptions {
28
+ readonly baseUrl?: string;
29
+ readonly apiKey?: string;
30
+ readonly name?: string;
31
+ readonly timeoutSeconds?: number;
32
+ readonly maxAttempts?: number;
33
+ readonly backoffSeconds?: number;
34
+ /** Supplied by tests, or to share a connection pool. */
35
+ readonly fetchImpl?: FetchLike;
36
+ readonly extraHeaders?: Readonly<Record<string, string>>;
37
+ }
38
+ /** Talks to an OpenAI-compatible `/chat/completions` endpoint. */
39
+ export declare class OpenAICompatibleProvider implements Provider {
40
+ private readonly _baseUrl;
41
+ private readonly _apiKey;
42
+ private readonly _name;
43
+ private readonly _timeoutSeconds;
44
+ private readonly _maxAttempts;
45
+ private readonly _backoffSeconds;
46
+ private readonly _fetch;
47
+ private readonly _extraHeaders;
48
+ private _closed;
49
+ constructor(options?: OpenAICompatibleOptions);
50
+ get name(): string;
51
+ get capabilities(): ReadonlySet<Capability>;
52
+ complete(request: CompletionRequest, model: ModelSpec): Promise<CompletionResponse>;
53
+ close(): Promise<void>;
54
+ private payload;
55
+ private headers;
56
+ private post;
57
+ private parse;
58
+ private usage;
59
+ private toolCalls;
60
+ private finishReason;
61
+ }
62
+ //# sourceMappingURL=http.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/providers/http.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,EACL,KAAK,UAAU,EACf,KAAK,iBAAiB,EACtB,kBAAkB,EAElB,KAAK,SAAS,EAGf,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAE1C,uEAAuE;AACvE,eAAO,MAAM,gBAAgB,8BAA8B,CAAC;AAc5D,MAAM,MAAM,SAAS,GAAG,CACtB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE;IACJ,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACnD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;CAC/B,KACE,OAAO,CAAC;IACX,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CACzB,CAAC,CAAC;AAEH,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,wDAAwD;IACxD,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC;IAC/B,QAAQ,CAAC,YAAY,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CAC1D;AAaD,kEAAkE;AAClE,qBAAa,wBAAyB,YAAW,QAAQ;IACvD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;IAC7C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAY;IACnC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAmC;IACjE,OAAO,CAAC,OAAO,CAAS;IAExB,YAAY,OAAO,GAAE,uBAA4B,EAiBhD;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,YAAY,IAAI,WAAW,CAAC,UAAU,CAAC,CAE1C;IAEK,QAAQ,CAAC,OAAO,EAAE,iBAAiB,EAAE,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAIxF;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAG3B;IAED,OAAO,CAAC,OAAO;IAkCf,OAAO,CAAC,OAAO;YASD,IAAI;IAsClB,OAAO,CAAC,KAAK;IA8Bb,OAAO,CAAC,KAAK;IAUb,OAAO,CAAC,SAAS;IA2BjB,OAAO,CAAC,YAAY;CAIrB"}
@@ -0,0 +1,245 @@
1
+ /**
2
+ * A provider for any OpenAI-compatible chat-completions endpoint.
3
+ *
4
+ * One adapter covers OpenAI, Azure OpenAI, vLLM, Ollama, Together, Groq and most
5
+ * others, because they all speak the same request and response shape. Providers that
6
+ * diverge are handled by writing a new {@link Provider}, not by adding flags here.
7
+ *
8
+ * Note the capability list: `long-context` is not claimed. Whether a given deployment
9
+ * has a large window is a property of the deployment, not of the wire protocol, so
10
+ * claiming it here would let the gateway route a request that the endpoint then
11
+ * rejects.
12
+ */
13
+ import { ProviderError, ProviderResponseError } from '../errors.js';
14
+ import { stripTrailingSlashes } from '../internal/text.js';
15
+ import { CompletionResponse, TokenUsage, ToolCall, } from '../types.js';
16
+ /** The public OpenAI endpoint, used when no base URL is configured. */
17
+ export const DEFAULT_BASE_URL = 'https://api.openai.com/v1';
18
+ /** Statuses worth retrying: the request was well-formed and may succeed unchanged. */
19
+ const RETRYABLE_STATUSES = new Set([408, 409, 425, 429, 500, 502, 503, 504]);
20
+ /** The wire names a `finish_reason` can take, mapped to the runtime's vocabulary. */
21
+ const FINISH_REASONS = {
22
+ stop: 'stop',
23
+ length: 'length',
24
+ tool_calls: 'tool-calls',
25
+ content_filter: 'content-filter',
26
+ error: 'error',
27
+ };
28
+ function isObject(value) {
29
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
30
+ }
31
+ function delay(seconds) {
32
+ if (seconds <= 0)
33
+ return Promise.resolve();
34
+ return new Promise((resolve) => {
35
+ setTimeout(resolve, seconds * 1000);
36
+ });
37
+ }
38
+ /** Talks to an OpenAI-compatible `/chat/completions` endpoint. */
39
+ export class OpenAICompatibleProvider {
40
+ _baseUrl;
41
+ _apiKey;
42
+ _name;
43
+ _timeoutSeconds;
44
+ _maxAttempts;
45
+ _backoffSeconds;
46
+ _fetch;
47
+ _extraHeaders;
48
+ _closed = false;
49
+ constructor(options = {}) {
50
+ const baseUrl = stripTrailingSlashes(options.baseUrl ?? DEFAULT_BASE_URL);
51
+ if (!/^https?:\/\/[^/]/i.test(baseUrl)) {
52
+ throw new RangeError(`base_url must be an absolute http(s) URL, got ${JSON.stringify(baseUrl)}`);
53
+ }
54
+ const maxAttempts = options.maxAttempts ?? 3;
55
+ if (maxAttempts < 1)
56
+ throw new RangeError('max_attempts must be at least 1');
57
+ this._baseUrl = baseUrl;
58
+ this._apiKey = options.apiKey;
59
+ this._name = options.name ?? 'openai-compatible';
60
+ this._timeoutSeconds = options.timeoutSeconds ?? 60;
61
+ this._maxAttempts = maxAttempts;
62
+ this._backoffSeconds = options.backoffSeconds ?? 0.5;
63
+ this._fetch = options.fetchImpl ?? globalThis.fetch;
64
+ this._extraHeaders = options.extraHeaders ?? {};
65
+ }
66
+ get name() {
67
+ return this._name;
68
+ }
69
+ get capabilities() {
70
+ return new Set(['tool-calling', 'structured-output']);
71
+ }
72
+ async complete(request, model) {
73
+ if (this._closed)
74
+ throw new ProviderError(`${this._name} is closed`);
75
+ const body = await this.post(this.payload(request, model));
76
+ return this.parse(body, model);
77
+ }
78
+ async close() {
79
+ // A caller-supplied client owns its own connection pool and stays open.
80
+ this._closed = true;
81
+ }
82
+ payload(request, model) {
83
+ const payload = {
84
+ model: model.name,
85
+ messages: request.messages.map((message) => {
86
+ const wire = {
87
+ role: message.role,
88
+ content: message.content,
89
+ };
90
+ // A tool turn the provider cannot attribute to its call is unusable, and an
91
+ // assistant turn that asked for tools must carry those calls back or the loop
92
+ // replays an observation with no caller.
93
+ const toolCalls = message.toolCalls ?? [];
94
+ if (toolCalls.length > 0) {
95
+ wire.tool_calls = toolCalls.map((call) => ({
96
+ id: call.id,
97
+ type: 'function',
98
+ function: { name: call.name, arguments: JSON.stringify(call.args) },
99
+ }));
100
+ }
101
+ if (message.toolCallId !== undefined)
102
+ wire.tool_call_id = message.toolCallId;
103
+ if (message.name !== undefined)
104
+ wire.name = message.name;
105
+ return wire;
106
+ }),
107
+ };
108
+ if (request.temperature !== undefined)
109
+ payload.temperature = request.temperature;
110
+ const requested = request.maxOutputTokens ?? model.maxOutputTokens;
111
+ payload.max_tokens = Math.min(requested, model.maxOutputTokens);
112
+ if (request.stop !== undefined && request.stop.length > 0)
113
+ payload.stop = [...request.stop];
114
+ if (request.tools !== undefined && request.tools.length > 0) {
115
+ payload.tools = request.tools.map((tool) => tool.asOpenAiTool());
116
+ }
117
+ return payload;
118
+ }
119
+ headers() {
120
+ const headers = {
121
+ 'content-type': 'application/json',
122
+ ...this._extraHeaders,
123
+ };
124
+ if (this._apiKey !== undefined)
125
+ headers.authorization = `Bearer ${this._apiKey}`;
126
+ return headers;
127
+ }
128
+ async post(payload) {
129
+ const url = `${this._baseUrl}/chat/completions`;
130
+ let last = 'no attempt was made';
131
+ for (let attempt = 1; attempt <= this._maxAttempts; attempt += 1) {
132
+ try {
133
+ const response = await this._fetch(url, {
134
+ method: 'POST',
135
+ headers: this.headers(),
136
+ body: JSON.stringify(payload),
137
+ signal: AbortSignal.timeout(this._timeoutSeconds * 1000),
138
+ });
139
+ const text = await response.text();
140
+ if (!response.ok) {
141
+ last = `${this._name} returned ${response.status}: ${text}`;
142
+ if (RETRYABLE_STATUSES.has(response.status) && attempt < this._maxAttempts) {
143
+ await delay(this._backoffSeconds * 2 ** (attempt - 1));
144
+ continue;
145
+ }
146
+ throw new ProviderError(last);
147
+ }
148
+ try {
149
+ return JSON.parse(text);
150
+ }
151
+ catch {
152
+ throw new ProviderResponseError(`${this._name} returned a body that is not JSON`);
153
+ }
154
+ }
155
+ catch (error) {
156
+ if (error instanceof ProviderResponseError || error instanceof ProviderError)
157
+ throw error;
158
+ last = `${this._name} request failed: ${error instanceof Error ? error.message : String(error)}`;
159
+ if (attempt < this._maxAttempts) {
160
+ await delay(this._backoffSeconds * 2 ** (attempt - 1));
161
+ continue;
162
+ }
163
+ throw new ProviderError(last);
164
+ }
165
+ }
166
+ throw new ProviderError(`${this._name} failed after ${this._maxAttempts} attempt(s): ${last}`);
167
+ }
168
+ parse(body, model) {
169
+ if (!isObject(body)) {
170
+ throw new ProviderResponseError(`${this._name} returned a JSON body that is not an object`);
171
+ }
172
+ const choices = body.choices;
173
+ if (!Array.isArray(choices) || choices.length === 0) {
174
+ throw new ProviderResponseError(`${this._name} returned no choices`);
175
+ }
176
+ const first = choices[0];
177
+ if (!isObject(first)) {
178
+ throw new ProviderResponseError(`${this._name} returned a malformed choice`);
179
+ }
180
+ const message = first.message;
181
+ if (!isObject(message)) {
182
+ throw new ProviderResponseError(`${this._name} returned a choice without a message`);
183
+ }
184
+ const content = message.content;
185
+ if (content !== null && content !== undefined && typeof content !== 'string') {
186
+ throw new ProviderResponseError(`${this._name} returned non-string content`);
187
+ }
188
+ return new CompletionResponse({
189
+ text: typeof content === 'string' ? content : '',
190
+ model: model.name,
191
+ provider: this._name,
192
+ usage: this.usage(message, body),
193
+ toolCalls: this.toolCalls(message),
194
+ finishReason: this.finishReason(first.finish_reason),
195
+ });
196
+ }
197
+ usage(message, body) {
198
+ const raw = isObject(body.usage) ? body.usage : isObject(message.usage) ? message.usage : {};
199
+ const input = raw.prompt_tokens;
200
+ const output = raw.completion_tokens;
201
+ return new TokenUsage({
202
+ inputTokens: typeof input === 'number' ? Math.trunc(input) : 0,
203
+ outputTokens: typeof output === 'number' ? Math.trunc(output) : 0,
204
+ });
205
+ }
206
+ toolCalls(message) {
207
+ const raw = message.tool_calls;
208
+ if (!Array.isArray(raw))
209
+ return undefined;
210
+ const calls = [];
211
+ for (const [index, entry] of raw.entries()) {
212
+ if (!isObject(entry))
213
+ continue;
214
+ const fn = entry.function;
215
+ if (!isObject(fn))
216
+ continue;
217
+ const name = fn.name;
218
+ if (typeof name !== 'string' || name.length === 0)
219
+ continue;
220
+ let args = {};
221
+ if (typeof fn.arguments === 'string') {
222
+ try {
223
+ const parsed = JSON.parse(fn.arguments);
224
+ if (isObject(parsed))
225
+ args = parsed;
226
+ }
227
+ catch {
228
+ args = {};
229
+ }
230
+ }
231
+ else if (isObject(fn.arguments)) {
232
+ args = fn.arguments;
233
+ }
234
+ const id = typeof entry.id === 'string' && entry.id.length > 0 ? entry.id : `call_${index}`;
235
+ calls.push(new ToolCall({ id, name, arguments: args }));
236
+ }
237
+ return calls;
238
+ }
239
+ finishReason(raw) {
240
+ if (typeof raw !== 'string')
241
+ return 'stop';
242
+ return FINISH_REASONS[raw] ?? 'stop';
243
+ }
244
+ }
245
+ //# sourceMappingURL=http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/providers/http.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAGL,kBAAkB,EAGlB,UAAU,EACV,QAAQ,GACT,MAAM,aAAa,CAAC;AAGrB,uEAAuE;AACvE,MAAM,CAAC,MAAM,gBAAgB,GAAG,2BAA2B,CAAC;AAE5D,sFAAsF;AACtF,MAAM,kBAAkB,GAAwB,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAElG,qFAAqF;AACrF,MAAM,cAAc,GAA2C;IAC7D,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,QAAQ;IAChB,UAAU,EAAE,YAAY;IACxB,cAAc,EAAE,gBAAgB;IAChC,KAAK,EAAE,OAAO;CACf,CAAC;AA4BF,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,KAAK,CAAC,OAAe;IAC5B,IAAI,OAAO,IAAI,CAAC;QAAE,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,kEAAkE;AAClE,MAAM,OAAO,wBAAwB;IAClB,QAAQ,CAAS;IACjB,OAAO,CAAqB;IAC5B,KAAK,CAAS;IACd,eAAe,CAAS;IACxB,YAAY,CAAS;IACrB,eAAe,CAAS;IACxB,MAAM,CAAY;IAClB,aAAa,CAAmC;IACzD,OAAO,GAAG,KAAK,CAAC;IAExB,YAAY,OAAO,GAA4B,EAAE;QAC/C,MAAM,OAAO,GAAG,oBAAoB,CAAC,OAAO,CAAC,OAAO,IAAI,gBAAgB,CAAC,CAAC;QAC1E,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACvC,MAAM,IAAI,UAAU,CAClB,iDAAiD,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAC3E,CAAC;QACJ,CAAC;QACD,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,CAAC,CAAC;QAC7C,IAAI,WAAW,GAAG,CAAC;YAAE,MAAM,IAAI,UAAU,CAAC,iCAAiC,CAAC,CAAC;QAC7E,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;QAC9B,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,IAAI,mBAAmB,CAAC;QACjD,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,cAAc,IAAI,EAAE,CAAC;QACpD,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;QAChC,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,cAAc,IAAI,GAAG,CAAC;QACrD,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,SAAS,IAAK,UAAU,CAAC,KAA8B,CAAC;QAC9E,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC;IAClD,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,IAAI,YAAY;QACd,OAAO,IAAI,GAAG,CAAa,CAAC,cAAc,EAAE,mBAAmB,CAAC,CAAC,CAAC;IACpE,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,OAA0B,EAAE,KAAgB;QACzD,IAAI,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,aAAa,CAAC,GAAG,IAAI,CAAC,KAAK,YAAY,CAAC,CAAC;QACrE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;QAC3D,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,KAAK;QACT,wEAAwE;QACxE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;IACtB,CAAC;IAEO,OAAO,CAAC,OAA0B,EAAE,KAAgB;QAC1D,MAAM,OAAO,GAA4B;YACvC,KAAK,EAAE,KAAK,CAAC,IAAI;YACjB,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;gBACzC,MAAM,IAAI,GAA4B;oBACpC,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,OAAO,EAAE,OAAO,CAAC,OAAO;iBACzB,CAAC;gBACF,4EAA4E;gBAC5E,8EAA8E;gBAC9E,yCAAyC;gBACzC,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC;gBAC1C,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACzB,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;wBACzC,EAAE,EAAE,IAAI,CAAC,EAAE;wBACX,IAAI,EAAE,UAAU;wBAChB,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;qBACpE,CAAC,CAAC,CAAC;gBACN,CAAC;gBACD,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS;oBAAE,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC;gBAC7E,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS;oBAAE,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;gBACzD,OAAO,IAAI,CAAC;YACd,CAAC,CAAC;SACH,CAAC;QACF,IAAI,OAAO,CAAC,WAAW,KAAK,SAAS;YAAE,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;QACjF,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,IAAI,KAAK,CAAC,eAAe,CAAC;QACnE,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC;QAChE,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,CAAC,IAAI,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAC5F,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5D,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;QACnE,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,OAAO;QACb,MAAM,OAAO,GAA2B;YACtC,cAAc,EAAE,kBAAkB;YAClC,GAAG,IAAI,CAAC,aAAa;SACtB,CAAC;QACF,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;YAAE,OAAO,CAAC,aAAa,GAAG,UAAU,IAAI,CAAC,OAAO,EAAE,CAAC;QACjF,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,KAAK,CAAC,IAAI,CAAC,OAAgC;QACjD,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,QAAQ,mBAAmB,CAAC;QAChD,IAAI,IAAI,GAAG,qBAAqB,CAAC;QACjC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,IAAI,CAAC,YAAY,EAAE,OAAO,IAAI,CAAC,EAAE,CAAC;YACjE,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE;oBACtC,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;oBACvB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;oBAC7B,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;iBACzD,CAAC,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACnC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;oBACjB,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,aAAa,QAAQ,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;oBAC5D,IAAI,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,OAAO,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;wBAC3E,MAAM,KAAK,CAAC,IAAI,CAAC,eAAe,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;wBACvD,SAAS;oBACX,CAAC;oBACD,MAAM,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC;gBAChC,CAAC;gBACD,IAAI,CAAC;oBACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAY,CAAC;gBACrC,CAAC;gBAAC,MAAM,CAAC;oBACP,MAAM,IAAI,qBAAqB,CAAC,GAAG,IAAI,CAAC,KAAK,mCAAmC,CAAC,CAAC;gBACpF,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,KAAK,YAAY,qBAAqB,IAAI,KAAK,YAAY,aAAa;oBAAE,MAAM,KAAK,CAAC;gBAC1F,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,oBAAoB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;gBACjG,IAAI,OAAO,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;oBAChC,MAAM,KAAK,CAAC,IAAI,CAAC,eAAe,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;oBACvD,SAAS;gBACX,CAAC;gBACD,MAAM,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;QACD,MAAM,IAAI,aAAa,CAAC,GAAG,IAAI,CAAC,KAAK,iBAAiB,IAAI,CAAC,YAAY,gBAAgB,IAAI,EAAE,CAAC,CAAC;IACjG,CAAC;IAEO,KAAK,CAAC,IAAa,EAAE,KAAgB;QAC3C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACpB,MAAM,IAAI,qBAAqB,CAAC,GAAG,IAAI,CAAC,KAAK,6CAA6C,CAAC,CAAC;QAC9F,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACpD,MAAM,IAAI,qBAAqB,CAAC,GAAG,IAAI,CAAC,KAAK,sBAAsB,CAAC,CAAC;QACvE,CAAC;QACD,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACzB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACrB,MAAM,IAAI,qBAAqB,CAAC,GAAG,IAAI,CAAC,KAAK,8BAA8B,CAAC,CAAC;QAC/E,CAAC;QACD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAC9B,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,qBAAqB,CAAC,GAAG,IAAI,CAAC,KAAK,sCAAsC,CAAC,CAAC;QACvF,CAAC;QACD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAChC,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC7E,MAAM,IAAI,qBAAqB,CAAC,GAAG,IAAI,CAAC,KAAK,8BAA8B,CAAC,CAAC;QAC/E,CAAC;QACD,OAAO,IAAI,kBAAkB,CAAC;YAC5B,IAAI,EAAE,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YAChD,KAAK,EAAE,KAAK,CAAC,IAAI;YACjB,QAAQ,EAAE,IAAI,CAAC,KAAK;YACpB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC;YAChC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;YAClC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,aAAa,CAAC;SACrD,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,OAAgC,EAAE,IAA6B;QAC3E,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7F,MAAM,KAAK,GAAG,GAAG,CAAC,aAAa,CAAC;QAChC,MAAM,MAAM,GAAG,GAAG,CAAC,iBAAiB,CAAC;QACrC,OAAO,IAAI,UAAU,CAAC;YACpB,WAAW,EAAE,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9D,YAAY,EAAE,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;SAClE,CAAC,CAAC;IACL,CAAC;IAEO,SAAS,CAAC,OAAgC;QAChD,MAAM,GAAG,GAAG,OAAO,CAAC,UAAU,CAAC;QAC/B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;YAAE,OAAO,SAAS,CAAC;QAC1C,MAAM,KAAK,GAAe,EAAE,CAAC;QAC7B,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC;YAC3C,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAAE,SAAS;YAC/B,MAAM,EAAE,GAAG,KAAK,CAAC,QAAQ,CAAC;YAC1B,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAAE,SAAS;YAC5B,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC;YACrB,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAS;YAC5D,IAAI,IAAI,GAAY,EAAE,CAAC;YACvB,IAAI,OAAO,EAAE,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;gBACrC,IAAI,CAAC;oBACH,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;oBACjD,IAAI,QAAQ,CAAC,MAAM,CAAC;wBAAE,IAAI,GAAG,MAAM,CAAC;gBACtC,CAAC;gBAAC,MAAM,CAAC;oBACP,IAAI,GAAG,EAAE,CAAC;gBACZ,CAAC;YACH,CAAC;iBAAM,IAAI,QAAQ,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;gBAClC,IAAI,GAAG,EAAE,CAAC,SAAS,CAAC;YACtB,CAAC;YACD,MAAM,EAAE,GAAG,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,IAAI,KAAK,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,EAAE,CAAC;YAC5F,KAAK,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAA+B,EAAE,CAAC,CAAC,CAAC;QACrF,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,YAAY,CAAC,GAAY;QAC/B,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAE,OAAO,MAAM,CAAC;QAC3C,OAAO,cAAc,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC;IACvC,CAAC;CACF"}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Turning documents into deterministic, size-bounded chunks.
3
+ *
4
+ * The IR declares a strategy, a size and an overlap; it does not declare the split
5
+ * algorithm. This module pins one, and the pin is the spec validator's own reading
6
+ * of the intent: *"spec v0.1 chunks by size (fixed, recursive, code)"*. `semantic`
7
+ * is refused because it needs an embedding pass over the whole source at ingest --
8
+ * a different shape of job, not a different boundary rule.
9
+ *
10
+ * So all three implemented strategies are size-bounded splitters and the only thing
11
+ * that distinguishes them is **where a boundary is allowed to fall**:
12
+ *
13
+ * `fixed`
14
+ * Anywhere. The window always fills to `size`, cutting mid-word when that is
15
+ * where the budget ends. This is the honest baseline other strategies improve on.
16
+ * `recursive`
17
+ * Prefer the last paragraph break, then the last line break, then the last
18
+ * sentence end, then the last word break inside the window.
19
+ * `code`
20
+ * Prefer the last blank line, then the last line break, then the last statement
21
+ * end. Code is line-structured, so a blank line is the closest thing it has to a
22
+ * paragraph, and cutting mid-statement is the failure worth avoiding.
23
+ *
24
+ * Chunks are pure functions of the text, so the same input always produces the same
25
+ * chunks with the same ids in the same order -- which is what makes re-ingesting a
26
+ * corpus a no-op instead of a duplicate.
27
+ */
28
+ import type { SourceDocument } from './connectors.js';
29
+ import { Chunk, type ChunkingSpec, type ChunkingStrategy } from './types.js';
30
+ /** A strategy's preference order, outermost first. */
31
+ export type MarkerGroups = readonly (readonly string[])[];
32
+ /** Splits a document into chunks, deterministically. */
33
+ export interface Chunker {
34
+ readonly strategy: ChunkingStrategy;
35
+ chunk(document: SourceDocument): readonly Chunk[];
36
+ }
37
+ /** Shared windowing. Subclasses only choose where a boundary may fall. */
38
+ declare abstract class SizeChunker implements Chunker {
39
+ private readonly _size;
40
+ private readonly _overlap;
41
+ private readonly _keep;
42
+ constructor(init: {
43
+ readonly size: number;
44
+ readonly overlap: number;
45
+ readonly keepMetadata?: readonly string[];
46
+ });
47
+ abstract get strategy(): ChunkingStrategy;
48
+ /** Where to end the window that starts at `start` and may reach `limit`. */
49
+ protected abstract cut(text: string, start: number, limit: number): number;
50
+ chunk(document: SourceDocument): readonly Chunk[];
51
+ private build;
52
+ /**
53
+ * The end offset of the last `marker` in `text.slice(start, limit)`, if usable.
54
+ *
55
+ * `null` means "no boundary worth taking", and the caller falls back to `limit`.
56
+ * The minimum-fill rule is applied here rather than by each strategy so no
57
+ * strategy can forget it.
58
+ */
59
+ private boundary;
60
+ /** The first usable boundary from `markerGroups`, in preference order. */
61
+ protected fill(text: string, start: number, limit: number, markerGroups: MarkerGroups): number;
62
+ }
63
+ /** Cuts on size alone. */
64
+ export declare class FixedChunker extends SizeChunker {
65
+ get strategy(): ChunkingStrategy;
66
+ protected cut(_text: string, _start: number, limit: number): number;
67
+ }
68
+ /** Prefers prose boundaries: paragraph, then line, then sentence, then word. */
69
+ export declare class RecursiveChunker extends SizeChunker {
70
+ get strategy(): ChunkingStrategy;
71
+ protected cut(text: string, start: number, limit: number): number;
72
+ }
73
+ /** Prefers code boundaries: blank line, then line, then statement, then token. */
74
+ export declare class CodeChunker extends SizeChunker {
75
+ get strategy(): ChunkingStrategy;
76
+ protected cut(text: string, start: number, limit: number): number;
77
+ }
78
+ /**
79
+ * Resolve a chunking block to an implementation.
80
+ *
81
+ * `semantic` is refused here as well as in the spec validator, because the runtime
82
+ * is reachable from generated code the validator never saw.
83
+ */
84
+ export declare function chunkerFor(spec: ChunkingSpec): Chunker;
85
+ /** Chunk one document with the strategy the spec names. */
86
+ export declare function chunkDocument(document: SourceDocument, spec: ChunkingSpec): readonly Chunk[];
87
+ export {};
88
+ //# sourceMappingURL=chunking.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunking.d.ts","sourceRoot":"","sources":["../../src/retrieval/chunking.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,KAAK,EAAE,KAAK,YAAY,EAAE,KAAK,gBAAgB,EAAc,MAAM,YAAY,CAAC;AAWzF,sDAAsD;AACtD,MAAM,MAAM,YAAY,GAAG,SAAS,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,CAAC;AAE1D,wDAAwD;AACxD,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IACpC,KAAK,CAAC,QAAQ,EAAE,cAAc,GAAG,SAAS,KAAK,EAAE,CAAC;CACnD;AAED,0EAA0E;AAC1E,uBAAe,WAAY,YAAW,OAAO;IAC3C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAoB;IAE1C,YAAY,IAAI,EAAE;QAChB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;KAC3C,EAgBA;IAED,QAAQ,KAAK,QAAQ,IAAI,gBAAgB,CAAC;IAE1C,4EAA4E;IAC5E,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IAE3E,KAAK,CAAC,QAAQ,EAAE,cAAc,GAAG,SAAS,KAAK,EAAE,CAoBhD;IAED,OAAO,CAAC,KAAK;IAwBb;;;;;;OAMG;IACH,OAAO,CAAC,QAAQ;IAmBhB,0EAA0E;IAC1E,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,GAAG,MAAM,CAM7F;CACF;AAED,0BAA0B;AAC1B,qBAAa,YAAa,SAAQ,WAAW;IAC3C,IAAa,QAAQ,IAAI,gBAAgB,CAExC;IAED,UAAmB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAE3E;CACF;AAED,gFAAgF;AAChF,qBAAa,gBAAiB,SAAQ,WAAW;IAC/C,IAAa,QAAQ,IAAI,gBAAgB,CAExC;IAED,UAAmB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEzE;CACF;AAED,kFAAkF;AAClF,qBAAa,WAAY,SAAQ,WAAW;IAC1C,IAAa,QAAQ,IAAI,gBAAgB,CAExC;IAED,UAAmB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEzE;CACF;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAyBtD;AAED,2DAA2D;AAC3D,wBAAgB,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,YAAY,GAAG,SAAS,KAAK,EAAE,CAE5F"}