@anvia/core 1.0.0-rc.1 → 1.0.0-rc.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. package/README.md +283 -84
  2. package/dist/agent/index.d.ts +26 -18
  3. package/dist/agent/index.js +19 -15
  4. package/dist/agent-yBG8e9Jj.d.ts +153 -0
  5. package/dist/chunk-4WI3VGZK.js +127 -0
  6. package/dist/chunk-4WI3VGZK.js.map +1 -0
  7. package/dist/{chunk-R2LJSQUW.js → chunk-77AIYARB.js} +251 -104
  8. package/dist/chunk-77AIYARB.js.map +1 -0
  9. package/dist/chunk-AI5JMUW7.js +45 -0
  10. package/dist/chunk-AI5JMUW7.js.map +1 -0
  11. package/dist/chunk-BEYBU7VJ.js +53 -0
  12. package/dist/chunk-BEYBU7VJ.js.map +1 -0
  13. package/dist/chunk-CWM7B2OO.js +315 -0
  14. package/dist/chunk-CWM7B2OO.js.map +1 -0
  15. package/dist/{chunk-6WGGTJE6.js → chunk-D37WMSP6.js} +52 -60
  16. package/dist/chunk-D37WMSP6.js.map +1 -0
  17. package/dist/{chunk-IL3ZSNJI.js → chunk-DBSCKTUL.js} +845 -800
  18. package/dist/chunk-DBSCKTUL.js.map +1 -0
  19. package/dist/chunk-EINTGEGY.js +629 -0
  20. package/dist/chunk-EINTGEGY.js.map +1 -0
  21. package/dist/chunk-FMHLROPQ.js +351 -0
  22. package/dist/chunk-FMHLROPQ.js.map +1 -0
  23. package/dist/{chunk-A3UBYTJT.js → chunk-FN7HLLAZ.js} +60 -6
  24. package/dist/chunk-FN7HLLAZ.js.map +1 -0
  25. package/dist/chunk-GKDERULJ.js +50 -0
  26. package/dist/chunk-GKDERULJ.js.map +1 -0
  27. package/dist/{chunk-FNQB2JEH.js → chunk-KIDGIJM7.js} +26 -5
  28. package/dist/chunk-KIDGIJM7.js.map +1 -0
  29. package/dist/chunk-KR3RCCHJ.js +500 -0
  30. package/dist/chunk-KR3RCCHJ.js.map +1 -0
  31. package/dist/{chunk-I6G7BC42.js → chunk-MGNTXGTX.js} +2 -6
  32. package/dist/chunk-MGNTXGTX.js.map +1 -0
  33. package/dist/{chunk-5XKDW36Z.js → chunk-OJH6HWHX.js} +64 -75
  34. package/dist/chunk-OJH6HWHX.js.map +1 -0
  35. package/dist/chunk-QOUPWOGW.js +29 -0
  36. package/dist/chunk-QOUPWOGW.js.map +1 -0
  37. package/dist/chunk-TIZYTPJO.js +208 -0
  38. package/dist/chunk-TIZYTPJO.js.map +1 -0
  39. package/dist/{chunk-DMPUP4R3.js → chunk-XKYYBABH.js} +5 -5
  40. package/dist/client-B8DT1vUG.d.ts +83 -0
  41. package/dist/completion/index.d.ts +5 -4
  42. package/dist/completion/index.js +25 -28
  43. package/dist/{dynamic-tools-i9woysFa.d.ts → dynamic-tools-KwEGRbHp.d.ts} +21 -9
  44. package/dist/embeddings/index.d.ts +11 -9
  45. package/dist/embeddings/index.js +2 -3
  46. package/dist/evals/index.d.ts +44 -24
  47. package/dist/evals/index.js +86 -69
  48. package/dist/evals/index.js.map +1 -1
  49. package/dist/extractor/index.d.ts +23 -26
  50. package/dist/extractor/index.js +7 -8
  51. package/dist/guardrails/index.d.ts +2 -1
  52. package/dist/guardrails/index.js +1 -1
  53. package/dist/image-generation/index.d.ts +18 -16
  54. package/dist/image-generation/index.js +2 -2
  55. package/dist/index.d.ts +24 -22
  56. package/dist/index.js +50 -48
  57. package/dist/internal/agent.d.ts +30 -19
  58. package/dist/internal/agent.js +13 -11
  59. package/dist/loaders/index.d.ts +2 -1
  60. package/dist/mcp/index.d.ts +19 -13
  61. package/dist/mcp/index.js +13 -348
  62. package/dist/mcp/index.js.map +1 -1
  63. package/dist/memory/index.d.ts +20 -6
  64. package/dist/memory/index.js +10 -10
  65. package/dist/message-schema-Cn7ezRfJ.d.ts +52 -0
  66. package/dist/{middleware-KynLg_RW.d.ts → middleware-C7PdmKF7.d.ts} +4 -4
  67. package/dist/model-call-options-CZkSw_xN.d.ts +6 -0
  68. package/dist/model-listing/index.d.ts +3 -1
  69. package/dist/observability/index.d.ts +19 -5
  70. package/dist/observability/index.js +8 -5
  71. package/dist/observability/index.js.map +1 -1
  72. package/dist/pipeline/index.d.ts +105 -56
  73. package/dist/pipeline/index.js +422 -230
  74. package/dist/pipeline/index.js.map +1 -1
  75. package/dist/{retry-D3Ruy-ba.d.ts → retry-CjvSlKGW.d.ts} +2 -1
  76. package/dist/skills/index.d.ts +5 -4
  77. package/dist/skills/index.js +7 -7
  78. package/dist/speech-generation/index.d.ts +37 -0
  79. package/dist/speech-generation/index.js +8 -0
  80. package/dist/{think-tool-DZqZj2LV.d.ts → think-tool-6H2QNQzQ.d.ts} +1 -1
  81. package/dist/tool/index.d.ts +9 -7
  82. package/dist/tool/index.js +7 -10
  83. package/dist/{tool-C_8GudXn.d.ts → tool--Mz4v1eL.d.ts} +15 -7
  84. package/dist/transcription/index.d.ts +23 -14
  85. package/dist/transcription/index.js +2 -2
  86. package/dist/{index-DxB74ybJ.d.ts → types-3x3mOLHU.d.ts} +94 -64
  87. package/dist/types-BVzM4RsC.d.ts +155 -0
  88. package/dist/types-CQ_ioXWK.d.ts +319 -0
  89. package/dist/types-Cr4uiYo5.d.ts +99 -0
  90. package/dist/{types-DhQfwiZn.d.ts → types-DiJqJejp.d.ts} +1 -1
  91. package/dist/types-Dld1TpWj.d.ts +130 -0
  92. package/dist/vector-store/index.d.ts +33 -34
  93. package/dist/vector-store/index.js +6 -6
  94. package/package.json +6 -10
  95. package/dist/agent-DGYY_onS.d.ts +0 -145
  96. package/dist/audio-generation/index.d.ts +0 -31
  97. package/dist/audio-generation/index.js +0 -8
  98. package/dist/chunk-5XKDW36Z.js.map +0 -1
  99. package/dist/chunk-6WGGTJE6.js.map +0 -1
  100. package/dist/chunk-A3UBYTJT.js.map +0 -1
  101. package/dist/chunk-ADH7NNCS.js +0 -512
  102. package/dist/chunk-ADH7NNCS.js.map +0 -1
  103. package/dist/chunk-DZ3CKYTH.js +0 -267
  104. package/dist/chunk-DZ3CKYTH.js.map +0 -1
  105. package/dist/chunk-FNQB2JEH.js.map +0 -1
  106. package/dist/chunk-I6G7BC42.js.map +0 -1
  107. package/dist/chunk-IL3ZSNJI.js.map +0 -1
  108. package/dist/chunk-J6GNQART.js +0 -122
  109. package/dist/chunk-J6GNQART.js.map +0 -1
  110. package/dist/chunk-M3IOWB4Y.js +0 -280
  111. package/dist/chunk-M3IOWB4Y.js.map +0 -1
  112. package/dist/chunk-QY5GZ7HR.js +0 -39
  113. package/dist/chunk-QY5GZ7HR.js.map +0 -1
  114. package/dist/chunk-R2LJSQUW.js.map +0 -1
  115. package/dist/chunk-RFDVKCIE.js +0 -12
  116. package/dist/chunk-RFDVKCIE.js.map +0 -1
  117. package/dist/chunk-RMUBRRSK.js +0 -34
  118. package/dist/chunk-RMUBRRSK.js.map +0 -1
  119. package/dist/chunk-RXKHOYEH.js +0 -466
  120. package/dist/chunk-RXKHOYEH.js.map +0 -1
  121. package/dist/chunk-XDRSPSR7.js +0 -38
  122. package/dist/chunk-XDRSPSR7.js.map +0 -1
  123. package/dist/chunk-XWUC7CIT.js +0 -1
  124. package/dist/chunk-XWUC7CIT.js.map +0 -1
  125. package/dist/errors-CYKUcU89.d.ts +0 -17
  126. package/dist/json-Zo7K3xmt.d.ts +0 -40
  127. package/dist/types-B3A4YxaA.d.ts +0 -354
  128. package/dist/types-BBEGKB9m.d.ts +0 -119
  129. package/dist/types-DT3nEemY.d.ts +0 -79
  130. package/dist/types-DulRCYdB.d.ts +0 -70
  131. package/dist/types-p55Jc-sr.d.ts +0 -47
  132. package/dist/ui/index.d.ts +0 -107
  133. package/dist/ui/index.js +0 -10
  134. package/dist/ui/index.js.map +0 -1
  135. /package/dist/{chunk-DMPUP4R3.js.map → chunk-XKYYBABH.js.map} +0 -0
  136. /package/dist/{audio-generation → speech-generation}/index.js.map +0 -0
