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

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 (151) hide show
  1. package/README.md +344 -85
  2. package/dist/agent/index.d.ts +33 -18
  3. package/dist/agent/index.js +42 -17
  4. package/dist/agent-CXScUOpX.d.ts +150 -0
  5. package/dist/{chunk-R2LJSQUW.js → chunk-3CMWKK32.js} +260 -104
  6. package/dist/chunk-3CMWKK32.js.map +1 -0
  7. package/dist/chunk-3RM57ZT2.js +31 -0
  8. package/dist/chunk-3RM57ZT2.js.map +1 -0
  9. package/dist/chunk-5MK3BISB.js +704 -0
  10. package/dist/chunk-5MK3BISB.js.map +1 -0
  11. package/dist/chunk-AI5JMUW7.js +45 -0
  12. package/dist/chunk-AI5JMUW7.js.map +1 -0
  13. package/dist/{chunk-FNQB2JEH.js → chunk-AZB6N7P4.js} +94 -65
  14. package/dist/chunk-AZB6N7P4.js.map +1 -0
  15. package/dist/chunk-BEYBU7VJ.js +53 -0
  16. package/dist/chunk-BEYBU7VJ.js.map +1 -0
  17. package/dist/chunk-BY4OMNIU.js +4699 -0
  18. package/dist/chunk-BY4OMNIU.js.map +1 -0
  19. package/dist/chunk-D2ECOWN5.js +515 -0
  20. package/dist/chunk-D2ECOWN5.js.map +1 -0
  21. package/dist/{chunk-A3UBYTJT.js → chunk-FN7HLLAZ.js} +60 -6
  22. package/dist/chunk-FN7HLLAZ.js.map +1 -0
  23. package/dist/chunk-GKDERULJ.js +50 -0
  24. package/dist/chunk-GKDERULJ.js.map +1 -0
  25. package/dist/chunk-GQL5KRAH.js +331 -0
  26. package/dist/chunk-GQL5KRAH.js.map +1 -0
  27. package/dist/{chunk-5XKDW36Z.js → chunk-KFR4CDGK.js} +70 -75
  28. package/dist/chunk-KFR4CDGK.js.map +1 -0
  29. package/dist/chunk-KV6QCRQ4.js +171 -0
  30. package/dist/chunk-KV6QCRQ4.js.map +1 -0
  31. package/dist/{chunk-DMPUP4R3.js → chunk-LXMAFD23.js} +5 -5
  32. package/dist/{chunk-I6G7BC42.js → chunk-MGNTXGTX.js} +2 -6
  33. package/dist/chunk-MGNTXGTX.js.map +1 -0
  34. package/dist/chunk-PK5LKOFL.js +239 -0
  35. package/dist/chunk-PK5LKOFL.js.map +1 -0
  36. package/dist/chunk-QOUPWOGW.js +29 -0
  37. package/dist/chunk-QOUPWOGW.js.map +1 -0
  38. package/dist/chunk-TRQ3XRFD.js +54 -0
  39. package/dist/chunk-TRQ3XRFD.js.map +1 -0
  40. package/dist/chunk-VKYZZXP5.js +323 -0
  41. package/dist/chunk-VKYZZXP5.js.map +1 -0
  42. package/dist/chunk-ZCPOIDAQ.js +127 -0
  43. package/dist/chunk-ZCPOIDAQ.js.map +1 -0
  44. package/dist/client-DvUatElp.d.ts +84 -0
  45. package/dist/completion/index.d.ts +5 -4
  46. package/dist/completion/index.js +25 -28
  47. package/dist/documents/index.d.ts +34 -0
  48. package/dist/documents/index.js +315 -0
  49. package/dist/documents/index.js.map +1 -0
  50. package/dist/{dynamic-tools-i9woysFa.d.ts → dynamic-tools-AEBOTgu1.d.ts} +21 -9
  51. package/dist/embeddings/index.d.ts +11 -9
  52. package/dist/embeddings/index.js +3 -3
  53. package/dist/evals/index.d.ts +53 -25
  54. package/dist/evals/index.js +153 -103
  55. package/dist/evals/index.js.map +1 -1
  56. package/dist/extractor/index.d.ts +23 -26
  57. package/dist/extractor/index.js +7 -8
  58. package/dist/guardrails/index.d.ts +7 -129
  59. package/dist/guardrails/index.js +1 -1
  60. package/dist/image-generation/index.d.ts +18 -16
  61. package/dist/image-generation/index.js +2 -2
  62. package/dist/index.d.ts +26 -23
  63. package/dist/index.js +71 -48
  64. package/dist/interactions-csssHYcN.d.ts +174 -0
  65. package/dist/internal/agent.d.ts +36 -29
  66. package/dist/internal/agent.js +48 -15
  67. package/dist/internal/agent.js.map +1 -1
  68. package/dist/mcp/index.d.ts +19 -13
  69. package/dist/mcp/index.js +14 -348
  70. package/dist/mcp/index.js.map +1 -1
  71. package/dist/memory/index.d.ts +20 -6
  72. package/dist/memory/index.js +10 -10
  73. package/dist/message-schema-B2M7AYzR.d.ts +52 -0
  74. package/dist/model-call-options-CZkSw_xN.d.ts +6 -0
  75. package/dist/model-listing/index.d.ts +3 -1
  76. package/dist/observability/index.d.ts +21 -6
  77. package/dist/observability/index.js +8 -5
  78. package/dist/observability/index.js.map +1 -1
  79. package/dist/pipeline/index.d.ts +106 -57
  80. package/dist/pipeline/index.js +419 -236
  81. package/dist/pipeline/index.js.map +1 -1
  82. package/dist/{retry-D3Ruy-ba.d.ts → retry-CjvSlKGW.d.ts} +2 -1
  83. package/dist/skills/index.d.ts +5 -4
  84. package/dist/skills/index.js +8 -7
  85. package/dist/speech-generation/index.d.ts +37 -0
  86. package/dist/speech-generation/index.js +8 -0
  87. package/dist/text-C_6eKrbC.d.ts +32 -0
  88. package/dist/{think-tool-DZqZj2LV.d.ts → think-tool-D8frXxwV.d.ts} +16 -2
  89. package/dist/tool/index.d.ts +9 -7
  90. package/dist/tool/index.js +12 -10
  91. package/dist/{tool-C_8GudXn.d.ts → tool-r62gf3QY.d.ts} +17 -8
  92. package/dist/transcription/index.d.ts +23 -14
  93. package/dist/transcription/index.js +2 -2
  94. package/dist/types-C3gv9EX6.d.ts +130 -0
  95. package/dist/{index-DxB74ybJ.d.ts → types-CElwurHZ.d.ts} +139 -88
  96. package/dist/types-CIPaIbZo.d.ts +105 -0
  97. package/dist/types-Cr4uiYo5.d.ts +99 -0
  98. package/dist/types-D9rKQ_as.d.ts +341 -0
  99. package/dist/types-DbolvLtZ.d.ts +155 -0
  100. package/dist/{types-DhQfwiZn.d.ts → types-RT3cuyRk.d.ts} +1 -1
  101. package/dist/vector-store/index.d.ts +33 -34
  102. package/dist/vector-store/index.js +7 -6
  103. package/package.json +10 -14
  104. package/dist/agent-DGYY_onS.d.ts +0 -145
  105. package/dist/audio-generation/index.d.ts +0 -31
  106. package/dist/audio-generation/index.js +0 -8
  107. package/dist/chunk-5XKDW36Z.js.map +0 -1
  108. package/dist/chunk-6WGGTJE6.js +0 -139
  109. package/dist/chunk-6WGGTJE6.js.map +0 -1
  110. package/dist/chunk-A3UBYTJT.js.map +0 -1
  111. package/dist/chunk-ADH7NNCS.js +0 -512
  112. package/dist/chunk-ADH7NNCS.js.map +0 -1
  113. package/dist/chunk-DZ3CKYTH.js +0 -267
  114. package/dist/chunk-DZ3CKYTH.js.map +0 -1
  115. package/dist/chunk-FNQB2JEH.js.map +0 -1
  116. package/dist/chunk-I6G7BC42.js.map +0 -1
  117. package/dist/chunk-IL3ZSNJI.js +0 -3748
  118. package/dist/chunk-IL3ZSNJI.js.map +0 -1
  119. package/dist/chunk-J6GNQART.js +0 -122
  120. package/dist/chunk-J6GNQART.js.map +0 -1
  121. package/dist/chunk-M3IOWB4Y.js +0 -280
  122. package/dist/chunk-M3IOWB4Y.js.map +0 -1
  123. package/dist/chunk-QY5GZ7HR.js +0 -39
  124. package/dist/chunk-QY5GZ7HR.js.map +0 -1
  125. package/dist/chunk-R2LJSQUW.js.map +0 -1
  126. package/dist/chunk-RFDVKCIE.js +0 -12
  127. package/dist/chunk-RFDVKCIE.js.map +0 -1
  128. package/dist/chunk-RMUBRRSK.js +0 -34
  129. package/dist/chunk-RMUBRRSK.js.map +0 -1
  130. package/dist/chunk-RXKHOYEH.js +0 -466
  131. package/dist/chunk-RXKHOYEH.js.map +0 -1
  132. package/dist/chunk-XDRSPSR7.js +0 -38
  133. package/dist/chunk-XDRSPSR7.js.map +0 -1
  134. package/dist/chunk-XWUC7CIT.js +0 -1
  135. package/dist/chunk-XWUC7CIT.js.map +0 -1
  136. package/dist/errors-CYKUcU89.d.ts +0 -17
  137. package/dist/json-Zo7K3xmt.d.ts +0 -40
  138. package/dist/loaders/index.d.ts +0 -86
  139. package/dist/loaders/index.js +0 -299
  140. package/dist/loaders/index.js.map +0 -1
  141. package/dist/middleware-KynLg_RW.d.ts +0 -56
  142. package/dist/types-B3A4YxaA.d.ts +0 -354
  143. package/dist/types-BBEGKB9m.d.ts +0 -119
  144. package/dist/types-DT3nEemY.d.ts +0 -79
  145. package/dist/types-DulRCYdB.d.ts +0 -70
  146. package/dist/types-p55Jc-sr.d.ts +0 -47
  147. package/dist/ui/index.d.ts +0 -107
  148. package/dist/ui/index.js +0 -10
  149. package/dist/ui/index.js.map +0 -1
  150. /package/dist/{chunk-DMPUP4R3.js.map → chunk-LXMAFD23.js.map} +0 -0
  151. /package/dist/{audio-generation → speech-generation}/index.js.map +0 -0
