@nhtio/adk 0.1.0-master-e04b0eba → 0.1.0-master-bd43a4ea
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.
- package/CHANGELOG.md +27 -0
- package/batteries/embeddings/index.d.ts +25 -0
- package/batteries/embeddings/openai/adapter.cjs +185 -0
- package/batteries/embeddings/openai/adapter.cjs.map +1 -0
- package/batteries/embeddings/openai/adapter.d.ts +74 -0
- package/batteries/embeddings/openai/adapter.mjs +183 -0
- package/batteries/embeddings/openai/adapter.mjs.map +1 -0
- package/batteries/embeddings/openai/exceptions.cjs +48 -0
- package/batteries/embeddings/openai/exceptions.cjs.map +1 -0
- package/batteries/embeddings/openai/exceptions.d.ts +45 -0
- package/batteries/embeddings/openai/exceptions.mjs +43 -0
- package/batteries/embeddings/openai/exceptions.mjs.map +1 -0
- package/batteries/embeddings/openai/helpers.cjs +25 -0
- package/batteries/embeddings/openai/helpers.cjs.map +1 -0
- package/batteries/embeddings/openai/helpers.d.ts +25 -0
- package/batteries/embeddings/openai/helpers.mjs +23 -0
- package/batteries/embeddings/openai/helpers.mjs.map +1 -0
- package/batteries/embeddings/openai/index.d.ts +17 -0
- package/batteries/embeddings/openai/types.cjs +2 -0
- package/batteries/embeddings/openai/types.d.ts +123 -0
- package/batteries/embeddings/openai/types.mjs +0 -0
- package/batteries/embeddings/openai/validation.cjs +56 -0
- package/batteries/embeddings/openai/validation.cjs.map +1 -0
- package/batteries/embeddings/openai/validation.d.ts +24 -0
- package/batteries/embeddings/openai/validation.mjs +53 -0
- package/batteries/embeddings/openai/validation.mjs.map +1 -0
- package/batteries/embeddings/openai.cjs +14 -0
- package/batteries/embeddings/openai.mjs +5 -0
- package/batteries/embeddings/webllm/adapter.cjs +147 -0
- package/batteries/embeddings/webllm/adapter.cjs.map +1 -0
- package/batteries/embeddings/webllm/adapter.d.ts +74 -0
- package/batteries/embeddings/webllm/adapter.mjs +145 -0
- package/batteries/embeddings/webllm/adapter.mjs.map +1 -0
- package/batteries/embeddings/webllm/exceptions.cjs +31 -0
- package/batteries/embeddings/webllm/exceptions.cjs.map +1 -0
- package/batteries/embeddings/webllm/exceptions.d.ts +25 -0
- package/batteries/embeddings/webllm/exceptions.mjs +28 -0
- package/batteries/embeddings/webllm/exceptions.mjs.map +1 -0
- package/batteries/embeddings/webllm/index.d.ts +15 -0
- package/batteries/embeddings/webllm/types.cjs +2 -0
- package/batteries/embeddings/webllm/types.d.ts +52 -0
- package/batteries/embeddings/webllm/types.mjs +0 -0
- package/batteries/embeddings/webllm/validation.cjs +43 -0
- package/batteries/embeddings/webllm/validation.cjs.map +1 -0
- package/batteries/embeddings/webllm/validation.d.ts +25 -0
- package/batteries/embeddings/webllm/validation.mjs +40 -0
- package/batteries/embeddings/webllm/validation.mjs.map +1 -0
- package/batteries/embeddings/webllm.cjs +10 -0
- package/batteries/embeddings/webllm.mjs +4 -0
- package/batteries/embeddings.cjs +15 -0
- package/batteries/embeddings.mjs +6 -0
- package/batteries/index.d.ts +1 -0
- package/batteries/llm/openai_chat_completions/adapter.cjs +14 -73
- package/batteries/llm/openai_chat_completions/adapter.cjs.map +1 -1
- package/batteries/llm/openai_chat_completions/adapter.mjs +8 -67
- package/batteries/llm/openai_chat_completions/adapter.mjs.map +1 -1
- package/batteries/llm/openai_chat_completions/helpers.cjs +2 -2
- package/batteries/llm/openai_chat_completions/helpers.mjs +2 -2
- package/batteries/llm/openai_chat_completions/validation.cjs +1 -1
- package/batteries/llm/openai_chat_completions/validation.mjs +1 -1
- package/batteries/llm/webllm_chat_completions/adapter.cjs +7 -6
- package/batteries/llm/webllm_chat_completions/adapter.cjs.map +1 -1
- package/batteries/llm/webllm_chat_completions/adapter.mjs +7 -6
- package/batteries/llm/webllm_chat_completions/adapter.mjs.map +1 -1
- package/batteries/llm/webllm_chat_completions/validation.cjs +1 -1
- package/batteries/llm/webllm_chat_completions/validation.mjs +1 -1
- package/batteries/storage/flydrive.cjs +1 -1
- package/batteries/storage/flydrive.mjs +1 -1
- package/batteries/storage/in_memory.cjs +1 -1
- package/batteries/storage/in_memory.mjs +1 -1
- package/batteries/storage/opfs.cjs +1 -1
- package/batteries/storage/opfs.mjs +1 -1
- package/batteries/tools/color.cjs +2 -2
- package/batteries/tools/color.mjs +2 -2
- package/batteries/tools/comparison.cjs +3 -3
- package/batteries/tools/comparison.mjs +3 -3
- package/batteries/tools/data_structure.cjs +3 -3
- package/batteries/tools/data_structure.mjs +3 -3
- package/batteries/tools/datetime_extended.cjs +2 -2
- package/batteries/tools/datetime_extended.mjs +2 -2
- package/batteries/tools/datetime_math.cjs +2 -2
- package/batteries/tools/datetime_math.mjs +2 -2
- package/batteries/tools/encoding.cjs +3 -3
- package/batteries/tools/encoding.mjs +3 -3
- package/batteries/tools/formatting.cjs +3 -3
- package/batteries/tools/formatting.mjs +3 -3
- package/batteries/tools/geo_basics.cjs +2 -2
- package/batteries/tools/geo_basics.mjs +2 -2
- package/batteries/tools/math.cjs +3 -3
- package/batteries/tools/math.mjs +3 -3
- package/batteries/tools/memory.cjs +5 -5
- package/batteries/tools/memory.mjs +5 -5
- package/batteries/tools/parsing.cjs +4 -4
- package/batteries/tools/parsing.mjs +4 -4
- package/batteries/tools/retrievables.cjs +4 -4
- package/batteries/tools/retrievables.mjs +4 -4
- package/batteries/tools/standing_instructions.cjs +4 -4
- package/batteries/tools/standing_instructions.mjs +4 -4
- package/batteries/tools/statistics.cjs +4 -4
- package/batteries/tools/statistics.mjs +4 -4
- package/batteries/tools/string_processing.cjs +3 -3
- package/batteries/tools/string_processing.mjs +3 -3
- package/batteries/tools/structured_data.cjs +3 -3
- package/batteries/tools/structured_data.mjs +3 -3
- package/batteries/tools/text_analysis.cjs +3 -3
- package/batteries/tools/text_analysis.mjs +3 -3
- package/batteries/tools/text_comparison.cjs +2 -2
- package/batteries/tools/text_comparison.mjs +2 -2
- package/batteries/tools/time.cjs +2 -2
- package/batteries/tools/time.mjs +2 -2
- package/batteries/tools/unit_conversion.cjs +2 -2
- package/batteries/tools/unit_conversion.mjs +2 -2
- package/batteries.cjs +13 -0
- package/batteries.mjs +8 -3
- package/{common-DuKWGTVd.js → common-D_e5zYsG.js} +8 -8
- package/{common-DuKWGTVd.js.map → common-D_e5zYsG.js.map} +1 -1
- package/{common-ClCHam5-.mjs → common-lMrnzoyn.mjs} +8 -8
- package/{common-ClCHam5-.mjs.map → common-lMrnzoyn.mjs.map} +1 -1
- package/common.cjs +7 -7
- package/common.mjs +7 -7
- package/{dispatch_runner-uNtS-XSP.mjs → dispatch_runner-CDF3X0nv.mjs} +3 -3
- package/{dispatch_runner-uNtS-XSP.mjs.map → dispatch_runner-CDF3X0nv.mjs.map} +1 -1
- package/{dispatch_runner-CEFHXRJZ.js → dispatch_runner-CpuyATj1.js} +3 -3
- package/{dispatch_runner-CEFHXRJZ.js.map → dispatch_runner-CpuyATj1.js.map} +1 -1
- package/dispatch_runner.cjs +1 -1
- package/dispatch_runner.mjs +1 -1
- package/exceptions.cjs +1 -1
- package/exceptions.mjs +1 -1
- package/forge.cjs +4 -4
- package/forge.mjs +4 -4
- package/guards.cjs +8 -8
- package/guards.mjs +8 -8
- package/index.cjs +12 -12
- package/index.mjs +12 -12
- package/lib/exceptions/runtime.d.ts +5 -0
- package/lib/utils/retry.cjs +107 -0
- package/lib/utils/retry.cjs.map +1 -0
- package/lib/utils/retry.d.ts +63 -0
- package/lib/utils/retry.mjs +102 -0
- package/lib/utils/retry.mjs.map +1 -0
- package/mcp/adk-docs-corpus.json +1 -1
- package/package.json +138 -73
- package/{runtime-DyD9oQjH.js → runtime-MFFcJrRv.js} +6 -2
- package/runtime-MFFcJrRv.js.map +1 -0
- package/{runtime-CDIZwCT0.mjs → runtime-j92CNi5z.mjs} +6 -2
- package/runtime-j92CNi5z.mjs.map +1 -0
- package/skills/adk-assembly/SKILL.md +2 -2
- package/{spooled_artifact-CHvDDYGA.js → spooled_artifact-B8gIIn9h.js} +4 -4
- package/{spooled_artifact-CHvDDYGA.js.map → spooled_artifact-B8gIIn9h.js.map} +1 -1
- package/{spooled_artifact-D-JrpY4W.mjs → spooled_artifact-CWoKUDEm.mjs} +4 -4
- package/{spooled_artifact-D-JrpY4W.mjs.map → spooled_artifact-CWoKUDEm.mjs.map} +1 -1
- package/spooled_artifact.cjs +2 -2
- package/spooled_artifact.mjs +2 -2
- package/{spooled_markdown_artifact-B4eWOfCX.mjs → spooled_markdown_artifact-CNle4jXN.mjs} +3 -3
- package/{spooled_markdown_artifact-B4eWOfCX.mjs.map → spooled_markdown_artifact-CNle4jXN.mjs.map} +1 -1
- package/{spooled_markdown_artifact-BYfPqFvk.js → spooled_markdown_artifact-DQX0RCdI.js} +3 -3
- package/{spooled_markdown_artifact-BYfPqFvk.js.map → spooled_markdown_artifact-DQX0RCdI.js.map} +1 -1
- package/{thought-DBNsR6l8.js → thought-BD6AkkOr.js} +4 -4
- package/{thought-DBNsR6l8.js.map → thought-BD6AkkOr.js.map} +1 -1
- package/{thought-D9IS11b5.mjs → thought-B_P8LiB6.mjs} +4 -4
- package/{thought-D9IS11b5.mjs.map → thought-B_P8LiB6.mjs.map} +1 -1
- package/{tool-CsYuHhiS.mjs → tool-CRZSUcdP.mjs} +3 -3
- package/{tool-CsYuHhiS.mjs.map → tool-CRZSUcdP.mjs.map} +1 -1
- package/{tool-DIHzOZiV.js → tool-CX9vNHAw.js} +3 -3
- package/{tool-DIHzOZiV.js.map → tool-CX9vNHAw.js.map} +1 -1
- package/{tool_call-CkOVOhg0.js → tool_call--7ti-frB.js} +4 -4
- package/{tool_call-CkOVOhg0.js.map → tool_call--7ti-frB.js.map} +1 -1
- package/{tool_call-Bs_Q5LOG.mjs → tool_call-BUeMuCc6.mjs} +4 -4
- package/{tool_call-Bs_Q5LOG.mjs.map → tool_call-BUeMuCc6.mjs.map} +1 -1
- package/{tool_registry-CX3ofUh9.mjs → tool_registry-BGHg6KTq.mjs} +2 -2
- package/{tool_registry-CX3ofUh9.mjs.map → tool_registry-BGHg6KTq.mjs.map} +1 -1
- package/{tool_registry-CKk5ooxm.js → tool_registry-CtCQ4Xoz.js} +2 -2
- package/{tool_registry-CKk5ooxm.js.map → tool_registry-CtCQ4Xoz.js.map} +1 -1
- package/{turn_runner-D0qGIrRI.js → turn_runner-BJTtAORU.js} +7 -6
- package/turn_runner-BJTtAORU.js.map +1 -0
- package/{turn_runner-C1-mup84.mjs → turn_runner-C02LZHjt.mjs} +8 -7
- package/turn_runner-C02LZHjt.mjs.map +1 -0
- package/turn_runner.cjs +1 -1
- package/turn_runner.mjs +1 -1
- package/runtime-CDIZwCT0.mjs.map +0 -1
- package/runtime-DyD9oQjH.js.map +0 -1
- package/turn_runner-C1-mup84.mjs.map +0 -1
- package/turn_runner-D0qGIrRI.js.map +0 -1
package/dispatch_runner.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
require("./chunk-Ble4zEEl.js");
|
|
3
|
-
const require_dispatch_runner = require("./dispatch_runner-
|
|
3
|
+
const require_dispatch_runner = require("./dispatch_runner-CpuyATj1.js");
|
|
4
4
|
exports.DispatchRunner = require_dispatch_runner.DispatchRunner;
|
package/dispatch_runner.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as DispatchRunner } from "./dispatch_runner-
|
|
1
|
+
import { t as DispatchRunner } from "./dispatch_runner-CDF3X0nv.mjs";
|
|
2
2
|
export { DispatchRunner };
|
package/exceptions.cjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
require("./chunk-Ble4zEEl.js");
|
|
3
3
|
const require_exceptions = require("./exceptions-CitH5wZI.js");
|
|
4
|
-
const require_runtime = require("./runtime-
|
|
4
|
+
const require_runtime = require("./runtime-MFFcJrRv.js");
|
|
5
5
|
exports.E_DISPATCH_PIPELINE_ERROR = require_runtime.E_DISPATCH_PIPELINE_ERROR;
|
|
6
6
|
exports.E_INPUT_PIPELINE_ERROR = require_runtime.E_INPUT_PIPELINE_ERROR;
|
|
7
7
|
exports.E_INVALID_INITIAL_IDENTITY_VALUE = require_runtime.E_INVALID_INITIAL_IDENTITY_VALUE;
|
package/exceptions.mjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { n as ValidationException } from "./exceptions-BeWH2FwP.mjs";
|
|
2
|
-
import { C as E_NOT_A_SPOOL_READER, D as E_TOOL_DOWNSTREAM_ERROR, E as E_TOOL_ALREADY_REGISTERED, O as E_TURN_GATE_ABORTED, S as E_NOT_A_MEDIA_READER, T as E_PIPELINE_SHORT_CIRCUITED, _ as E_INVALID_TURN_GATE_RESOLUTION, a as E_INVALID_INITIAL_MEMORY_VALUE, b as E_LLM_EXECUTION_EXECUTOR_ERROR, c as E_INVALID_INITIAL_RETRIEVABLE_VALUE, d as E_INVALID_INITIAL_TOOL_VALUE, f as E_INVALID_INITIAL_TURN_GATE_VALUE, g as E_INVALID_TURN_CONTEXT, h as E_INVALID_TOOL_ARGS, i as E_INVALID_INITIAL_MEDIA_VALUE, k as E_TURN_GATE_TIMEOUT, l as E_INVALID_INITIAL_THOUGHT_VALUE, m as E_INVALID_LLM_EXECUTION_CONTEXT, n as E_INPUT_PIPELINE_ERROR, o as E_INVALID_INITIAL_MESSAGE_VALUE, p as E_INVALID_LLM_DISPATCH_INPUT, r as E_INVALID_INITIAL_IDENTITY_VALUE, s as E_INVALID_INITIAL_REGISTRY_VALUE, t as E_DISPATCH_PIPELINE_ERROR, u as E_INVALID_INITIAL_TOOL_CALL_VALUE, v as E_INVALID_TURN_RUNNER_CONFIG, w as E_OUTPUT_PIPELINE_ERROR, x as E_LLM_EXECUTION_GATE_NOT_SUPPORTED, y as E_LLM_EXECUTION_ALREADY_SIGNALLED } from "./runtime-
|
|
2
|
+
import { C as E_NOT_A_SPOOL_READER, D as E_TOOL_DOWNSTREAM_ERROR, E as E_TOOL_ALREADY_REGISTERED, O as E_TURN_GATE_ABORTED, S as E_NOT_A_MEDIA_READER, T as E_PIPELINE_SHORT_CIRCUITED, _ as E_INVALID_TURN_GATE_RESOLUTION, a as E_INVALID_INITIAL_MEMORY_VALUE, b as E_LLM_EXECUTION_EXECUTOR_ERROR, c as E_INVALID_INITIAL_RETRIEVABLE_VALUE, d as E_INVALID_INITIAL_TOOL_VALUE, f as E_INVALID_INITIAL_TURN_GATE_VALUE, g as E_INVALID_TURN_CONTEXT, h as E_INVALID_TOOL_ARGS, i as E_INVALID_INITIAL_MEDIA_VALUE, k as E_TURN_GATE_TIMEOUT, l as E_INVALID_INITIAL_THOUGHT_VALUE, m as E_INVALID_LLM_EXECUTION_CONTEXT, n as E_INPUT_PIPELINE_ERROR, o as E_INVALID_INITIAL_MESSAGE_VALUE, p as E_INVALID_LLM_DISPATCH_INPUT, r as E_INVALID_INITIAL_IDENTITY_VALUE, s as E_INVALID_INITIAL_REGISTRY_VALUE, t as E_DISPATCH_PIPELINE_ERROR, u as E_INVALID_INITIAL_TOOL_CALL_VALUE, v as E_INVALID_TURN_RUNNER_CONFIG, w as E_OUTPUT_PIPELINE_ERROR, x as E_LLM_EXECUTION_GATE_NOT_SUPPORTED, y as E_LLM_EXECUTION_ALREADY_SIGNALLED } from "./runtime-j92CNi5z.mjs";
|
|
3
3
|
export { E_DISPATCH_PIPELINE_ERROR, E_INPUT_PIPELINE_ERROR, E_INVALID_INITIAL_IDENTITY_VALUE, E_INVALID_INITIAL_MEDIA_VALUE, E_INVALID_INITIAL_MEMORY_VALUE, E_INVALID_INITIAL_MESSAGE_VALUE, E_INVALID_INITIAL_REGISTRY_VALUE, E_INVALID_INITIAL_RETRIEVABLE_VALUE, E_INVALID_INITIAL_THOUGHT_VALUE, E_INVALID_INITIAL_TOOL_CALL_VALUE, E_INVALID_INITIAL_TOOL_VALUE, E_INVALID_INITIAL_TURN_GATE_VALUE, E_INVALID_LLM_DISPATCH_INPUT, E_INVALID_LLM_EXECUTION_CONTEXT, E_INVALID_TOOL_ARGS, E_INVALID_TURN_CONTEXT, E_INVALID_TURN_GATE_RESOLUTION, E_INVALID_TURN_RUNNER_CONFIG, E_LLM_EXECUTION_ALREADY_SIGNALLED, E_LLM_EXECUTION_EXECUTOR_ERROR, E_LLM_EXECUTION_GATE_NOT_SUPPORTED, E_NOT_A_MEDIA_READER, E_NOT_A_SPOOL_READER, E_OUTPUT_PIPELINE_ERROR, E_PIPELINE_SHORT_CIRCUITED, E_TOOL_ALREADY_REGISTERED, E_TOOL_DOWNSTREAM_ERROR, E_TURN_GATE_ABORTED, E_TURN_GATE_TIMEOUT, ValidationException };
|
package/forge.cjs
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
require("./chunk-Ble4zEEl.js");
|
|
3
|
-
const require_tool_registry = require("./tool_registry-
|
|
4
|
-
const require_tool = require("./tool-
|
|
5
|
-
const require_spooled_artifact = require("./spooled_artifact-
|
|
6
|
-
const require_tool_call = require("./tool_call-
|
|
3
|
+
const require_tool_registry = require("./tool_registry-CtCQ4Xoz.js");
|
|
4
|
+
const require_tool = require("./tool-CX9vNHAw.js");
|
|
5
|
+
const require_spooled_artifact = require("./spooled_artifact-B8gIIn9h.js");
|
|
6
|
+
const require_tool_call = require("./tool_call--7ti-frB.js");
|
|
7
7
|
exports.ArtifactTool = require_spooled_artifact.ArtifactTool;
|
|
8
8
|
exports.Tool = require_tool.Tool;
|
|
9
9
|
exports.ToolCall = require_tool_call.ToolCall;
|
package/forge.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { t as ToolRegistry } from "./tool_registry-
|
|
2
|
-
import { t as Tool } from "./tool-
|
|
3
|
-
import { i as ArtifactTool } from "./spooled_artifact-
|
|
4
|
-
import { t as ToolCall } from "./tool_call-
|
|
1
|
+
import { t as ToolRegistry } from "./tool_registry-BGHg6KTq.mjs";
|
|
2
|
+
import { t as Tool } from "./tool-CRZSUcdP.mjs";
|
|
3
|
+
import { i as ArtifactTool } from "./spooled_artifact-CWoKUDEm.mjs";
|
|
4
|
+
import { t as ToolCall } from "./tool_call-BUeMuCc6.mjs";
|
|
5
5
|
export { ArtifactTool, Tool, ToolCall, ToolRegistry };
|
package/guards.cjs
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
require("./chunk-Ble4zEEl.js");
|
|
3
3
|
const require_exceptions = require("./exceptions-CitH5wZI.js");
|
|
4
|
-
const require_tool_registry = require("./tool_registry-
|
|
5
|
-
const require_thought = require("./thought-
|
|
6
|
-
const require_tool = require("./tool-
|
|
7
|
-
const require_spooled_artifact = require("./spooled_artifact-
|
|
8
|
-
const require_tool_call = require("./tool_call-
|
|
9
|
-
const require_spooled_markdown_artifact = require("./spooled_markdown_artifact-
|
|
10
|
-
const require_dispatch_runner = require("./dispatch_runner-
|
|
11
|
-
const require_turn_runner = require("./turn_runner-
|
|
4
|
+
const require_tool_registry = require("./tool_registry-CtCQ4Xoz.js");
|
|
5
|
+
const require_thought = require("./thought-BD6AkkOr.js");
|
|
6
|
+
const require_tool = require("./tool-CX9vNHAw.js");
|
|
7
|
+
const require_spooled_artifact = require("./spooled_artifact-B8gIIn9h.js");
|
|
8
|
+
const require_tool_call = require("./tool_call--7ti-frB.js");
|
|
9
|
+
const require_spooled_markdown_artifact = require("./spooled_markdown_artifact-DQX0RCdI.js");
|
|
10
|
+
const require_dispatch_runner = require("./dispatch_runner-CpuyATj1.js");
|
|
11
|
+
const require_turn_runner = require("./turn_runner-BJTtAORU.js");
|
|
12
12
|
//#region src/guards.ts
|
|
13
13
|
/**
|
|
14
14
|
* Runtime type guards for ADK primitives, contexts, runners, tools, and artifacts.
|
package/guards.mjs
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { o as BaseException } from "./exceptions-BeWH2FwP.mjs";
|
|
2
|
-
import { a as Tokenizable, c as isObject, o as isError, r as Registry, s as isInstanceOf, t as ToolRegistry } from "./tool_registry-
|
|
3
|
-
import { i as Identity, n as Message, r as Memory, t as Thought } from "./thought-
|
|
4
|
-
import { t as Tool } from "./tool-
|
|
5
|
-
import { i as ArtifactTool, r as implementsSpoolReader, t as SpooledArtifact } from "./spooled_artifact-
|
|
6
|
-
import { t as ToolCall } from "./tool_call-
|
|
7
|
-
import { n as SpooledJsonArtifact, t as SpooledMarkdownArtifact } from "./spooled_markdown_artifact-
|
|
8
|
-
import { n as DispatchContext, r as TurnContext, t as DispatchRunner } from "./dispatch_runner-
|
|
9
|
-
import { n as TurnGate, t as TurnRunner } from "./turn_runner-
|
|
2
|
+
import { a as Tokenizable, c as isObject, o as isError, r as Registry, s as isInstanceOf, t as ToolRegistry } from "./tool_registry-BGHg6KTq.mjs";
|
|
3
|
+
import { i as Identity, n as Message, r as Memory, t as Thought } from "./thought-B_P8LiB6.mjs";
|
|
4
|
+
import { t as Tool } from "./tool-CRZSUcdP.mjs";
|
|
5
|
+
import { i as ArtifactTool, r as implementsSpoolReader, t as SpooledArtifact } from "./spooled_artifact-CWoKUDEm.mjs";
|
|
6
|
+
import { t as ToolCall } from "./tool_call-BUeMuCc6.mjs";
|
|
7
|
+
import { n as SpooledJsonArtifact, t as SpooledMarkdownArtifact } from "./spooled_markdown_artifact-CNle4jXN.mjs";
|
|
8
|
+
import { n as DispatchContext, r as TurnContext, t as DispatchRunner } from "./dispatch_runner-CDF3X0nv.mjs";
|
|
9
|
+
import { n as TurnGate, t as TurnRunner } from "./turn_runner-C02LZHjt.mjs";
|
|
10
10
|
//#region src/guards.ts
|
|
11
11
|
/**
|
|
12
12
|
* Runtime type guards for ADK primitives, contexts, runners, tools, and artifacts.
|
package/index.cjs
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
require("./chunk-Ble4zEEl.js");
|
|
3
3
|
const require_exceptions = require("./exceptions-CitH5wZI.js");
|
|
4
|
-
const require_tool_registry = require("./tool_registry-
|
|
5
|
-
const require_runtime = require("./runtime-
|
|
6
|
-
const require_thought = require("./thought-
|
|
7
|
-
const require_tool = require("./tool-
|
|
8
|
-
const require_spooled_artifact = require("./spooled_artifact-
|
|
9
|
-
const require_common = require("./common-
|
|
10
|
-
const require_tool_call = require("./tool_call-
|
|
11
|
-
const require_spooled_markdown_artifact = require("./spooled_markdown_artifact-
|
|
12
|
-
require("./
|
|
13
|
-
const require_dispatch_runner = require("./dispatch_runner-CEFHXRJZ.js");
|
|
4
|
+
const require_tool_registry = require("./tool_registry-CtCQ4Xoz.js");
|
|
5
|
+
const require_runtime = require("./runtime-MFFcJrRv.js");
|
|
6
|
+
const require_thought = require("./thought-BD6AkkOr.js");
|
|
7
|
+
const require_tool = require("./tool-CX9vNHAw.js");
|
|
8
|
+
const require_spooled_artifact = require("./spooled_artifact-B8gIIn9h.js");
|
|
9
|
+
const require_common = require("./common-D_e5zYsG.js");
|
|
10
|
+
const require_tool_call = require("./tool_call--7ti-frB.js");
|
|
11
|
+
const require_spooled_markdown_artifact = require("./spooled_markdown_artifact-DQX0RCdI.js");
|
|
12
|
+
const require_dispatch_runner = require("./dispatch_runner-CpuyATj1.js");
|
|
14
13
|
require("./dispatch_runner.cjs");
|
|
15
|
-
|
|
14
|
+
require("./exceptions.cjs");
|
|
15
|
+
const require_turn_runner = require("./turn_runner-BJTtAORU.js");
|
|
16
16
|
const require_guards = require("./guards.cjs");
|
|
17
17
|
require("./turn_runner.cjs");
|
|
18
18
|
//#region src/index.ts
|
|
@@ -26,7 +26,7 @@ require("./turn_runner.cjs");
|
|
|
26
26
|
*
|
|
27
27
|
* @tip This is a constant that is replaced during the build process with the actual version of the package.
|
|
28
28
|
*/
|
|
29
|
-
var version = "0.1.0-master-
|
|
29
|
+
var version = "0.1.0-master-bd43a4ea";
|
|
30
30
|
//#endregion
|
|
31
31
|
exports.ArtifactTool = require_spooled_artifact.ArtifactTool;
|
|
32
32
|
exports.DispatchRunner = require_dispatch_runner.DispatchRunner;
|
package/index.mjs
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import { n as ValidationException } from "./exceptions-BeWH2FwP.mjs";
|
|
2
|
-
import { a as Tokenizable, c as isObject, i as TokenEncoding, o as isError, r as Registry, s as isInstanceOf, t as ToolRegistry } from "./tool_registry-
|
|
3
|
-
import { C as E_NOT_A_SPOOL_READER, D as E_TOOL_DOWNSTREAM_ERROR, E as E_TOOL_ALREADY_REGISTERED, O as E_TURN_GATE_ABORTED, T as E_PIPELINE_SHORT_CIRCUITED, _ as E_INVALID_TURN_GATE_RESOLUTION, a as E_INVALID_INITIAL_MEMORY_VALUE, b as E_LLM_EXECUTION_EXECUTOR_ERROR, d as E_INVALID_INITIAL_TOOL_VALUE, f as E_INVALID_INITIAL_TURN_GATE_VALUE, g as E_INVALID_TURN_CONTEXT, h as E_INVALID_TOOL_ARGS, k as E_TURN_GATE_TIMEOUT, l as E_INVALID_INITIAL_THOUGHT_VALUE, m as E_INVALID_LLM_EXECUTION_CONTEXT, n as E_INPUT_PIPELINE_ERROR, o as E_INVALID_INITIAL_MESSAGE_VALUE, p as E_INVALID_LLM_DISPATCH_INPUT, r as E_INVALID_INITIAL_IDENTITY_VALUE, s as E_INVALID_INITIAL_REGISTRY_VALUE, t as E_DISPATCH_PIPELINE_ERROR, u as E_INVALID_INITIAL_TOOL_CALL_VALUE, v as E_INVALID_TURN_RUNNER_CONFIG, w as E_OUTPUT_PIPELINE_ERROR, x as E_LLM_EXECUTION_GATE_NOT_SUPPORTED, y as E_LLM_EXECUTION_ALREADY_SIGNALLED } from "./runtime-
|
|
4
|
-
import { i as Identity, n as Message, r as Memory, t as Thought } from "./thought-
|
|
5
|
-
import { t as Tool } from "./tool-
|
|
6
|
-
import { i as ArtifactTool, r as implementsSpoolReader, t as SpooledArtifact } from "./spooled_artifact-
|
|
7
|
-
import { n as fromWebFile, o as Retrievable, r as inMemoryMediaReader, t as fromFetch } from "./common-
|
|
8
|
-
import { a as mediaReaderSchema, i as implementsMediaReader, n as Media, r as isMedia, t as ToolCall } from "./tool_call-
|
|
9
|
-
import { n as SpooledJsonArtifact, t as SpooledMarkdownArtifact } from "./spooled_markdown_artifact-
|
|
10
|
-
import "./
|
|
11
|
-
import { t as DispatchRunner } from "./dispatch_runner-uNtS-XSP.mjs";
|
|
2
|
+
import { a as Tokenizable, c as isObject, i as TokenEncoding, o as isError, r as Registry, s as isInstanceOf, t as ToolRegistry } from "./tool_registry-BGHg6KTq.mjs";
|
|
3
|
+
import { C as E_NOT_A_SPOOL_READER, D as E_TOOL_DOWNSTREAM_ERROR, E as E_TOOL_ALREADY_REGISTERED, O as E_TURN_GATE_ABORTED, T as E_PIPELINE_SHORT_CIRCUITED, _ as E_INVALID_TURN_GATE_RESOLUTION, a as E_INVALID_INITIAL_MEMORY_VALUE, b as E_LLM_EXECUTION_EXECUTOR_ERROR, d as E_INVALID_INITIAL_TOOL_VALUE, f as E_INVALID_INITIAL_TURN_GATE_VALUE, g as E_INVALID_TURN_CONTEXT, h as E_INVALID_TOOL_ARGS, k as E_TURN_GATE_TIMEOUT, l as E_INVALID_INITIAL_THOUGHT_VALUE, m as E_INVALID_LLM_EXECUTION_CONTEXT, n as E_INPUT_PIPELINE_ERROR, o as E_INVALID_INITIAL_MESSAGE_VALUE, p as E_INVALID_LLM_DISPATCH_INPUT, r as E_INVALID_INITIAL_IDENTITY_VALUE, s as E_INVALID_INITIAL_REGISTRY_VALUE, t as E_DISPATCH_PIPELINE_ERROR, u as E_INVALID_INITIAL_TOOL_CALL_VALUE, v as E_INVALID_TURN_RUNNER_CONFIG, w as E_OUTPUT_PIPELINE_ERROR, x as E_LLM_EXECUTION_GATE_NOT_SUPPORTED, y as E_LLM_EXECUTION_ALREADY_SIGNALLED } from "./runtime-j92CNi5z.mjs";
|
|
4
|
+
import { i as Identity, n as Message, r as Memory, t as Thought } from "./thought-B_P8LiB6.mjs";
|
|
5
|
+
import { t as Tool } from "./tool-CRZSUcdP.mjs";
|
|
6
|
+
import { i as ArtifactTool, r as implementsSpoolReader, t as SpooledArtifact } from "./spooled_artifact-CWoKUDEm.mjs";
|
|
7
|
+
import { n as fromWebFile, o as Retrievable, r as inMemoryMediaReader, t as fromFetch } from "./common-lMrnzoyn.mjs";
|
|
8
|
+
import { a as mediaReaderSchema, i as implementsMediaReader, n as Media, r as isMedia, t as ToolCall } from "./tool_call-BUeMuCc6.mjs";
|
|
9
|
+
import { n as SpooledJsonArtifact, t as SpooledMarkdownArtifact } from "./spooled_markdown_artifact-CNle4jXN.mjs";
|
|
10
|
+
import { t as DispatchRunner } from "./dispatch_runner-CDF3X0nv.mjs";
|
|
12
11
|
import "./dispatch_runner.mjs";
|
|
13
|
-
import
|
|
12
|
+
import "./exceptions.mjs";
|
|
13
|
+
import { t as TurnRunner } from "./turn_runner-C02LZHjt.mjs";
|
|
14
14
|
import { isArtifactTool, isBaseException, isDispatchContext, isDispatchRunner, isIdentity, isMemory, isMessage, isRegistry, isSpooledArtifact, isSpooledArtifactConstructor, isSpooledJsonArtifact, isSpooledMarkdownArtifact, isThought, isTokenizable, isTool, isToolCall, isToolRegistry, isTurnContext, isTurnGate, isTurnRunner } from "./guards.mjs";
|
|
15
15
|
import "./turn_runner.mjs";
|
|
16
16
|
//#region src/index.ts
|
|
@@ -24,7 +24,7 @@ import "./turn_runner.mjs";
|
|
|
24
24
|
*
|
|
25
25
|
* @tip This is a constant that is replaced during the build process with the actual version of the package.
|
|
26
26
|
*/
|
|
27
|
-
var version = "0.1.0-master-
|
|
27
|
+
var version = "0.1.0-master-bd43a4ea";
|
|
28
28
|
//#endregion
|
|
29
29
|
export { ArtifactTool, DispatchRunner, E_DISPATCH_PIPELINE_ERROR, E_INPUT_PIPELINE_ERROR, E_INVALID_INITIAL_IDENTITY_VALUE, E_INVALID_INITIAL_MEMORY_VALUE, E_INVALID_INITIAL_MESSAGE_VALUE, E_INVALID_INITIAL_REGISTRY_VALUE, E_INVALID_INITIAL_THOUGHT_VALUE, E_INVALID_INITIAL_TOOL_CALL_VALUE, E_INVALID_INITIAL_TOOL_VALUE, E_INVALID_INITIAL_TURN_GATE_VALUE, E_INVALID_LLM_DISPATCH_INPUT, E_INVALID_LLM_EXECUTION_CONTEXT, E_INVALID_TOOL_ARGS, E_INVALID_TURN_CONTEXT, E_INVALID_TURN_GATE_RESOLUTION, E_INVALID_TURN_RUNNER_CONFIG, E_LLM_EXECUTION_ALREADY_SIGNALLED, E_LLM_EXECUTION_EXECUTOR_ERROR, E_LLM_EXECUTION_GATE_NOT_SUPPORTED, E_NOT_A_SPOOL_READER, E_OUTPUT_PIPELINE_ERROR, E_PIPELINE_SHORT_CIRCUITED, E_TOOL_ALREADY_REGISTERED, E_TOOL_DOWNSTREAM_ERROR, E_TURN_GATE_ABORTED, E_TURN_GATE_TIMEOUT, Identity, Media, Memory, Message, Registry, Retrievable, SpooledArtifact, SpooledJsonArtifact, SpooledMarkdownArtifact, Thought, TokenEncoding, Tokenizable, Tool, ToolCall, ToolRegistry, TurnRunner, ValidationException, fromFetch, fromWebFile, implementsMediaReader, implementsSpoolReader, inMemoryMediaReader, isArtifactTool, isBaseException, isDispatchContext, isDispatchRunner, isError, isIdentity, isInstanceOf, isMedia, isMemory, isMessage, isObject, isRegistry, isSpooledArtifact, isSpooledArtifactConstructor, isSpooledJsonArtifact, isSpooledMarkdownArtifact, isThought, isTokenizable, isTool, isToolCall, isToolRegistry, isTurnContext, isTurnGate, isTurnRunner, mediaReaderSchema, version };
|
|
30
30
|
|
|
@@ -5,9 +5,14 @@
|
|
|
5
5
|
* @remarks
|
|
6
6
|
* Marked fatal — a misconfigured runner must not be allowed to execute turns.
|
|
7
7
|
*
|
|
8
|
+
* The single printf argument carries the validator's field-level detail (e.g.
|
|
9
|
+
* `"storeMediaBytesCallback is required"`) so a misconfiguration names the offending field
|
|
10
|
+
* instead of failing opaquely. The underlying `ValidationError` is also attached on `cause`.
|
|
11
|
+
*
|
|
8
12
|
* @group Turn Runner Construction
|
|
9
13
|
*/
|
|
10
14
|
export declare const E_INVALID_TURN_RUNNER_CONFIG: import("../utils/exceptions").CreatedException<[
|
|
15
|
+
string
|
|
11
16
|
]>;
|
|
12
17
|
/**
|
|
13
18
|
* Thrown by {@link @nhtio/adk!TurnRunner} when the {@link @nhtio/adk!TurnContext} supplied to `run` fails schema
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
require("../../chunk-Ble4zEEl.js");
|
|
3
|
+
//#region src/lib/utils/retry.ts
|
|
4
|
+
/**
|
|
5
|
+
* Exponential backoff with a ceiling: `min(baseDelayMs * 2^(attempt-1), maxDelayMs)`.
|
|
6
|
+
*
|
|
7
|
+
* @param attempt - 1-based attempt number.
|
|
8
|
+
* @param cfg - Carries `baseDelayMs` (default 500) and `maxDelayMs` (default 30_000).
|
|
9
|
+
* @returns The (un-jittered) delay in ms.
|
|
10
|
+
*/
|
|
11
|
+
var computeBackoff = (attempt, cfg) => {
|
|
12
|
+
const base = cfg.baseDelayMs ?? 500;
|
|
13
|
+
const max = cfg.maxDelayMs ?? 3e4;
|
|
14
|
+
return Math.min(base * Math.pow(2, attempt - 1), max);
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Abort-aware jittered sleep used for retry backoff.
|
|
18
|
+
*
|
|
19
|
+
* @remarks
|
|
20
|
+
* Resolves (never rejects) the instant `signal` aborts, so an aborted caller does not stay parked
|
|
21
|
+
* in a backoff delay — the caller's retry loop re-checks abort state immediately after and bails.
|
|
22
|
+
* The timer and the abort listener are both torn down on whichever fires first, so nothing leaks.
|
|
23
|
+
*
|
|
24
|
+
* @param ms - Base delay in ms; jittered by ±10%.
|
|
25
|
+
* @param signal - Optional abort signal that short-circuits the sleep.
|
|
26
|
+
*/
|
|
27
|
+
var sleepWithJitter = (ms, signal) => {
|
|
28
|
+
const jittered = ms * (.9 + Math.random() * .2);
|
|
29
|
+
return new Promise((resolve) => {
|
|
30
|
+
if (signal?.aborted) {
|
|
31
|
+
resolve();
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
let onAbort;
|
|
35
|
+
const timer = setTimeout(() => {
|
|
36
|
+
if (onAbort && signal) signal.removeEventListener("abort", onAbort);
|
|
37
|
+
resolve();
|
|
38
|
+
}, jittered);
|
|
39
|
+
if (signal) {
|
|
40
|
+
onAbort = () => {
|
|
41
|
+
clearTimeout(timer);
|
|
42
|
+
resolve();
|
|
43
|
+
};
|
|
44
|
+
signal.addEventListener("abort", onAbort, { once: true });
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* Parses an HTTP `Retry-After` header value (delta-seconds or HTTP-date) into milliseconds.
|
|
50
|
+
*
|
|
51
|
+
* @param raw - The header value.
|
|
52
|
+
* @returns Milliseconds to wait, or `0` when the value cannot be parsed or is in the past.
|
|
53
|
+
*/
|
|
54
|
+
var parseRetryAfter = (raw) => {
|
|
55
|
+
const asNum = Number(raw);
|
|
56
|
+
if (Number.isFinite(asNum)) return asNum * 1e3;
|
|
57
|
+
const asDate = Date.parse(raw);
|
|
58
|
+
if (Number.isFinite(asDate)) return Math.max(0, asDate - Date.now());
|
|
59
|
+
return 0;
|
|
60
|
+
};
|
|
61
|
+
/**
|
|
62
|
+
* Combines several abort signals into one.
|
|
63
|
+
*
|
|
64
|
+
* @remarks
|
|
65
|
+
* Returns the linked signal plus a `dispose` that detaches any listeners the fallback path
|
|
66
|
+
* attached, so repeated links on a long-lived signal (one per retry attempt) do not accumulate
|
|
67
|
+
* listeners. The native `AbortSignal.any` path self-manages its listeners, so `dispose` is a no-op
|
|
68
|
+
* there.
|
|
69
|
+
*
|
|
70
|
+
* @param signals - The signals to combine.
|
|
71
|
+
* @returns The linked signal and a `dispose` to tear down fallback listeners.
|
|
72
|
+
*/
|
|
73
|
+
var linkAbortSignals = (signals) => {
|
|
74
|
+
const anyFn = AbortSignal.any;
|
|
75
|
+
if (typeof anyFn === "function") return {
|
|
76
|
+
signal: anyFn(signals),
|
|
77
|
+
dispose: () => {}
|
|
78
|
+
};
|
|
79
|
+
const ctrl = new AbortController();
|
|
80
|
+
const links = [];
|
|
81
|
+
for (const sig of signals) {
|
|
82
|
+
if (sig.aborted) {
|
|
83
|
+
ctrl.abort();
|
|
84
|
+
break;
|
|
85
|
+
}
|
|
86
|
+
const handler = () => ctrl.abort();
|
|
87
|
+
sig.addEventListener("abort", handler, { once: true });
|
|
88
|
+
links.push({
|
|
89
|
+
sig,
|
|
90
|
+
handler
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
return {
|
|
94
|
+
signal: ctrl.signal,
|
|
95
|
+
dispose: () => {
|
|
96
|
+
for (const { sig, handler } of links) sig.removeEventListener("abort", handler);
|
|
97
|
+
links.length = 0;
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
};
|
|
101
|
+
//#endregion
|
|
102
|
+
exports.computeBackoff = computeBackoff;
|
|
103
|
+
exports.linkAbortSignals = linkAbortSignals;
|
|
104
|
+
exports.parseRetryAfter = parseRetryAfter;
|
|
105
|
+
exports.sleepWithJitter = sleepWithJitter;
|
|
106
|
+
|
|
107
|
+
//# sourceMappingURL=retry.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retry.cjs","names":[],"sources":["../../../src/lib/utils/retry.ts"],"sourcesContent":["/**\n * Environment-neutral retry/backoff/timeout primitives shared across HTTP-backed batteries.\n *\n * @module @nhtio/adk/lib/utils/retry\n *\n * @remarks\n * These are pure helpers — no DOM, no Node built-ins, only `setTimeout`, `AbortController`, and\n * `AbortSignal`, all of which exist in every target runtime (Node, browser, edge, workers). They\n * are shared (not duplicated) by the OpenAI Chat Completions battery and the OpenAI Embeddings\n * battery so retry behavior stays identical across the bundled batteries. The bundler inlines this\n * module into each consumer, so sharing introduces no build coupling.\n */\n\n/**\n * Minimal backoff configuration shape. Any retry config carrying `baseDelayMs`/`maxDelayMs`\n * satisfies it structurally, so batteries can pass their own richer config objects directly.\n */\nexport interface BackoffConfig {\n baseDelayMs?: number\n maxDelayMs?: number\n}\n\n/**\n * Exponential backoff with a ceiling: `min(baseDelayMs * 2^(attempt-1), maxDelayMs)`.\n *\n * @param attempt - 1-based attempt number.\n * @param cfg - Carries `baseDelayMs` (default 500) and `maxDelayMs` (default 30_000).\n * @returns The (un-jittered) delay in ms.\n */\nexport const computeBackoff = (attempt: number, cfg: BackoffConfig): number => {\n const base = cfg.baseDelayMs ?? 500\n const max = cfg.maxDelayMs ?? 30_000\n return Math.min(base * Math.pow(2, attempt - 1), max)\n}\n\n/**\n * Abort-aware jittered sleep used for retry backoff.\n *\n * @remarks\n * Resolves (never rejects) the instant `signal` aborts, so an aborted caller does not stay parked\n * in a backoff delay — the caller's retry loop re-checks abort state immediately after and bails.\n * The timer and the abort listener are both torn down on whichever fires first, so nothing leaks.\n *\n * @param ms - Base delay in ms; jittered by ±10%.\n * @param signal - Optional abort signal that short-circuits the sleep.\n */\nexport const sleepWithJitter = (ms: number, signal?: AbortSignal): Promise<void> => {\n const jittered = ms * (0.9 + Math.random() * 0.2)\n return new Promise((resolve) => {\n if (signal?.aborted) {\n resolve()\n return\n }\n let onAbort: (() => void) | undefined\n const timer = setTimeout(() => {\n if (onAbort && signal) signal.removeEventListener('abort', onAbort)\n resolve()\n }, jittered)\n if (signal) {\n onAbort = () => {\n clearTimeout(timer)\n resolve()\n }\n signal.addEventListener('abort', onAbort, { once: true })\n }\n })\n}\n\n/**\n * Parses an HTTP `Retry-After` header value (delta-seconds or HTTP-date) into milliseconds.\n *\n * @param raw - The header value.\n * @returns Milliseconds to wait, or `0` when the value cannot be parsed or is in the past.\n */\nexport const parseRetryAfter = (raw: string): number => {\n const asNum = Number(raw)\n if (Number.isFinite(asNum)) return asNum * 1000\n const asDate = Date.parse(raw)\n if (Number.isFinite(asDate)) return Math.max(0, asDate - Date.now())\n return 0\n}\n\n/**\n * Combines several abort signals into one.\n *\n * @remarks\n * Returns the linked signal plus a `dispose` that detaches any listeners the fallback path\n * attached, so repeated links on a long-lived signal (one per retry attempt) do not accumulate\n * listeners. The native `AbortSignal.any` path self-manages its listeners, so `dispose` is a no-op\n * there.\n *\n * @param signals - The signals to combine.\n * @returns The linked signal and a `dispose` to tear down fallback listeners.\n */\nexport const linkAbortSignals = (\n signals: ReadonlyArray<AbortSignal>\n): { signal: AbortSignal; dispose: () => void } => {\n const anyFn = (AbortSignal as unknown as { any?: (sigs: AbortSignal[]) => AbortSignal }).any\n if (typeof anyFn === 'function') {\n return { signal: anyFn(signals as AbortSignal[]), dispose: () => {} }\n }\n // Fallback for older runtimes: hand-link via a fresh controller.\n const ctrl = new AbortController()\n const links: Array<{ sig: AbortSignal; handler: () => void }> = []\n for (const sig of signals) {\n if (sig.aborted) {\n ctrl.abort()\n break\n }\n const handler = () => ctrl.abort()\n sig.addEventListener('abort', handler, { once: true })\n links.push({ sig, handler })\n }\n return {\n signal: ctrl.signal,\n dispose: () => {\n for (const { sig, handler } of links) sig.removeEventListener('abort', handler)\n links.length = 0\n },\n }\n}\n"],"mappings":";;;;;;;;;;AA6BA,IAAa,kBAAkB,SAAiB,QAA+B;CAC7E,MAAM,OAAO,IAAI,eAAe;CAChC,MAAM,MAAM,IAAI,cAAc;CAC9B,OAAO,KAAK,IAAI,OAAO,KAAK,IAAI,GAAG,UAAU,CAAC,GAAG,GAAG;AACtD;;;;;;;;;;;;AAaA,IAAa,mBAAmB,IAAY,WAAwC;CAClF,MAAM,WAAW,MAAM,KAAM,KAAK,OAAO,IAAI;CAC7C,OAAO,IAAI,SAAS,YAAY;EAC9B,IAAI,QAAQ,SAAS;GACnB,QAAQ;GACR;EACF;EACA,IAAI;EACJ,MAAM,QAAQ,iBAAiB;GAC7B,IAAI,WAAW,QAAQ,OAAO,oBAAoB,SAAS,OAAO;GAClE,QAAQ;EACV,GAAG,QAAQ;EACX,IAAI,QAAQ;GACV,gBAAgB;IACd,aAAa,KAAK;IAClB,QAAQ;GACV;GACA,OAAO,iBAAiB,SAAS,SAAS,EAAE,MAAM,KAAK,CAAC;EAC1D;CACF,CAAC;AACH;;;;;;;AAQA,IAAa,mBAAmB,QAAwB;CACtD,MAAM,QAAQ,OAAO,GAAG;CACxB,IAAI,OAAO,SAAS,KAAK,GAAG,OAAO,QAAQ;CAC3C,MAAM,SAAS,KAAK,MAAM,GAAG;CAC7B,IAAI,OAAO,SAAS,MAAM,GAAG,OAAO,KAAK,IAAI,GAAG,SAAS,KAAK,IAAI,CAAC;CACnE,OAAO;AACT;;;;;;;;;;;;;AAcA,IAAa,oBACX,YACiD;CACjD,MAAM,QAAS,YAA0E;CACzF,IAAI,OAAO,UAAU,YACnB,OAAO;EAAE,QAAQ,MAAM,OAAwB;EAAG,eAAe,CAAC;CAAE;CAGtE,MAAM,OAAO,IAAI,gBAAgB;CACjC,MAAM,QAA0D,CAAC;CACjE,KAAK,MAAM,OAAO,SAAS;EACzB,IAAI,IAAI,SAAS;GACf,KAAK,MAAM;GACX;EACF;EACA,MAAM,gBAAgB,KAAK,MAAM;EACjC,IAAI,iBAAiB,SAAS,SAAS,EAAE,MAAM,KAAK,CAAC;EACrD,MAAM,KAAK;GAAE;GAAK;EAAQ,CAAC;CAC7B;CACA,OAAO;EACL,QAAQ,KAAK;EACb,eAAe;GACb,KAAK,MAAM,EAAE,KAAK,aAAa,OAAO,IAAI,oBAAoB,SAAS,OAAO;GAC9E,MAAM,SAAS;EACjB;CACF;AACF"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Environment-neutral retry/backoff/timeout primitives shared across HTTP-backed batteries.
|
|
3
|
+
*
|
|
4
|
+
* @module @nhtio/adk/lib/utils/retry
|
|
5
|
+
*
|
|
6
|
+
* @remarks
|
|
7
|
+
* These are pure helpers — no DOM, no Node built-ins, only `setTimeout`, `AbortController`, and
|
|
8
|
+
* `AbortSignal`, all of which exist in every target runtime (Node, browser, edge, workers). They
|
|
9
|
+
* are shared (not duplicated) by the OpenAI Chat Completions battery and the OpenAI Embeddings
|
|
10
|
+
* battery so retry behavior stays identical across the bundled batteries. The bundler inlines this
|
|
11
|
+
* module into each consumer, so sharing introduces no build coupling.
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Minimal backoff configuration shape. Any retry config carrying `baseDelayMs`/`maxDelayMs`
|
|
15
|
+
* satisfies it structurally, so batteries can pass their own richer config objects directly.
|
|
16
|
+
*/
|
|
17
|
+
export interface BackoffConfig {
|
|
18
|
+
baseDelayMs?: number;
|
|
19
|
+
maxDelayMs?: number;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Exponential backoff with a ceiling: `min(baseDelayMs * 2^(attempt-1), maxDelayMs)`.
|
|
23
|
+
*
|
|
24
|
+
* @param attempt - 1-based attempt number.
|
|
25
|
+
* @param cfg - Carries `baseDelayMs` (default 500) and `maxDelayMs` (default 30_000).
|
|
26
|
+
* @returns The (un-jittered) delay in ms.
|
|
27
|
+
*/
|
|
28
|
+
export declare const computeBackoff: (attempt: number, cfg: BackoffConfig) => number;
|
|
29
|
+
/**
|
|
30
|
+
* Abort-aware jittered sleep used for retry backoff.
|
|
31
|
+
*
|
|
32
|
+
* @remarks
|
|
33
|
+
* Resolves (never rejects) the instant `signal` aborts, so an aborted caller does not stay parked
|
|
34
|
+
* in a backoff delay — the caller's retry loop re-checks abort state immediately after and bails.
|
|
35
|
+
* The timer and the abort listener are both torn down on whichever fires first, so nothing leaks.
|
|
36
|
+
*
|
|
37
|
+
* @param ms - Base delay in ms; jittered by ±10%.
|
|
38
|
+
* @param signal - Optional abort signal that short-circuits the sleep.
|
|
39
|
+
*/
|
|
40
|
+
export declare const sleepWithJitter: (ms: number, signal?: AbortSignal) => Promise<void>;
|
|
41
|
+
/**
|
|
42
|
+
* Parses an HTTP `Retry-After` header value (delta-seconds or HTTP-date) into milliseconds.
|
|
43
|
+
*
|
|
44
|
+
* @param raw - The header value.
|
|
45
|
+
* @returns Milliseconds to wait, or `0` when the value cannot be parsed or is in the past.
|
|
46
|
+
*/
|
|
47
|
+
export declare const parseRetryAfter: (raw: string) => number;
|
|
48
|
+
/**
|
|
49
|
+
* Combines several abort signals into one.
|
|
50
|
+
*
|
|
51
|
+
* @remarks
|
|
52
|
+
* Returns the linked signal plus a `dispose` that detaches any listeners the fallback path
|
|
53
|
+
* attached, so repeated links on a long-lived signal (one per retry attempt) do not accumulate
|
|
54
|
+
* listeners. The native `AbortSignal.any` path self-manages its listeners, so `dispose` is a no-op
|
|
55
|
+
* there.
|
|
56
|
+
*
|
|
57
|
+
* @param signals - The signals to combine.
|
|
58
|
+
* @returns The linked signal and a `dispose` to tear down fallback listeners.
|
|
59
|
+
*/
|
|
60
|
+
export declare const linkAbortSignals: (signals: ReadonlyArray<AbortSignal>) => {
|
|
61
|
+
signal: AbortSignal;
|
|
62
|
+
dispose: () => void;
|
|
63
|
+
};
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
//#region src/lib/utils/retry.ts
|
|
2
|
+
/**
|
|
3
|
+
* Exponential backoff with a ceiling: `min(baseDelayMs * 2^(attempt-1), maxDelayMs)`.
|
|
4
|
+
*
|
|
5
|
+
* @param attempt - 1-based attempt number.
|
|
6
|
+
* @param cfg - Carries `baseDelayMs` (default 500) and `maxDelayMs` (default 30_000).
|
|
7
|
+
* @returns The (un-jittered) delay in ms.
|
|
8
|
+
*/
|
|
9
|
+
var computeBackoff = (attempt, cfg) => {
|
|
10
|
+
const base = cfg.baseDelayMs ?? 500;
|
|
11
|
+
const max = cfg.maxDelayMs ?? 3e4;
|
|
12
|
+
return Math.min(base * Math.pow(2, attempt - 1), max);
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Abort-aware jittered sleep used for retry backoff.
|
|
16
|
+
*
|
|
17
|
+
* @remarks
|
|
18
|
+
* Resolves (never rejects) the instant `signal` aborts, so an aborted caller does not stay parked
|
|
19
|
+
* in a backoff delay — the caller's retry loop re-checks abort state immediately after and bails.
|
|
20
|
+
* The timer and the abort listener are both torn down on whichever fires first, so nothing leaks.
|
|
21
|
+
*
|
|
22
|
+
* @param ms - Base delay in ms; jittered by ±10%.
|
|
23
|
+
* @param signal - Optional abort signal that short-circuits the sleep.
|
|
24
|
+
*/
|
|
25
|
+
var sleepWithJitter = (ms, signal) => {
|
|
26
|
+
const jittered = ms * (.9 + Math.random() * .2);
|
|
27
|
+
return new Promise((resolve) => {
|
|
28
|
+
if (signal?.aborted) {
|
|
29
|
+
resolve();
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
let onAbort;
|
|
33
|
+
const timer = setTimeout(() => {
|
|
34
|
+
if (onAbort && signal) signal.removeEventListener("abort", onAbort);
|
|
35
|
+
resolve();
|
|
36
|
+
}, jittered);
|
|
37
|
+
if (signal) {
|
|
38
|
+
onAbort = () => {
|
|
39
|
+
clearTimeout(timer);
|
|
40
|
+
resolve();
|
|
41
|
+
};
|
|
42
|
+
signal.addEventListener("abort", onAbort, { once: true });
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* Parses an HTTP `Retry-After` header value (delta-seconds or HTTP-date) into milliseconds.
|
|
48
|
+
*
|
|
49
|
+
* @param raw - The header value.
|
|
50
|
+
* @returns Milliseconds to wait, or `0` when the value cannot be parsed or is in the past.
|
|
51
|
+
*/
|
|
52
|
+
var parseRetryAfter = (raw) => {
|
|
53
|
+
const asNum = Number(raw);
|
|
54
|
+
if (Number.isFinite(asNum)) return asNum * 1e3;
|
|
55
|
+
const asDate = Date.parse(raw);
|
|
56
|
+
if (Number.isFinite(asDate)) return Math.max(0, asDate - Date.now());
|
|
57
|
+
return 0;
|
|
58
|
+
};
|
|
59
|
+
/**
|
|
60
|
+
* Combines several abort signals into one.
|
|
61
|
+
*
|
|
62
|
+
* @remarks
|
|
63
|
+
* Returns the linked signal plus a `dispose` that detaches any listeners the fallback path
|
|
64
|
+
* attached, so repeated links on a long-lived signal (one per retry attempt) do not accumulate
|
|
65
|
+
* listeners. The native `AbortSignal.any` path self-manages its listeners, so `dispose` is a no-op
|
|
66
|
+
* there.
|
|
67
|
+
*
|
|
68
|
+
* @param signals - The signals to combine.
|
|
69
|
+
* @returns The linked signal and a `dispose` to tear down fallback listeners.
|
|
70
|
+
*/
|
|
71
|
+
var linkAbortSignals = (signals) => {
|
|
72
|
+
const anyFn = AbortSignal.any;
|
|
73
|
+
if (typeof anyFn === "function") return {
|
|
74
|
+
signal: anyFn(signals),
|
|
75
|
+
dispose: () => {}
|
|
76
|
+
};
|
|
77
|
+
const ctrl = new AbortController();
|
|
78
|
+
const links = [];
|
|
79
|
+
for (const sig of signals) {
|
|
80
|
+
if (sig.aborted) {
|
|
81
|
+
ctrl.abort();
|
|
82
|
+
break;
|
|
83
|
+
}
|
|
84
|
+
const handler = () => ctrl.abort();
|
|
85
|
+
sig.addEventListener("abort", handler, { once: true });
|
|
86
|
+
links.push({
|
|
87
|
+
sig,
|
|
88
|
+
handler
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
return {
|
|
92
|
+
signal: ctrl.signal,
|
|
93
|
+
dispose: () => {
|
|
94
|
+
for (const { sig, handler } of links) sig.removeEventListener("abort", handler);
|
|
95
|
+
links.length = 0;
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
};
|
|
99
|
+
//#endregion
|
|
100
|
+
export { computeBackoff, linkAbortSignals, parseRetryAfter, sleepWithJitter };
|
|
101
|
+
|
|
102
|
+
//# sourceMappingURL=retry.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retry.mjs","names":[],"sources":["../../../src/lib/utils/retry.ts"],"sourcesContent":["/**\n * Environment-neutral retry/backoff/timeout primitives shared across HTTP-backed batteries.\n *\n * @module @nhtio/adk/lib/utils/retry\n *\n * @remarks\n * These are pure helpers — no DOM, no Node built-ins, only `setTimeout`, `AbortController`, and\n * `AbortSignal`, all of which exist in every target runtime (Node, browser, edge, workers). They\n * are shared (not duplicated) by the OpenAI Chat Completions battery and the OpenAI Embeddings\n * battery so retry behavior stays identical across the bundled batteries. The bundler inlines this\n * module into each consumer, so sharing introduces no build coupling.\n */\n\n/**\n * Minimal backoff configuration shape. Any retry config carrying `baseDelayMs`/`maxDelayMs`\n * satisfies it structurally, so batteries can pass their own richer config objects directly.\n */\nexport interface BackoffConfig {\n baseDelayMs?: number\n maxDelayMs?: number\n}\n\n/**\n * Exponential backoff with a ceiling: `min(baseDelayMs * 2^(attempt-1), maxDelayMs)`.\n *\n * @param attempt - 1-based attempt number.\n * @param cfg - Carries `baseDelayMs` (default 500) and `maxDelayMs` (default 30_000).\n * @returns The (un-jittered) delay in ms.\n */\nexport const computeBackoff = (attempt: number, cfg: BackoffConfig): number => {\n const base = cfg.baseDelayMs ?? 500\n const max = cfg.maxDelayMs ?? 30_000\n return Math.min(base * Math.pow(2, attempt - 1), max)\n}\n\n/**\n * Abort-aware jittered sleep used for retry backoff.\n *\n * @remarks\n * Resolves (never rejects) the instant `signal` aborts, so an aborted caller does not stay parked\n * in a backoff delay — the caller's retry loop re-checks abort state immediately after and bails.\n * The timer and the abort listener are both torn down on whichever fires first, so nothing leaks.\n *\n * @param ms - Base delay in ms; jittered by ±10%.\n * @param signal - Optional abort signal that short-circuits the sleep.\n */\nexport const sleepWithJitter = (ms: number, signal?: AbortSignal): Promise<void> => {\n const jittered = ms * (0.9 + Math.random() * 0.2)\n return new Promise((resolve) => {\n if (signal?.aborted) {\n resolve()\n return\n }\n let onAbort: (() => void) | undefined\n const timer = setTimeout(() => {\n if (onAbort && signal) signal.removeEventListener('abort', onAbort)\n resolve()\n }, jittered)\n if (signal) {\n onAbort = () => {\n clearTimeout(timer)\n resolve()\n }\n signal.addEventListener('abort', onAbort, { once: true })\n }\n })\n}\n\n/**\n * Parses an HTTP `Retry-After` header value (delta-seconds or HTTP-date) into milliseconds.\n *\n * @param raw - The header value.\n * @returns Milliseconds to wait, or `0` when the value cannot be parsed or is in the past.\n */\nexport const parseRetryAfter = (raw: string): number => {\n const asNum = Number(raw)\n if (Number.isFinite(asNum)) return asNum * 1000\n const asDate = Date.parse(raw)\n if (Number.isFinite(asDate)) return Math.max(0, asDate - Date.now())\n return 0\n}\n\n/**\n * Combines several abort signals into one.\n *\n * @remarks\n * Returns the linked signal plus a `dispose` that detaches any listeners the fallback path\n * attached, so repeated links on a long-lived signal (one per retry attempt) do not accumulate\n * listeners. The native `AbortSignal.any` path self-manages its listeners, so `dispose` is a no-op\n * there.\n *\n * @param signals - The signals to combine.\n * @returns The linked signal and a `dispose` to tear down fallback listeners.\n */\nexport const linkAbortSignals = (\n signals: ReadonlyArray<AbortSignal>\n): { signal: AbortSignal; dispose: () => void } => {\n const anyFn = (AbortSignal as unknown as { any?: (sigs: AbortSignal[]) => AbortSignal }).any\n if (typeof anyFn === 'function') {\n return { signal: anyFn(signals as AbortSignal[]), dispose: () => {} }\n }\n // Fallback for older runtimes: hand-link via a fresh controller.\n const ctrl = new AbortController()\n const links: Array<{ sig: AbortSignal; handler: () => void }> = []\n for (const sig of signals) {\n if (sig.aborted) {\n ctrl.abort()\n break\n }\n const handler = () => ctrl.abort()\n sig.addEventListener('abort', handler, { once: true })\n links.push({ sig, handler })\n }\n return {\n signal: ctrl.signal,\n dispose: () => {\n for (const { sig, handler } of links) sig.removeEventListener('abort', handler)\n links.length = 0\n },\n }\n}\n"],"mappings":";;;;;;;;AA6BA,IAAa,kBAAkB,SAAiB,QAA+B;CAC7E,MAAM,OAAO,IAAI,eAAe;CAChC,MAAM,MAAM,IAAI,cAAc;CAC9B,OAAO,KAAK,IAAI,OAAO,KAAK,IAAI,GAAG,UAAU,CAAC,GAAG,GAAG;AACtD;;;;;;;;;;;;AAaA,IAAa,mBAAmB,IAAY,WAAwC;CAClF,MAAM,WAAW,MAAM,KAAM,KAAK,OAAO,IAAI;CAC7C,OAAO,IAAI,SAAS,YAAY;EAC9B,IAAI,QAAQ,SAAS;GACnB,QAAQ;GACR;EACF;EACA,IAAI;EACJ,MAAM,QAAQ,iBAAiB;GAC7B,IAAI,WAAW,QAAQ,OAAO,oBAAoB,SAAS,OAAO;GAClE,QAAQ;EACV,GAAG,QAAQ;EACX,IAAI,QAAQ;GACV,gBAAgB;IACd,aAAa,KAAK;IAClB,QAAQ;GACV;GACA,OAAO,iBAAiB,SAAS,SAAS,EAAE,MAAM,KAAK,CAAC;EAC1D;CACF,CAAC;AACH;;;;;;;AAQA,IAAa,mBAAmB,QAAwB;CACtD,MAAM,QAAQ,OAAO,GAAG;CACxB,IAAI,OAAO,SAAS,KAAK,GAAG,OAAO,QAAQ;CAC3C,MAAM,SAAS,KAAK,MAAM,GAAG;CAC7B,IAAI,OAAO,SAAS,MAAM,GAAG,OAAO,KAAK,IAAI,GAAG,SAAS,KAAK,IAAI,CAAC;CACnE,OAAO;AACT;;;;;;;;;;;;;AAcA,IAAa,oBACX,YACiD;CACjD,MAAM,QAAS,YAA0E;CACzF,IAAI,OAAO,UAAU,YACnB,OAAO;EAAE,QAAQ,MAAM,OAAwB;EAAG,eAAe,CAAC;CAAE;CAGtE,MAAM,OAAO,IAAI,gBAAgB;CACjC,MAAM,QAA0D,CAAC;CACjE,KAAK,MAAM,OAAO,SAAS;EACzB,IAAI,IAAI,SAAS;GACf,KAAK,MAAM;GACX;EACF;EACA,MAAM,gBAAgB,KAAK,MAAM;EACjC,IAAI,iBAAiB,SAAS,SAAS,EAAE,MAAM,KAAK,CAAC;EACrD,MAAM,KAAK;GAAE;GAAK;EAAQ,CAAC;CAC7B;CACA,OAAO;EACL,QAAQ,KAAK;EACb,eAAe;GACb,KAAK,MAAM,EAAE,KAAK,aAAa,OAAO,IAAI,oBAAoB,SAAS,OAAO;GAC9E,MAAM,SAAS;EACjB;CACF;AACF"}
|