@nhtio/adk 1.20260531.2 → 1.20260602.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (184) hide show
  1. package/CHANGELOG.md +40 -0
  2. package/batteries/embeddings/index.d.ts +25 -0
  3. package/batteries/embeddings/openai/adapter.cjs +185 -0
  4. package/batteries/embeddings/openai/adapter.cjs.map +1 -0
  5. package/batteries/embeddings/openai/adapter.d.ts +74 -0
  6. package/batteries/embeddings/openai/adapter.mjs +183 -0
  7. package/batteries/embeddings/openai/adapter.mjs.map +1 -0
  8. package/batteries/embeddings/openai/exceptions.cjs +48 -0
  9. package/batteries/embeddings/openai/exceptions.cjs.map +1 -0
  10. package/batteries/embeddings/openai/exceptions.d.ts +45 -0
  11. package/batteries/embeddings/openai/exceptions.mjs +43 -0
  12. package/batteries/embeddings/openai/exceptions.mjs.map +1 -0
  13. package/batteries/embeddings/openai/helpers.cjs +25 -0
  14. package/batteries/embeddings/openai/helpers.cjs.map +1 -0
  15. package/batteries/embeddings/openai/helpers.d.ts +25 -0
  16. package/batteries/embeddings/openai/helpers.mjs +23 -0
  17. package/batteries/embeddings/openai/helpers.mjs.map +1 -0
  18. package/batteries/embeddings/openai/index.d.ts +17 -0
  19. package/batteries/embeddings/openai/types.cjs +2 -0
  20. package/batteries/embeddings/openai/types.d.ts +123 -0
  21. package/batteries/embeddings/openai/types.mjs +0 -0
  22. package/batteries/embeddings/openai/validation.cjs +56 -0
  23. package/batteries/embeddings/openai/validation.cjs.map +1 -0
  24. package/batteries/embeddings/openai/validation.d.ts +24 -0
  25. package/batteries/embeddings/openai/validation.mjs +53 -0
  26. package/batteries/embeddings/openai/validation.mjs.map +1 -0
  27. package/batteries/embeddings/openai.cjs +14 -0
  28. package/batteries/embeddings/openai.mjs +5 -0
  29. package/batteries/embeddings/webllm/adapter.cjs +147 -0
  30. package/batteries/embeddings/webllm/adapter.cjs.map +1 -0
  31. package/batteries/embeddings/webllm/adapter.d.ts +74 -0
  32. package/batteries/embeddings/webllm/adapter.mjs +145 -0
  33. package/batteries/embeddings/webllm/adapter.mjs.map +1 -0
  34. package/batteries/embeddings/webllm/exceptions.cjs +31 -0
  35. package/batteries/embeddings/webllm/exceptions.cjs.map +1 -0
  36. package/batteries/embeddings/webllm/exceptions.d.ts +25 -0
  37. package/batteries/embeddings/webllm/exceptions.mjs +28 -0
  38. package/batteries/embeddings/webllm/exceptions.mjs.map +1 -0
  39. package/batteries/embeddings/webllm/index.d.ts +15 -0
  40. package/batteries/embeddings/webllm/types.cjs +2 -0
  41. package/batteries/embeddings/webllm/types.d.ts +52 -0
  42. package/batteries/embeddings/webllm/types.mjs +0 -0
  43. package/batteries/embeddings/webllm/validation.cjs +43 -0
  44. package/batteries/embeddings/webllm/validation.cjs.map +1 -0
  45. package/batteries/embeddings/webllm/validation.d.ts +25 -0
  46. package/batteries/embeddings/webllm/validation.mjs +40 -0
  47. package/batteries/embeddings/webllm/validation.mjs.map +1 -0
  48. package/batteries/embeddings/webllm.cjs +10 -0
  49. package/batteries/embeddings/webllm.mjs +4 -0
  50. package/batteries/embeddings.cjs +15 -0
  51. package/batteries/embeddings.mjs +6 -0
  52. package/batteries/index.d.ts +1 -0
  53. package/batteries/llm/openai_chat_completions/adapter.cjs +14 -73
  54. package/batteries/llm/openai_chat_completions/adapter.cjs.map +1 -1
  55. package/batteries/llm/openai_chat_completions/adapter.mjs +8 -67
  56. package/batteries/llm/openai_chat_completions/adapter.mjs.map +1 -1
  57. package/batteries/llm/openai_chat_completions/helpers.cjs +2 -2
  58. package/batteries/llm/openai_chat_completions/helpers.mjs +2 -2
  59. package/batteries/llm/openai_chat_completions/validation.cjs +1 -1
  60. package/batteries/llm/openai_chat_completions/validation.mjs +1 -1
  61. package/batteries/llm/webllm_chat_completions/adapter.cjs +7 -6
  62. package/batteries/llm/webllm_chat_completions/adapter.cjs.map +1 -1
  63. package/batteries/llm/webllm_chat_completions/adapter.mjs +7 -6
  64. package/batteries/llm/webllm_chat_completions/adapter.mjs.map +1 -1
  65. package/batteries/llm/webllm_chat_completions/validation.cjs +1 -1
  66. package/batteries/llm/webllm_chat_completions/validation.mjs +1 -1
  67. package/batteries/storage/flydrive.cjs +1 -1
  68. package/batteries/storage/flydrive.mjs +1 -1
  69. package/batteries/storage/in_memory.cjs +1 -1
  70. package/batteries/storage/in_memory.mjs +1 -1
  71. package/batteries/storage/opfs.cjs +1 -1
  72. package/batteries/storage/opfs.mjs +1 -1
  73. package/batteries/tools/color.cjs +2 -2
  74. package/batteries/tools/color.mjs +2 -2
  75. package/batteries/tools/comparison.cjs +3 -3
  76. package/batteries/tools/comparison.mjs +3 -3
  77. package/batteries/tools/data_structure.cjs +3 -3
  78. package/batteries/tools/data_structure.mjs +3 -3
  79. package/batteries/tools/datetime_extended.cjs +2 -2
  80. package/batteries/tools/datetime_extended.mjs +2 -2
  81. package/batteries/tools/datetime_math.cjs +2 -2
  82. package/batteries/tools/datetime_math.mjs +2 -2
  83. package/batteries/tools/encoding.cjs +3 -3
  84. package/batteries/tools/encoding.mjs +3 -3
  85. package/batteries/tools/formatting.cjs +3 -3
  86. package/batteries/tools/formatting.mjs +3 -3
  87. package/batteries/tools/geo_basics.cjs +2 -2
  88. package/batteries/tools/geo_basics.mjs +2 -2
  89. package/batteries/tools/math.cjs +3 -3
  90. package/batteries/tools/math.mjs +3 -3
  91. package/batteries/tools/memory.cjs +5 -5
  92. package/batteries/tools/memory.mjs +5 -5
  93. package/batteries/tools/parsing.cjs +4 -4
  94. package/batteries/tools/parsing.mjs +4 -4
  95. package/batteries/tools/retrievables.cjs +4 -4
  96. package/batteries/tools/retrievables.mjs +4 -4
  97. package/batteries/tools/standing_instructions.cjs +4 -4
  98. package/batteries/tools/standing_instructions.mjs +4 -4
  99. package/batteries/tools/statistics.cjs +4 -4
  100. package/batteries/tools/statistics.mjs +4 -4
  101. package/batteries/tools/string_processing.cjs +3 -3
  102. package/batteries/tools/string_processing.mjs +3 -3
  103. package/batteries/tools/structured_data.cjs +3 -3
  104. package/batteries/tools/structured_data.mjs +3 -3
  105. package/batteries/tools/text_analysis.cjs +3 -3
  106. package/batteries/tools/text_analysis.mjs +3 -3
  107. package/batteries/tools/text_comparison.cjs +2 -2
  108. package/batteries/tools/text_comparison.mjs +2 -2
  109. package/batteries/tools/time.cjs +2 -2
  110. package/batteries/tools/time.mjs +2 -2
  111. package/batteries/tools/unit_conversion.cjs +2 -2
  112. package/batteries/tools/unit_conversion.mjs +2 -2
  113. package/batteries.cjs +13 -0
  114. package/batteries.mjs +8 -3
  115. package/{common-DuKWGTVd.js → common-D_e5zYsG.js} +8 -8
  116. package/{common-DuKWGTVd.js.map → common-D_e5zYsG.js.map} +1 -1
  117. package/{common-ClCHam5-.mjs → common-lMrnzoyn.mjs} +8 -8
  118. package/{common-ClCHam5-.mjs.map → common-lMrnzoyn.mjs.map} +1 -1
  119. package/common.cjs +7 -7
  120. package/common.mjs +7 -7
  121. package/{dispatch_runner-uNtS-XSP.mjs → dispatch_runner-CDF3X0nv.mjs} +3 -3
  122. package/{dispatch_runner-uNtS-XSP.mjs.map → dispatch_runner-CDF3X0nv.mjs.map} +1 -1
  123. package/{dispatch_runner-CEFHXRJZ.js → dispatch_runner-CpuyATj1.js} +3 -3
  124. package/{dispatch_runner-CEFHXRJZ.js.map → dispatch_runner-CpuyATj1.js.map} +1 -1
  125. package/dispatch_runner.cjs +1 -1
  126. package/dispatch_runner.mjs +1 -1
  127. package/exceptions.cjs +1 -1
  128. package/exceptions.mjs +1 -1
  129. package/forge.cjs +4 -4
  130. package/forge.mjs +4 -4
  131. package/guards.cjs +8 -8
  132. package/guards.mjs +8 -8
  133. package/index.cjs +12 -12
  134. package/index.mjs +12 -12
  135. package/lib/exceptions/runtime.d.ts +5 -0
  136. package/lib/types/turn_runner.d.ts +32 -10
  137. package/lib/utils/retry.cjs +107 -0
  138. package/lib/utils/retry.cjs.map +1 -0
  139. package/lib/utils/retry.d.ts +63 -0
  140. package/lib/utils/retry.mjs +102 -0
  141. package/lib/utils/retry.mjs.map +1 -0
  142. package/mcp/adk-docs-corpus.json +1 -1
  143. package/package.json +121 -56
  144. package/{runtime-DyD9oQjH.js → runtime-MFFcJrRv.js} +6 -2
  145. package/runtime-MFFcJrRv.js.map +1 -0
  146. package/{runtime-CDIZwCT0.mjs → runtime-j92CNi5z.mjs} +6 -2
  147. package/runtime-j92CNi5z.mjs.map +1 -0
  148. package/skills/adk-assembly/SKILL.md +2 -2
  149. package/{spooled_artifact-CHvDDYGA.js → spooled_artifact-B8gIIn9h.js} +4 -4
  150. package/{spooled_artifact-CHvDDYGA.js.map → spooled_artifact-B8gIIn9h.js.map} +1 -1
  151. package/{spooled_artifact-D-JrpY4W.mjs → spooled_artifact-CWoKUDEm.mjs} +4 -4
  152. package/{spooled_artifact-D-JrpY4W.mjs.map → spooled_artifact-CWoKUDEm.mjs.map} +1 -1
  153. package/spooled_artifact.cjs +2 -2
  154. package/spooled_artifact.mjs +2 -2
  155. package/{spooled_markdown_artifact-B4eWOfCX.mjs → spooled_markdown_artifact-CNle4jXN.mjs} +3 -3
  156. package/{spooled_markdown_artifact-B4eWOfCX.mjs.map → spooled_markdown_artifact-CNle4jXN.mjs.map} +1 -1
  157. package/{spooled_markdown_artifact-BYfPqFvk.js → spooled_markdown_artifact-DQX0RCdI.js} +3 -3
  158. package/{spooled_markdown_artifact-BYfPqFvk.js.map → spooled_markdown_artifact-DQX0RCdI.js.map} +1 -1
  159. package/{thought-DBNsR6l8.js → thought-BD6AkkOr.js} +4 -4
  160. package/{thought-DBNsR6l8.js.map → thought-BD6AkkOr.js.map} +1 -1
  161. package/{thought-D9IS11b5.mjs → thought-B_P8LiB6.mjs} +4 -4
  162. package/{thought-D9IS11b5.mjs.map → thought-B_P8LiB6.mjs.map} +1 -1
  163. package/{tool-CsYuHhiS.mjs → tool-CRZSUcdP.mjs} +3 -3
  164. package/{tool-CsYuHhiS.mjs.map → tool-CRZSUcdP.mjs.map} +1 -1
  165. package/{tool-DIHzOZiV.js → tool-CX9vNHAw.js} +3 -3
  166. package/{tool-DIHzOZiV.js.map → tool-CX9vNHAw.js.map} +1 -1
  167. package/{tool_call-CkOVOhg0.js → tool_call--7ti-frB.js} +4 -4
  168. package/{tool_call-CkOVOhg0.js.map → tool_call--7ti-frB.js.map} +1 -1
  169. package/{tool_call-Bs_Q5LOG.mjs → tool_call-BUeMuCc6.mjs} +4 -4
  170. package/{tool_call-Bs_Q5LOG.mjs.map → tool_call-BUeMuCc6.mjs.map} +1 -1
  171. package/{tool_registry-CX3ofUh9.mjs → tool_registry-BGHg6KTq.mjs} +2 -2
  172. package/{tool_registry-CX3ofUh9.mjs.map → tool_registry-BGHg6KTq.mjs.map} +1 -1
  173. package/{tool_registry-CKk5ooxm.js → tool_registry-CtCQ4Xoz.js} +2 -2
  174. package/{tool_registry-CKk5ooxm.js.map → tool_registry-CtCQ4Xoz.js.map} +1 -1
  175. package/{turn_runner-D0qGIrRI.js → turn_runner-BJTtAORU.js} +7 -6
  176. package/turn_runner-BJTtAORU.js.map +1 -0
  177. package/{turn_runner-C1-mup84.mjs → turn_runner-C02LZHjt.mjs} +8 -7
  178. package/turn_runner-C02LZHjt.mjs.map +1 -0
  179. package/turn_runner.cjs +1 -1
  180. package/turn_runner.mjs +1 -1
  181. package/runtime-CDIZwCT0.mjs.map +0 -1
  182. package/runtime-DyD9oQjH.js.map +0 -1
  183. package/turn_runner-C1-mup84.mjs.map +0 -1
  184. package/turn_runner-D0qGIrRI.js.map +0 -1
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Battery-scoped exception constructors for OpenAI Embeddings adapter failures.
3
+ *
4
+ * @module @nhtio/adk/batteries/embeddings/openai/exceptions
5
+ *
6
+ * @remarks
7
+ * Battery-scoped exception classes for the OpenAI Embeddings adapter. These exceptions are owned
8
+ * by the battery (not the ADK core) and are minted via `createException` from
9
+ * `@nhtio/adk/factories`. Re-exported from the battery's barrel.
10
+ *
11
+ * The categories mirror the WebLLM Embeddings battery one-to-one so the two batteries fail with
12
+ * parallel semantics — only the engine-specific transport exception differs.
13
+ */
14
+ /**
15
+ * Thrown when the resolved adapter options fail validation against
16
+ * `openAIEmbeddingsOptionsSchema` — e.g. a missing/empty `model`, or an unknown option key.
17
+ * Fatal: config bugs fail loud at construction time, not at embed time.
18
+ */
19
+ export declare const E_INVALID_OPENAI_EMBEDDINGS_OPTIONS: import("../../../factories").CreatedException<[
20
+ string
21
+ ]>;
22
+ /**
23
+ * Thrown when the upstream `/v1/embeddings` endpoint returns a non-2xx response (after retries
24
+ * are exhausted), or the transport throws. Non-fatal. Printf args: `[status, detail]` — `status`
25
+ * is `0` for a transport-level failure with no HTTP response.
26
+ */
27
+ export declare const E_OPENAI_EMBEDDINGS_HTTP_ERROR: import("../../../factories").CreatedException<[
28
+ number,
29
+ string
30
+ ]>;
31
+ /**
32
+ * Thrown when the request handshake does not complete before `requestTimeoutMs` (and retries are
33
+ * exhausted). Non-fatal. Printf arg: `[requestTimeoutMs]`.
34
+ */
35
+ export declare const E_OPENAI_EMBEDDINGS_REQUEST_TIMEOUT: import("../../../factories").CreatedException<[
36
+ number
37
+ ]>;
38
+ /**
39
+ * Thrown when a 2xx response body cannot be parsed into the expected
40
+ * `{ data: [{ embedding: number[] }] }` shape (malformed JSON, missing `data`, wrong vector
41
+ * count). Non-fatal. Printf arg: `[detail]`.
42
+ */
43
+ export declare const E_OPENAI_EMBEDDINGS_MALFORMED_RESPONSE: import("../../../factories").CreatedException<[
44
+ string
45
+ ]>;
@@ -0,0 +1,43 @@
1
+ import { t as createException } from "../../../exceptions-BeWH2FwP.mjs";
2
+ import "../../../factories.mjs";
3
+ //#region src/batteries/embeddings/openai/exceptions.ts
4
+ /**
5
+ * Battery-scoped exception constructors for OpenAI Embeddings adapter failures.
6
+ *
7
+ * @module @nhtio/adk/batteries/embeddings/openai/exceptions
8
+ *
9
+ * @remarks
10
+ * Battery-scoped exception classes for the OpenAI Embeddings adapter. These exceptions are owned
11
+ * by the battery (not the ADK core) and are minted via `createException` from
12
+ * `@nhtio/adk/factories`. Re-exported from the battery's barrel.
13
+ *
14
+ * The categories mirror the WebLLM Embeddings battery one-to-one so the two batteries fail with
15
+ * parallel semantics — only the engine-specific transport exception differs.
16
+ */
17
+ /**
18
+ * Thrown when the resolved adapter options fail validation against
19
+ * `openAIEmbeddingsOptionsSchema` — e.g. a missing/empty `model`, or an unknown option key.
20
+ * Fatal: config bugs fail loud at construction time, not at embed time.
21
+ */
22
+ var E_INVALID_OPENAI_EMBEDDINGS_OPTIONS = createException("E_INVALID_OPENAI_EMBEDDINGS_OPTIONS", "Invalid OpenAI Embeddings adapter options: %s", "E_INVALID_OPENAI_EMBEDDINGS_OPTIONS", 529, true);
23
+ /**
24
+ * Thrown when the upstream `/v1/embeddings` endpoint returns a non-2xx response (after retries
25
+ * are exhausted), or the transport throws. Non-fatal. Printf args: `[status, detail]` — `status`
26
+ * is `0` for a transport-level failure with no HTTP response.
27
+ */
28
+ var E_OPENAI_EMBEDDINGS_HTTP_ERROR = createException("E_OPENAI_EMBEDDINGS_HTTP_ERROR", "OpenAI Embeddings HTTP error %d: %s", "E_OPENAI_EMBEDDINGS_HTTP_ERROR", 502, false);
29
+ /**
30
+ * Thrown when the request handshake does not complete before `requestTimeoutMs` (and retries are
31
+ * exhausted). Non-fatal. Printf arg: `[requestTimeoutMs]`.
32
+ */
33
+ var E_OPENAI_EMBEDDINGS_REQUEST_TIMEOUT = createException("E_OPENAI_EMBEDDINGS_REQUEST_TIMEOUT", "OpenAI Embeddings request timed out after %dms", "E_OPENAI_EMBEDDINGS_REQUEST_TIMEOUT", 504, false);
34
+ /**
35
+ * Thrown when a 2xx response body cannot be parsed into the expected
36
+ * `{ data: [{ embedding: number[] }] }` shape (malformed JSON, missing `data`, wrong vector
37
+ * count). Non-fatal. Printf arg: `[detail]`.
38
+ */
39
+ var E_OPENAI_EMBEDDINGS_MALFORMED_RESPONSE = createException("E_OPENAI_EMBEDDINGS_MALFORMED_RESPONSE", "OpenAI Embeddings response malformed: %s", "E_OPENAI_EMBEDDINGS_MALFORMED_RESPONSE", 502, false);
40
+ //#endregion
41
+ export { E_INVALID_OPENAI_EMBEDDINGS_OPTIONS, E_OPENAI_EMBEDDINGS_HTTP_ERROR, E_OPENAI_EMBEDDINGS_MALFORMED_RESPONSE, E_OPENAI_EMBEDDINGS_REQUEST_TIMEOUT };
42
+
43
+ //# sourceMappingURL=exceptions.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exceptions.mjs","names":[],"sources":["../../../../src/batteries/embeddings/openai/exceptions.ts"],"sourcesContent":["/**\n * Battery-scoped exception constructors for OpenAI Embeddings adapter failures.\n *\n * @module @nhtio/adk/batteries/embeddings/openai/exceptions\n *\n * @remarks\n * Battery-scoped exception classes for the OpenAI Embeddings adapter. These exceptions are owned\n * by the battery (not the ADK core) and are minted via `createException` from\n * `@nhtio/adk/factories`. Re-exported from the battery's barrel.\n *\n * The categories mirror the WebLLM Embeddings battery one-to-one so the two batteries fail with\n * parallel semantics — only the engine-specific transport exception differs.\n */\n\nimport { createException } from '@nhtio/adk/factories'\n\n/**\n * Thrown when the resolved adapter options fail validation against\n * `openAIEmbeddingsOptionsSchema` — e.g. a missing/empty `model`, or an unknown option key.\n * Fatal: config bugs fail loud at construction time, not at embed time.\n */\nexport const E_INVALID_OPENAI_EMBEDDINGS_OPTIONS = createException<[string]>(\n 'E_INVALID_OPENAI_EMBEDDINGS_OPTIONS',\n 'Invalid OpenAI Embeddings adapter options: %s',\n 'E_INVALID_OPENAI_EMBEDDINGS_OPTIONS',\n 529,\n true\n)\n\n/**\n * Thrown when the upstream `/v1/embeddings` endpoint returns a non-2xx response (after retries\n * are exhausted), or the transport throws. Non-fatal. Printf args: `[status, detail]` — `status`\n * is `0` for a transport-level failure with no HTTP response.\n */\nexport const E_OPENAI_EMBEDDINGS_HTTP_ERROR = createException<[number, string]>(\n 'E_OPENAI_EMBEDDINGS_HTTP_ERROR',\n 'OpenAI Embeddings HTTP error %d: %s',\n 'E_OPENAI_EMBEDDINGS_HTTP_ERROR',\n 502,\n false\n)\n\n/**\n * Thrown when the request handshake does not complete before `requestTimeoutMs` (and retries are\n * exhausted). Non-fatal. Printf arg: `[requestTimeoutMs]`.\n */\nexport const E_OPENAI_EMBEDDINGS_REQUEST_TIMEOUT = createException<[number]>(\n 'E_OPENAI_EMBEDDINGS_REQUEST_TIMEOUT',\n 'OpenAI Embeddings request timed out after %dms',\n 'E_OPENAI_EMBEDDINGS_REQUEST_TIMEOUT',\n 504,\n false\n)\n\n/**\n * Thrown when a 2xx response body cannot be parsed into the expected\n * `{ data: [{ embedding: number[] }] }` shape (malformed JSON, missing `data`, wrong vector\n * count). Non-fatal. Printf arg: `[detail]`.\n */\nexport const E_OPENAI_EMBEDDINGS_MALFORMED_RESPONSE = createException<[string]>(\n 'E_OPENAI_EMBEDDINGS_MALFORMED_RESPONSE',\n 'OpenAI Embeddings response malformed: %s',\n 'E_OPENAI_EMBEDDINGS_MALFORMED_RESPONSE',\n 502,\n false\n)\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAqBA,IAAa,sCAAsC,gBACjD,uCACA,iDACA,uCACA,KACA,IACF;;;;;;AAOA,IAAa,iCAAiC,gBAC5C,kCACA,uCACA,kCACA,KACA,KACF;;;;;AAMA,IAAa,sCAAsC,gBACjD,uCACA,kDACA,uCACA,KACA,KACF;;;;;;AAOA,IAAa,yCAAyC,gBACpD,0CACA,4CACA,0CACA,KACA,KACF"}
@@ -0,0 +1,25 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ require("../../../chunk-Ble4zEEl.js");
3
+ //#region src/batteries/embeddings/openai/helpers.ts
4
+ /**
5
+ * Applies the configured query/document instruction prefix to a batch of inputs.
6
+ *
7
+ * @remarks
8
+ * `kind: 'query'` → prepend `queryPrefix` (if set); `kind: 'document'` → prepend `documentPrefix`
9
+ * (if set). When the relevant prefix is unset, inputs pass through verbatim. This is the single
10
+ * source of truth for prefix handling shared by both batteries.
11
+ *
12
+ * @param texts - The raw inputs to embed.
13
+ * @param kind - Whether these are queries or documents.
14
+ * @param options - Carries `queryPrefix` / `documentPrefix`.
15
+ * @returns A new array with prefixes applied (never mutates the input).
16
+ */
17
+ var applyEmbeddingPrefix = (texts, kind, options) => {
18
+ const prefix = kind === "query" ? options.queryPrefix : options.documentPrefix;
19
+ if (!prefix) return texts.slice();
20
+ return texts.map((t) => `${prefix}${t}`);
21
+ };
22
+ //#endregion
23
+ exports.applyEmbeddingPrefix = applyEmbeddingPrefix;
24
+
25
+ //# sourceMappingURL=helpers.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.cjs","names":[],"sources":["../../../../src/batteries/embeddings/openai/helpers.ts"],"sourcesContent":["/**\n * Shared, engine-agnostic helpers for the embeddings batteries.\n *\n * @module @nhtio/adk/batteries/embeddings/openai/helpers\n *\n * @remarks\n * Owned by the OpenAI Embeddings battery (the environment-neutral one) and re-used by the WebLLM\n * Embeddings battery, so query/document prefixing behaves identically across both — the engine is\n * the only difference between the batteries.\n */\n\nimport type { BaseEmbeddingsAdapterOptions, EmbeddingKind } from './types'\n\n/**\n * Applies the configured query/document instruction prefix to a batch of inputs.\n *\n * @remarks\n * `kind: 'query'` → prepend `queryPrefix` (if set); `kind: 'document'` → prepend `documentPrefix`\n * (if set). When the relevant prefix is unset, inputs pass through verbatim. This is the single\n * source of truth for prefix handling shared by both batteries.\n *\n * @param texts - The raw inputs to embed.\n * @param kind - Whether these are queries or documents.\n * @param options - Carries `queryPrefix` / `documentPrefix`.\n * @returns A new array with prefixes applied (never mutates the input).\n */\nexport const applyEmbeddingPrefix = (\n texts: readonly string[],\n kind: EmbeddingKind,\n options: Pick<BaseEmbeddingsAdapterOptions, 'queryPrefix' | 'documentPrefix'>\n): string[] => {\n const prefix = kind === 'query' ? options.queryPrefix : options.documentPrefix\n if (!prefix) return texts.slice()\n return texts.map((t) => `${prefix}${t}`)\n}\n"],"mappings":";;;;;;;;;;;;;;;;AA0BA,IAAa,wBACX,OACA,MACA,YACa;CACb,MAAM,SAAS,SAAS,UAAU,QAAQ,cAAc,QAAQ;CAChE,IAAI,CAAC,QAAQ,OAAO,MAAM,MAAM;CAChC,OAAO,MAAM,KAAK,MAAM,GAAG,SAAS,GAAG;AACzC"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Shared, engine-agnostic helpers for the embeddings batteries.
3
+ *
4
+ * @module @nhtio/adk/batteries/embeddings/openai/helpers
5
+ *
6
+ * @remarks
7
+ * Owned by the OpenAI Embeddings battery (the environment-neutral one) and re-used by the WebLLM
8
+ * Embeddings battery, so query/document prefixing behaves identically across both — the engine is
9
+ * the only difference between the batteries.
10
+ */
11
+ import type { BaseEmbeddingsAdapterOptions, EmbeddingKind } from "./types";
12
+ /**
13
+ * Applies the configured query/document instruction prefix to a batch of inputs.
14
+ *
15
+ * @remarks
16
+ * `kind: 'query'` → prepend `queryPrefix` (if set); `kind: 'document'` → prepend `documentPrefix`
17
+ * (if set). When the relevant prefix is unset, inputs pass through verbatim. This is the single
18
+ * source of truth for prefix handling shared by both batteries.
19
+ *
20
+ * @param texts - The raw inputs to embed.
21
+ * @param kind - Whether these are queries or documents.
22
+ * @param options - Carries `queryPrefix` / `documentPrefix`.
23
+ * @returns A new array with prefixes applied (never mutates the input).
24
+ */
25
+ export declare const applyEmbeddingPrefix: (texts: readonly string[], kind: EmbeddingKind, options: Pick<BaseEmbeddingsAdapterOptions, "queryPrefix" | "documentPrefix">) => string[];
@@ -0,0 +1,23 @@
1
+ //#region src/batteries/embeddings/openai/helpers.ts
2
+ /**
3
+ * Applies the configured query/document instruction prefix to a batch of inputs.
4
+ *
5
+ * @remarks
6
+ * `kind: 'query'` → prepend `queryPrefix` (if set); `kind: 'document'` → prepend `documentPrefix`
7
+ * (if set). When the relevant prefix is unset, inputs pass through verbatim. This is the single
8
+ * source of truth for prefix handling shared by both batteries.
9
+ *
10
+ * @param texts - The raw inputs to embed.
11
+ * @param kind - Whether these are queries or documents.
12
+ * @param options - Carries `queryPrefix` / `documentPrefix`.
13
+ * @returns A new array with prefixes applied (never mutates the input).
14
+ */
15
+ var applyEmbeddingPrefix = (texts, kind, options) => {
16
+ const prefix = kind === "query" ? options.queryPrefix : options.documentPrefix;
17
+ if (!prefix) return texts.slice();
18
+ return texts.map((t) => `${prefix}${t}`);
19
+ };
20
+ //#endregion
21
+ export { applyEmbeddingPrefix };
22
+
23
+ //# sourceMappingURL=helpers.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.mjs","names":[],"sources":["../../../../src/batteries/embeddings/openai/helpers.ts"],"sourcesContent":["/**\n * Shared, engine-agnostic helpers for the embeddings batteries.\n *\n * @module @nhtio/adk/batteries/embeddings/openai/helpers\n *\n * @remarks\n * Owned by the OpenAI Embeddings battery (the environment-neutral one) and re-used by the WebLLM\n * Embeddings battery, so query/document prefixing behaves identically across both — the engine is\n * the only difference between the batteries.\n */\n\nimport type { BaseEmbeddingsAdapterOptions, EmbeddingKind } from './types'\n\n/**\n * Applies the configured query/document instruction prefix to a batch of inputs.\n *\n * @remarks\n * `kind: 'query'` → prepend `queryPrefix` (if set); `kind: 'document'` → prepend `documentPrefix`\n * (if set). When the relevant prefix is unset, inputs pass through verbatim. This is the single\n * source of truth for prefix handling shared by both batteries.\n *\n * @param texts - The raw inputs to embed.\n * @param kind - Whether these are queries or documents.\n * @param options - Carries `queryPrefix` / `documentPrefix`.\n * @returns A new array with prefixes applied (never mutates the input).\n */\nexport const applyEmbeddingPrefix = (\n texts: readonly string[],\n kind: EmbeddingKind,\n options: Pick<BaseEmbeddingsAdapterOptions, 'queryPrefix' | 'documentPrefix'>\n): string[] => {\n const prefix = kind === 'query' ? options.queryPrefix : options.documentPrefix\n if (!prefix) return texts.slice()\n return texts.map((t) => `${prefix}${t}`)\n}\n"],"mappings":";;;;;;;;;;;;;;AA0BA,IAAa,wBACX,OACA,MACA,YACa;CACb,MAAM,SAAS,SAAS,UAAU,QAAQ,cAAc,QAAQ;CAChE,IAAI,CAAC,QAAQ,OAAO,MAAM,MAAM;CAChC,OAAO,MAAM,KAAK,MAAM,GAAG,SAAS,GAAG;AACzC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * OpenAI Embeddings adapter battery — the environment-neutral embeddings battery and owner of the
3
+ * shared embeddings option base.
4
+ *
5
+ * @module @nhtio/adk/batteries/embeddings/openai
6
+ *
7
+ * @remarks
8
+ * Re-exports the adapter class, the shared prefix helper, every option / wire-shape type alias
9
+ * (including the shared {@link BaseEmbeddingsAdapterOptions}, {@link EmbeddingKind},
10
+ * {@link EmbedOptions}, and {@link EmbeddingsRetryConfig} that the WebLLM Embeddings battery builds
11
+ * on), the validation schema + `validateOptions` wrapper, and the battery-scoped exceptions.
12
+ */
13
+ export { OpenAIEmbeddingsAdapter } from "./adapter";
14
+ export { applyEmbeddingPrefix } from "./helpers";
15
+ export { openAIEmbeddingsOptionsSchema, validateOptions } from "./validation";
16
+ export type { EmbeddingKind, EmbedOptions, EmbeddingsRetryConfig, BaseEmbeddingsAdapterOptions, OpenAIEmbeddingsAdapterOptions, OpenAIEmbeddingsRequestBody, OpenAIEmbeddingsResponseBody, } from "./types";
17
+ export { E_INVALID_OPENAI_EMBEDDINGS_OPTIONS, E_OPENAI_EMBEDDINGS_HTTP_ERROR, E_OPENAI_EMBEDDINGS_REQUEST_TIMEOUT, E_OPENAI_EMBEDDINGS_MALFORMED_RESPONSE, } from "./exceptions";
@@ -0,0 +1,2 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ require("../../../chunk-Ble4zEEl.js");
@@ -0,0 +1,123 @@
1
+ /**
2
+ * Option and wire-shape types for the OpenAI Embeddings adapter, plus the shared embeddings
3
+ * battery base type both bundled embeddings batteries build on.
4
+ *
5
+ * @module @nhtio/adk/batteries/embeddings/openai/types
6
+ *
7
+ * @remarks
8
+ * This module owns the **shared** embeddings option base ({@link BaseEmbeddingsAdapterOptions})
9
+ * and the shared call shapes ({@link EmbeddingKind}, {@link EmbedOptions}). The WebLLM Embeddings
10
+ * battery re-exports and `extends` these rather than redefining them, so the two batteries differ
11
+ * only in their engine — exactly how the WebLLM Chat Completions battery extends the OpenAI Chat
12
+ * Completions option type.
13
+ */
14
+ /**
15
+ * Whether a piece of text is being embedded as a search **query** or as a corpus **document**.
16
+ *
17
+ * @remarks
18
+ * Asymmetric-embedding models (e.g. Snowflake Arctic Embed) expect a short instruction prefix on
19
+ * queries but not on documents. The battery prepends {@link BaseEmbeddingsAdapterOptions.queryPrefix}
20
+ * when `kind === 'query'` and {@link BaseEmbeddingsAdapterOptions.documentPrefix} when
21
+ * `kind === 'document'` — each only if the corresponding prefix option is set. Defaults to
22
+ * `'document'`, so the neutral (un-prefixed, unless a document prefix is configured) path is taken
23
+ * when a caller does not specify.
24
+ */
25
+ export type EmbeddingKind = 'query' | 'document';
26
+ /**
27
+ * Per-call options accepted by `embed` / `embedMany`. Identical across both batteries.
28
+ */
29
+ export interface EmbedOptions {
30
+ /** Whether the input is a query or a document. Defaults to `'document'`. */
31
+ kind?: EmbeddingKind;
32
+ }
33
+ /**
34
+ * Retry/backoff configuration for HTTP-backed embeddings batteries. Mirrors the chat battery's
35
+ * `ChatCompletionsRetryConfig` so behavior is consistent across the bundled batteries.
36
+ */
37
+ export interface EmbeddingsRetryConfig {
38
+ /** Max total attempts (including the first). Default `1` (no retry). */
39
+ maxAttempts?: number;
40
+ /** Base backoff delay in ms; doubled each attempt. Default `500`. */
41
+ baseDelayMs?: number;
42
+ /** Backoff ceiling in ms. Default `30_000`. */
43
+ maxDelayMs?: number;
44
+ /** HTTP statuses eligible for retry. Default `[429, 500, 502, 503, 504]`. */
45
+ retriableStatuses?: number[];
46
+ /** Honor an upstream `Retry-After` header when present. Default `true`. */
47
+ honorRetryAfter?: boolean;
48
+ }
49
+ /**
50
+ * Options shared by **every** embeddings battery, regardless of engine.
51
+ *
52
+ * @remarks
53
+ * Engine-specific batteries extend this with their own transport/engine fields. `model` is
54
+ * **required with no default** — naming the embedding model is the caller's responsibility, never
55
+ * the battery's.
56
+ */
57
+ export interface BaseEmbeddingsAdapterOptions {
58
+ /**
59
+ * Model id to embed with. **Required, no default.** For OpenAI this is e.g.
60
+ * `text-embedding-3-small`; for WebLLM it is an MLC embedding model id (e.g.
61
+ * `snowflake-arctic-embed-m-q0f32-MLC`).
62
+ */
63
+ model: string;
64
+ /**
65
+ * Instruction prefix prepended to inputs embedded with `kind: 'query'`. Unset → no prefix.
66
+ * For Snowflake Arctic Embed, the documented value is
67
+ * `'Represent this sentence for searching relevant passages: '`.
68
+ */
69
+ queryPrefix?: string;
70
+ /**
71
+ * Instruction prefix prepended to inputs embedded with `kind: 'document'`. Unset → no prefix.
72
+ * Most asymmetric models (including Arctic) use no document prefix; exposed for symmetry and
73
+ * the models that do.
74
+ */
75
+ documentPrefix?: string;
76
+ /**
77
+ * Declared output dimensionality, surfaced via `adapter.dimensions`. Optional metadata for
78
+ * callers that pre-allocate buffers; the battery does not enforce it against responses.
79
+ */
80
+ dimensions?: number;
81
+ }
82
+ /**
83
+ * Constructor options for {@link @nhtio/adk/batteries/embeddings/openai/adapter!OpenAIEmbeddingsAdapter}.
84
+ *
85
+ * @remarks
86
+ * Extends {@link BaseEmbeddingsAdapterOptions} with the HTTP transport fields the WebLLM battery
87
+ * deliberately omits. Targets any OpenAI-`/v1/embeddings`-compatible endpoint (OpenAI proper,
88
+ * Azure-behind-proxy, vLLM, Together, a local gateway, etc.).
89
+ */
90
+ export interface OpenAIEmbeddingsAdapterOptions extends BaseEmbeddingsAdapterOptions {
91
+ /** Bearer token. Sent as `Authorization: Bearer <apiKey>` unless overridden by `headers`. */
92
+ apiKey?: string;
93
+ /** API base URL. Default `https://api.openai.com/v1`. A trailing slash is trimmed. */
94
+ baseURL?: string;
95
+ /** Extra request headers. Override built defaults (including `Authorization`) key-by-key. */
96
+ headers?: Record<string, string>;
97
+ /** Custom `fetch` implementation. Default `globalThis.fetch`. */
98
+ fetch?: typeof globalThis.fetch;
99
+ /** Retry/backoff configuration. Default: a single attempt (no retry). */
100
+ retry?: EmbeddingsRetryConfig;
101
+ /** Per-request handshake timeout in ms. `0`/unset disables the timeout. */
102
+ requestTimeoutMs?: number;
103
+ }
104
+ /**
105
+ * The JSON request body POSTed to `/v1/embeddings`.
106
+ */
107
+ export interface OpenAIEmbeddingsRequestBody {
108
+ model: string;
109
+ input: string[];
110
+ encoding_format: 'float';
111
+ dimensions?: number;
112
+ }
113
+ /**
114
+ * The relevant subset of the `/v1/embeddings` JSON response shape.
115
+ */
116
+ export interface OpenAIEmbeddingsResponseBody {
117
+ data: Array<{
118
+ embedding: number[];
119
+ index: number;
120
+ }>;
121
+ model?: string;
122
+ object?: string;
123
+ }
File without changes
@@ -0,0 +1,56 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ require("../../../chunk-Ble4zEEl.js");
3
+ require("../../../guards.cjs");
4
+ const require_batteries_embeddings_openai_exceptions = require("./exceptions.cjs");
5
+ let _nhtio_validation = require("@nhtio/validation");
6
+ //#region src/batteries/embeddings/openai/validation.ts
7
+ var retrySchema = _nhtio_validation.validator.object({
8
+ maxAttempts: _nhtio_validation.validator.number().integer().min(1).default(1),
9
+ baseDelayMs: _nhtio_validation.validator.number().integer().min(0).default(500),
10
+ maxDelayMs: _nhtio_validation.validator.number().integer().min(1).default(3e4),
11
+ retriableStatuses: _nhtio_validation.validator.array().items(_nhtio_validation.validator.number().integer().min(100).max(599)).default([
12
+ 429,
13
+ 500,
14
+ 502,
15
+ 503,
16
+ 504
17
+ ]),
18
+ honorRetryAfter: _nhtio_validation.validator.boolean().default(true)
19
+ }).unknown(false);
20
+ /**
21
+ * Validator schema for `OpenAIEmbeddingsAdapterOptions`. Rejects unknown top-level keys.
22
+ */
23
+ var openAIEmbeddingsOptionsSchema = _nhtio_validation.validator.object({
24
+ model: _nhtio_validation.validator.string().min(1).required(),
25
+ queryPrefix: _nhtio_validation.validator.string().optional(),
26
+ documentPrefix: _nhtio_validation.validator.string().optional(),
27
+ dimensions: _nhtio_validation.validator.number().integer().min(1).optional(),
28
+ apiKey: _nhtio_validation.validator.string().optional(),
29
+ baseURL: _nhtio_validation.validator.string().optional(),
30
+ headers: _nhtio_validation.validator.object().pattern(_nhtio_validation.validator.string(), _nhtio_validation.validator.string()).optional(),
31
+ fetch: _nhtio_validation.validator.function().optional(),
32
+ retry: retrySchema.optional(),
33
+ requestTimeoutMs: _nhtio_validation.validator.number().integer().min(0).default(0)
34
+ }).unknown(false);
35
+ var formatValidationDetails = (err) => err.details.map((d) => d.message).join(" and ");
36
+ /**
37
+ * Validates an arbitrary input against `openAIEmbeddingsOptionsSchema` and returns the resolved
38
+ * options shape. Throws `E_INVALID_OPENAI_EMBEDDINGS_OPTIONS` (carrying the validator's report on
39
+ * `cause`) on failure.
40
+ *
41
+ * @param input - The raw options object to validate.
42
+ * @returns The resolved options object with defaults filled in.
43
+ */
44
+ var validateOptions = (input) => {
45
+ const { value, error } = openAIEmbeddingsOptionsSchema.validate(input, {
46
+ abortEarly: false,
47
+ convert: false
48
+ });
49
+ if (error) throw new require_batteries_embeddings_openai_exceptions.E_INVALID_OPENAI_EMBEDDINGS_OPTIONS([formatValidationDetails(error)], { cause: error });
50
+ return value;
51
+ };
52
+ //#endregion
53
+ exports.openAIEmbeddingsOptionsSchema = openAIEmbeddingsOptionsSchema;
54
+ exports.validateOptions = validateOptions;
55
+
56
+ //# sourceMappingURL=validation.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.cjs","names":[],"sources":["../../../../src/batteries/embeddings/openai/validation.ts"],"sourcesContent":["/**\n * Runtime validation schema and wrapper for OpenAI Embeddings adapter options.\n *\n * @module @nhtio/adk/batteries/embeddings/openai/validation\n *\n * @remarks\n * Validates `OpenAIEmbeddingsAdapterOptions` at construction time. Throws\n * `E_INVALID_OPENAI_EMBEDDINGS_OPTIONS` on failure — the same hard-fail policy as every other ADK\n * contract. `model` is required; unknown top-level keys are rejected so typos fail loud.\n */\n\nimport { isError } from '@nhtio/adk/guards'\nimport { validator, ValidationError } from '@nhtio/validation'\nimport { E_INVALID_OPENAI_EMBEDDINGS_OPTIONS } from './exceptions'\nimport type { OpenAIEmbeddingsAdapterOptions } from './types'\n\nconst retrySchema = validator\n .object({\n maxAttempts: validator.number().integer().min(1).default(1),\n baseDelayMs: validator.number().integer().min(0).default(500),\n maxDelayMs: validator.number().integer().min(1).default(30_000),\n retriableStatuses: validator\n .array()\n .items(validator.number().integer().min(100).max(599))\n .default([429, 500, 502, 503, 504]),\n honorRetryAfter: validator.boolean().default(true),\n })\n .unknown(false)\n\n/**\n * Validator schema for `OpenAIEmbeddingsAdapterOptions`. Rejects unknown top-level keys.\n */\nexport const openAIEmbeddingsOptionsSchema = validator\n .object<OpenAIEmbeddingsAdapterOptions>({\n // Shared base\n model: validator.string().min(1).required(),\n queryPrefix: validator.string().optional(),\n documentPrefix: validator.string().optional(),\n dimensions: validator.number().integer().min(1).optional(),\n // HTTP transport\n apiKey: validator.string().optional(),\n baseURL: validator.string().optional(),\n headers: validator.object().pattern(validator.string(), validator.string()).optional(),\n fetch: validator.function().optional(),\n retry: retrySchema.optional(),\n requestTimeoutMs: validator.number().integer().min(0).default(0),\n })\n .unknown(false)\n\nconst formatValidationDetails = (err: ValidationError): string =>\n err.details.map((d) => d.message).join(' and ')\n\n/**\n * Validates an arbitrary input against `openAIEmbeddingsOptionsSchema` and returns the resolved\n * options shape. Throws `E_INVALID_OPENAI_EMBEDDINGS_OPTIONS` (carrying the validator's report on\n * `cause`) on failure.\n *\n * @param input - The raw options object to validate.\n * @returns The resolved options object with defaults filled in.\n */\nexport const validateOptions = (input: unknown): OpenAIEmbeddingsAdapterOptions => {\n const { value, error } = openAIEmbeddingsOptionsSchema.validate(input, {\n abortEarly: false,\n convert: false,\n })\n if (error) {\n throw new E_INVALID_OPENAI_EMBEDDINGS_OPTIONS([formatValidationDetails(error)], {\n cause: error,\n })\n }\n return value as OpenAIEmbeddingsAdapterOptions\n}\n\nconst isValidationError = (value: unknown): value is ValidationError =>\n isError(value) && Array.isArray((value as ValidationError).details)\n\nvoid isValidationError\n"],"mappings":";;;;;;AAgBA,IAAM,cAAc,kBAAA,UACjB,OAAO;CACN,aAAa,kBAAA,UAAU,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,QAAQ,CAAC;CAC1D,aAAa,kBAAA,UAAU,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,QAAQ,GAAG;CAC5D,YAAY,kBAAA,UAAU,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,QAAQ,GAAM;CAC9D,mBAAmB,kBAAA,UAChB,MAAM,EACN,MAAM,kBAAA,UAAU,OAAO,EAAE,QAAQ,EAAE,IAAI,GAAG,EAAE,IAAI,GAAG,CAAC,EACpD,QAAQ;EAAC;EAAK;EAAK;EAAK;EAAK;CAAG,CAAC;CACpC,iBAAiB,kBAAA,UAAU,QAAQ,EAAE,QAAQ,IAAI;AACnD,CAAC,EACA,QAAQ,KAAK;;;;AAKhB,IAAa,gCAAgC,kBAAA,UAC1C,OAAuC;CAEtC,OAAO,kBAAA,UAAU,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;CAC1C,aAAa,kBAAA,UAAU,OAAO,EAAE,SAAS;CACzC,gBAAgB,kBAAA,UAAU,OAAO,EAAE,SAAS;CAC5C,YAAY,kBAAA,UAAU,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,SAAS;CAEzD,QAAQ,kBAAA,UAAU,OAAO,EAAE,SAAS;CACpC,SAAS,kBAAA,UAAU,OAAO,EAAE,SAAS;CACrC,SAAS,kBAAA,UAAU,OAAO,EAAE,QAAQ,kBAAA,UAAU,OAAO,GAAG,kBAAA,UAAU,OAAO,CAAC,EAAE,SAAS;CACrF,OAAO,kBAAA,UAAU,SAAS,EAAE,SAAS;CACrC,OAAO,YAAY,SAAS;CAC5B,kBAAkB,kBAAA,UAAU,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,QAAQ,CAAC;AACjE,CAAC,EACA,QAAQ,KAAK;AAEhB,IAAM,2BAA2B,QAC/B,IAAI,QAAQ,KAAK,MAAM,EAAE,OAAO,EAAE,KAAK,OAAO;;;;;;;;;AAUhD,IAAa,mBAAmB,UAAmD;CACjF,MAAM,EAAE,OAAO,UAAU,8BAA8B,SAAS,OAAO;EACrE,YAAY;EACZ,SAAS;CACX,CAAC;CACD,IAAI,OACF,MAAM,IAAI,+CAAA,oCAAoC,CAAC,wBAAwB,KAAK,CAAC,GAAG,EAC9E,OAAO,MACT,CAAC;CAEH,OAAO;AACT"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Runtime validation schema and wrapper for OpenAI Embeddings adapter options.
3
+ *
4
+ * @module @nhtio/adk/batteries/embeddings/openai/validation
5
+ *
6
+ * @remarks
7
+ * Validates `OpenAIEmbeddingsAdapterOptions` at construction time. Throws
8
+ * `E_INVALID_OPENAI_EMBEDDINGS_OPTIONS` on failure — the same hard-fail policy as every other ADK
9
+ * contract. `model` is required; unknown top-level keys are rejected so typos fail loud.
10
+ */
11
+ import type { OpenAIEmbeddingsAdapterOptions } from "./types";
12
+ /**
13
+ * Validator schema for `OpenAIEmbeddingsAdapterOptions`. Rejects unknown top-level keys.
14
+ */
15
+ export declare const openAIEmbeddingsOptionsSchema: import("@nhtio/validation").ObjectSchema<OpenAIEmbeddingsAdapterOptions>;
16
+ /**
17
+ * Validates an arbitrary input against `openAIEmbeddingsOptionsSchema` and returns the resolved
18
+ * options shape. Throws `E_INVALID_OPENAI_EMBEDDINGS_OPTIONS` (carrying the validator's report on
19
+ * `cause`) on failure.
20
+ *
21
+ * @param input - The raw options object to validate.
22
+ * @returns The resolved options object with defaults filled in.
23
+ */
24
+ export declare const validateOptions: (input: unknown) => OpenAIEmbeddingsAdapterOptions;
@@ -0,0 +1,53 @@
1
+ import "../../../guards.mjs";
2
+ import { E_INVALID_OPENAI_EMBEDDINGS_OPTIONS } from "./exceptions.mjs";
3
+ import { validator } from "@nhtio/validation";
4
+ //#region src/batteries/embeddings/openai/validation.ts
5
+ var retrySchema = validator.object({
6
+ maxAttempts: validator.number().integer().min(1).default(1),
7
+ baseDelayMs: validator.number().integer().min(0).default(500),
8
+ maxDelayMs: validator.number().integer().min(1).default(3e4),
9
+ retriableStatuses: validator.array().items(validator.number().integer().min(100).max(599)).default([
10
+ 429,
11
+ 500,
12
+ 502,
13
+ 503,
14
+ 504
15
+ ]),
16
+ honorRetryAfter: validator.boolean().default(true)
17
+ }).unknown(false);
18
+ /**
19
+ * Validator schema for `OpenAIEmbeddingsAdapterOptions`. Rejects unknown top-level keys.
20
+ */
21
+ var openAIEmbeddingsOptionsSchema = validator.object({
22
+ model: validator.string().min(1).required(),
23
+ queryPrefix: validator.string().optional(),
24
+ documentPrefix: validator.string().optional(),
25
+ dimensions: validator.number().integer().min(1).optional(),
26
+ apiKey: validator.string().optional(),
27
+ baseURL: validator.string().optional(),
28
+ headers: validator.object().pattern(validator.string(), validator.string()).optional(),
29
+ fetch: validator.function().optional(),
30
+ retry: retrySchema.optional(),
31
+ requestTimeoutMs: validator.number().integer().min(0).default(0)
32
+ }).unknown(false);
33
+ var formatValidationDetails = (err) => err.details.map((d) => d.message).join(" and ");
34
+ /**
35
+ * Validates an arbitrary input against `openAIEmbeddingsOptionsSchema` and returns the resolved
36
+ * options shape. Throws `E_INVALID_OPENAI_EMBEDDINGS_OPTIONS` (carrying the validator's report on
37
+ * `cause`) on failure.
38
+ *
39
+ * @param input - The raw options object to validate.
40
+ * @returns The resolved options object with defaults filled in.
41
+ */
42
+ var validateOptions = (input) => {
43
+ const { value, error } = openAIEmbeddingsOptionsSchema.validate(input, {
44
+ abortEarly: false,
45
+ convert: false
46
+ });
47
+ if (error) throw new E_INVALID_OPENAI_EMBEDDINGS_OPTIONS([formatValidationDetails(error)], { cause: error });
48
+ return value;
49
+ };
50
+ //#endregion
51
+ export { openAIEmbeddingsOptionsSchema, validateOptions };
52
+
53
+ //# sourceMappingURL=validation.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.mjs","names":[],"sources":["../../../../src/batteries/embeddings/openai/validation.ts"],"sourcesContent":["/**\n * Runtime validation schema and wrapper for OpenAI Embeddings adapter options.\n *\n * @module @nhtio/adk/batteries/embeddings/openai/validation\n *\n * @remarks\n * Validates `OpenAIEmbeddingsAdapterOptions` at construction time. Throws\n * `E_INVALID_OPENAI_EMBEDDINGS_OPTIONS` on failure — the same hard-fail policy as every other ADK\n * contract. `model` is required; unknown top-level keys are rejected so typos fail loud.\n */\n\nimport { isError } from '@nhtio/adk/guards'\nimport { validator, ValidationError } from '@nhtio/validation'\nimport { E_INVALID_OPENAI_EMBEDDINGS_OPTIONS } from './exceptions'\nimport type { OpenAIEmbeddingsAdapterOptions } from './types'\n\nconst retrySchema = validator\n .object({\n maxAttempts: validator.number().integer().min(1).default(1),\n baseDelayMs: validator.number().integer().min(0).default(500),\n maxDelayMs: validator.number().integer().min(1).default(30_000),\n retriableStatuses: validator\n .array()\n .items(validator.number().integer().min(100).max(599))\n .default([429, 500, 502, 503, 504]),\n honorRetryAfter: validator.boolean().default(true),\n })\n .unknown(false)\n\n/**\n * Validator schema for `OpenAIEmbeddingsAdapterOptions`. Rejects unknown top-level keys.\n */\nexport const openAIEmbeddingsOptionsSchema = validator\n .object<OpenAIEmbeddingsAdapterOptions>({\n // Shared base\n model: validator.string().min(1).required(),\n queryPrefix: validator.string().optional(),\n documentPrefix: validator.string().optional(),\n dimensions: validator.number().integer().min(1).optional(),\n // HTTP transport\n apiKey: validator.string().optional(),\n baseURL: validator.string().optional(),\n headers: validator.object().pattern(validator.string(), validator.string()).optional(),\n fetch: validator.function().optional(),\n retry: retrySchema.optional(),\n requestTimeoutMs: validator.number().integer().min(0).default(0),\n })\n .unknown(false)\n\nconst formatValidationDetails = (err: ValidationError): string =>\n err.details.map((d) => d.message).join(' and ')\n\n/**\n * Validates an arbitrary input against `openAIEmbeddingsOptionsSchema` and returns the resolved\n * options shape. Throws `E_INVALID_OPENAI_EMBEDDINGS_OPTIONS` (carrying the validator's report on\n * `cause`) on failure.\n *\n * @param input - The raw options object to validate.\n * @returns The resolved options object with defaults filled in.\n */\nexport const validateOptions = (input: unknown): OpenAIEmbeddingsAdapterOptions => {\n const { value, error } = openAIEmbeddingsOptionsSchema.validate(input, {\n abortEarly: false,\n convert: false,\n })\n if (error) {\n throw new E_INVALID_OPENAI_EMBEDDINGS_OPTIONS([formatValidationDetails(error)], {\n cause: error,\n })\n }\n return value as OpenAIEmbeddingsAdapterOptions\n}\n\nconst isValidationError = (value: unknown): value is ValidationError =>\n isError(value) && Array.isArray((value as ValidationError).details)\n\nvoid isValidationError\n"],"mappings":";;;;AAgBA,IAAM,cAAc,UACjB,OAAO;CACN,aAAa,UAAU,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,QAAQ,CAAC;CAC1D,aAAa,UAAU,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,QAAQ,GAAG;CAC5D,YAAY,UAAU,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,QAAQ,GAAM;CAC9D,mBAAmB,UAChB,MAAM,EACN,MAAM,UAAU,OAAO,EAAE,QAAQ,EAAE,IAAI,GAAG,EAAE,IAAI,GAAG,CAAC,EACpD,QAAQ;EAAC;EAAK;EAAK;EAAK;EAAK;CAAG,CAAC;CACpC,iBAAiB,UAAU,QAAQ,EAAE,QAAQ,IAAI;AACnD,CAAC,EACA,QAAQ,KAAK;;;;AAKhB,IAAa,gCAAgC,UAC1C,OAAuC;CAEtC,OAAO,UAAU,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;CAC1C,aAAa,UAAU,OAAO,EAAE,SAAS;CACzC,gBAAgB,UAAU,OAAO,EAAE,SAAS;CAC5C,YAAY,UAAU,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,SAAS;CAEzD,QAAQ,UAAU,OAAO,EAAE,SAAS;CACpC,SAAS,UAAU,OAAO,EAAE,SAAS;CACrC,SAAS,UAAU,OAAO,EAAE,QAAQ,UAAU,OAAO,GAAG,UAAU,OAAO,CAAC,EAAE,SAAS;CACrF,OAAO,UAAU,SAAS,EAAE,SAAS;CACrC,OAAO,YAAY,SAAS;CAC5B,kBAAkB,UAAU,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,QAAQ,CAAC;AACjE,CAAC,EACA,QAAQ,KAAK;AAEhB,IAAM,2BAA2B,QAC/B,IAAI,QAAQ,KAAK,MAAM,EAAE,OAAO,EAAE,KAAK,OAAO;;;;;;;;;AAUhD,IAAa,mBAAmB,UAAmD;CACjF,MAAM,EAAE,OAAO,UAAU,8BAA8B,SAAS,OAAO;EACrE,YAAY;EACZ,SAAS;CACX,CAAC;CACD,IAAI,OACF,MAAM,IAAI,oCAAoC,CAAC,wBAAwB,KAAK,CAAC,GAAG,EAC9E,OAAO,MACT,CAAC;CAEH,OAAO;AACT"}
@@ -0,0 +1,14 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ require("../../chunk-Ble4zEEl.js");
3
+ const require_batteries_embeddings_openai_exceptions = require("./openai/exceptions.cjs");
4
+ const require_batteries_embeddings_openai_validation = require("./openai/validation.cjs");
5
+ const require_batteries_embeddings_openai_helpers = require("./openai/helpers.cjs");
6
+ const require_batteries_embeddings_openai_adapter = require("./openai/adapter.cjs");
7
+ exports.E_INVALID_OPENAI_EMBEDDINGS_OPTIONS = require_batteries_embeddings_openai_exceptions.E_INVALID_OPENAI_EMBEDDINGS_OPTIONS;
8
+ exports.E_OPENAI_EMBEDDINGS_HTTP_ERROR = require_batteries_embeddings_openai_exceptions.E_OPENAI_EMBEDDINGS_HTTP_ERROR;
9
+ exports.E_OPENAI_EMBEDDINGS_MALFORMED_RESPONSE = require_batteries_embeddings_openai_exceptions.E_OPENAI_EMBEDDINGS_MALFORMED_RESPONSE;
10
+ exports.E_OPENAI_EMBEDDINGS_REQUEST_TIMEOUT = require_batteries_embeddings_openai_exceptions.E_OPENAI_EMBEDDINGS_REQUEST_TIMEOUT;
11
+ exports.OpenAIEmbeddingsAdapter = require_batteries_embeddings_openai_adapter.OpenAIEmbeddingsAdapter;
12
+ exports.applyEmbeddingPrefix = require_batteries_embeddings_openai_helpers.applyEmbeddingPrefix;
13
+ exports.openAIEmbeddingsOptionsSchema = require_batteries_embeddings_openai_validation.openAIEmbeddingsOptionsSchema;
14
+ exports.validateOptions = require_batteries_embeddings_openai_validation.validateOptions;
@@ -0,0 +1,5 @@
1
+ import { E_INVALID_OPENAI_EMBEDDINGS_OPTIONS, E_OPENAI_EMBEDDINGS_HTTP_ERROR, E_OPENAI_EMBEDDINGS_MALFORMED_RESPONSE, E_OPENAI_EMBEDDINGS_REQUEST_TIMEOUT } from "./openai/exceptions.mjs";
2
+ import { openAIEmbeddingsOptionsSchema, validateOptions } from "./openai/validation.mjs";
3
+ import { applyEmbeddingPrefix } from "./openai/helpers.mjs";
4
+ import { OpenAIEmbeddingsAdapter } from "./openai/adapter.mjs";
5
+ export { E_INVALID_OPENAI_EMBEDDINGS_OPTIONS, E_OPENAI_EMBEDDINGS_HTTP_ERROR, E_OPENAI_EMBEDDINGS_MALFORMED_RESPONSE, E_OPENAI_EMBEDDINGS_REQUEST_TIMEOUT, OpenAIEmbeddingsAdapter, applyEmbeddingPrefix, openAIEmbeddingsOptionsSchema, validateOptions };