@@ -1,3 +1,51 @@
1
+ // src/internal/abort.ts
2
+ function throwIfAborted(signal) {
3
+ if (signal?.aborted === true) {
4
+ throw abortError(signal.reason);
5
+ }
6
+ }
7
+ function abortError(reason) {
8
+ if (isAbortError(reason)) {
9
+ return reason;
10
+ }
11
+ const error = new Error(
12
+ "The operation was aborted.",
13
+ reason === void 0 ? void 0 : { cause: reason }
14
+ );
15
+ error.name = "AbortError";
16
+ return error;
17
+ }
18
+ function isAbortError(error) {
19
+ const seen = /* @__PURE__ */ new Set();
20
+ let current = error;
21
+ while (typeof current === "object" && current !== null && !seen.has(current)) {
22
+ seen.add(current);
23
+ if ("name" in current && current.name === "AbortError") {
24
+ return true;
25
+ }
26
+ current = "cause" in current ? current.cause : void 0;
27
+ }
28
+ return false;
29
+ }
30
+ function waitForAbortableDelay(delayMs, signal) {
31
+ throwIfAborted(signal);
32
+ if (delayMs === 0) return Promise.resolve();
33
+ if (signal === void 0) {
34
+ return new Promise((resolve) => setTimeout(resolve, delayMs));
35
+ }
36
+ return new Promise((resolve, reject) => {
37
+ const timer = setTimeout(() => {
38
+ signal.removeEventListener("abort", onAbort);
39
+ resolve();
40
+ }, delayMs);
41
+ const onAbort = () => {
42
+ clearTimeout(timer);
43
+ reject(abortError(signal.reason));
44
+ };
45
+ signal.addEventListener("abort", onAbort, { once: true });
46
+ });
47
+ }
48
+
1
49
  // src/retry.ts
2
50
  var DEFAULT_MAX_ATTEMPTS = 3;
3
51
  var DEFAULT_INITIAL_DELAY_MS = 100;
@@ -60,11 +108,11 @@ function retryErrorAttributes(error) {
60
108
  const errorCode = errors.map((candidate) => errorCodeProperty(candidate)).find((value) => value !== void 0);
61
109
  return { errorName, statusCode, errorCode };
62
110
  }
63
- async function waitForRetry(delayMs) {
64
- if (delayMs === 0) return;
65
- await new Promise((resolve) => setTimeout(resolve, delayMs));
111
+ async function waitForRetry(delayMs, abortSignal) {
112
+ await waitForAbortableDelay(delayMs, abortSignal);
66
113
  }
67
114
  function retryOptionsForFailure(options, context) {
115
+ if (isAbortError(context.error)) return void 0;
68
116
  if (options === void 0 || context.attempt >= options.maxAttempts) return void 0;
69
117
  return options.shouldRetry({ ...context, maxAttempts: options.maxAttempts }) ? options : void 0;
70
118
  }
@@ -74,16 +122,19 @@ async function runWithRetries(operation, options, context) {
74
122
  try {
75
123
  return await operation();
76
124
  } catch (error) {
125
+ if (context.abortSignal?.aborted === true) {
126
+ throw abortError(context.abortSignal.reason);
127
+ }
77
128
  const retryOptions = retryOptionsForFailure(options, { error, attempt, ...context });
78
129
  if (retryOptions === void 0) throw error;
79
- await waitForRetry(retryDelayMs(retryOptions, attempt));
130
+ await waitForRetry(retryDelayMs(retryOptions, attempt), context.abortSignal);
80
131
  attempt += 1;
81
132
  }
82
133
  }
83
134
  }