@@ -1,267 +0,0 @@
1
- // src/embeddings/distance.ts
2
- function dotProduct(left, right) {
3
- assertSameDimensions(left, right);
4
- return left.reduce((sum, value, index) => sum + value * right[index], 0);
5
- }
6
- function cosineSimilarity(left, right) {
7
- assertSameDimensions(left, right);
8
- const leftMagnitude = magnitude(left);
9
- const rightMagnitude = magnitude(right);
10
- if (leftMagnitude === 0 || rightMagnitude === 0) {
11
- return 0;
12
- }
13
- return dotProduct(left, right) / (leftMagnitude * rightMagnitude);
14
- }
15
- function angularDistance(left, right) {
16
- const similarity = Math.max(-1, Math.min(1, cosineSimilarity(left, right)));
17
- return Math.acos(similarity) / Math.PI;
18
- }
19
- function euclideanDistance(left, right) {
20
- assertSameDimensions(left, right);
21
- return Math.sqrt(
22
- left.reduce((sum, value, index) => sum + (value - right[index]) ** 2, 0)
23
- );
24
- }
25
- function manhattanDistance(left, right) {
26
- assertSameDimensions(left, right);
27
- return left.reduce((sum, value, index) => sum + Math.abs(value - right[index]), 0);
28
- }
29
- function chebyshevDistance(left, right) {
30
- assertSameDimensions(left, right);
31
- return left.reduce(
32
- (max, value, index) => Math.max(max, Math.abs(value - right[index])),
33
- 0
34
- );
35
- }
36
- function magnitude(vector) {
37
- return Math.sqrt(vector.reduce((sum, value) => sum + value ** 2, 0));
38
- }
39
- function assertSameDimensions(left, right) {
40
- if (left.length !== right.length) {
41
- throw new Error(`Vector dimension mismatch: ${left.length} !== ${right.length}`);
42
- }
43
- }
44
-
45
- // src/internal/concurrency.ts
46
- async function mapWithConcurrency(inputs, concurrency, mapper) {
47
- if (!Number.isSafeInteger(concurrency) || concurrency <= 0) {
48
- throw new RangeError("concurrency must be a positive safe integer.");
49
- }
50
- const limit = concurrency;
51
- const results = new Array(inputs.length);
52
- let nextIndex = 0;
53
- let firstFailure;
54
- async function worker() {
55
- while (firstFailure === void 0 && nextIndex < inputs.length) {
56
- const index = nextIndex;
57
- nextIndex += 1;
58
- try {
59
- results[index] = await mapper(inputs[index]);
60
- } catch (error) {
61
- firstFailure ??= { error };
62
- }
63
- }
64
- }
65
- await Promise.all(Array.from({ length: Math.min(limit, inputs.length) }, () => worker()));
66
- if (firstFailure !== void 0) {
67
- throw firstFailure.error;
68
- }
69
- return results;
70
- }
71
-
72
- // src/embeddings/embed.ts
73
- async function embedText(model, text) {
74
- const embeddings = await embedTexts(model, [text]);
75
- const embedding = embeddings[0];
76
- if (embedding === void 0) {
77
- throw new Error("Embedding model returned no embeddings");
78
- }
79
- return embedding;
80
- }
81
- async function embedTexts(model, texts) {
82
- if (texts.length === 0) {
83
- return [];
84
- }
85
- const maxBatchSize = Math.max(1, Math.trunc(model.maxBatchSize ?? texts.length));
86
- const batches = [];
87
- for (let index = 0; index < texts.length; index += maxBatchSize) {
88
- batches.push(texts.slice(index, index + maxBatchSize));
89
- }
90
- const results = await mapWithConcurrency(batches, 1, (batch) => model.embedTexts(batch));
91
- const embeddings = results.flat();
92
- if (embeddings.length !== texts.length) {
93
- throw new Error(
94
- `Embedding model returned ${embeddings.length} embeddings for ${texts.length} texts`
95
- );
96
- }
97
- return embeddings;
98
- }
99
- async function embedSparseTexts(model, texts) {
100
- if (texts.length === 0) {
101
- return [];
102
- }
103
- const maxBatchSize = Math.max(1, Math.trunc(model.maxBatchSize ?? texts.length));
104
- const batches = [];
105
- for (let index = 0; index < texts.length; index += maxBatchSize) {
106
- batches.push(texts.slice(index, index + maxBatchSize));
107
- }
108
- const results = await mapWithConcurrency(batches, 1, (batch) => model.embedTexts(batch));
109
- const embeddings = results.flat();
110
- if (embeddings.length !== texts.length) {
111
- throw new Error(
112
- `Sparse embedding model returned ${embeddings.length} embeddings for ${texts.length} texts`
113
- );
114
- }
115
- return embeddings;
116
- }
117
- async function embedSparseQuery(model, query) {
118
- return model.embedQuery(query);
119
- }
120
- async function embedDocuments(model, documents, options) {
121
- const prepared = prepareDocuments(documents, options);
122
- const flatTexts = prepared.flatMap(
123
- (item, documentIndex) => item.texts.map((text) => ({ documentIndex, text }))
124
- );
125
- const embeddings = await mapWithConcurrency(
126
- chunk(flatTexts, Math.max(1, Math.trunc(model.maxBatchSize ?? (flatTexts.length || 1)))),
127
- Math.max(1, Math.trunc(options.concurrency ?? 1)),
128
- async (batch) => {
129
- const batchEmbeddings = await model.embedTexts(batch.map((item) => item.text));
130
- if (batchEmbeddings.length !== batch.length) {
131
- throw new Error(
132
- `Embedding model returned ${batchEmbeddings.length} embeddings for ${batch.length} texts`
133
- );
134
- }
135
- return batch.map((item, index) => ({
136
- documentIndex: item.documentIndex,
137
- embedding: batchEmbeddings[index]
138
- }));
139
- }
140
- );
141
- const byDocument = /* @__PURE__ */ new Map();
142
- for (const item of embeddings.flat()) {
143
- const list = byDocument.get(item.documentIndex) ?? [];
144
- list.push(item.embedding);
145
- byDocument.set(item.documentIndex, list);
146
- }
147
- return prepared.map((item, index) => {
148
- const documentEmbeddings = byDocument.get(index) ?? [];
149
- if (item.metadata === void 0) {
150
- return { id: item.id, document: item.document, embeddings: documentEmbeddings };
151
- }
152
- return {
153
- id: item.id,
154
- document: item.document,
155
- metadata: item.metadata,
156
- embeddings: documentEmbeddings
157
- };
158
- });
159
- }
160
- async function embedHybridDocuments(models, documents, options) {
161
- const prepared = prepareDocuments(documents, options);
162
- const flatTexts = prepared.flatMap(
163
- (item, documentIndex) => item.texts.map((text) => ({ documentIndex, text }))
164
- );
165
- const concurrency = Math.max(1, Math.trunc(options.concurrency ?? 1));
166
- const denseBatches = chunk(
167
- flatTexts,
168
- Math.max(1, Math.trunc(models.dense.maxBatchSize ?? (flatTexts.length || 1)))
169
- );
170
- const sparseBatches = chunk(
171
- flatTexts,
172
- Math.max(1, Math.trunc(models.sparse.maxBatchSize ?? (flatTexts.length || 1)))
173
- );
174
- const [denseResults, sparseResults] = await Promise.all([
175
- mapWithConcurrency(denseBatches, concurrency, async (batch) => {
176
- const batchEmbeddings = await models.dense.embedTexts(batch.map((item) => item.text));
177
- if (batchEmbeddings.length !== batch.length) {
178
- throw new Error(
179
- `Embedding model returned ${batchEmbeddings.length} embeddings for ${batch.length} texts`
180
- );
181
- }
182
- return batch.map((item, index) => ({
183
- documentIndex: item.documentIndex,
184
- embedding: batchEmbeddings[index]
185
- }));
186
- }),
187
- mapWithConcurrency(sparseBatches, concurrency, async (batch) => {
188
- const batchEmbeddings = await models.sparse.embedTexts(batch.map((item) => item.text));
189
- if (batchEmbeddings.length !== batch.length) {
190
- throw new Error(
191
- `Sparse embedding model returned ${batchEmbeddings.length} embeddings for ${batch.length} texts`
192
- );
193
- }
194
- return batch.map((item, index) => ({
195
- documentIndex: item.documentIndex,
196
- embedding: batchEmbeddings[index]
197
- }));
198
- })
199
- ]);
200
- const denseByDocument = /* @__PURE__ */ new Map();
201
- for (const item of denseResults.flat()) {
202
- const list = denseByDocument.get(item.documentIndex) ?? [];
203
- list.push(item.embedding);
204
- denseByDocument.set(item.documentIndex, list);
205
- }
206
- const sparseByDocument = /* @__PURE__ */ new Map();
207
- for (const item of sparseResults.flat()) {
208
- const list = sparseByDocument.get(item.documentIndex) ?? [];
209
- list.push(item.embedding);
210
- sparseByDocument.set(item.documentIndex, list);
211
- }
212
- return prepared.map((item, index) => {
213
- const embeddings = denseByDocument.get(index) ?? [];
214
- const sparseEmbeddings = sparseByDocument.get(index) ?? [];
215
- if (embeddings.length !== sparseEmbeddings.length) {
216
- throw new Error(
217
- `Hybrid embedding produced ${embeddings.length} dense and ${sparseEmbeddings.length} sparse vectors for document ${item.id}`
218
- );
219
- }
220
- if (item.metadata === void 0) {
221
- return { id: item.id, document: item.document, embeddings, sparseEmbeddings };
222
- }
223
- return {
224
- id: item.id,
225
- document: item.document,
226
- metadata: item.metadata,
227
- embeddings,
228
- sparseEmbeddings
229
- };
230
- });
231
- }
232
- function prepareDocuments(documents, options) {
233
- return documents.map((document, index) => {
234
- const content = options.content(document, index);
235
- const texts = Array.isArray(content) ? content : [content];
236
- return {
237
- id: options.id?.(document, index) ?? `doc${index}`,
238
- document,
239
- metadata: options.metadata?.(document, index),
240
- texts
241
- };
242
- });
243
- }
244
- function chunk(items, size) {
245
- const chunks = [];
246
- for (let index = 0; index < items.length; index += size) {
247
- chunks.push(items.slice(index, index + size));
248
- }
249
- return chunks;
250
- }
251
-
252
- export {
253
- dotProduct,
254
- cosineSimilarity,
255
- angularDistance,
256
- euclideanDistance,
257
- manhattanDistance,
258
- chebyshevDistance,
259
- mapWithConcurrency,
260
- embedText,
261
- embedTexts,
262
- embedSparseTexts,
263
- embedSparseQuery,
264
- embedDocuments,
265
- embedHybridDocuments
266
- };
267
- //# sourceMappingURL=chunk-DZ3CKYTH.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/embeddings/distance.ts","../src/internal/concurrency.ts","../src/embeddings/embed.ts"],"sourcesContent":["export function dotProduct(left: number[], right: number[]): number {\n assertSameDimensions(left, right);\n return left.reduce((sum, value, index) => sum + value * (right[index] as number), 0);\n}\n\nexport function cosineSimilarity(left: number[], right: number[]): number {\n assertSameDimensions(left, right);\n const leftMagnitude = magnitude(left);\n const rightMagnitude = magnitude(right);\n if (leftMagnitude === 0 || rightMagnitude === 0) {\n return 0;\n }\n return dotProduct(left, right) / (leftMagnitude * rightMagnitude);\n}\n\nexport function angularDistance(left: number[], right: number[]): number {\n const similarity = Math.max(-1, Math.min(1, cosineSimilarity(left, right)));\n return Math.acos(similarity) / Math.PI;\n}\n\nexport function euclideanDistance(left: number[], right: number[]): number {\n assertSameDimensions(left, right);\n return Math.sqrt(\n left.reduce((sum, value, index) => sum + (value - (right[index] as number)) ** 2, 0),\n );\n}\n\nexport function manhattanDistance(left: number[], right: number[]): number {\n assertSameDimensions(left, right);\n return left.reduce((sum, value, index) => sum + Math.abs(value - (right[index] as number)), 0);\n}\n\nexport function chebyshevDistance(left: number[], right: number[]): number {\n assertSameDimensions(left, right);\n return left.reduce(\n (max, value, index) => Math.max(max, Math.abs(value - (right[index] as number))),\n 0,\n );\n}\n\nfunction magnitude(vector: number[]): number {\n return Math.sqrt(vector.reduce((sum, value) => sum + value ** 2, 0));\n}\n\nfunction assertSameDimensions(left: number[], right: number[]): void {\n if (left.length !== right.length) {\n throw new Error(`Vector dimension mismatch: ${left.length} !== ${right.length}`);\n }\n}\n","export async function mapWithConcurrency<Input, Output>(\n inputs: Input[],\n concurrency: number,\n mapper: (input: Input) => Promise<Output>,\n): Promise<Output[]> {\n if (!Number.isSafeInteger(concurrency) || concurrency <= 0) {\n throw new RangeError(\"concurrency must be a positive safe integer.\");\n }\n const limit = concurrency;\n const results = new Array<Output>(inputs.length);\n let nextIndex = 0;\n let firstFailure: { error: unknown } | undefined;\n\n async function worker(): Promise<void> {\n while (firstFailure === undefined && nextIndex < inputs.length) {\n const index = nextIndex;\n nextIndex += 1;\n try {\n results[index] = await mapper(inputs[index] as Input);\n } catch (error) {\n firstFailure ??= { error };\n }\n }\n }\n\n await Promise.all(Array.from({ length: Math.min(limit, inputs.length) }, () => worker()));\n if (firstFailure !== undefined) {\n throw firstFailure.error;\n }\n return results;\n}\n","import { mapWithConcurrency } from \"../internal/concurrency\";\nimport type {\n EmbedDocumentsOptions,\n EmbeddedDocument,\n Embedding,\n EmbeddingModel,\n EmbedHybridDocumentsOptions,\n SparseEmbedding,\n SparseEmbeddingModel,\n VectorMetadata,\n} from \"./types\";\n\nexport async function embedText(model: EmbeddingModel, text: string): Promise<Embedding> {\n const embeddings = await embedTexts(model, [text]);\n const embedding = embeddings[0];\n if (embedding === undefined) {\n throw new Error(\"Embedding model returned no embeddings\");\n }\n return embedding;\n}\n\nexport async function embedTexts(model: EmbeddingModel, texts: string[]): Promise<Embedding[]> {\n if (texts.length === 0) {\n return [];\n }\n\n const maxBatchSize = Math.max(1, Math.trunc(model.maxBatchSize ?? texts.length));\n const batches: string[][] = [];\n for (let index = 0; index < texts.length; index += maxBatchSize) {\n batches.push(texts.slice(index, index + maxBatchSize));\n }\n\n const results = await mapWithConcurrency(batches, 1, (batch) => model.embedTexts(batch));\n const embeddings = results.flat();\n if (embeddings.length !== texts.length) {\n throw new Error(\n `Embedding model returned ${embeddings.length} embeddings for ${texts.length} texts`,\n );\n }\n return embeddings;\n}\n\nexport async function embedSparseTexts(\n model: SparseEmbeddingModel,\n texts: string[],\n): Promise<SparseEmbedding[]> {\n if (texts.length === 0) {\n return [];\n }\n\n const maxBatchSize = Math.max(1, Math.trunc(model.maxBatchSize ?? texts.length));\n const batches: string[][] = [];\n for (let index = 0; index < texts.length; index += maxBatchSize) {\n batches.push(texts.slice(index, index + maxBatchSize));\n }\n\n const results = await mapWithConcurrency(batches, 1, (batch) => model.embedTexts(batch));\n const embeddings = results.flat();\n if (embeddings.length !== texts.length) {\n throw new Error(\n `Sparse embedding model returned ${embeddings.length} embeddings for ${texts.length} texts`,\n );\n }\n return embeddings;\n}\n\nexport async function embedSparseQuery(\n model: SparseEmbeddingModel,\n query: string,\n): Promise<SparseEmbedding> {\n return model.embedQuery(query);\n}\n\nexport async function embedDocuments<T, Metadata extends VectorMetadata = VectorMetadata>(\n model: EmbeddingModel,\n documents: T[],\n options: EmbedDocumentsOptions<T, Metadata>,\n): Promise<Array<EmbeddedDocument<T, Metadata>>> {\n const prepared = prepareDocuments(documents, options);\n\n const flatTexts = prepared.flatMap((item, documentIndex) =>\n item.texts.map((text) => ({ documentIndex, text })),\n );\n const embeddings = await mapWithConcurrency(\n chunk(flatTexts, Math.max(1, Math.trunc(model.maxBatchSize ?? (flatTexts.length || 1)))),\n Math.max(1, Math.trunc(options.concurrency ?? 1)),\n async (batch) => {\n const batchEmbeddings = await model.embedTexts(batch.map((item) => item.text));\n if (batchEmbeddings.length !== batch.length) {\n throw new Error(\n `Embedding model returned ${batchEmbeddings.length} embeddings for ${batch.length} texts`,\n );\n }\n return batch.map((item, index) => ({\n documentIndex: item.documentIndex,\n embedding: batchEmbeddings[index] as Embedding,\n }));\n },\n );\n\n const byDocument = new Map<number, Embedding[]>();\n for (const item of embeddings.flat()) {\n const list = byDocument.get(item.documentIndex) ?? [];\n list.push(item.embedding);\n byDocument.set(item.documentIndex, list);\n }\n\n return prepared.map((item, index) => {\n const documentEmbeddings = byDocument.get(index) ?? [];\n if (item.metadata === undefined) {\n return { id: item.id, document: item.document, embeddings: documentEmbeddings };\n }\n return {\n id: item.id,\n document: item.document,\n metadata: item.metadata,\n embeddings: documentEmbeddings,\n };\n });\n}\n\nexport async function embedHybridDocuments<T, Metadata extends VectorMetadata = VectorMetadata>(\n models: EmbedHybridDocumentsOptions,\n documents: T[],\n options: EmbedDocumentsOptions<T, Metadata>,\n): Promise<Array<EmbeddedDocument<T, Metadata>>> {\n const prepared = prepareDocuments(documents, options);\n const flatTexts = prepared.flatMap((item, documentIndex) =>\n item.texts.map((text) => ({ documentIndex, text })),\n );\n const concurrency = Math.max(1, Math.trunc(options.concurrency ?? 1));\n\n const denseBatches = chunk(\n flatTexts,\n Math.max(1, Math.trunc(models.dense.maxBatchSize ?? (flatTexts.length || 1))),\n );\n const sparseBatches = chunk(\n flatTexts,\n Math.max(1, Math.trunc(models.sparse.maxBatchSize ?? (flatTexts.length || 1))),\n );\n\n const [denseResults, sparseResults] = await Promise.all([\n mapWithConcurrency(denseBatches, concurrency, async (batch) => {\n const batchEmbeddings = await models.dense.embedTexts(batch.map((item) => item.text));\n if (batchEmbeddings.length !== batch.length) {\n throw new Error(\n `Embedding model returned ${batchEmbeddings.length} embeddings for ${batch.length} texts`,\n );\n }\n return batch.map((item, index) => ({\n documentIndex: item.documentIndex,\n embedding: batchEmbeddings[index] as Embedding,\n }));\n }),\n mapWithConcurrency(sparseBatches, concurrency, async (batch) => {\n const batchEmbeddings = await models.sparse.embedTexts(batch.map((item) => item.text));\n if (batchEmbeddings.length !== batch.length) {\n throw new Error(\n `Sparse embedding model returned ${batchEmbeddings.length} embeddings for ${batch.length} texts`,\n );\n }\n return batch.map((item, index) => ({\n documentIndex: item.documentIndex,\n embedding: batchEmbeddings[index] as SparseEmbedding,\n }));\n }),\n ]);\n\n const denseByDocument = new Map<number, Embedding[]>();\n for (const item of denseResults.flat()) {\n const list = denseByDocument.get(item.documentIndex) ?? [];\n list.push(item.embedding);\n denseByDocument.set(item.documentIndex, list);\n }\n\n const sparseByDocument = new Map<number, SparseEmbedding[]>();\n for (const item of sparseResults.flat()) {\n const list = sparseByDocument.get(item.documentIndex) ?? [];\n list.push(item.embedding);\n sparseByDocument.set(item.documentIndex, list);\n }\n\n return prepared.map((item, index) => {\n const embeddings = denseByDocument.get(index) ?? [];\n const sparseEmbeddings = sparseByDocument.get(index) ?? [];\n if (embeddings.length !== sparseEmbeddings.length) {\n throw new Error(\n `Hybrid embedding produced ${embeddings.length} dense and ${sparseEmbeddings.length} sparse vectors for document ${item.id}`,\n );\n }\n if (item.metadata === undefined) {\n return { id: item.id, document: item.document, embeddings, sparseEmbeddings };\n }\n return {\n id: item.id,\n document: item.document,\n metadata: item.metadata,\n embeddings,\n sparseEmbeddings,\n };\n });\n}\n\nfunction prepareDocuments<T, Metadata extends VectorMetadata>(\n documents: T[],\n options: EmbedDocumentsOptions<T, Metadata>,\n) {\n return documents.map((document, index) => {\n const content = options.content(document, index);\n const texts = Array.isArray(content) ? content : [content];\n return {\n id: options.id?.(document, index) ?? `doc${index}`,\n document,\n metadata: options.metadata?.(document, index),\n texts,\n };\n });\n}\n\nfunction chunk<T>(items: T[], size: number): T[][] {\n const chunks: T[][] = [];\n for (let index = 0; index < items.length; index += size) {\n chunks.push(items.slice(index, index + size));\n }\n return chunks;\n}\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/guardrails/index.ts"],"sourcesContent":["import type { JsonObject, Message, Usage } from \"../completion\";\nimport type { MaybePromise } from \"../internal/type-utils\";\n\nexport type GuardrailMode = \"enforce\" | \"observe\";\n\nexport type GuardrailBoundary = \"input\" | \"output\";\n\nexport type GuardrailRunContext = {\n agentId: string;\n runId: string;\n sessionId?: string | undefined;\n metadata?: JsonObject | undefined;\n};\n\nexport type GuardrailDecisionRecord = {\n policyId: string;\n guardrailId: string;\n boundary: GuardrailBoundary;\n mode: GuardrailMode;\n action: GuardrailActionName;\n applied: boolean;\n reason?: string | undefined;\n message?: string | undefined;\n metadata?: JsonObject | undefined;\n latencyMs: number;\n};\n\nexport type GuardrailActionName = \"allow\" | \"block\" | \"rewrite\" | \"error\";\n\nexport type GuardrailActionBase = {\n reason?: string | undefined;\n metadata?: JsonObject | undefined;\n};\n\nexport type GuardrailAllow = GuardrailActionBase & {\n action: \"allow\";\n};\n\nexport type GuardrailBlock = GuardrailActionBase & {\n action: \"block\";\n reason: string;\n message?: string | undefined;\n};\n\nexport type InputGuardrailRewrite = GuardrailActionBase & {\n action: \"rewrite\";\n prompt?: Message | undefined;\n inputText?: string | undefined;\n};\n\nexport type OutputGuardrailRewrite = GuardrailActionBase & {\n action: \"rewrite\";\n outputText: string;\n};\n\nexport type InputGuardrailResult = GuardrailAllow | GuardrailBlock | InputGuardrailRewrite;\nexport type OutputGuardrailResult = GuardrailAllow | GuardrailBlock | OutputGuardrailRewrite;\n\nexport type GuardrailCommonActions = {\n allow(options?: GuardrailActionBase): GuardrailAllow;\n block(options: Omit<GuardrailBlock, \"action\">): GuardrailBlock;\n};\n\nexport type InputGuardrailActions = GuardrailCommonActions & {\n rewrite(options: Omit<InputGuardrailRewrite, \"action\">): InputGuardrailRewrite;\n};\n\nexport type OutputGuardrailActions = GuardrailCommonActions & {\n rewrite(options: Omit<OutputGuardrailRewrite, \"action\">): OutputGuardrailRewrite;\n};\n\nexport type InputGuardrailContext = {\n prompt: Message;\n history: Message[];\n inputText: string;\n run: GuardrailRunContext;\n};\n\nexport type OutputGuardrailContext = {\n outputText: string;\n messages: Message[];\n usage: Usage;\n run: GuardrailRunContext;\n};\n\nexport type InputGuardrail = {\n id: string;\n check(\n context: InputGuardrailContext,\n actions: InputGuardrailActions,\n ): MaybePromise<InputGuardrailResult | undefined>;\n};\n\nexport type OutputGuardrail = {\n id: string;\n check(\n context: OutputGuardrailContext,\n actions: OutputGuardrailActions,\n ): MaybePromise<OutputGuardrailResult | undefined>;\n};\n\nexport type GuardrailPolicy = {\n id: string;\n mode: GuardrailMode;\n input: InputGuardrail[];\n output: OutputGuardrail[];\n};\n\nexport type GuardrailPolicyOptions = {\n id: string;\n mode?: GuardrailMode | undefined;\n input?: InputGuardrail[] | undefined;\n output?: OutputGuardrail[] | undefined;\n};\n\nexport type GuardrailPolicyInput = GuardrailPolicy | GuardrailPolicy[];\n\nexport type InputGuardrailRunResult = {\n prompt: Message;\n inputText: string;\n blocked: boolean;\n message?: string | undefined;\n decisions: GuardrailDecisionRecord[];\n};\n\nexport type OutputGuardrailRunResult = {\n outputText: string;\n blocked: boolean;\n message?: string | undefined;\n decisions: GuardrailDecisionRecord[];\n};\n\nexport function defineGuardrailPolicy(options: GuardrailPolicyOptions): GuardrailPolicy {\n return {\n id: options.id,\n mode: options.mode ?? \"enforce\",\n input: options.input ?? [],\n output: options.output ?? [],\n };\n}\n\nexport function defineInputGuardrail(guardrail: InputGuardrail): InputGuardrail {\n return guardrail;\n}\n\nexport function defineOutputGuardrail(guardrail: OutputGuardrail): OutputGuardrail {\n return guardrail;\n}\n\nexport function allow(options: GuardrailActionBase = {}): GuardrailAllow {\n return { action: \"allow\", ...options };\n}\n\nexport function block(options: Omit<GuardrailBlock, \"action\">): GuardrailBlock {\n return { action: \"block\", ...options };\n}\n\nexport const guardrails = {\n blockText,\n redactText,\n};\n\nexport function normalizeGuardrailPolicies(\n policies: GuardrailPolicyInput | undefined,\n): GuardrailPolicy[] {\n if (policies === undefined) {\n return [];\n }\n return Array.isArray(policies) ? policies : [policies];\n}\n\nexport function appendGuardrailPolicies(\n current: GuardrailPolicy[],\n next: GuardrailPolicyInput,\n): GuardrailPolicy[] {\n return [...current, ...normalizeGuardrailPolicies(next)];\n}\n\nexport function hasEnforcedOutputGuardrails(policies: GuardrailPolicy[]): boolean {\n return policies.some((policy) => policy.mode === \"enforce\" && policy.output.length > 0);\n}\n\nexport async function runInputGuardrails(\n policies: GuardrailPolicy[],\n context: InputGuardrailContext,\n): Promise<InputGuardrailRunResult> {\n let prompt = context.prompt;\n let inputText = context.inputText;\n const decisions: GuardrailDecisionRecord[] = [];\n\n for (const policy of policies) {\n for (const guardrail of policy.input) {\n const currentContext = { ...context, prompt, inputText };\n const result = await runGuardrail(policy, guardrail.id, \"input\", () =>\n guardrail.check(currentContext, inputActions),\n );\n decisions.push(result.decision);\n\n if (policy.mode === \"observe\") {\n continue;\n }\n if (result.action.action === \"block\") {\n return {\n prompt,\n inputText,\n blocked: true,\n message: result.action.message,\n decisions,\n };\n }\n if (result.action.action === \"rewrite\") {\n if (result.action.prompt !== undefined) {\n prompt = result.action.prompt;\n inputText = textFromMessage(prompt);\n } else if (result.action.inputText !== undefined) {\n inputText = result.action.inputText;\n prompt = rewriteMessageText(prompt, inputText);\n }\n }\n }\n }\n\n return { prompt, inputText, blocked: false, decisions };\n}\n\nexport async function runOutputGuardrails(\n policies: GuardrailPolicy[],\n context: OutputGuardrailContext,\n): Promise<OutputGuardrailRunResult> {\n let outputText = context.outputText;\n const decisions: GuardrailDecisionRecord[] = [];\n\n for (const policy of policies) {\n for (const guardrail of policy.output) {\n const currentContext = { ...context, outputText };\n const result = await runGuardrail(policy, guardrail.id, \"output\", () =>\n guardrail.check(currentContext, outputActions),\n );\n decisions.push(result.decision);\n\n if (policy.mode === \"observe\") {\n continue;\n }\n if (result.action.action === \"block\") {\n return {\n outputText,\n blocked: true,\n message: result.action.message,\n decisions,\n };\n }\n if (result.action.action === \"rewrite\") {\n outputText = result.action.outputText;\n }\n }\n }\n\n return { outputText, blocked: false, decisions };\n}\n\ntype RunGuardrailResult<TAction extends { action: GuardrailActionName }> = {\n action: TAction;\n decision: GuardrailDecisionRecord;\n};\n\nasync function runGuardrail<TAction extends { action: GuardrailActionName } & GuardrailActionBase>(\n policy: GuardrailPolicy,\n guardrailId: string,\n boundary: GuardrailBoundary,\n run: () => MaybePromise<TAction | undefined>,\n): Promise<RunGuardrailResult<TAction | GuardrailAllow>> {\n const startedAt = Date.now();\n try {\n const action = (await run()) ?? allow();\n return {\n action,\n decision: decisionRecord({\n policy,\n guardrailId,\n boundary,\n action,\n latencyMs: Date.now() - startedAt,\n }),\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n if (policy.mode === \"observe\") {\n return {\n action: allow(),\n decision: {\n policyId: policy.id,\n guardrailId,\n boundary,\n mode: policy.mode,\n action: \"error\",\n applied: false,\n reason: message,\n latencyMs: Date.now() - startedAt,\n },\n };\n }\n throw error;\n }\n}\n\nfunction decisionRecord(args: {\n policy: GuardrailPolicy;\n guardrailId: string;\n boundary: GuardrailBoundary;\n action: GuardrailAllow | GuardrailBlock | ({ action: GuardrailActionName } & GuardrailActionBase);\n latencyMs: number;\n}): GuardrailDecisionRecord {\n const applied = args.policy.mode === \"enforce\" && args.action.action !== \"allow\";\n const record: GuardrailDecisionRecord = {\n policyId: args.policy.id,\n guardrailId: args.guardrailId,\n boundary: args.boundary,\n mode: args.policy.mode,\n action: args.action.action,\n applied,\n latencyMs: args.latencyMs,\n };\n if (args.action.reason !== undefined) record.reason = args.action.reason;\n if (\"message\" in args.action && typeof args.action.message === \"string\") {\n record.message = args.action.message;\n }\n if (args.action.metadata !== undefined) record.metadata = args.action.metadata;\n return record;\n}\n\nconst commonActions: GuardrailCommonActions = {\n allow,\n block,\n};\n\nconst inputActions: InputGuardrailActions = {\n ...commonActions,\n rewrite(options) {\n return { action: \"rewrite\", ...options };\n },\n};\n\nconst outputActions: OutputGuardrailActions = {\n ...commonActions,\n rewrite(options) {\n return { action: \"rewrite\", ...options };\n },\n};\n\ntype TextPatternBoundary = \"input\" | \"output\";\n\ntype TextPatternGuardrailFor<Boundary extends TextPatternBoundary> = Boundary extends \"input\"\n ? InputGuardrail\n : OutputGuardrail;\n\ntype TextPatternGuardrailOptions<Boundary extends TextPatternBoundary = TextPatternBoundary> = {\n id: string;\n boundary: Boundary;\n patterns: Array<string | RegExp>;\n reason: string;\n message?: string | undefined;\n};\n\ntype TextPatternRedactOptions<Boundary extends TextPatternBoundary = TextPatternBoundary> =\n TextPatternGuardrailOptions<Boundary> & { replacement?: string | undefined };\n\nfunction blockText<Boundary extends TextPatternBoundary>(\n options: TextPatternGuardrailOptions<Boundary>,\n): TextPatternGuardrailFor<Boundary> {\n return textPatternGuardrail(options, \"block\");\n}\n\nfunction redactText<Boundary extends TextPatternBoundary>(\n options: TextPatternRedactOptions<Boundary>,\n): TextPatternGuardrailFor<Boundary> {\n return textPatternGuardrail(options, \"rewrite\");\n}\n\nfunction textPatternGuardrail<Boundary extends TextPatternBoundary>(\n options: TextPatternRedactOptions<Boundary>,\n action: \"block\" | \"rewrite\",\n): TextPatternGuardrailFor<Boundary> {\n if (options.boundary === \"input\") {\n return defineInputGuardrail({\n id: options.id,\n check(ctx, actions) {\n return textPatternAction(ctx.inputText, options, action, (value) =>\n actions.rewrite({ inputText: value, reason: options.reason }),\n );\n },\n }) as TextPatternGuardrailFor<Boundary>;\n }\n return defineOutputGuardrail({\n id: options.id,\n check(ctx, actions) {\n return textPatternAction(ctx.outputText, options, action, (value) =>\n actions.rewrite({ outputText: value, reason: options.reason }),\n );\n },\n }) as TextPatternGuardrailFor<Boundary>;\n}\n\nfunction textPatternAction<TRewrite>(\n text: string,\n options: TextPatternGuardrailOptions & { replacement?: string | undefined },\n action: \"block\" | \"rewrite\",\n rewrite: (value: string) => TRewrite,\n): GuardrailAllow | GuardrailBlock | TRewrite {\n const matched = options.patterns.some((pattern) => textPatternMatches(text, pattern));\n if (!matched) {\n return allow();\n }\n if (action === \"block\") {\n return block({\n reason: options.reason,\n message: options.message,\n });\n }\n let current = text;\n for (const pattern of options.patterns) {\n current = replaceTextPattern(current, pattern, options.replacement ?? \"[redacted]\");\n }\n return rewrite(current);\n}\n\nfunction textPatternMatches(text: string, pattern: string | RegExp): boolean {\n if (typeof pattern === \"string\") {\n return text.includes(pattern);\n }\n pattern.lastIndex = 0;\n const matched = pattern.test(text);\n pattern.lastIndex = 0;\n return matched;\n}\n\nfunction replaceTextPattern(text: string, pattern: string | RegExp, replacement: string): string {\n if (typeof pattern === \"string\") {\n return text.split(pattern).join(replacement);\n }\n pattern.lastIndex = 0;\n const flags = pattern.flags.replace(\"y\", \"\");\n const globalFlags = flags.includes(\"g\") ? flags : `${flags}g`;\n return text.replace(new RegExp(pattern.source, globalFlags), replacement);\n}\n\nfunction textFromMessage(message: Message): string {\n if (message.role === \"system\") {\n return message.content;\n }\n return message.content\n .flatMap((content) => {\n if (content.type === \"text\") {\n return [content.text];\n }\n if (content.type === \"document\" && content.source.type === \"text\") {\n return [content.source.text];\n }\n return [];\n })\n .join(\"\\n\");\n}\n\nfunction rewriteMessageText(message: Message, text: string): Message {\n if (message.role === \"system\") {\n return { ...message, content: text };\n }\n if (message.role === \"user\") {\n return {\n ...message,\n content: [\n { type: \"text\", text },\n ...message.content.filter(\n (item) =>\n item.type !== \"text\" && !(item.type === \"document\" && item.source.type === \"text\"),\n ),\n ],\n };\n }\n if (message.role === \"assistant\") {\n return { ...message, content: [{ type: \"text\", text }] };\n }\n return message;\n}\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/completion/documents.ts"],"sourcesContent":["import { type Document, Message, type Message as MessageType } from \"./types\";\n\nexport function normalizeDocuments(documents: Document[]): MessageType | undefined {\n if (documents.length === 0) {\n return undefined;\n }\n\n return Message.user(documents.map(formatDocument).join(\"\\n\"));\n}\n\nexport function formatDocument(document: Document): string {\n return `<file id: ${document.id}>\\n${formatDocumentBody(document)}\\n</file>\\n`;\n}\n\nfunction formatDocumentBody(document: Document): string {\n const metadata = formatMetadata(document.additionalProps);\n return metadata === undefined ? document.text : `${metadata}\\n${document.text}`;\n}\n\nfunction formatMetadata(additionalProps: Record<string, string> | undefined): string | undefined {\n if (additionalProps === undefined) {\n return undefined;\n }\n\n const entries = Object.entries(additionalProps).sort(([left], [right]) =>\n left.localeCompare(right),\n );\n if (entries.length === 0) {\n return undefined;\n }\n\n const metadata = entries.map(([key, value]) => `${key}: ${JSON.stringify(value)}`).join(\" \");\n return `<metadata ${metadata} />`;\n}\n"],"mappings":";;;;;AAEO,SAAS,mBAAmB,WAAgD;AACjF,MAAI,UAAU,WAAW,GAAG;AAC1B,WAAO;AAAA,EACT;AAEA,SAAO,QAAQ,KAAK,UAAU,IAAI,cAAc,EAAE,KAAK,IAAI,CAAC;AAC9D;AAEO,SAAS,eAAe,UAA4B;AACzD,SAAO,aAAa,SAAS,EAAE;AAAA,EAAM,mBAAmB,QAAQ,CAAC;AAAA;AAAA;AACnE;AAEA,SAAS,mBAAmB,UAA4B;AACtD,QAAM,WAAW,eAAe,SAAS,eAAe;AACxD,SAAO,aAAa,SAAY,SAAS,OAAO,GAAG,QAAQ;AAAA,EAAK,SAAS,IAAI;AAC/E;AAEA,SAAS,eAAe,iBAAyE;AAC/F,MAAI,oBAAoB,QAAW;AACjC,WAAO;AAAA,EACT;AAEA,QAAM,UAAU,OAAO,QAAQ,eAAe,EAAE;AAAA,IAAK,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,MAClE,KAAK,cAAc,KAAK;AAAA,EAC1B;AACA,MAAI,QAAQ,WAAW,GAAG;AACxB,WAAO;AAAA,EACT;AAEA,QAAM,WAAW,QAAQ,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,GAAG,GAAG,KAAK,KAAK,UAAU,KAAK,CAAC,EAAE,EAAE,KAAK,GAAG;AAC3F,SAAO,aAAa,QAAQ;AAC9B;","names":[]}