84
135
  function defaultShouldRetry(context) {
85
136
  const errors = errorChain(context.error);
86
- if (errors.some((error) => stringProperty(error, "name") === "AbortError")) return false;
137
+ if (isAbortError(context.error)) return false;
87
138
  const statusCode = firstStatusCode(errors);
88
139
  if (statusCode !== void 0) {
89
140
  return RETRYABLE_STATUS_CODES.has(statusCode) || statusCode >= 500 && statusCode <= 599;
@@ -147,6 +198,9 @@ function isObject(value) {
147
198
  }
148
199
 
149
200
  export {
201
+ throwIfAborted,
202
+ abortError,
203
+ isAbortError,
150
204
  resolveRetryOptions,
151
205
  retryDelayMs,
152
206
  retryErrorAttributes,
@@ -154,4 +208,4 @@ export {
154
208
  retryOptionsForFailure,
155
209
  runWithRetries
156
210
  };
157
- //# sourceMappingURL=chunk-A3UBYTJT.js.map
211
+ //# sourceMappingURL=chunk-FN7HLLAZ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/internal/abort.ts","../src/retry.ts"],"sourcesContent":["export function throwIfAborted(signal: AbortSignal | undefined): void {\n if (signal?.aborted === true) {\n throw abortError(signal.reason);\n }\n}\n\nexport function abortError(reason?: unknown): Error {\n if (isAbortError(reason)) {\n return reason;\n }\n\n const error = new Error(\n \"The operation was aborted.\",\n reason === undefined ? undefined : { cause: reason },\n );\n error.name = \"AbortError\";\n return error;\n}\n\nexport function isAbortError(error: unknown): error is Error {\n const seen = new Set<object>();\n let current = error;\n while (typeof current === \"object\" && current !== null && !seen.has(current)) {\n seen.add(current);\n if (\"name\" in current && current.name === \"AbortError\") {\n return true;\n }\n current = \"cause\" in current ? current.cause : undefined;\n }\n return false;\n}\n\nexport function waitForAbortableDelay(\n delayMs: number,\n signal: AbortSignal | undefined,\n): Promise<void> {\n throwIfAborted(signal);\n if (delayMs === 0) return Promise.resolve();\n if (signal === undefined) {\n return new Promise<void>((resolve) => setTimeout(resolve, delayMs));\n }\n\n return new Promise<void>((resolve, reject) => {\n const timer = setTimeout(() => {\n signal.removeEventListener(\"abort\", onAbort);\n resolve();\n }, delayMs);\n const onAbort = () => {\n clearTimeout(timer);\n reject(abortError(signal.reason));\n };\n signal.addEventListener(\"abort\", onAbort, { once: true });\n });\n}\n","import type { JsonValue } from \"./completion/types\";\nimport { abortError, isAbortError, waitForAbortableDelay } from \"./internal/abort\";\n\nexport type RetryContext = {\n error: unknown;\n attempt: number;\n maxAttempts: number;\n streaming: boolean;\n turn?: number | undefined;\n};\n\nexport type RetryOptions = {\n maxAttempts?: number | undefined;\n initialDelayMs?: number | undefined;\n maxDelayMs?: number | undefined;\n shouldRetry?: ((context: RetryContext) => boolean) | undefined;\n};\n\nexport type RetrySetting = RetryOptions | false;\n\nexport type ResolvedRetryOptions = {\n maxAttempts: number;\n initialDelayMs: number;\n maxDelayMs: number;\n shouldRetry: (context: RetryContext) => boolean;\n};\n\nconst DEFAULT_MAX_ATTEMPTS = 3;\nconst DEFAULT_INITIAL_DELAY_MS = 100;\nconst DEFAULT_MAX_DELAY_MS = 1_000;\nconst MAX_TIMER_DELAY_MS = 2_147_483_647;\n\nconst RETRYABLE_STATUS_CODES = new Set([408, 409, 425, 429]);\nconst RETRYABLE_NUMERIC_ERROR_CODES = new Set([4, 8, 14]);\nconst RETRYABLE_ERROR_NAMES = new Set([\n \"APIConnectionError\",\n \"APIConnectionTimeoutError\",\n \"TimeoutError\",\n]);\nconst RETRYABLE_ERROR_CODES = new Set([\n \"DEADLINE_EXCEEDED\",\n \"EAI_AGAIN\",\n \"ECONNREFUSED\",\n \"ECONNRESET\",\n \"EHOSTUNREACH\",\n \"ENETDOWN\",\n \"ENETUNREACH\",\n \"EPIPE\",\n \"ETIMEDOUT\",\n \"RESOURCE_EXHAUSTED\",\n \"UNAVAILABLE\",\n \"UND_ERR_CONNECT_TIMEOUT\",\n \"UND_ERR_HEADERS_TIMEOUT\",\n \"UND_ERR_SOCKET\",\n]);\n\nexport function resolveRetryOptions(options: RetryOptions): ResolvedRetryOptions {\n const maxAttempts = options.maxAttempts ?? DEFAULT_MAX_ATTEMPTS;\n const initialDelayMs = options.initialDelayMs ?? DEFAULT_INITIAL_DELAY_MS;\n const maxDelayMs = options.maxDelayMs ?? DEFAULT_MAX_DELAY_MS;\n\n if (!Number.isSafeInteger(maxAttempts) || maxAttempts < 1) {\n throw new RangeError(\"Retry maxAttempts must be a positive integer.\");\n }\n assertDelay(initialDelayMs, \"initialDelayMs\");\n assertDelay(maxDelayMs, \"maxDelayMs\");\n if (maxDelayMs < initialDelayMs) {\n throw new RangeError(\"Retry maxDelayMs must be greater than or equal to initialDelayMs.\");\n }\n if (options.shouldRetry !== undefined && typeof options.shouldRetry !== \"function\") {\n throw new TypeError(\"Retry shouldRetry must be a function.\");\n }\n\n return {\n maxAttempts,\n initialDelayMs,\n maxDelayMs,\n shouldRetry: options.shouldRetry ?? defaultShouldRetry,\n };\n}\n\nexport function retryDelayMs(options: ResolvedRetryOptions, failedAttempt: number): number {\n const exponentialDelay = options.initialDelayMs * 2 ** (failedAttempt - 1);\n const cappedDelay = Math.min(options.maxDelayMs, exponentialDelay);\n return Math.random() * cappedDelay;\n}\n\nexport function retryErrorAttributes(error: unknown): Record<string, JsonValue | undefined> {\n const errors = errorChain(error);\n const errorName = errors\n .map((candidate) => stringProperty(candidate, \"name\"))\n .find((value) => value !== undefined);\n const statusCode = firstStatusCode(errors);\n const errorCode = errors\n .map((candidate) => errorCodeProperty(candidate))\n .find((value) => value !== undefined);\n\n return { errorName, statusCode, errorCode };\n}\n\nexport async function waitForRetry(\n delayMs: number,\n abortSignal?: AbortSignal | undefined,\n): Promise<void> {\n await waitForAbortableDelay(delayMs, abortSignal);\n}\n\nexport function retryOptionsForFailure(\n options: ResolvedRetryOptions | undefined,\n context: Omit<RetryContext, \"maxAttempts\">,\n): ResolvedRetryOptions | undefined {\n if (isAbortError(context.error)) return undefined;\n if (options === undefined || context.attempt >= options.maxAttempts) return undefined;\n return options.shouldRetry({ ...context, maxAttempts: options.maxAttempts })\n ? options\n : undefined;\n}\n\nexport async function runWithRetries<T>(\n operation: () => Promise<T>,\n options: ResolvedRetryOptions | undefined,\n context: {\n streaming: boolean;\n turn?: number | undefined;\n abortSignal?: AbortSignal | undefined;\n },\n): Promise<T> {\n let attempt = 1;\n while (true) {\n try {\n return await operation();\n } catch (error) {\n if (context.abortSignal?.aborted === true) {\n throw abortError(context.abortSignal.reason);\n }\n const retryOptions = retryOptionsForFailure(options, { error, attempt, ...context });\n if (retryOptions === undefined) throw error;\n await waitForRetry(retryDelayMs(retryOptions, attempt), context.abortSignal);\n attempt += 1;\n }\n }\n}\n\nfunction defaultShouldRetry(context: RetryContext): boolean {\n const errors = errorChain(context.error);\n if (isAbortError(context.error)) return false;\n\n const statusCode = firstStatusCode(errors);\n if (statusCode !== undefined) {\n return RETRYABLE_STATUS_CODES.has(statusCode) || (statusCode >= 500 && statusCode <= 599);\n }\n\n return errors.some((error) => {\n const name = stringProperty(error, \"name\");\n if (name !== undefined && RETRYABLE_ERROR_NAMES.has(name)) return true;\n const code = stringProperty(error, \"code\")?.toUpperCase();\n if (code !== undefined && RETRYABLE_ERROR_CODES.has(code)) return true;\n const numericCode = numberProperty(error, \"code\");\n return numericCode !== undefined && RETRYABLE_NUMERIC_ERROR_CODES.has(numericCode);\n });\n}\n\nfunction firstStatusCode(errors: Record<string, unknown>[]): number | undefined {\n for (const error of errors) {\n const status = numberProperty(error, \"status\");\n if (status !== undefined && status >= 100 && status <= 599) return status;\n const statusCode = numberProperty(error, \"statusCode\");\n if (statusCode !== undefined && statusCode >= 100 && statusCode <= 599) return statusCode;\n const code = numberProperty(error, \"code\");\n if (code !== undefined && code >= 100 && code <= 599) return code;\n }\n return undefined;\n}\n\nfunction errorChain(error: unknown): Record<string, unknown>[] {\n const errors: Record<string, unknown>[] = [];\n const seen = new Set<object>();\n let current = error;\n while (isObject(current) && !seen.has(current)) {\n seen.add(current);\n errors.push(current);\n current = property(current, \"cause\");\n }\n return errors;\n}\n\nfunction assertDelay(value: number, name: string): void {\n if (!Number.isFinite(value) || value < 0 || value > MAX_TIMER_DELAY_MS) {\n throw new RangeError(`Retry ${name} must be between 0 and ${MAX_TIMER_DELAY_MS} milliseconds.`);\n }\n}\n\nfunction numberProperty(value: Record<string, unknown>, name: string): number | undefined {\n const candidate = property(value, name);\n return typeof candidate === \"number\" && Number.isFinite(candidate) ? candidate : undefined;\n}\n\nfunction stringProperty(value: Record<string, unknown>, name: string): string | undefined {\n const candidate = property(value, name);\n return typeof candidate === \"string\" && candidate.length > 0 ? candidate : undefined;\n}\n\nfunction errorCodeProperty(value: Record<string, unknown>): string | number | undefined {\n return stringProperty(value, \"code\") ?? numberProperty(value, \"code\");\n}\n\nfunction property(value: Record<string, unknown>, name: string): unknown {\n try {\n return value[name];\n } catch {\n return undefined;\n }\n}\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,50 @@
1
+ import {
2
+ resolveRetryOptions,
3
+ runWithRetries,
4
+ throwIfAborted
5
+ } from "./chunk-FN7HLLAZ.js";
6
+
7
+ // src/transcription/transcribe.ts
8
+ async function transcribe(options) {
9
+ const data = toUint8Array(options.audio.data);
10
+ if (data.byteLength === 0) {
11
+ throw new Error("Transcription audio cannot be empty.");
12
+ }
13
+ if (typeof options.audio.filename !== "string" || options.audio.filename.trim().length === 0) {
14
+ throw new TypeError("Transcription filename must be a non-empty string.");
15
+ }
16
+ throwIfAborted(options.abortSignal);
17
+ const request = { data, filename: options.audio.filename };
18
+ if (options.audio.mediaType !== void 0) request.mediaType = options.audio.mediaType;
19
+ if (options.language !== void 0) request.language = options.language;
20
+ if (options.prompt !== void 0) request.prompt = options.prompt;
21
+ if (options.temperature !== void 0) request.temperature = options.temperature;
22
+ if (options.providerOptions !== void 0) request.providerOptions = options.providerOptions;
23
+ return await runWithRetries(
24
+ () => {
25
+ throwIfAborted(options.abortSignal);
26
+ return options.model.transcription(request, modelCallOptions(options.abortSignal));
27
+ },
28
+ resolveRetries(options.retries),
29
+ { streaming: false, abortSignal: options.abortSignal }
30
+ );
31
+ }
32
+ function resolveRetries(setting) {
33
+ return setting === void 0 || setting === false ? void 0 : resolveRetryOptions(setting);
34
+ }
35
+ function modelCallOptions(abortSignal) {
36
+ return abortSignal === void 0 ? void 0 : { abortSignal };
37
+ }
38
+ function toUint8Array(bytes) {
39
+ if (bytes instanceof Uint8Array) {
40
+ return new Uint8Array(
41
+ bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength)
42
+ );
43
+ }
44
+ return new Uint8Array(bytes.slice(0));
45
+ }
46
+
47
+ export {
48
+ transcribe
49
+ };
50
+ //# sourceMappingURL=chunk-GKDERULJ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/transcription/transcribe.ts"],"sourcesContent":["import type { JsonObject } from \"../completion\";\nimport { throwIfAborted } from \"../internal/abort\";\nimport type { ModelCallOptions } from \"../model-call-options\";\nimport {\n type ResolvedRetryOptions,\n type RetrySetting,\n resolveRetryOptions,\n runWithRetries,\n} from \"../retry\";\nimport type { TranscriptionModel, TranscriptionRequest, TranscriptionResult } from \"./types\";\n\nexport type TranscriptionAudio = {\n data: Uint8Array | ArrayBuffer;\n filename: string;\n mediaType?: string | undefined;\n};\n\nexport type TranscribeOptions<Model extends TranscriptionModel = TranscriptionModel> = {\n model: Model;\n audio: TranscriptionAudio;\n language?: string | undefined;\n prompt?: string | undefined;\n temperature?: number | undefined;\n providerOptions?: JsonObject | undefined;\n retries?: RetrySetting | undefined;\n abortSignal?: AbortSignal | undefined;\n};\n\ntype RawResponseOf<Model> =\n Model extends TranscriptionModel<infer RawResponse> ? RawResponse : unknown;\n\nexport async function transcribe<Model extends TranscriptionModel>(\n options: TranscribeOptions<Model>,\n): Promise<TranscriptionResult<RawResponseOf<Model>>> {\n const data = toUint8Array(options.audio.data);\n if (data.byteLength === 0) {\n throw new Error(\"Transcription audio cannot be empty.\");\n }\n if (typeof options.audio.filename !== \"string\" || options.audio.filename.trim().length === 0) {\n throw new TypeError(\"Transcription filename must be a non-empty string.\");\n }\n throwIfAborted(options.abortSignal);\n\n const request: TranscriptionRequest = { data, filename: options.audio.filename };\n if (options.audio.mediaType !== undefined) request.mediaType = options.audio.mediaType;\n if (options.language !== undefined) request.language = options.language;\n if (options.prompt !== undefined) request.prompt = options.prompt;\n if (options.temperature !== undefined) request.temperature = options.temperature;\n if (options.providerOptions !== undefined) request.providerOptions = options.providerOptions;\n\n return await runWithRetries(\n () => {\n throwIfAborted(options.abortSignal);\n return options.model.transcription(request, modelCallOptions(options.abortSignal)) as Promise<\n TranscriptionResult<RawResponseOf<Model>>\n >;\n },\n resolveRetries(options.retries),\n { streaming: false, abortSignal: options.abortSignal },\n );\n}\n\nfunction resolveRetries(setting: RetrySetting | undefined): ResolvedRetryOptions | undefined {\n return setting === undefined || setting === false ? undefined : resolveRetryOptions(setting);\n}\n\nfunction modelCallOptions(abortSignal: AbortSignal | undefined): ModelCallOptions | undefined {\n return abortSignal === undefined ? undefined : { abortSignal };\n}\n\nfunction toUint8Array(bytes: Uint8Array | ArrayBuffer): Uint8Array {\n if (bytes instanceof Uint8Array) {\n return new Uint8Array(\n bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength),\n );\n }\n return new Uint8Array(bytes.slice(0));\n}\n"],"mappings":";;;;;;;AA+BA,eAAsB,WACpB,SACoD;AACpD,QAAM,OAAO,aAAa,QAAQ,MAAM,IAAI;AAC5C,MAAI,KAAK,eAAe,GAAG;AACzB,UAAM,IAAI,MAAM,sCAAsC;AAAA,EACxD;AACA,MAAI,OAAO,QAAQ,MAAM,aAAa,YAAY,QAAQ,MAAM,SAAS,KAAK,EAAE,WAAW,GAAG;AAC5F,UAAM,IAAI,UAAU,oDAAoD;AAAA,EAC1E;AACA,iBAAe,QAAQ,WAAW;AAElC,QAAM,UAAgC,EAAE,MAAM,UAAU,QAAQ,MAAM,SAAS;AAC/E,MAAI,QAAQ,MAAM,cAAc,OAAW,SAAQ,YAAY,QAAQ,MAAM;AAC7E,MAAI,QAAQ,aAAa,OAAW,SAAQ,WAAW,QAAQ;AAC/D,MAAI,QAAQ,WAAW,OAAW,SAAQ,SAAS,QAAQ;AAC3D,MAAI,QAAQ,gBAAgB,OAAW,SAAQ,cAAc,QAAQ;AACrE,MAAI,QAAQ,oBAAoB,OAAW,SAAQ,kBAAkB,QAAQ;AAE7E,SAAO,MAAM;AAAA,IACX,MAAM;AACJ,qBAAe,QAAQ,WAAW;AAClC,aAAO,QAAQ,MAAM,cAAc,SAAS,iBAAiB,QAAQ,WAAW,CAAC;AAAA,IAGnF;AAAA,IACA,eAAe,QAAQ,OAAO;AAAA,IAC9B,EAAE,WAAW,OAAO,aAAa,QAAQ,YAAY;AAAA,EACvD;AACF;AAEA,SAAS,eAAe,SAAqE;AAC3F,SAAO,YAAY,UAAa,YAAY,QAAQ,SAAY,oBAAoB,OAAO;AAC7F;AAEA,SAAS,iBAAiB,aAAoE;AAC5F,SAAO,gBAAgB,SAAY,SAAY,EAAE,YAAY;AAC/D;AAEA,SAAS,aAAa,OAA6C;AACjE,MAAI,iBAAiB,YAAY;AAC/B,WAAO,IAAI;AAAA,MACT,MAAM,OAAO,MAAM,MAAM,YAAY,MAAM,aAAa,MAAM,UAAU;AAAA,IAC1E;AAAA,EACF;AACA,SAAO,IAAI,WAAW,MAAM,MAAM,CAAC,CAAC;AACtC;","names":[]}
@@ -0,0 +1,331 @@
1
+ import {
2
+ mapWithConcurrency
3
+ } from "./chunk-3RM57ZT2.js";
4
+ import {
5
+ resolveRetryOptions,
6
+ runWithRetries,
7
+ throwIfAborted
8
+ } from "./chunk-FN7HLLAZ.js";
9
+
10
+ // src/embeddings/distance.ts
11
+ function dotProduct(left, right) {
12
+ assertSameDimensions(left, right);
13
+ return left.reduce((sum, value, index) => sum + value * right[index], 0);
14
+ }
15
+ function cosineSimilarity(left, right) {
16
+ assertSameDimensions(left, right);
17
+ const leftMagnitude = magnitude(left);
18
+ const rightMagnitude = magnitude(right);
19
+ if (leftMagnitude === 0 || rightMagnitude === 0) {
20
+ return 0;
21
+ }
22
+ return dotProduct(left, right) / (leftMagnitude * rightMagnitude);
23
+ }
24
+ function angularDistance(left, right) {
25
+ const similarity = Math.max(-1, Math.min(1, cosineSimilarity(left, right)));
26
+ return Math.acos(similarity) / Math.PI;
27
+ }
28
+ function euclideanDistance(left, right) {
29
+ assertSameDimensions(left, right);
30
+ return Math.sqrt(
31
+ left.reduce((sum, value, index) => sum + (value - right[index]) ** 2, 0)
32
+ );
33
+ }
34
+ function manhattanDistance(left, right) {
35
+ assertSameDimensions(left, right);
36
+ return left.reduce((sum, value, index) => sum + Math.abs(value - right[index]), 0);
37
+ }
38
+ function chebyshevDistance(left, right) {
39
+ assertSameDimensions(left, right);
40
+ return left.reduce(
41
+ (max, value, index) => Math.max(max, Math.abs(value - right[index])),
42
+ 0
43
+ );
44
+ }
45
+ function magnitude(vector) {
46
+ return Math.sqrt(vector.reduce((sum, value) => sum + value ** 2, 0));
47
+ }
48
+ function assertSameDimensions(left, right) {
49
+ if (left.length !== right.length) {
50
+ throw new Error(`Vector dimension mismatch: ${left.length} !== ${right.length}`);
51
+ }
52
+ }
53
+
54
+ // src/embeddings/embed.ts
55
+ async function embedText(options) {
56
+ const { embeddings } = await embedTexts({
57
+ model: options.model,
58
+ texts: [options.text],
59
+ retries: options.retries,
60
+ abortSignal: options.abortSignal
61
+ });
62
+ const embedding = embeddings[0];
63
+ if (embedding === void 0) throw new Error("Embedding model returned no embeddings");
64
+ return { embedding };
65
+ }
66
+ async function embedTexts(options) {
67
+ throwIfAborted(options.abortSignal);
68
+ if (options.texts.length === 0) return { embeddings: [] };
69
+ const batches = chunk(options.texts, batchSize(options.model.maxBatchSize, options.texts.length));
70
+ const results = await mapWithConcurrency(
71
+ batches,
72
+ concurrency(options.concurrency),
73
+ (batch) => embedDenseBatch(options.model, batch, options)
74
+ );
75
+ const embeddings = results.flat();
76
+ if (embeddings.length !== options.texts.length) {
77
+ throw new Error(
78
+ `Embedding model returned ${embeddings.length} embeddings for ${options.texts.length} texts`
79
+ );
80
+ }
81
+ return { embeddings };
82
+ }
83
+ async function embedSparseTexts(options) {
84
+ throwIfAborted(options.abortSignal);
85
+ if (options.texts.length === 0) return { embeddings: [] };
86
+ const batches = chunk(options.texts, batchSize(options.model.maxBatchSize, options.texts.length));
87
+ const results = await mapWithConcurrency(
88
+ batches,
89
+ concurrency(options.concurrency),
90
+ (batch) => embedSparseBatch(options.model, batch, options)
91
+ );
92
+ const embeddings = results.flat();
93
+ if (embeddings.length !== options.texts.length) {
94
+ throw new Error(
95
+ `Sparse embedding model returned ${embeddings.length} embeddings for ${options.texts.length} texts`
96
+ );
97
+ }
98
+ return { embeddings };
99
+ }
100
+ async function embedSparseQuery(options) {
101
+ throwIfAborted(options.abortSignal);
102
+ const embedding = await runWithRetries(
103
+ () => {
104
+ throwIfAborted(options.abortSignal);
105
+ return options.model.embedQuery(options.query, modelCallOptions(options.abortSignal));
106
+ },
107
+ resolveRetries(options),
108
+ { streaming: false, abortSignal: options.abortSignal }
109
+ );
110
+ throwIfAborted(options.abortSignal);
111
+ validateSparseEmbedding(embedding, "query");
112
+ return { embedding };
113
+ }
114
+ async function embedDocuments(options) {
115
+ throwIfAborted(options.abortSignal);
116
+ const prepared = prepareDocuments(options.documents, options);
117
+ const flatTexts = prepared.flatMap(
118
+ (item, documentIndex) => item.texts.map((text) => ({ documentIndex, text }))
119
+ );
120
+ const concurrencyLimit = concurrency(options.concurrency);
121
+ if ("model" in options && options.model !== void 0) {
122
+ const batches = chunk(flatTexts, batchSize(options.model.maxBatchSize, flatTexts.length || 1));
123
+ const results = await mapWithConcurrency(batches, concurrencyLimit, async (batch) => {
124
+ const embeddings = await embedDenseBatch(
125
+ options.model,
126
+ batch.map((item) => item.text),
127
+ options
128
+ );
129
+ assertBatchLength("Embedding", embeddings.length, batch.length);
130
+ return batch.map((item, index) => ({
131
+ documentIndex: item.documentIndex,
132
+ embedding: embeddings[index]
133
+ }));
134
+ });
135
+ const byDocument = groupEmbeddings(results.flat());
136
+ return {
137
+ documents: prepared.map((item, index) => embeddedDocument(item, byDocument.get(index) ?? []))
138
+ };
139
+ }
140
+ const { dense, sparse } = options.models;
141
+ const [denseResults, sparseResults] = await Promise.all([
142
+ mapWithConcurrency(
143
+ chunk(flatTexts, batchSize(dense.maxBatchSize, flatTexts.length || 1)),
144
+ concurrencyLimit,
145
+ async (batch) => {
146
+ const embeddings = await embedDenseBatch(
147
+ dense,
148
+ batch.map((item) => item.text),
149
+ options
150
+ );
151
+ assertBatchLength("Embedding", embeddings.length, batch.length);
152
+ return batch.map((item, index) => ({
153
+ documentIndex: item.documentIndex,
154
+ embedding: embeddings[index]
155
+ }));
156
+ }
157
+ ),
158
+ mapWithConcurrency(
159
+ chunk(flatTexts, batchSize(sparse.maxBatchSize, flatTexts.length || 1)),
160
+ concurrencyLimit,
161
+ async (batch) => {
162
+ const embeddings = await embedSparseBatch(
163
+ sparse,
164
+ batch.map((item) => item.text),
165
+ options
166
+ );
167
+ assertBatchLength("Sparse embedding", embeddings.length, batch.length);
168
+ return batch.map((item, index) => ({
169
+ documentIndex: item.documentIndex,
170
+ embedding: embeddings[index]
171
+ }));
172
+ }
173
+ )
174
+ ]);
175
+ const denseByDocument = groupEmbeddings(denseResults.flat());
176
+ const sparseByDocument = groupEmbeddings(sparseResults.flat());
177
+ return {
178
+ documents: prepared.map((item, index) => {
179
+ const embeddings = denseByDocument.get(index) ?? [];
180
+ const sparseEmbeddings = sparseByDocument.get(index) ?? [];
181
+ if (embeddings.length !== sparseEmbeddings.length) {
182
+ throw new Error(
183
+ `Hybrid embedding produced ${embeddings.length} dense and ${sparseEmbeddings.length} sparse vectors for document ${item.id}`
184
+ );
185
+ }
186
+ return embeddedDocument(item, embeddings, sparseEmbeddings);
187
+ })
188
+ };
189
+ }
190
+ async function embedDenseBatch(model, texts, options) {
191
+ throwIfAborted(options.abortSignal);
192
+ const embeddings = await runWithRetries(
193
+ () => model.embedTexts(texts, modelCallOptions(options.abortSignal)),
194
+ resolveRetries(options),
195
+ { streaming: false, abortSignal: options.abortSignal }
196
+ );
197
+ throwIfAborted(options.abortSignal);
198
+ for (const [index, embedding] of embeddings.entries()) {
199
+ validateDenseEmbedding(embedding, model.dimensions, index);
200
+ }
201
+ return embeddings;
202
+ }
203
+ async function embedSparseBatch(model, texts, options) {
204
+ throwIfAborted(options.abortSignal);
205
+ const embeddings = await runWithRetries(
206
+ () => model.embedTexts(texts, modelCallOptions(options.abortSignal)),
207
+ resolveRetries(options),
208
+ { streaming: false, abortSignal: options.abortSignal }
209
+ );
210
+ throwIfAborted(options.abortSignal);
211
+ for (const [index, embedding] of embeddings.entries()) validateSparseEmbedding(embedding, index);
212
+ return embeddings;
213
+ }
214
+ function prepareDocuments(documents, options) {
215
+ const ids = /* @__PURE__ */ new Set();
216
+ return documents.map((document, index) => {
217
+ const id = options.id?.(document, index) ?? `doc${index}`;
218
+ if (id.length === 0) throw new TypeError("Embedded document ids must not be empty");
219
+ if (ids.has(id)) throw new TypeError(`Duplicate embedded document id: ${id}`);
220
+ ids.add(id);
221
+ const content = options.content(document, index);
222
+ if (Array.isArray(content) && content.length === 0)
223
+ throw new TypeError(`Embedded document ${id} must contain at least one text chunk`);
224
+ return {
225
+ id,
226
+ document,
227
+ metadata: options.metadata?.(document, index),
228
+ texts: Array.isArray(content) ? content : [content]
229
+ };
230
+ });
231
+ }
232
+ function embeddedDocument(item, embeddings, sparseEmbeddings) {
233
+ let result = {
234
+ id: item.id,
235
+ document: item.document,
236
+ embeddings
237
+ };
238
+ if (item.metadata !== void 0) {
239
+ result = { ...result, metadata: item.metadata };
240
+ }
241
+ if (sparseEmbeddings !== void 0) {
242
+ result = { ...result, sparseEmbeddings };
243
+ }
244
+ return result;
245
+ }
246
+ function groupEmbeddings(items) {
247
+ const groups = /* @__PURE__ */ new Map();
248
+ for (const item of items) {
249
+ const list = groups.get(item.documentIndex) ?? [];
250
+ list.push(item.embedding);
251
+ groups.set(item.documentIndex, list);
252
+ }
253
+ return groups;
254
+ }
255
+ function assertBatchLength(name, actual, expected) {
256
+ if (actual !== expected)
257
+ throw new Error(`${name} model returned ${actual} embeddings for ${expected} texts`);
258
+ }
259
+ function resolveRetries(options) {
260
+ return options.retries === void 0 || options.retries === false ? void 0 : resolveRetryOptions(options.retries);
261
+ }
262
+ function modelCallOptions(abortSignal) {
263
+ return abortSignal === void 0 ? void 0 : { abortSignal };
264
+ }
265
+ function chunk(items, size) {
266
+ const chunks = [];
267
+ for (let index = 0; index < items.length; index += size)
268
+ chunks.push(items.slice(index, index + size));
269
+ return chunks;
270
+ }
271
+ function batchSize(configured, fallback) {
272
+ if (configured === void 0) return fallback;
273
+ if (!Number.isSafeInteger(configured) || configured < 1) {
274
+ throw new RangeError("Embedding model maxBatchSize must be a positive safe integer");
275
+ }
276
+ return configured;
277
+ }
278
+ function concurrency(configured) {
279
+ if (configured === void 0) return 1;
280
+ if (!Number.isSafeInteger(configured) || configured < 1) {
281
+ throw new RangeError("Embedding concurrency must be a positive safe integer");
282
+ }
283
+ return configured;
284
+ }
285
+ function validateDenseEmbedding(embedding, dimensions, index) {
286
+ if (embedding.vector.length === 0) {
287
+ throw new TypeError(`Embedding model returned an empty vector at index ${index}`);
288
+ }
289
+ if (!embedding.vector.every(Number.isFinite)) {
290
+ throw new TypeError(`Embedding model returned a non-finite vector at index ${index}`);
291
+ }
292
+ if (dimensions !== void 0) {
293
+ if (!Number.isSafeInteger(dimensions) || dimensions < 1)
294
+ throw new TypeError("Embedding model dimensions must be a positive safe integer");
295
+ if (embedding.vector.length !== dimensions) {
296
+ throw new Error(
297
+ `Embedding model returned ${embedding.vector.length} dimensions at index ${index}; expected ${dimensions}`
298
+ );
299
+ }
300
+ }
301
+ }
302
+ function validateSparseEmbedding(embedding, index) {
303
+ const { indices, values } = embedding.vector;
304
+ if (indices.length !== values.length) {
305
+ throw new Error(`Sparse embedding at ${index} has mismatched indices and values`);
306
+ }
307
+ if (!indices.every((value) => Number.isSafeInteger(value) && value >= 0)) {
308
+ throw new TypeError(`Sparse embedding at ${index} has an invalid index`);
309
+ }
310
+ if (new Set(indices).size !== indices.length) {
311
+ throw new TypeError(`Sparse embedding at ${index} has duplicate indices`);
312
+ }
313
+ if (!values.every(Number.isFinite)) {
314
+ throw new TypeError(`Sparse embedding at ${index} has a non-finite value`);
315
+ }
316
+ }
317
+
318
+ export {
319
+ dotProduct,
320
+ cosineSimilarity,
321
+ angularDistance,
322
+ euclideanDistance,
323
+ manhattanDistance,
324
+ chebyshevDistance,
325
+ embedText,
326
+ embedTexts,
327
+ embedSparseTexts,
328
+ embedSparseQuery,
329
+ embedDocuments
330
+ };
331
+ //# sourceMappingURL=chunk-GQL5KRAH.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/embeddings/distance.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","import { throwIfAborted } from \"../internal/abort\";\nimport { mapWithConcurrency } from \"../internal/concurrency\";\nimport type { ModelCallOptions } from \"../model-call-options\";\nimport { type ResolvedRetryOptions, resolveRetryOptions, runWithRetries } from \"../retry\";\nimport type {\n EmbedDocumentsOptions,\n EmbedDocumentsResult,\n EmbeddedDocument,\n Embedding,\n EmbeddingOperationOptions,\n EmbedHybridDocumentsOptions,\n EmbedSparseQueryOptions,\n EmbedSparseQueryResult,\n EmbedSparseTextsOptions,\n EmbedSparseTextsResult,\n EmbedTextOptions,\n EmbedTextResult,\n EmbedTextsOptions,\n EmbedTextsResult,\n SparseEmbedding,\n VectorMetadata,\n} from \"./types\";\n\nexport async function embedText(options: EmbedTextOptions): Promise<EmbedTextResult> {\n const { embeddings } = await embedTexts({\n model: options.model,\n texts: [options.text],\n retries: options.retries,\n abortSignal: options.abortSignal,\n });\n const embedding = embeddings[0];\n if (embedding === undefined) throw new Error(\"Embedding model returned no embeddings\");\n return { embedding };\n}\n\nexport async function embedTexts(options: EmbedTextsOptions): Promise<EmbedTextsResult> {\n throwIfAborted(options.abortSignal);\n if (options.texts.length === 0) return { embeddings: [] };\n const batches = chunk(options.texts, batchSize(options.model.maxBatchSize, options.texts.length));\n const results = await mapWithConcurrency(batches, concurrency(options.concurrency), (batch) =>\n embedDenseBatch(options.model, batch, options),\n );\n const embeddings = results.flat();\n if (embeddings.length !== options.texts.length) {\n throw new Error(\n `Embedding model returned ${embeddings.length} embeddings for ${options.texts.length} texts`,\n );\n }\n return { embeddings };\n}\n\nexport async function embedSparseTexts(\n options: EmbedSparseTextsOptions,\n): Promise<EmbedSparseTextsResult> {\n throwIfAborted(options.abortSignal);\n if (options.texts.length === 0) return { embeddings: [] };\n const batches = chunk(options.texts, batchSize(options.model.maxBatchSize, options.texts.length));\n const results = await mapWithConcurrency(batches, concurrency(options.concurrency), (batch) =>\n embedSparseBatch(options.model, batch, options),\n );\n const embeddings = results.flat();\n if (embeddings.length !== options.texts.length) {\n throw new Error(\n `Sparse embedding model returned ${embeddings.length} embeddings for ${options.texts.length} texts`,\n );\n }\n return { embeddings };\n}\n\nexport async function embedSparseQuery(\n options: EmbedSparseQueryOptions,\n): Promise<EmbedSparseQueryResult> {\n throwIfAborted(options.abortSignal);\n const embedding = await runWithRetries(\n () => {\n throwIfAborted(options.abortSignal);\n return options.model.embedQuery(options.query, modelCallOptions(options.abortSignal));\n },\n resolveRetries(options),\n { streaming: false, abortSignal: options.abortSignal },\n );\n throwIfAborted(options.abortSignal);\n validateSparseEmbedding(embedding, \"query\");\n return { embedding };\n}\n\nexport function embedDocuments<T, Metadata extends VectorMetadata = VectorMetadata>(\n options: EmbedDocumentsOptions<T, Metadata>,\n): Promise<EmbedDocumentsResult<T, Metadata>>;\nexport function embedDocuments<T, Metadata extends VectorMetadata = VectorMetadata>(\n options: EmbedHybridDocumentsOptions<T, Metadata>,\n): Promise<EmbedDocumentsResult<T, Metadata>>;\nexport async function embedDocuments<T, Metadata extends VectorMetadata = VectorMetadata>(\n options: EmbedDocumentsOptions<T, Metadata> | EmbedHybridDocumentsOptions<T, Metadata>,\n): Promise<EmbedDocumentsResult<T, Metadata>> {\n throwIfAborted(options.abortSignal);\n const prepared = prepareDocuments(options.documents, options);\n const flatTexts = prepared.flatMap((item, documentIndex) =>\n item.texts.map((text) => ({ documentIndex, text })),\n );\n const concurrencyLimit = concurrency(options.concurrency);\n\n if (\"model\" in options && options.model !== undefined) {\n const batches = chunk(flatTexts, batchSize(options.model.maxBatchSize, flatTexts.length || 1));\n const results = await mapWithConcurrency(batches, concurrencyLimit, async (batch) => {\n const embeddings = await embedDenseBatch(\n options.model,\n batch.map((item) => item.text),\n options,\n );\n assertBatchLength(\"Embedding\", embeddings.length, batch.length);\n return batch.map((item, index) => ({\n documentIndex: item.documentIndex,\n embedding: embeddings[index] as Embedding,\n }));\n });\n const byDocument = groupEmbeddings(results.flat());\n return {\n documents: prepared.map((item, index) => embeddedDocument(item, byDocument.get(index) ?? [])),\n };\n }\n\n const { dense, sparse } = options.models;\n const [denseResults, sparseResults] = await Promise.all([\n mapWithConcurrency(\n chunk(flatTexts, batchSize(dense.maxBatchSize, flatTexts.length || 1)),\n concurrencyLimit,\n async (batch) => {\n const embeddings = await embedDenseBatch(\n dense,\n batch.map((item) => item.text),\n options,\n );\n assertBatchLength(\"Embedding\", embeddings.length, batch.length);\n return batch.map((item, index) => ({\n documentIndex: item.documentIndex,\n embedding: embeddings[index] as Embedding,\n }));\n },\n ),\n mapWithConcurrency(\n chunk(flatTexts, batchSize(sparse.maxBatchSize, flatTexts.length || 1)),\n concurrencyLimit,\n async (batch) => {\n const embeddings = await embedSparseBatch(\n sparse,\n batch.map((item) => item.text),\n options,\n );\n assertBatchLength(\"Sparse embedding\", embeddings.length, batch.length);\n return batch.map((item, index) => ({\n documentIndex: item.documentIndex,\n embedding: embeddings[index] as SparseEmbedding,\n }));\n },\n ),\n ]);\n const denseByDocument = groupEmbeddings(denseResults.flat());\n const sparseByDocument = groupEmbeddings(sparseResults.flat());\n return {\n documents: 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 return embeddedDocument(item, embeddings, sparseEmbeddings);\n }),\n };\n}\n\nasync function embedDenseBatch(\n model: EmbedTextOptions[\"model\"],\n texts: string[],\n options: EmbeddingOperationOptions,\n): Promise<Embedding[]> {\n throwIfAborted(options.abortSignal);\n const embeddings = await runWithRetries(\n () => model.embedTexts(texts, modelCallOptions(options.abortSignal)),\n resolveRetries(options),\n { streaming: false, abortSignal: options.abortSignal },\n );\n throwIfAborted(options.abortSignal);\n for (const [index, embedding] of embeddings.entries()) {\n validateDenseEmbedding(embedding, model.dimensions, index);\n }\n return embeddings;\n}\n\nasync function embedSparseBatch(\n model: EmbedSparseTextsOptions[\"model\"],\n texts: string[],\n options: EmbeddingOperationOptions,\n): Promise<SparseEmbedding[]> {\n throwIfAborted(options.abortSignal);\n const embeddings = await runWithRetries(\n () => model.embedTexts(texts, modelCallOptions(options.abortSignal)),\n resolveRetries(options),\n { streaming: false, abortSignal: options.abortSignal },\n );\n throwIfAborted(options.abortSignal);\n for (const [index, embedding] of embeddings.entries()) validateSparseEmbedding(embedding, index);\n return embeddings;\n}\n\nfunction prepareDocuments<T, Metadata extends VectorMetadata>(\n documents: T[],\n options: Pick<EmbedDocumentsOptions<T, Metadata>, \"id\" | \"content\" | \"metadata\">,\n) {\n const ids = new Set<string>();\n return documents.map((document, index) => {\n const id = options.id?.(document, index) ?? `doc${index}`;\n if (id.length === 0) throw new TypeError(\"Embedded document ids must not be empty\");\n if (ids.has(id)) throw new TypeError(`Duplicate embedded document id: ${id}`);\n ids.add(id);\n const content = options.content(document, index);\n if (Array.isArray(content) && content.length === 0)\n throw new TypeError(`Embedded document ${id} must contain at least one text chunk`);\n return {\n id,\n document,\n metadata: options.metadata?.(document, index),\n texts: Array.isArray(content) ? content : [content],\n };\n });\n}\n\nfunction embeddedDocument<T, Metadata extends VectorMetadata>(\n item: { id: string; document: T; metadata: Metadata | undefined },\n embeddings: Embedding[],\n sparseEmbeddings?: SparseEmbedding[],\n): EmbeddedDocument<T, Metadata> {\n let result: EmbeddedDocument<T, Metadata> = {\n id: item.id,\n document: item.document,\n embeddings,\n };\n if (item.metadata !== undefined) {\n result = { ...result, metadata: item.metadata };\n }\n if (sparseEmbeddings !== undefined) {\n result = { ...result, sparseEmbeddings };\n }\n return result;\n}\n\nfunction groupEmbeddings<E>(\n items: Array<{ documentIndex: number; embedding: E }>,\n): Map<number, E[]> {\n const groups = new Map<number, E[]>();\n for (const item of items) {\n const list = groups.get(item.documentIndex) ?? [];\n list.push(item.embedding);\n groups.set(item.documentIndex, list);\n }\n return groups;\n}\n\nfunction assertBatchLength(name: string, actual: number, expected: number): void {\n if (actual !== expected)\n throw new Error(`${name} model returned ${actual} embeddings for ${expected} texts`);\n}\n\nfunction resolveRetries(options: EmbeddingOperationOptions): ResolvedRetryOptions | undefined {\n return options.retries === undefined || options.retries === false\n ? undefined\n : resolveRetryOptions(options.retries);\n}\n\nfunction modelCallOptions(abortSignal: AbortSignal | undefined): ModelCallOptions | undefined {\n return abortSignal === undefined ? undefined : { abortSignal };\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 return chunks;\n}\n\nfunction batchSize(configured: number | undefined, fallback: number): number {\n if (configured === undefined) return fallback;\n if (!Number.isSafeInteger(configured) || configured < 1) {\n throw new RangeError(\"Embedding model maxBatchSize must be a positive safe integer\");\n }\n return configured;\n}\n\nfunction concurrency(configured: number | undefined): number {\n if (configured === undefined) return 1;\n if (!Number.isSafeInteger(configured) || configured < 1) {\n throw new RangeError(\"Embedding concurrency must be a positive safe integer\");\n }\n return configured;\n}\n\nfunction validateDenseEmbedding(\n embedding: Embedding,\n dimensions: number | undefined,\n index: number,\n): void {\n if (embedding.vector.length === 0) {\n throw new TypeError(`Embedding model returned an empty vector at index ${index}`);\n }\n if (!embedding.vector.every(Number.isFinite)) {\n throw new TypeError(`Embedding model returned a non-finite vector at index ${index}`);\n }\n if (dimensions !== undefined) {\n if (!Number.isSafeInteger(dimensions) || dimensions < 1)\n throw new TypeError(\"Embedding model dimensions must be a positive safe integer\");\n if (embedding.vector.length !== dimensions) {\n throw new Error(\n `Embedding model returned ${embedding.vector.length} dimensions at index ${index}; expected ${dimensions}`,\n );\n }\n }\n}\n\nfunction validateSparseEmbedding(embedding: SparseEmbedding, index: number | \"query\"): void {\n const { indices, values } = embedding.vector;\n if (indices.length !== values.length) {\n throw new Error(`Sparse embedding at ${index} has mismatched indices and values`);\n }\n if (!indices.every((value) => Number.isSafeInteger(value) && value >= 0)) {\n throw new TypeError(`Sparse embedding at ${index} has an invalid index`);\n }\n if (new Set(indices).size !== indices.length) {\n throw new TypeError(`Sparse embedding at ${index} has duplicate indices`);\n }\n if (!values.every(Number.isFinite)) {\n throw new TypeError(`Sparse embedding at ${index} has a non-finite value`);\n }\n}\n"],"mappings":";;;;;;;;;;AAAO,SAAS,WAAW,MAAgB,OAAyB;AAClE,uBAAqB,MAAM,KAAK;AAChC,SAAO,KAAK,OAAO,CAAC,KAAK,OAAO,UAAU,MAAM,QAAS,MAAM,KAAK,GAAc,CAAC;AACrF;AAEO,SAAS,iBAAiB,MAAgB,OAAyB;AACxE,uBAAqB,MAAM,KAAK;AAChC,QAAM,gBAAgB,UAAU,IAAI;AACpC,QAAM,iBAAiB,UAAU,KAAK;AACtC,MAAI,kBAAkB,KAAK,mBAAmB,GAAG;AAC/C,WAAO;AAAA,EACT;AACA,SAAO,WAAW,MAAM,KAAK,KAAK,gBAAgB;AACpD;AAEO,SAAS,gBAAgB,MAAgB,OAAyB;AACvE,QAAM,aAAa,KAAK,IAAI,IAAI,KAAK,IAAI,GAAG,iBAAiB,MAAM,KAAK,CAAC,CAAC;AAC1E,SAAO,KAAK,KAAK,UAAU,IAAI,KAAK;AACtC;AAEO,SAAS,kBAAkB,MAAgB,OAAyB;AACzE,uBAAqB,MAAM,KAAK;AAChC,SAAO,KAAK;AAAA,IACV,KAAK,OAAO,CAAC,KAAK,OAAO,UAAU,OAAO,QAAS,MAAM,KAAK,MAAiB,GAAG,CAAC;AAAA,EACrF;AACF;AAEO,SAAS,kBAAkB,MAAgB,OAAyB;AACzE,uBAAqB,MAAM,KAAK;AAChC,SAAO,KAAK,OAAO,CAAC,KAAK,OAAO,UAAU,MAAM,KAAK,IAAI,QAAS,MAAM,KAAK,CAAY,GAAG,CAAC;AAC/F;AAEO,SAAS,kBAAkB,MAAgB,OAAyB;AACzE,uBAAqB,MAAM,KAAK;AAChC,SAAO,KAAK;AAAA,IACV,CAAC,KAAK,OAAO,UAAU,KAAK,IAAI,KAAK,KAAK,IAAI,QAAS,MAAM,KAAK,CAAY,CAAC;AAAA,IAC/E;AAAA,EACF;AACF;AAEA,SAAS,UAAU,QAA0B;AAC3C,SAAO,KAAK,KAAK,OAAO,OAAO,CAAC,KAAK,UAAU,MAAM,SAAS,GAAG,CAAC,CAAC;AACrE;AAEA,SAAS,qBAAqB,MAAgB,OAAuB;AACnE,MAAI,KAAK,WAAW,MAAM,QAAQ;AAChC,UAAM,IAAI,MAAM,8BAA8B,KAAK,MAAM,QAAQ,MAAM,MAAM,EAAE;AAAA,EACjF;AACF;;;ACzBA,eAAsB,UAAU,SAAqD;AACnF,QAAM,EAAE,WAAW,IAAI,MAAM,WAAW;AAAA,IACtC,OAAO,QAAQ;AAAA,IACf,OAAO,CAAC,QAAQ,IAAI;AAAA,IACpB,SAAS,QAAQ;AAAA,IACjB,aAAa,QAAQ;AAAA,EACvB,CAAC;AACD,QAAM,YAAY,WAAW,CAAC;AAC9B,MAAI,cAAc,OAAW,OAAM,IAAI,MAAM,wCAAwC;AACrF,SAAO,EAAE,UAAU;AACrB;AAEA,eAAsB,WAAW,SAAuD;AACtF,iBAAe,QAAQ,WAAW;AAClC,MAAI,QAAQ,MAAM,WAAW,EAAG,QAAO,EAAE,YAAY,CAAC,EAAE;AACxD,QAAM,UAAU,MAAM,QAAQ,OAAO,UAAU,QAAQ,MAAM,cAAc,QAAQ,MAAM,MAAM,CAAC;AAChG,QAAM,UAAU,MAAM;AAAA,IAAmB;AAAA,IAAS,YAAY,QAAQ,WAAW;AAAA,IAAG,CAAC,UACnF,gBAAgB,QAAQ,OAAO,OAAO,OAAO;AAAA,EAC/C;AACA,QAAM,aAAa,QAAQ,KAAK;AAChC,MAAI,WAAW,WAAW,QAAQ,MAAM,QAAQ;AAC9C,UAAM,IAAI;AAAA,MACR,4BAA4B,WAAW,MAAM,mBAAmB,QAAQ,MAAM,MAAM;AAAA,IACtF;AAAA,EACF;AACA,SAAO,EAAE,WAAW;AACtB;AAEA,eAAsB,iBACpB,SACiC;AACjC,iBAAe,QAAQ,WAAW;AAClC,MAAI,QAAQ,MAAM,WAAW,EAAG,QAAO,EAAE,YAAY,CAAC,EAAE;AACxD,QAAM,UAAU,MAAM,QAAQ,OAAO,UAAU,QAAQ,MAAM,cAAc,QAAQ,MAAM,MAAM,CAAC;AAChG,QAAM,UAAU,MAAM;AAAA,IAAmB;AAAA,IAAS,YAAY,QAAQ,WAAW;AAAA,IAAG,CAAC,UACnF,iBAAiB,QAAQ,OAAO,OAAO,OAAO;AAAA,EAChD;AACA,QAAM,aAAa,QAAQ,KAAK;AAChC,MAAI,WAAW,WAAW,QAAQ,MAAM,QAAQ;AAC9C,UAAM,IAAI;AAAA,MACR,mCAAmC,WAAW,MAAM,mBAAmB,QAAQ,MAAM,MAAM;AAAA,IAC7F;AAAA,EACF;AACA,SAAO,EAAE,WAAW;AACtB;AAEA,eAAsB,iBACpB,SACiC;AACjC,iBAAe,QAAQ,WAAW;AAClC,QAAM,YAAY,MAAM;AAAA,IACtB,MAAM;AACJ,qBAAe,QAAQ,WAAW;AAClC,aAAO,QAAQ,MAAM,WAAW,QAAQ,OAAO,iBAAiB,QAAQ,WAAW,CAAC;AAAA,IACtF;AAAA,IACA,eAAe,OAAO;AAAA,IACtB,EAAE,WAAW,OAAO,aAAa,QAAQ,YAAY;AAAA,EACvD;AACA,iBAAe,QAAQ,WAAW;AAClC,0BAAwB,WAAW,OAAO;AAC1C,SAAO,EAAE,UAAU;AACrB;AAQA,eAAsB,eACpB,SAC4C;AAC5C,iBAAe,QAAQ,WAAW;AAClC,QAAM,WAAW,iBAAiB,QAAQ,WAAW,OAAO;AAC5D,QAAM,YAAY,SAAS;AAAA,IAAQ,CAAC,MAAM,kBACxC,KAAK,MAAM,IAAI,CAAC,UAAU,EAAE,eAAe,KAAK,EAAE;AAAA,EACpD;AACA,QAAM,mBAAmB,YAAY,QAAQ,WAAW;AAExD,MAAI,WAAW,WAAW,QAAQ,UAAU,QAAW;AACrD,UAAM,UAAU,MAAM,WAAW,UAAU,QAAQ,MAAM,cAAc,UAAU,UAAU,CAAC,CAAC;AAC7F,UAAM,UAAU,MAAM,mBAAmB,SAAS,kBAAkB,OAAO,UAAU;AACnF,YAAM,aAAa,MAAM;AAAA,QACvB,QAAQ;AAAA,QACR,MAAM,IAAI,CAAC,SAAS,KAAK,IAAI;AAAA,QAC7B;AAAA,MACF;AACA,wBAAkB,aAAa,WAAW,QAAQ,MAAM,MAAM;AAC9D,aAAO,MAAM,IAAI,CAAC,MAAM,WAAW;AAAA,QACjC,eAAe,KAAK;AAAA,QACpB,WAAW,WAAW,KAAK;AAAA,MAC7B,EAAE;AAAA,IACJ,CAAC;AACD,UAAM,aAAa,gBAAgB,QAAQ,KAAK,CAAC;AACjD,WAAO;AAAA,MACL,WAAW,SAAS,IAAI,CAAC,MAAM,UAAU,iBAAiB,MAAM,WAAW,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC;AAAA,IAC9F;AAAA,EACF;AAEA,QAAM,EAAE,OAAO,OAAO,IAAI,QAAQ;AAClC,QAAM,CAAC,cAAc,aAAa,IAAI,MAAM,QAAQ,IAAI;AAAA,IACtD;AAAA,MACE,MAAM,WAAW,UAAU,MAAM,cAAc,UAAU,UAAU,CAAC,CAAC;AAAA,MACrE;AAAA,MACA,OAAO,UAAU;AACf,cAAM,aAAa,MAAM;AAAA,UACvB;AAAA,UACA,MAAM,IAAI,CAAC,SAAS,KAAK,IAAI;AAAA,UAC7B;AAAA,QACF;AACA,0BAAkB,aAAa,WAAW,QAAQ,MAAM,MAAM;AAC9D,eAAO,MAAM,IAAI,CAAC,MAAM,WAAW;AAAA,UACjC,eAAe,KAAK;AAAA,UACpB,WAAW,WAAW,KAAK;AAAA,QAC7B,EAAE;AAAA,MACJ;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM,WAAW,UAAU,OAAO,cAAc,UAAU,UAAU,CAAC,CAAC;AAAA,MACtE;AAAA,MACA,OAAO,UAAU;AACf,cAAM,aAAa,MAAM;AAAA,UACvB;AAAA,UACA,MAAM,IAAI,CAAC,SAAS,KAAK,IAAI;AAAA,UAC7B;AAAA,QACF;AACA,0BAAkB,oBAAoB,WAAW,QAAQ,MAAM,MAAM;AACrE,eAAO,MAAM,IAAI,CAAC,MAAM,WAAW;AAAA,UACjC,eAAe,KAAK;AAAA,UACpB,WAAW,WAAW,KAAK;AAAA,QAC7B,EAAE;AAAA,MACJ;AAAA,IACF;AAAA,EACF,CAAC;AACD,QAAM,kBAAkB,gBAAgB,aAAa,KAAK,CAAC;AAC3D,QAAM,mBAAmB,gBAAgB,cAAc,KAAK,CAAC;AAC7D,SAAO;AAAA,IACL,WAAW,SAAS,IAAI,CAAC,MAAM,UAAU;AACvC,YAAM,aAAa,gBAAgB,IAAI,KAAK,KAAK,CAAC;AAClD,YAAM,mBAAmB,iBAAiB,IAAI,KAAK,KAAK,CAAC;AACzD,UAAI,WAAW,WAAW,iBAAiB,QAAQ;AACjD,cAAM,IAAI;AAAA,UACR,6BAA6B,WAAW,MAAM,cAAc,iBAAiB,MAAM,gCAAgC,KAAK,EAAE;AAAA,QAC5H;AAAA,MACF;AACA,aAAO,iBAAiB,MAAM,YAAY,gBAAgB;AAAA,IAC5D,CAAC;AAAA,EACH;AACF;AAEA,eAAe,gBACb,OACA,OACA,SACsB;AACtB,iBAAe,QAAQ,WAAW;AAClC,QAAM,aAAa,MAAM;AAAA,IACvB,MAAM,MAAM,WAAW,OAAO,iBAAiB,QAAQ,WAAW,CAAC;AAAA,IACnE,eAAe,OAAO;AAAA,IACtB,EAAE,WAAW,OAAO,aAAa,QAAQ,YAAY;AAAA,EACvD;AACA,iBAAe,QAAQ,WAAW;AAClC,aAAW,CAAC,OAAO,SAAS,KAAK,WAAW,QAAQ,GAAG;AACrD,2BAAuB,WAAW,MAAM,YAAY,KAAK;AAAA,EAC3D;AACA,SAAO;AACT;AAEA,eAAe,iBACb,OACA,OACA,SAC4B;AAC5B,iBAAe,QAAQ,WAAW;AAClC,QAAM,aAAa,MAAM;AAAA,IACvB,MAAM,MAAM,WAAW,OAAO,iBAAiB,QAAQ,WAAW,CAAC;AAAA,IACnE,eAAe,OAAO;AAAA,IACtB,EAAE,WAAW,OAAO,aAAa,QAAQ,YAAY;AAAA,EACvD;AACA,iBAAe,QAAQ,WAAW;AAClC,aAAW,CAAC,OAAO,SAAS,KAAK,WAAW,QAAQ,EAAG,yBAAwB,WAAW,KAAK;AAC/F,SAAO;AACT;AAEA,SAAS,iBACP,WACA,SACA;AACA,QAAM,MAAM,oBAAI,IAAY;AAC5B,SAAO,UAAU,IAAI,CAAC,UAAU,UAAU;AACxC,UAAM,KAAK,QAAQ,KAAK,UAAU,KAAK,KAAK,MAAM,KAAK;AACvD,QAAI,GAAG,WAAW,EAAG,OAAM,IAAI,UAAU,yCAAyC;AAClF,QAAI,IAAI,IAAI,EAAE,EAAG,OAAM,IAAI,UAAU,mCAAmC,EAAE,EAAE;AAC5E,QAAI,IAAI,EAAE;AACV,UAAM,UAAU,QAAQ,QAAQ,UAAU,KAAK;AAC/C,QAAI,MAAM,QAAQ,OAAO,KAAK,QAAQ,WAAW;AAC/C,YAAM,IAAI,UAAU,qBAAqB,EAAE,uCAAuC;AACpF,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,UAAU,QAAQ,WAAW,UAAU,KAAK;AAAA,MAC5C,OAAO,MAAM,QAAQ,OAAO,IAAI,UAAU,CAAC,OAAO;AAAA,IACpD;AAAA,EACF,CAAC;AACH;AAEA,SAAS,iBACP,MACA,YACA,kBAC+B;AAC/B,MAAI,SAAwC;AAAA,IAC1C,IAAI,KAAK;AAAA,IACT,UAAU,KAAK;AAAA,IACf;AAAA,EACF;AACA,MAAI,KAAK,aAAa,QAAW;AAC/B,aAAS,EAAE,GAAG,QAAQ,UAAU,KAAK,SAAS;AAAA,EAChD;AACA,MAAI,qBAAqB,QAAW;AAClC,aAAS,EAAE,GAAG,QAAQ,iBAAiB;AAAA,EACzC;AACA,SAAO;AACT;AAEA,SAAS,gBACP,OACkB;AAClB,QAAM,SAAS,oBAAI,IAAiB;AACpC,aAAW,QAAQ,OAAO;AACxB,UAAM,OAAO,OAAO,IAAI,KAAK,aAAa,KAAK,CAAC;AAChD,SAAK,KAAK,KAAK,SAAS;AACxB,WAAO,IAAI,KAAK,eAAe,IAAI;AAAA,EACrC;AACA,SAAO;AACT;AAEA,SAAS,kBAAkB,MAAc,QAAgB,UAAwB;AAC/E,MAAI,WAAW;AACb,UAAM,IAAI,MAAM,GAAG,IAAI,mBAAmB,MAAM,mBAAmB,QAAQ,QAAQ;AACvF;AAEA,SAAS,eAAe,SAAsE;AAC5F,SAAO,QAAQ,YAAY,UAAa,QAAQ,YAAY,QACxD,SACA,oBAAoB,QAAQ,OAAO;AACzC;AAEA,SAAS,iBAAiB,aAAoE;AAC5F,SAAO,gBAAgB,SAAY,SAAY,EAAE,YAAY;AAC/D;AAEA,SAAS,MAAS,OAAY,MAAqB;AACjD,QAAM,SAAgB,CAAC;AACvB,WAAS,QAAQ,GAAG,QAAQ,MAAM,QAAQ,SAAS;AACjD,WAAO,KAAK,MAAM,MAAM,OAAO,QAAQ,IAAI,CAAC;AAC9C,SAAO;AACT;AAEA,SAAS,UAAU,YAAgC,UAA0B;AAC3E,MAAI,eAAe,OAAW,QAAO;AACrC,MAAI,CAAC,OAAO,cAAc,UAAU,KAAK,aAAa,GAAG;AACvD,UAAM,IAAI,WAAW,8DAA8D;AAAA,EACrF;AACA,SAAO;AACT;AAEA,SAAS,YAAY,YAAwC;AAC3D,MAAI,eAAe,OAAW,QAAO;AACrC,MAAI,CAAC,OAAO,cAAc,UAAU,KAAK,aAAa,GAAG;AACvD,UAAM,IAAI,WAAW,uDAAuD;AAAA,EAC9E;AACA,SAAO;AACT;AAEA,SAAS,uBACP,WACA,YACA,OACM;AACN,MAAI,UAAU,OAAO,WAAW,GAAG;AACjC,UAAM,IAAI,UAAU,qDAAqD,KAAK,EAAE;AAAA,EAClF;AACA,MAAI,CAAC,UAAU,OAAO,MAAM,OAAO,QAAQ,GAAG;AAC5C,UAAM,IAAI,UAAU,yDAAyD,KAAK,EAAE;AAAA,EACtF;AACA,MAAI,eAAe,QAAW;AAC5B,QAAI,CAAC,OAAO,cAAc,UAAU,KAAK,aAAa;AACpD,YAAM,IAAI,UAAU,4DAA4D;AAClF,QAAI,UAAU,OAAO,WAAW,YAAY;AAC1C,YAAM,IAAI;AAAA,QACR,4BAA4B,UAAU,OAAO,MAAM,wBAAwB,KAAK,cAAc,UAAU;AAAA,MAC1G;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,wBAAwB,WAA4B,OAA+B;AAC1F,QAAM,EAAE,SAAS,OAAO,IAAI,UAAU;AACtC,MAAI,QAAQ,WAAW,OAAO,QAAQ;AACpC,UAAM,IAAI,MAAM,uBAAuB,KAAK,oCAAoC;AAAA,EAClF;AACA,MAAI,CAAC,QAAQ,MAAM,CAAC,UAAU,OAAO,cAAc,KAAK,KAAK,SAAS,CAAC,GAAG;AACxE,UAAM,IAAI,UAAU,uBAAuB,KAAK,uBAAuB;AAAA,EACzE;AACA,MAAI,IAAI,IAAI,OAAO,EAAE,SAAS,QAAQ,QAAQ;AAC5C,UAAM,IAAI,UAAU,uBAAuB,KAAK,wBAAwB;AAAA,EAC1E;AACA,MAAI,CAAC,OAAO,MAAM,OAAO,QAAQ,GAAG;AAClC,UAAM,IAAI,UAAU,uBAAuB,KAAK,yBAAyB;AAAA,EAC3E;AACF;","names":[]}