@nhtio/adk 0.1.0-master-2a4e1bd2 → 0.1.0-master-cd595e6f
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 +40 -0
- package/artifact_methods-CJDQ5Lv-.mjs +1 -0
- package/artifact_methods-D6k_82r3.js +1 -0
- package/batteries/artifacts/ecmascript.cjs +1 -1
- package/batteries/artifacts/ecmascript.mjs +1 -1
- package/batteries/artifacts/toon.cjs +1 -1
- package/batteries/artifacts/toon.mjs +1 -1
- package/batteries/artifacts/xml.cjs +1 -1
- package/batteries/artifacts/xml.mjs +1 -1
- package/batteries/artifacts/yaml.cjs +1 -1
- package/batteries/artifacts/yaml.mjs +1 -1
- package/batteries/artifacts.cjs +4 -4
- package/batteries/artifacts.mjs +4 -4
- package/batteries/dev-tools/forge.cjs +3 -3
- package/batteries/dev-tools/forge.mjs +3 -3
- package/batteries/dev-tools.cjs +2 -2
- package/batteries/dev-tools.mjs +2 -2
- package/batteries/encoding.cjs +7 -7
- package/batteries/encoding.mjs +7 -7
- package/batteries/generation/gemini/adapter.cjs +1 -1
- package/batteries/generation/gemini/adapter.mjs +1 -1
- package/batteries/generation/local_diffusion/adapter.cjs +1 -1
- package/batteries/generation/local_diffusion/adapter.mjs +1 -1
- package/batteries/generation/openai/adapter.cjs +1 -1
- package/batteries/generation/openai/adapter.mjs +1 -1
- package/batteries/isolation/browser.d.ts +1 -1
- package/batteries/isolation/child_process/transport.d.ts +2 -2
- package/batteries/isolation/child_process.cjs +4 -4
- package/batteries/isolation/child_process.cjs.map +1 -1
- package/batteries/isolation/child_process.mjs +4 -4
- package/batteries/isolation/child_process.mjs.map +1 -1
- package/batteries/isolation/codec.d.ts +2 -2
- package/batteries/isolation/crash_policy.d.ts +1 -1
- package/batteries/isolation/isolate_function.d.ts +2 -2
- package/batteries/isolation/protocol.d.ts +4 -4
- package/batteries/isolation/serve.d.ts +2 -2
- package/batteries/isolation/types.d.ts +4 -4
- package/batteries/isolation.cjs +1 -1
- package/batteries/isolation.mjs +1 -1
- package/batteries/llm/anthropic_messages/adapter.cjs +6 -6
- package/batteries/llm/anthropic_messages/adapter.cjs.map +1 -1
- package/batteries/llm/anthropic_messages/adapter.mjs +6 -6
- package/batteries/llm/anthropic_messages/adapter.mjs.map +1 -1
- package/batteries/llm/anthropic_messages/count_tokens.cjs +1 -1
- package/batteries/llm/anthropic_messages/count_tokens.mjs +1 -1
- package/batteries/llm/anthropic_messages/helpers.cjs +3 -3
- package/batteries/llm/anthropic_messages/helpers.mjs +3 -3
- package/batteries/llm/anthropic_messages/types.d.ts +2 -2
- package/batteries/llm/anthropic_messages/validation.cjs +3 -3
- package/batteries/llm/anthropic_messages/validation.cjs.map +1 -1
- package/batteries/llm/anthropic_messages/validation.mjs +3 -3
- package/batteries/llm/anthropic_messages/validation.mjs.map +1 -1
- package/batteries/llm/anthropic_messages.cjs +2 -2
- package/batteries/llm/anthropic_messages.mjs +2 -2
- package/batteries/llm/bedrock_converse/adapter.cjs +29 -7
- package/batteries/llm/bedrock_converse/adapter.cjs.map +1 -1
- package/batteries/llm/bedrock_converse/adapter.mjs +30 -8
- package/batteries/llm/bedrock_converse/adapter.mjs.map +1 -1
- package/batteries/llm/bedrock_converse/exceptions.cjs +3 -0
- package/batteries/llm/bedrock_converse/exceptions.cjs.map +1 -1
- package/batteries/llm/bedrock_converse/exceptions.d.ts +6 -0
- package/batteries/llm/bedrock_converse/exceptions.mjs +3 -1
- package/batteries/llm/bedrock_converse/exceptions.mjs.map +1 -1
- package/batteries/llm/bedrock_converse/helpers.cjs +1 -1
- package/batteries/llm/bedrock_converse/helpers.mjs +1 -1
- package/batteries/llm/bedrock_converse/types.d.ts +6 -2
- package/batteries/llm/bedrock_converse/validation.cjs +7 -1
- package/batteries/llm/bedrock_converse/validation.cjs.map +1 -1
- package/batteries/llm/bedrock_converse/validation.mjs +7 -1
- package/batteries/llm/bedrock_converse/validation.mjs.map +1 -1
- package/batteries/llm/bedrock_converse.cjs +2 -2
- package/batteries/llm/bedrock_converse.mjs +2 -2
- package/batteries/llm/claude_code_cli/adapter.cjs +6 -6
- package/batteries/llm/claude_code_cli/adapter.cjs.map +1 -1
- package/batteries/llm/claude_code_cli/adapter.mjs +6 -6
- package/batteries/llm/claude_code_cli/adapter.mjs.map +1 -1
- package/batteries/llm/claude_code_cli/helpers.cjs +3 -3
- package/batteries/llm/claude_code_cli/helpers.mjs +3 -3
- package/batteries/llm/claude_code_cli/types.d.ts +3 -2
- package/batteries/llm/claude_code_cli/validation.cjs +3 -3
- package/batteries/llm/claude_code_cli/validation.cjs.map +1 -1
- package/batteries/llm/claude_code_cli/validation.mjs +3 -3
- package/batteries/llm/claude_code_cli/validation.mjs.map +1 -1
- package/batteries/llm/claude_code_cli.cjs +1 -1
- package/batteries/llm/claude_code_cli.mjs +1 -1
- package/batteries/llm/gemini_generate_content/adapter.cjs +29 -7
- package/batteries/llm/gemini_generate_content/adapter.cjs.map +1 -1
- package/batteries/llm/gemini_generate_content/adapter.mjs +30 -8
- package/batteries/llm/gemini_generate_content/adapter.mjs.map +1 -1
- package/batteries/llm/gemini_generate_content/exceptions.cjs +3 -0
- package/batteries/llm/gemini_generate_content/exceptions.cjs.map +1 -1
- package/batteries/llm/gemini_generate_content/exceptions.d.ts +6 -0
- package/batteries/llm/gemini_generate_content/exceptions.mjs +3 -1
- package/batteries/llm/gemini_generate_content/exceptions.mjs.map +1 -1
- package/batteries/llm/gemini_generate_content/helpers.cjs +1 -1
- package/batteries/llm/gemini_generate_content/helpers.mjs +1 -1
- package/batteries/llm/gemini_generate_content/types.d.ts +7 -3
- package/batteries/llm/gemini_generate_content/validation.cjs +11 -2
- package/batteries/llm/gemini_generate_content/validation.cjs.map +1 -1
- package/batteries/llm/gemini_generate_content/validation.mjs +11 -2
- package/batteries/llm/gemini_generate_content/validation.mjs.map +1 -1
- package/batteries/llm/gemini_generate_content.cjs +1 -1
- package/batteries/llm/gemini_generate_content.mjs +1 -1
- package/batteries/llm/litert_lm/adapter.cjs +6 -6
- package/batteries/llm/litert_lm/adapter.cjs.map +1 -1
- package/batteries/llm/litert_lm/adapter.mjs +6 -6
- package/batteries/llm/litert_lm/adapter.mjs.map +1 -1
- package/batteries/llm/litert_lm/helpers.cjs +3 -3
- package/batteries/llm/litert_lm/helpers.mjs +3 -3
- package/batteries/llm/litert_lm/types.d.ts +2 -2
- package/batteries/llm/litert_lm/validation.cjs +3 -3
- package/batteries/llm/litert_lm/validation.cjs.map +1 -1
- package/batteries/llm/litert_lm/validation.mjs +3 -3
- package/batteries/llm/litert_lm/validation.mjs.map +1 -1
- package/batteries/llm/litert_lm.cjs +1 -1
- package/batteries/llm/litert_lm.mjs +1 -1
- package/batteries/llm/ollama/adapter.cjs +6 -6
- package/batteries/llm/ollama/adapter.cjs.map +1 -1
- package/batteries/llm/ollama/adapter.mjs +6 -6
- package/batteries/llm/ollama/adapter.mjs.map +1 -1
- package/batteries/llm/ollama/helpers.cjs +4 -4
- package/batteries/llm/ollama/helpers.mjs +4 -4
- package/batteries/llm/ollama/types.d.ts +2 -2
- package/batteries/llm/ollama/validation.cjs +3 -3
- package/batteries/llm/ollama/validation.cjs.map +1 -1
- package/batteries/llm/ollama/validation.mjs +3 -3
- package/batteries/llm/ollama/validation.mjs.map +1 -1
- package/batteries/llm/ollama.cjs +2 -2
- package/batteries/llm/ollama.mjs +2 -2
- package/batteries/llm/openai_chat_completions/adapter.cjs +6 -6
- package/batteries/llm/openai_chat_completions/adapter.cjs.map +1 -1
- package/batteries/llm/openai_chat_completions/adapter.mjs +6 -6
- package/batteries/llm/openai_chat_completions/adapter.mjs.map +1 -1
- package/batteries/llm/openai_chat_completions/helpers.cjs +4 -4
- package/batteries/llm/openai_chat_completions/helpers.mjs +4 -4
- package/batteries/llm/openai_chat_completions/types.d.ts +2 -2
- package/batteries/llm/openai_chat_completions/validation.cjs +3 -3
- package/batteries/llm/openai_chat_completions/validation.cjs.map +1 -1
- package/batteries/llm/openai_chat_completions/validation.mjs +3 -3
- package/batteries/llm/openai_chat_completions/validation.mjs.map +1 -1
- package/batteries/llm/openai_chat_completions.cjs +2 -2
- package/batteries/llm/openai_chat_completions.mjs +2 -2
- package/batteries/llm/openai_responses/adapter.cjs +6 -6
- package/batteries/llm/openai_responses/adapter.cjs.map +1 -1
- package/batteries/llm/openai_responses/adapter.mjs +6 -6
- package/batteries/llm/openai_responses/adapter.mjs.map +1 -1
- package/batteries/llm/openai_responses/helpers.cjs +3 -3
- package/batteries/llm/openai_responses/helpers.mjs +3 -3
- package/batteries/llm/openai_responses/types.d.ts +2 -2
- package/batteries/llm/openai_responses/validation.cjs +3 -3
- package/batteries/llm/openai_responses/validation.cjs.map +1 -1
- package/batteries/llm/openai_responses/validation.mjs +3 -3
- package/batteries/llm/openai_responses/validation.mjs.map +1 -1
- package/batteries/llm/openai_responses.cjs +2 -2
- package/batteries/llm/openai_responses.mjs +2 -2
- package/batteries/llm/transformers_js/adapter.cjs +6 -6
- package/batteries/llm/transformers_js/adapter.cjs.map +1 -1
- package/batteries/llm/transformers_js/adapter.mjs +6 -6
- package/batteries/llm/transformers_js/adapter.mjs.map +1 -1
- package/batteries/llm/transformers_js/helpers.cjs +3 -3
- package/batteries/llm/transformers_js/helpers.mjs +3 -3
- package/batteries/llm/transformers_js/types.d.ts +2 -2
- package/batteries/llm/transformers_js/validation.cjs +3 -3
- package/batteries/llm/transformers_js/validation.cjs.map +1 -1
- package/batteries/llm/transformers_js/validation.mjs +3 -3
- package/batteries/llm/transformers_js/validation.mjs.map +1 -1
- package/batteries/llm/transformers_js.cjs +1 -1
- package/batteries/llm/transformers_js.mjs +1 -1
- package/batteries/llm/webllm_chat_completions/adapter.cjs +6 -6
- package/batteries/llm/webllm_chat_completions/adapter.cjs.map +1 -1
- package/batteries/llm/webllm_chat_completions/adapter.mjs +6 -6
- package/batteries/llm/webllm_chat_completions/adapter.mjs.map +1 -1
- package/batteries/llm/webllm_chat_completions/helpers.cjs +1 -1
- package/batteries/llm/webllm_chat_completions/helpers.mjs +1 -1
- package/batteries/llm/webllm_chat_completions/validation.cjs +3 -3
- package/batteries/llm/webllm_chat_completions/validation.cjs.map +1 -1
- package/batteries/llm/webllm_chat_completions/validation.mjs +3 -3
- package/batteries/llm/webllm_chat_completions/validation.mjs.map +1 -1
- package/batteries/llm/webllm_chat_completions.cjs +2 -2
- package/batteries/llm/webllm_chat_completions.mjs +2 -2
- package/batteries/llm.cjs +2 -2
- package/batteries/llm.mjs +2 -2
- package/batteries/media/builder.d.ts +3 -0
- package/batteries/media/contracts.cjs.map +1 -1
- package/batteries/media/contracts.d.ts +40 -1
- package/batteries/media/contracts.mjs.map +1 -1
- package/batteries/media/engines/sharp.cjs +36 -2
- package/batteries/media/engines/sharp.cjs.map +1 -1
- package/batteries/media/engines/sharp.mjs +36 -2
- package/batteries/media/engines/sharp.mjs.map +1 -1
- package/batteries/media/forge.cjs +5 -5
- package/batteries/media/forge.mjs +5 -5
- package/batteries/media/index.d.ts +1 -1
- package/batteries/media/lint.cjs +3 -2
- package/batteries/media/lint.cjs.map +1 -1
- package/batteries/media/lint.mjs +3 -2
- package/batteries/media/lint.mjs.map +1 -1
- package/batteries/media.cjs +66 -2
- package/batteries/media.cjs.map +1 -1
- package/batteries/media.mjs +66 -2
- package/batteries/media.mjs.map +1 -1
- package/batteries/orchestration/conformance.cjs +123 -74
- package/batteries/orchestration/conformance.cjs.map +1 -1
- package/batteries/orchestration/conformance.d.ts +10 -8
- package/batteries/orchestration/conformance.mjs +54 -5
- package/batteries/orchestration/conformance.mjs.map +1 -1
- package/batteries/orchestration/dispatch_reasoner.cjs +4 -4
- package/batteries/orchestration/dispatch_reasoner.mjs +4 -4
- package/batteries/orchestration/executor.cjs +2 -2
- package/batteries/orchestration/executor.mjs +2 -2
- package/batteries/orchestration/forge.cjs +4 -4
- package/batteries/orchestration/forge.mjs +4 -4
- package/batteries/orchestration/validation.cjs +2 -2
- package/batteries/orchestration/validation.mjs +2 -2
- package/batteries/orchestration.cjs +4 -4
- package/batteries/orchestration.mjs +4 -4
- package/batteries/sandbox/contracts/policy_enforcer.d.ts +13 -1
- package/batteries/sandbox/js/compartment.d.ts +7 -2
- package/batteries/sandbox/js/exceptions.d.ts +4 -0
- package/batteries/sandbox/js/runner.d.ts +1 -1
- package/batteries/sandbox/js/service.d.ts +1 -1
- package/batteries/sandbox/js/ses_contracts.d.ts +4 -3
- package/batteries/sandbox/js.cjs +17 -8
- package/batteries/sandbox/js.cjs.map +1 -1
- package/batteries/sandbox/js.mjs +17 -9
- package/batteries/sandbox/js.mjs.map +1 -1
- package/batteries/sandbox/manager.d.ts +4 -3
- package/batteries/sandbox/node/srt_enforcer.d.ts +1 -1
- package/batteries/sandbox/node.cjs +36 -12
- package/batteries/sandbox/node.cjs.map +1 -1
- package/batteries/sandbox/node.mjs +36 -12
- package/batteries/sandbox/node.mjs.map +1 -1
- package/batteries/sandbox/tools.cjs +1 -1
- package/batteries/sandbox/tools.mjs +1 -1
- package/batteries/sandbox/types.d.ts +10 -1
- package/batteries/sandbox.cjs +27 -9
- package/batteries/sandbox.cjs.map +1 -1
- package/batteries/sandbox.mjs +28 -11
- package/batteries/sandbox.mjs.map +1 -1
- package/batteries/skills.cjs +9 -9
- package/batteries/skills.mjs +9 -9
- package/batteries/tools/_shared.cjs +1 -1
- package/batteries/tools/_shared.mjs +1 -1
- package/batteries/tools/color.cjs +2 -2
- package/batteries/tools/color.mjs +2 -2
- package/batteries/tools/comparison.cjs +2 -2
- package/batteries/tools/comparison.mjs +2 -2
- package/batteries/tools/data_structure.cjs +2 -2
- package/batteries/tools/data_structure.mjs +2 -2
- package/batteries/tools/datetime_extended.cjs +3 -3
- package/batteries/tools/datetime_extended.mjs +3 -3
- package/batteries/tools/datetime_math.cjs +3 -3
- package/batteries/tools/datetime_math.mjs +3 -3
- package/batteries/tools/encoding.cjs +2 -2
- package/batteries/tools/encoding.mjs +2 -2
- package/batteries/tools/formatting.cjs +2 -2
- package/batteries/tools/formatting.mjs +2 -2
- package/batteries/tools/geo_basics.cjs +2 -2
- package/batteries/tools/geo_basics.mjs +2 -2
- package/batteries/tools/math.cjs +2 -2
- package/batteries/tools/math.mjs +2 -2
- package/batteries/tools/memory.cjs +5 -5
- package/batteries/tools/memory.mjs +5 -5
- package/batteries/tools/parsing.cjs +3 -3
- package/batteries/tools/parsing.mjs +3 -3
- package/batteries/tools/retrievables.cjs +5 -5
- package/batteries/tools/retrievables.mjs +5 -5
- package/batteries/tools/scrapper.cjs +1 -1
- package/batteries/tools/scrapper.mjs +1 -1
- package/batteries/tools/searxng.cjs +1 -1
- package/batteries/tools/searxng.mjs +1 -1
- package/batteries/tools/standing_instructions.cjs +3 -3
- package/batteries/tools/standing_instructions.mjs +3 -3
- package/batteries/tools/statistics.cjs +3 -3
- package/batteries/tools/statistics.mjs +3 -3
- package/batteries/tools/string_processing.cjs +2 -2
- package/batteries/tools/string_processing.mjs +2 -2
- package/batteries/tools/structured_data.cjs +2 -2
- package/batteries/tools/structured_data.mjs +2 -2
- 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 +3 -3
- package/batteries/tools/time.mjs +3 -3
- package/batteries/tools/unit_conversion.cjs +2 -2
- package/batteries/tools/unit_conversion.mjs +2 -2
- package/batteries/tools.cjs +2 -2
- package/batteries/tools.mjs +2 -2
- package/batteries/validation.cjs +5 -5
- package/batteries/validation.mjs +5 -5
- package/batteries/vector/conformance/index.d.ts +11 -16
- package/batteries/vector/conformance.cjs +107 -36
- package/batteries/vector/conformance.cjs.map +1 -1
- package/batteries/vector/conformance.mjs +84 -13
- package/batteries/vector/conformance.mjs.map +1 -1
- package/batteries/vector/retrievable.cjs +1 -1
- package/batteries/vector/retrievable.mjs +1 -1
- package/batteries.cjs +5 -5
- package/batteries.mjs +5 -5
- package/{chat_common-DbbIESdo.mjs → chat_common-CmKV5Dz4.mjs} +2 -2
- package/{chat_common-DbbIESdo.mjs.map → chat_common-CmKV5Dz4.mjs.map} +1 -1
- package/{chat_common-B3O3zz-i.js → chat_common-Dpan9moo.js} +2 -2
- package/{chat_common-B3O3zz-i.js.map → chat_common-Dpan9moo.js.map} +1 -1
- package/{common-v9Jo9M5k.mjs → common-BpdHIpQE.mjs} +7 -7
- package/{common-v9Jo9M5k.mjs.map → common-BpdHIpQE.mjs.map} +1 -1
- package/{common-BV3HGeLj.js → common-H44Ik9ou.js} +7 -7
- package/{common-BV3HGeLj.js.map → common-H44Ik9ou.js.map} +1 -1
- package/common.cjs +7 -7
- package/common.mjs +7 -7
- package/{dispatch_runner-CbNyqSMy.mjs → dispatch_runner-BZDXUe0G.mjs} +5 -5
- package/{dispatch_runner-CbNyqSMy.mjs.map → dispatch_runner-BZDXUe0G.mjs.map} +1 -1
- package/{dispatch_runner-Bl3Xwebu.js → dispatch_runner-CKhm-scw.js} +5 -5
- package/{dispatch_runner-Bl3Xwebu.js.map → dispatch_runner-CKhm-scw.js.map} +1 -1
- package/dispatch_runner.cjs +1 -1
- package/dispatch_runner.mjs +1 -1
- package/{ecmascript-BSnvyY8T.js → ecmascript-CCtgamDh.js} +3 -3
- package/{ecmascript-BSnvyY8T.js.map → ecmascript-CCtgamDh.js.map} +1 -1
- package/{ecmascript-CZ7_YKfZ.mjs → ecmascript-DcmUQ9Jx.mjs} +3 -3
- package/{ecmascript-CZ7_YKfZ.mjs.map → ecmascript-DcmUQ9Jx.mjs.map} +1 -1
- package/eslint.cjs +1 -1
- package/eslint.mjs +1 -1
- package/exceptions.cjs +1 -1
- package/exceptions.mjs +1 -1
- package/forge.cjs +2 -2
- package/forge.mjs +2 -2
- package/guards.cjs +7 -7
- package/guards.mjs +7 -7
- package/{helpers-CDmLDBq5.mjs → helpers-BH7HTtkD.mjs} +3 -3
- package/{helpers-CDmLDBq5.mjs.map → helpers-BH7HTtkD.mjs.map} +1 -1
- package/{helpers-Tvvwpx1M.js → helpers-CEjjkXso.js} +3 -3
- package/{helpers-Tvvwpx1M.js.map → helpers-CEjjkXso.js.map} +1 -1
- package/index.cjs +10 -10
- package/index.mjs +10 -10
- package/{isolation-BQCTQYZ_.js → isolation-7Jrcucgc.js} +11 -11
- package/isolation-7Jrcucgc.js.map +1 -0
- package/{isolation-7xbkc12r.mjs → isolation-CO0NiK8R.mjs} +11 -11
- package/isolation-CO0NiK8R.mjs.map +1 -0
- package/lib/classes/tokenizable.d.ts +2 -3
- package/mcp/adk-docs-corpus.json +2 -2
- package/package.json +469 -469
- package/{retrievable-C5dXuDhD.js → retrievable-BTwjmPnl.js} +3 -3
- package/{retrievable-C5dXuDhD.js.map → retrievable-BTwjmPnl.js.map} +1 -1
- package/{retrievable-gl_TIHnX.mjs → retrievable-CXTAUuuv.mjs} +3 -3
- package/{retrievable-gl_TIHnX.mjs.map → retrievable-CXTAUuuv.mjs.map} +1 -1
- package/{scrapper-DD6-_2u-.js → scrapper-CJexXXK-.js} +4 -4
- package/{scrapper-DD6-_2u-.js.map → scrapper-CJexXXK-.js.map} +1 -1
- package/{scrapper-u_orpxIB.mjs → scrapper-DiQ5FfDL.mjs} +4 -4
- package/{scrapper-u_orpxIB.mjs.map → scrapper-DiQ5FfDL.mjs.map} +1 -1
- package/{searxng-fVdJUCK2.mjs → searxng-BFTJ6rTE.mjs} +4 -4
- package/{searxng-fVdJUCK2.mjs.map → searxng-BFTJ6rTE.mjs.map} +1 -1
- package/{searxng-C7GK0Nrz.js → searxng-DzlGZG4V.js} +4 -4
- package/{searxng-C7GK0Nrz.js.map → searxng-DzlGZG4V.js.map} +1 -1
- package/server.json +2 -2
- package/skills/adk-assembly/SKILL.md +2 -2
- package/{spooled_artifact-DriNQRj7.js → spooled_artifact-BpcesRBv.js} +384 -384
- package/spooled_artifact-BpcesRBv.js.map +1 -0
- package/{spooled_artifact-BkueYJhR.mjs → spooled_artifact-Bw_7swIp.mjs} +385 -385
- package/spooled_artifact-Bw_7swIp.mjs.map +1 -0
- package/spooled_artifact.cjs +2 -2
- package/spooled_artifact.mjs +2 -2
- package/{spooled_markdown_artifact-CfHRZUkl.mjs → spooled_markdown_artifact-vd6eNtIP.mjs} +3 -3
- package/{spooled_markdown_artifact-CfHRZUkl.mjs.map → spooled_markdown_artifact-vd6eNtIP.mjs.map} +1 -1
- package/{spooled_markdown_artifact-C_VkCDhF.js → spooled_markdown_artifact-wJPnE8Ij.js} +3 -3
- package/{spooled_markdown_artifact-C_VkCDhF.js.map → spooled_markdown_artifact-wJPnE8Ij.js.map} +1 -1
- package/{thought-B8JAi3-W.mjs → thought-BE1KGEhV.mjs} +3 -3
- package/{thought-B8JAi3-W.mjs.map → thought-BE1KGEhV.mjs.map} +1 -1
- package/{thought--fRgOwTP.js → thought-bS7O9O5H.js} +3 -3
- package/{thought--fRgOwTP.js.map → thought-bS7O9O5H.js.map} +1 -1
- package/{tokenizable-CWW7iSrD.js → tokenizable-BMZuGWRd.js} +35 -29
- package/tokenizable-BMZuGWRd.js.map +1 -0
- package/{tokenizable-DLMP68ZV.mjs → tokenizable-VB4Av8GF.mjs} +36 -30
- package/tokenizable-VB4Av8GF.mjs.map +1 -0
- package/{tool_call-CPjyvkm4.mjs → tool_call-Cfaj-6zK.mjs} +4 -4
- package/{tool_call-CPjyvkm4.mjs.map → tool_call-Cfaj-6zK.mjs.map} +1 -1
- package/{tool_call-DgqVwL5n.js → tool_call-Fs_Uh5wQ.js} +4 -4
- package/{tool_call-DgqVwL5n.js.map → tool_call-Fs_Uh5wQ.js.map} +1 -1
- package/{tools-BmLzkvNr.mjs → tools-B3_8C78Q.mjs} +6 -6
- package/{tools-BmLzkvNr.mjs.map → tools-B3_8C78Q.mjs.map} +1 -1
- package/{tools-DmcIe2Cb.js → tools-CqOcmHR8.js} +6 -6
- package/{tools-DmcIe2Cb.js.map → tools-CqOcmHR8.js.map} +1 -1
- package/{toon-BvTQsKdN.mjs → toon-BSlr88px.mjs} +5 -5
- package/{toon-BvTQsKdN.mjs.map → toon-BSlr88px.mjs.map} +1 -1
- package/{toon-B05eKx-q.js → toon-D71tkyI3.js} +5 -5
- package/{toon-B05eKx-q.js.map → toon-D71tkyI3.js.map} +1 -1
- package/{turn_runner-DEGCvfVZ.mjs → turn_runner-BHHD6h77.mjs} +5 -5
- package/{turn_runner-DEGCvfVZ.mjs.map → turn_runner-BHHD6h77.mjs.map} +1 -1
- package/{turn_runner-DT8TseR4.js → turn_runner-DhLI7OTH.js} +5 -5
- package/{turn_runner-DT8TseR4.js.map → turn_runner-DhLI7OTH.js.map} +1 -1
- package/turn_runner.cjs +1 -1
- package/turn_runner.mjs +1 -1
- package/types-D6X_aUIb.mjs.map +1 -1
- package/types-DrSosVaM.js.map +1 -1
- package/{validate-lzy9nG_E.mjs → validate-Bi7FGjoq.mjs} +13 -1
- package/{validate-lzy9nG_E.mjs.map → validate-Bi7FGjoq.mjs.map} +1 -1
- package/{validate-CdOS7S2u.js → validate-CkQI-48O.js} +13 -1
- package/{validate-CdOS7S2u.js.map → validate-CkQI-48O.js.map} +1 -1
- package/{xml-DDTIMpY3.js → xml-BeNvlifb.js} +5 -5
- package/{xml-DDTIMpY3.js.map → xml-BeNvlifb.js.map} +1 -1
- package/{xml-VhJ4NrMB.mjs → xml-vyCZZiF_.mjs} +5 -5
- package/{xml-VhJ4NrMB.mjs.map → xml-vyCZZiF_.mjs.map} +1 -1
- package/{yaml-Cx16IYJq.js → yaml-DhLLa2cj.js} +5 -5
- package/{yaml-Cx16IYJq.js.map → yaml-DhLLa2cj.js.map} +1 -1
- package/{yaml-Du4wFGzL.mjs → yaml-Dtz0Bd7J.mjs} +5 -5
- package/{yaml-Du4wFGzL.mjs.map → yaml-Dtz0Bd7J.mjs.map} +1 -1
- package/artifact_methods-BMCahBLn.mjs +0 -1
- package/artifact_methods-f_bSy4kX.js +0 -1
- package/isolation-7xbkc12r.mjs.map +0 -1
- package/isolation-BQCTQYZ_.js.map +0 -1
- package/spooled_artifact-BkueYJhR.mjs.map +0 -1
- package/spooled_artifact-DriNQRj7.js.map +0 -1
- package/tokenizable-CWW7iSrD.js.map +0 -1
- package/tokenizable-DLMP68ZV.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.cjs","names":[],"sources":["../../../../src/batteries/llm/anthropic_messages/validation.ts"],"sourcesContent":["/**\n * Runtime validation schema and wrapper for Anthropic Messages adapter options.\n *\n * @module @nhtio/adk/batteries/llm/anthropic_messages/validation\n *\n * @remarks\n * Schema and call-site wrapper for validating `AnthropicMessagesAdapterOptions`. Used at\n * construction time and at the start of every iteration against the merged options shape. Throws\n * `E_INVALID_ANTHROPIC_MESSAGES_OPTIONS` on failure, matching the hard-fail policy of the sibling\n * HTTP batteries.\n *\n * Note the deliberate `.unknown(...)` asymmetry: the top level is `.unknown(false)` so option typos\n * fail loud, but provider-owned passthrough blocks are `.unknown(true)` so SDK-supported additions\n * can pass through without a library bump.\n */\n\nimport { validator, ValidationError } from '@nhtio/validation'\nimport { byteStoreSchema, TokenEncoding } from '@nhtio/adk/common'\nimport { E_INVALID_ANTHROPIC_MESSAGES_OPTIONS } from './exceptions'\nimport type { AnthropicMessagesAdapterOptions } from './types'\n\n// ─── Sub-schemas ──────────────────────────────────────────────────────────────\n\nconst providerObjectSchema = validator.object().unknown(true)\n\nconst bucketLabelSchema = validator\n .string()\n .valid('standingInstructions', 'memories', 'retrievables', 'timeline')\n\nconst bucketOrderSchema = validator\n .array()\n .items(bucketLabelSchema)\n .unique()\n .default(['standingInstructions', 'memories', 'retrievables', 'timeline'])\n\nconst tokenEncodingSchema = validator\n .alternatives(\n // Derive from the canonical TokenEncoding array as the accepted CONTRIBUTING number 13 carve-out.\n validator.string().valid(...TokenEncoding),\n // `tokenEncoding?: TokenEncoding | null` accepts a valid encoding string, explicit null, or\n // absence. `.optional()` makes the null disposition explicit for adk/require-validator-any-required.\n validator.any().valid(null).optional()\n )\n .default(null)\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, 502, 503, 504, 529]),\n honorRetryAfter: validator.boolean().default(true),\n })\n .unknown(false)\n\nconst localToolCallParserSchema = validator\n .alternatives(\n validator\n .string()\n .valid(\n 'auto',\n 'hermes',\n 'gemma',\n 'gpt_oss',\n 'pythonic',\n 'bare_pythonic',\n 'loose_keyed',\n 'llama3_json',\n 'mistral',\n 'qwen3_coder',\n 'phi',\n 'none'\n ),\n validator.function()\n )\n .optional()\n\nconst helperSchema = validator.function()\n\nconst helpersSchema = validator\n .object({\n descriptionToChatCompletionsJsonSchema: helperSchema.optional(),\n renderUntrustedContent: helperSchema.optional(),\n renderTrustedContent: helperSchema.optional(),\n renderStandingInstructions: helperSchema.optional(),\n renderMemories: helperSchema.optional(),\n renderRetrievables: helperSchema.optional(),\n renderRetrievableHandleBody: helperSchema.optional(),\n renderRetrievableSafetyDirective: helperSchema.optional(),\n renderFirstPartyRetrievables: helperSchema.optional(),\n renderThirdPartyPublicRetrievables: helperSchema.optional(),\n renderThirdPartyPrivateRetrievables: helperSchema.optional(),\n renderThought: helperSchema.optional(),\n filterThoughts: helperSchema.optional(),\n toolsToChatCompletionsTools: helperSchema.optional(),\n renderChatCompletionsSystemPrompt: helperSchema.optional(),\n anthropicToolsFromTools: helperSchema.optional(),\n renderAnthropicTimelineMessage: helperSchema.optional(),\n renderAnthropicMediaBlocks: helperSchema.optional(),\n renderAnthropicToolCallResult: helperSchema.optional(),\n renderAnthropicSegmentedSystemPrompt: helperSchema.optional(),\n renderAnthropicThinkingBlocks: helperSchema.optional(),\n buildAnthropicMessagesHistory: helperSchema.optional(),\n })\n .unknown(false)\n\nconst unsupportedMediaPolicySchema = validator\n .alternatives(\n validator.string().valid('throw', 'fallback-stash', 'synthetic-description'),\n validator\n .object({\n mode: validator.string().valid('fallback-stash').required(),\n stashKeys: validator.array().items(validator.string().min(1)).required(),\n })\n .unknown(false)\n )\n .default('throw')\n\nconst thinkingSchema = validator\n .alternatives(\n validator\n .object({\n type: validator.string().valid('enabled').required(),\n // The wire requires at least 1024 (SDK: \"Must be 1024 or more and less than max_tokens\").\n // Rejecting a smaller value here is not request repair — it is refusing to send a request the\n // API is guaranteed to reject, with a validation error the caller can act on instead of a 400.\n budget_tokens: validator.number().integer().min(1024).required(),\n display: validator.string().valid('summarized', 'omitted').allow(null).optional(),\n })\n .unknown(true),\n validator\n .object({\n type: validator.string().valid('disabled').required(),\n })\n .unknown(true),\n validator\n .object({\n type: validator.string().valid('adaptive').required(),\n display: validator.string().valid('summarized', 'omitted').allow(null).optional(),\n })\n .unknown(true)\n )\n .optional()\n\nconst toolChoiceSchema = validator\n .alternatives(\n validator\n .object({\n type: validator.string().valid('auto').required(),\n disable_parallel_tool_use: validator.boolean().optional(),\n })\n .unknown(true),\n validator\n .object({\n type: validator.string().valid('any').required(),\n disable_parallel_tool_use: validator.boolean().optional(),\n })\n .unknown(true),\n validator\n .object({\n type: validator.string().valid('tool').required(),\n name: validator.string().min(1).required(),\n disable_parallel_tool_use: validator.boolean().optional(),\n })\n .unknown(true),\n validator\n .object({\n type: validator.string().valid('none').required(),\n })\n .unknown(true)\n )\n .optional()\n\nconst outputConfigSchema = validator\n .object({\n effort: validator\n .string()\n .valid('low', 'medium', 'high', 'xhigh', 'max')\n .allow(null)\n .optional(),\n format: providerObjectSchema.allow(null).optional(),\n })\n .unknown(true)\n\nconst headersSchema = validator.object().pattern(validator.string(), validator.string())\n\n// ─── Top-level schema ─────────────────────────────────────────────────────────\n\n/**\n * Validator schema for `AnthropicMessagesAdapterOptions`. Used by `validateOptions` at construction\n * time and again at the start of every iteration after options have been merged. Rejects unknown\n * top-level keys so typos fail loud.\n */\nexport const anthropicMessagesOptionsSchema = validator\n .object<AnthropicMessagesAdapterOptions>({\n // ADK control and HTTP transport\n apiKey: validator.string().optional(),\n baseURL: validator.string().optional(),\n headers: headersSchema.optional(),\n fetch: validator.function().optional(),\n stream: validator.boolean().default(true),\n streamIdleTimeoutMs: validator.number().integer().min(0).default(0),\n requestTimeoutMs: validator.number().integer().min(0).default(0),\n retry: retrySchema.default({}),\n // Consumer hook; validated as a function only. Its RETURN value is range-checked at call time\n // in error_translation.ts, because a schema cannot police what a function does at runtime.\n resolveErrorStatus: validator.function().optional(),\n bucketOrder: bucketOrderSchema,\n contextWindow: validator.number().integer().min(1).optional(),\n selfIdentity: validator.string().min(1).default('assistant'),\n thoughtSurfacing: validator\n .string()\n .valid('all-self', 'latest-self', 'all')\n .default('all-self'),\n tokenEncoding: tokenEncodingSchema,\n replayCompatibility: validator.array().items(validator.string().min(1)).default([]),\n helpers: helpersSchema.optional(),\n spoolStore: byteStoreSchema.optional(),\n autoAck: validator.boolean().default(false),\n unsupportedMediaPolicy: unsupportedMediaPolicySchema,\n\n // Anthropic Messages request surface\n model: validator.string().required(),\n maxTokens: validator.number().integer().min(0).required(),\n stopSequences: validator.array().items(validator.string()).optional(),\n thinking: thinkingSchema,\n outputConfig: outputConfigSchema.optional(),\n toolChoice: toolChoiceSchema,\n dangerouslyAllowBrowser: validator.boolean().default(false),\n cacheBreakpoints: validator.string().valid('auto', 'system-only', 'off').default('auto'),\n cacheTtl: validator.string().valid('5m', '1h').optional(),\n metadata: providerObjectSchema.optional(),\n serviceTier: validator.string().valid('auto', 'standard_only').optional(),\n container: validator\n .alternatives(validator.string(), validator.any().valid(null).optional())\n .optional(),\n inferenceGeo: validator\n .alternatives(validator.string(), validator.any().valid(null).optional())\n .optional(),\n userProfileId: validator.string().optional(),\n // Deprecated sampling parameters are intentionally optional and never defaulted.\n temperature: validator.number().optional(),\n topP: validator.number().optional(),\n topK: validator.number().optional(),\n onRawGeneration: validator.function().optional(),\n onPromptAssembled: validator.function().optional(),\n localToolCallParser: localToolCallParserSchema,\n toolCallIdFilter: validator.function().optional(),\n })\n .unknown(false)\n\nconst formatValidationDetails = (err: ValidationError): string =>\n err.details.map((d) => d.message).join(' and ')\n\n/**\n * Validates arbitrary input against `anthropicMessagesOptionsSchema` and returns resolved options.\n * Throws `E_INVALID_ANTHROPIC_MESSAGES_OPTIONS` with validator details 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): AnthropicMessagesAdapterOptions => {\n const { value, error } = anthropicMessagesOptionsSchema.validate(input, {\n abortEarly: false,\n convert: false,\n })\n if (error) {\n throw new E_INVALID_ANTHROPIC_MESSAGES_OPTIONS([formatValidationDetails(error)], {\n cause: error,\n })\n }\n return value as AnthropicMessagesAdapterOptions\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"validation.cjs","names":[],"sources":["../../../../src/batteries/llm/anthropic_messages/validation.ts"],"sourcesContent":["/**\n * Runtime validation schema and wrapper for Anthropic Messages adapter options.\n *\n * @module @nhtio/adk/batteries/llm/anthropic_messages/validation\n *\n * @remarks\n * Schema and call-site wrapper for validating `AnthropicMessagesAdapterOptions`. Used at\n * construction time and at the start of every iteration against the merged options shape. Throws\n * `E_INVALID_ANTHROPIC_MESSAGES_OPTIONS` on failure, matching the hard-fail policy of the sibling\n * HTTP batteries.\n *\n * Note the deliberate `.unknown(...)` asymmetry: the top level is `.unknown(false)` so option typos\n * fail loud, but provider-owned passthrough blocks are `.unknown(true)` so SDK-supported additions\n * can pass through without a library bump.\n */\n\nimport { validator, ValidationError } from '@nhtio/validation'\nimport { byteStoreSchema, TokenEncoding } from '@nhtio/adk/common'\nimport { E_INVALID_ANTHROPIC_MESSAGES_OPTIONS } from './exceptions'\nimport type { AnthropicMessagesAdapterOptions } from './types'\n\n// ─── Sub-schemas ──────────────────────────────────────────────────────────────\n\nconst providerObjectSchema = validator.object().unknown(true)\n\nconst bucketLabelSchema = validator\n .string()\n .valid('standingInstructions', 'memories', 'retrievables', 'timeline')\n\nconst bucketOrderSchema = validator\n .array()\n .items(bucketLabelSchema)\n .unique()\n .default(['standingInstructions', 'memories', 'retrievables', 'timeline'])\n\nconst tokenEncodingSchema = validator\n .alternatives(\n // Known values are suggestions from the canonical list, not a whitelist: consumers may provide\n // a custom or newer tokenizer name. The field accepts any non-empty string, explicit null, or\n // absent (undefined = \"no token counting\"). `.optional()` preserves the null/undefined\n // disposition required by adk/require-validator-any-required.\n validator\n .string()\n .min(1)\n .description(`Known encodings: ${TokenEncoding.join(', ')}`),\n validator.any().valid(null).optional()\n )\n .default(null)\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, 502, 503, 504, 529]),\n honorRetryAfter: validator.boolean().default(true),\n })\n .unknown(false)\n\nconst localToolCallParserSchema = validator\n .alternatives(\n validator\n .string()\n .valid(\n 'auto',\n 'hermes',\n 'gemma',\n 'gpt_oss',\n 'pythonic',\n 'bare_pythonic',\n 'loose_keyed',\n 'llama3_json',\n 'mistral',\n 'qwen3_coder',\n 'phi',\n 'none'\n ),\n validator.function()\n )\n .optional()\n\nconst helperSchema = validator.function()\n\nconst helpersSchema = validator\n .object({\n descriptionToChatCompletionsJsonSchema: helperSchema.optional(),\n renderUntrustedContent: helperSchema.optional(),\n renderTrustedContent: helperSchema.optional(),\n renderStandingInstructions: helperSchema.optional(),\n renderMemories: helperSchema.optional(),\n renderRetrievables: helperSchema.optional(),\n renderRetrievableHandleBody: helperSchema.optional(),\n renderRetrievableSafetyDirective: helperSchema.optional(),\n renderFirstPartyRetrievables: helperSchema.optional(),\n renderThirdPartyPublicRetrievables: helperSchema.optional(),\n renderThirdPartyPrivateRetrievables: helperSchema.optional(),\n renderThought: helperSchema.optional(),\n filterThoughts: helperSchema.optional(),\n toolsToChatCompletionsTools: helperSchema.optional(),\n renderChatCompletionsSystemPrompt: helperSchema.optional(),\n anthropicToolsFromTools: helperSchema.optional(),\n renderAnthropicTimelineMessage: helperSchema.optional(),\n renderAnthropicMediaBlocks: helperSchema.optional(),\n renderAnthropicToolCallResult: helperSchema.optional(),\n renderAnthropicSegmentedSystemPrompt: helperSchema.optional(),\n renderAnthropicThinkingBlocks: helperSchema.optional(),\n buildAnthropicMessagesHistory: helperSchema.optional(),\n })\n .unknown(false)\n\nconst unsupportedMediaPolicySchema = validator\n .alternatives(\n validator.string().valid('throw', 'fallback-stash', 'synthetic-description'),\n validator\n .object({\n mode: validator.string().valid('fallback-stash').required(),\n stashKeys: validator.array().items(validator.string().min(1)).required(),\n })\n .unknown(false)\n )\n .default('throw')\n\nconst thinkingSchema = validator\n .alternatives(\n validator\n .object({\n type: validator.string().valid('enabled').required(),\n // The wire requires at least 1024 (SDK: \"Must be 1024 or more and less than max_tokens\").\n // Rejecting a smaller value here is not request repair — it is refusing to send a request the\n // API is guaranteed to reject, with a validation error the caller can act on instead of a 400.\n budget_tokens: validator.number().integer().min(1024).required(),\n display: validator.string().valid('summarized', 'omitted').allow(null).optional(),\n })\n .unknown(true),\n validator\n .object({\n type: validator.string().valid('disabled').required(),\n })\n .unknown(true),\n validator\n .object({\n type: validator.string().valid('adaptive').required(),\n display: validator.string().valid('summarized', 'omitted').allow(null).optional(),\n })\n .unknown(true)\n )\n .optional()\n\nconst toolChoiceSchema = validator\n .alternatives(\n validator\n .object({\n type: validator.string().valid('auto').required(),\n disable_parallel_tool_use: validator.boolean().optional(),\n })\n .unknown(true),\n validator\n .object({\n type: validator.string().valid('any').required(),\n disable_parallel_tool_use: validator.boolean().optional(),\n })\n .unknown(true),\n validator\n .object({\n type: validator.string().valid('tool').required(),\n name: validator.string().min(1).required(),\n disable_parallel_tool_use: validator.boolean().optional(),\n })\n .unknown(true),\n validator\n .object({\n type: validator.string().valid('none').required(),\n })\n .unknown(true)\n )\n .optional()\n\nconst outputConfigSchema = validator\n .object({\n effort: validator\n .string()\n .valid('low', 'medium', 'high', 'xhigh', 'max')\n .allow(null)\n .optional(),\n format: providerObjectSchema.allow(null).optional(),\n })\n .unknown(true)\n\nconst headersSchema = validator.object().pattern(validator.string(), validator.string())\n\n// ─── Top-level schema ─────────────────────────────────────────────────────────\n\n/**\n * Validator schema for `AnthropicMessagesAdapterOptions`. Used by `validateOptions` at construction\n * time and again at the start of every iteration after options have been merged. Rejects unknown\n * top-level keys so typos fail loud.\n */\nexport const anthropicMessagesOptionsSchema = validator\n .object<AnthropicMessagesAdapterOptions>({\n // ADK control and HTTP transport\n apiKey: validator.string().optional(),\n baseURL: validator.string().optional(),\n headers: headersSchema.optional(),\n fetch: validator.function().optional(),\n stream: validator.boolean().default(true),\n streamIdleTimeoutMs: validator.number().integer().min(0).default(0),\n requestTimeoutMs: validator.number().integer().min(0).default(0),\n retry: retrySchema.default({}),\n // Consumer hook; validated as a function only. Its RETURN value is range-checked at call time\n // in error_translation.ts, because a schema cannot police what a function does at runtime.\n resolveErrorStatus: validator.function().optional(),\n bucketOrder: bucketOrderSchema,\n contextWindow: validator.number().integer().min(1).optional(),\n selfIdentity: validator.string().min(1).default('assistant'),\n thoughtSurfacing: validator\n .string()\n .valid('all-self', 'latest-self', 'all')\n .default('all-self'),\n tokenEncoding: tokenEncodingSchema,\n replayCompatibility: validator.array().items(validator.string().min(1)).default([]),\n helpers: helpersSchema.optional(),\n spoolStore: byteStoreSchema.optional(),\n autoAck: validator.boolean().default(false),\n unsupportedMediaPolicy: unsupportedMediaPolicySchema,\n\n // Anthropic Messages request surface\n model: validator.string().required(),\n maxTokens: validator.number().integer().min(0).required(),\n stopSequences: validator.array().items(validator.string()).optional(),\n thinking: thinkingSchema,\n outputConfig: outputConfigSchema.optional(),\n toolChoice: toolChoiceSchema,\n dangerouslyAllowBrowser: validator.boolean().default(false),\n cacheBreakpoints: validator.string().valid('auto', 'system-only', 'off').default('auto'),\n cacheTtl: validator.string().valid('5m', '1h').optional(),\n metadata: providerObjectSchema.optional(),\n serviceTier: validator.string().valid('auto', 'standard_only').optional(),\n container: validator\n .alternatives(validator.string(), validator.any().valid(null).optional())\n .optional(),\n inferenceGeo: validator\n .alternatives(validator.string(), validator.any().valid(null).optional())\n .optional(),\n userProfileId: validator.string().optional(),\n // Deprecated sampling parameters are intentionally optional and never defaulted.\n temperature: validator.number().optional(),\n topP: validator.number().optional(),\n topK: validator.number().optional(),\n onRawGeneration: validator.function().optional(),\n onPromptAssembled: validator.function().optional(),\n localToolCallParser: localToolCallParserSchema,\n toolCallIdFilter: validator.function().optional(),\n })\n .unknown(false)\n\nconst formatValidationDetails = (err: ValidationError): string =>\n err.details.map((d) => d.message).join(' and ')\n\n/**\n * Validates arbitrary input against `anthropicMessagesOptionsSchema` and returns resolved options.\n * Throws `E_INVALID_ANTHROPIC_MESSAGES_OPTIONS` with validator details 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): AnthropicMessagesAdapterOptions => {\n const { value, error } = anthropicMessagesOptionsSchema.validate(input, {\n abortEarly: false,\n convert: false,\n })\n if (error) {\n throw new E_INVALID_ANTHROPIC_MESSAGES_OPTIONS([formatValidationDetails(error)], {\n cause: error,\n })\n }\n return value as AnthropicMessagesAdapterOptions\n}\n"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { n as TokenEncoding } from "../../../tokenizable-
|
|
2
|
-
import { o as byteStoreSchema } from "../../../common-
|
|
1
|
+
import { n as TokenEncoding } from "../../../tokenizable-VB4Av8GF.mjs";
|
|
2
|
+
import { o as byteStoreSchema } from "../../../common-BpdHIpQE.mjs";
|
|
3
3
|
import { E_INVALID_ANTHROPIC_MESSAGES_OPTIONS } from "./exceptions.mjs";
|
|
4
4
|
import { validator } from "@nhtio/validation";
|
|
5
5
|
//#region src/batteries/llm/anthropic_messages/validation.ts
|
|
@@ -26,7 +26,7 @@ var bucketOrderSchema = validator.array().items(bucketLabelSchema).unique().defa
|
|
|
26
26
|
"retrievables",
|
|
27
27
|
"timeline"
|
|
28
28
|
]);
|
|
29
|
-
var tokenEncodingSchema = validator.alternatives(validator.string().
|
|
29
|
+
var tokenEncodingSchema = validator.alternatives(validator.string().min(1).description(`Known encodings: ${TokenEncoding.join(", ")}`), validator.any().valid(null).optional()).default(null);
|
|
30
30
|
var retrySchema = validator.object({
|
|
31
31
|
maxAttempts: validator.number().integer().min(1).default(1),
|
|
32
32
|
baseDelayMs: validator.number().integer().min(0).default(500),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.mjs","names":[],"sources":["../../../../src/batteries/llm/anthropic_messages/validation.ts"],"sourcesContent":["/**\n * Runtime validation schema and wrapper for Anthropic Messages adapter options.\n *\n * @module @nhtio/adk/batteries/llm/anthropic_messages/validation\n *\n * @remarks\n * Schema and call-site wrapper for validating `AnthropicMessagesAdapterOptions`. Used at\n * construction time and at the start of every iteration against the merged options shape. Throws\n * `E_INVALID_ANTHROPIC_MESSAGES_OPTIONS` on failure, matching the hard-fail policy of the sibling\n * HTTP batteries.\n *\n * Note the deliberate `.unknown(...)` asymmetry: the top level is `.unknown(false)` so option typos\n * fail loud, but provider-owned passthrough blocks are `.unknown(true)` so SDK-supported additions\n * can pass through without a library bump.\n */\n\nimport { validator, ValidationError } from '@nhtio/validation'\nimport { byteStoreSchema, TokenEncoding } from '@nhtio/adk/common'\nimport { E_INVALID_ANTHROPIC_MESSAGES_OPTIONS } from './exceptions'\nimport type { AnthropicMessagesAdapterOptions } from './types'\n\n// ─── Sub-schemas ──────────────────────────────────────────────────────────────\n\nconst providerObjectSchema = validator.object().unknown(true)\n\nconst bucketLabelSchema = validator\n .string()\n .valid('standingInstructions', 'memories', 'retrievables', 'timeline')\n\nconst bucketOrderSchema = validator\n .array()\n .items(bucketLabelSchema)\n .unique()\n .default(['standingInstructions', 'memories', 'retrievables', 'timeline'])\n\nconst tokenEncodingSchema = validator\n .alternatives(\n // Derive from the canonical TokenEncoding array as the accepted CONTRIBUTING number 13 carve-out.\n validator.string().valid(...TokenEncoding),\n // `tokenEncoding?: TokenEncoding | null` accepts a valid encoding string, explicit null, or\n // absence. `.optional()` makes the null disposition explicit for adk/require-validator-any-required.\n validator.any().valid(null).optional()\n )\n .default(null)\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, 502, 503, 504, 529]),\n honorRetryAfter: validator.boolean().default(true),\n })\n .unknown(false)\n\nconst localToolCallParserSchema = validator\n .alternatives(\n validator\n .string()\n .valid(\n 'auto',\n 'hermes',\n 'gemma',\n 'gpt_oss',\n 'pythonic',\n 'bare_pythonic',\n 'loose_keyed',\n 'llama3_json',\n 'mistral',\n 'qwen3_coder',\n 'phi',\n 'none'\n ),\n validator.function()\n )\n .optional()\n\nconst helperSchema = validator.function()\n\nconst helpersSchema = validator\n .object({\n descriptionToChatCompletionsJsonSchema: helperSchema.optional(),\n renderUntrustedContent: helperSchema.optional(),\n renderTrustedContent: helperSchema.optional(),\n renderStandingInstructions: helperSchema.optional(),\n renderMemories: helperSchema.optional(),\n renderRetrievables: helperSchema.optional(),\n renderRetrievableHandleBody: helperSchema.optional(),\n renderRetrievableSafetyDirective: helperSchema.optional(),\n renderFirstPartyRetrievables: helperSchema.optional(),\n renderThirdPartyPublicRetrievables: helperSchema.optional(),\n renderThirdPartyPrivateRetrievables: helperSchema.optional(),\n renderThought: helperSchema.optional(),\n filterThoughts: helperSchema.optional(),\n toolsToChatCompletionsTools: helperSchema.optional(),\n renderChatCompletionsSystemPrompt: helperSchema.optional(),\n anthropicToolsFromTools: helperSchema.optional(),\n renderAnthropicTimelineMessage: helperSchema.optional(),\n renderAnthropicMediaBlocks: helperSchema.optional(),\n renderAnthropicToolCallResult: helperSchema.optional(),\n renderAnthropicSegmentedSystemPrompt: helperSchema.optional(),\n renderAnthropicThinkingBlocks: helperSchema.optional(),\n buildAnthropicMessagesHistory: helperSchema.optional(),\n })\n .unknown(false)\n\nconst unsupportedMediaPolicySchema = validator\n .alternatives(\n validator.string().valid('throw', 'fallback-stash', 'synthetic-description'),\n validator\n .object({\n mode: validator.string().valid('fallback-stash').required(),\n stashKeys: validator.array().items(validator.string().min(1)).required(),\n })\n .unknown(false)\n )\n .default('throw')\n\nconst thinkingSchema = validator\n .alternatives(\n validator\n .object({\n type: validator.string().valid('enabled').required(),\n // The wire requires at least 1024 (SDK: \"Must be 1024 or more and less than max_tokens\").\n // Rejecting a smaller value here is not request repair — it is refusing to send a request the\n // API is guaranteed to reject, with a validation error the caller can act on instead of a 400.\n budget_tokens: validator.number().integer().min(1024).required(),\n display: validator.string().valid('summarized', 'omitted').allow(null).optional(),\n })\n .unknown(true),\n validator\n .object({\n type: validator.string().valid('disabled').required(),\n })\n .unknown(true),\n validator\n .object({\n type: validator.string().valid('adaptive').required(),\n display: validator.string().valid('summarized', 'omitted').allow(null).optional(),\n })\n .unknown(true)\n )\n .optional()\n\nconst toolChoiceSchema = validator\n .alternatives(\n validator\n .object({\n type: validator.string().valid('auto').required(),\n disable_parallel_tool_use: validator.boolean().optional(),\n })\n .unknown(true),\n validator\n .object({\n type: validator.string().valid('any').required(),\n disable_parallel_tool_use: validator.boolean().optional(),\n })\n .unknown(true),\n validator\n .object({\n type: validator.string().valid('tool').required(),\n name: validator.string().min(1).required(),\n disable_parallel_tool_use: validator.boolean().optional(),\n })\n .unknown(true),\n validator\n .object({\n type: validator.string().valid('none').required(),\n })\n .unknown(true)\n )\n .optional()\n\nconst outputConfigSchema = validator\n .object({\n effort: validator\n .string()\n .valid('low', 'medium', 'high', 'xhigh', 'max')\n .allow(null)\n .optional(),\n format: providerObjectSchema.allow(null).optional(),\n })\n .unknown(true)\n\nconst headersSchema = validator.object().pattern(validator.string(), validator.string())\n\n// ─── Top-level schema ─────────────────────────────────────────────────────────\n\n/**\n * Validator schema for `AnthropicMessagesAdapterOptions`. Used by `validateOptions` at construction\n * time and again at the start of every iteration after options have been merged. Rejects unknown\n * top-level keys so typos fail loud.\n */\nexport const anthropicMessagesOptionsSchema = validator\n .object<AnthropicMessagesAdapterOptions>({\n // ADK control and HTTP transport\n apiKey: validator.string().optional(),\n baseURL: validator.string().optional(),\n headers: headersSchema.optional(),\n fetch: validator.function().optional(),\n stream: validator.boolean().default(true),\n streamIdleTimeoutMs: validator.number().integer().min(0).default(0),\n requestTimeoutMs: validator.number().integer().min(0).default(0),\n retry: retrySchema.default({}),\n // Consumer hook; validated as a function only. Its RETURN value is range-checked at call time\n // in error_translation.ts, because a schema cannot police what a function does at runtime.\n resolveErrorStatus: validator.function().optional(),\n bucketOrder: bucketOrderSchema,\n contextWindow: validator.number().integer().min(1).optional(),\n selfIdentity: validator.string().min(1).default('assistant'),\n thoughtSurfacing: validator\n .string()\n .valid('all-self', 'latest-self', 'all')\n .default('all-self'),\n tokenEncoding: tokenEncodingSchema,\n replayCompatibility: validator.array().items(validator.string().min(1)).default([]),\n helpers: helpersSchema.optional(),\n spoolStore: byteStoreSchema.optional(),\n autoAck: validator.boolean().default(false),\n unsupportedMediaPolicy: unsupportedMediaPolicySchema,\n\n // Anthropic Messages request surface\n model: validator.string().required(),\n maxTokens: validator.number().integer().min(0).required(),\n stopSequences: validator.array().items(validator.string()).optional(),\n thinking: thinkingSchema,\n outputConfig: outputConfigSchema.optional(),\n toolChoice: toolChoiceSchema,\n dangerouslyAllowBrowser: validator.boolean().default(false),\n cacheBreakpoints: validator.string().valid('auto', 'system-only', 'off').default('auto'),\n cacheTtl: validator.string().valid('5m', '1h').optional(),\n metadata: providerObjectSchema.optional(),\n serviceTier: validator.string().valid('auto', 'standard_only').optional(),\n container: validator\n .alternatives(validator.string(), validator.any().valid(null).optional())\n .optional(),\n inferenceGeo: validator\n .alternatives(validator.string(), validator.any().valid(null).optional())\n .optional(),\n userProfileId: validator.string().optional(),\n // Deprecated sampling parameters are intentionally optional and never defaulted.\n temperature: validator.number().optional(),\n topP: validator.number().optional(),\n topK: validator.number().optional(),\n onRawGeneration: validator.function().optional(),\n onPromptAssembled: validator.function().optional(),\n localToolCallParser: localToolCallParserSchema,\n toolCallIdFilter: validator.function().optional(),\n })\n .unknown(false)\n\nconst formatValidationDetails = (err: ValidationError): string =>\n err.details.map((d) => d.message).join(' and ')\n\n/**\n * Validates arbitrary input against `anthropicMessagesOptionsSchema` and returns resolved options.\n * Throws `E_INVALID_ANTHROPIC_MESSAGES_OPTIONS` with validator details 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): AnthropicMessagesAdapterOptions => {\n const { value, error } = anthropicMessagesOptionsSchema.validate(input, {\n abortEarly: false,\n convert: false,\n })\n if (error) {\n throw new E_INVALID_ANTHROPIC_MESSAGES_OPTIONS([formatValidationDetails(error)], {\n cause: error,\n })\n }\n return value as AnthropicMessagesAdapterOptions\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"validation.mjs","names":[],"sources":["../../../../src/batteries/llm/anthropic_messages/validation.ts"],"sourcesContent":["/**\n * Runtime validation schema and wrapper for Anthropic Messages adapter options.\n *\n * @module @nhtio/adk/batteries/llm/anthropic_messages/validation\n *\n * @remarks\n * Schema and call-site wrapper for validating `AnthropicMessagesAdapterOptions`. Used at\n * construction time and at the start of every iteration against the merged options shape. Throws\n * `E_INVALID_ANTHROPIC_MESSAGES_OPTIONS` on failure, matching the hard-fail policy of the sibling\n * HTTP batteries.\n *\n * Note the deliberate `.unknown(...)` asymmetry: the top level is `.unknown(false)` so option typos\n * fail loud, but provider-owned passthrough blocks are `.unknown(true)` so SDK-supported additions\n * can pass through without a library bump.\n */\n\nimport { validator, ValidationError } from '@nhtio/validation'\nimport { byteStoreSchema, TokenEncoding } from '@nhtio/adk/common'\nimport { E_INVALID_ANTHROPIC_MESSAGES_OPTIONS } from './exceptions'\nimport type { AnthropicMessagesAdapterOptions } from './types'\n\n// ─── Sub-schemas ──────────────────────────────────────────────────────────────\n\nconst providerObjectSchema = validator.object().unknown(true)\n\nconst bucketLabelSchema = validator\n .string()\n .valid('standingInstructions', 'memories', 'retrievables', 'timeline')\n\nconst bucketOrderSchema = validator\n .array()\n .items(bucketLabelSchema)\n .unique()\n .default(['standingInstructions', 'memories', 'retrievables', 'timeline'])\n\nconst tokenEncodingSchema = validator\n .alternatives(\n // Known values are suggestions from the canonical list, not a whitelist: consumers may provide\n // a custom or newer tokenizer name. The field accepts any non-empty string, explicit null, or\n // absent (undefined = \"no token counting\"). `.optional()` preserves the null/undefined\n // disposition required by adk/require-validator-any-required.\n validator\n .string()\n .min(1)\n .description(`Known encodings: ${TokenEncoding.join(', ')}`),\n validator.any().valid(null).optional()\n )\n .default(null)\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, 502, 503, 504, 529]),\n honorRetryAfter: validator.boolean().default(true),\n })\n .unknown(false)\n\nconst localToolCallParserSchema = validator\n .alternatives(\n validator\n .string()\n .valid(\n 'auto',\n 'hermes',\n 'gemma',\n 'gpt_oss',\n 'pythonic',\n 'bare_pythonic',\n 'loose_keyed',\n 'llama3_json',\n 'mistral',\n 'qwen3_coder',\n 'phi',\n 'none'\n ),\n validator.function()\n )\n .optional()\n\nconst helperSchema = validator.function()\n\nconst helpersSchema = validator\n .object({\n descriptionToChatCompletionsJsonSchema: helperSchema.optional(),\n renderUntrustedContent: helperSchema.optional(),\n renderTrustedContent: helperSchema.optional(),\n renderStandingInstructions: helperSchema.optional(),\n renderMemories: helperSchema.optional(),\n renderRetrievables: helperSchema.optional(),\n renderRetrievableHandleBody: helperSchema.optional(),\n renderRetrievableSafetyDirective: helperSchema.optional(),\n renderFirstPartyRetrievables: helperSchema.optional(),\n renderThirdPartyPublicRetrievables: helperSchema.optional(),\n renderThirdPartyPrivateRetrievables: helperSchema.optional(),\n renderThought: helperSchema.optional(),\n filterThoughts: helperSchema.optional(),\n toolsToChatCompletionsTools: helperSchema.optional(),\n renderChatCompletionsSystemPrompt: helperSchema.optional(),\n anthropicToolsFromTools: helperSchema.optional(),\n renderAnthropicTimelineMessage: helperSchema.optional(),\n renderAnthropicMediaBlocks: helperSchema.optional(),\n renderAnthropicToolCallResult: helperSchema.optional(),\n renderAnthropicSegmentedSystemPrompt: helperSchema.optional(),\n renderAnthropicThinkingBlocks: helperSchema.optional(),\n buildAnthropicMessagesHistory: helperSchema.optional(),\n })\n .unknown(false)\n\nconst unsupportedMediaPolicySchema = validator\n .alternatives(\n validator.string().valid('throw', 'fallback-stash', 'synthetic-description'),\n validator\n .object({\n mode: validator.string().valid('fallback-stash').required(),\n stashKeys: validator.array().items(validator.string().min(1)).required(),\n })\n .unknown(false)\n )\n .default('throw')\n\nconst thinkingSchema = validator\n .alternatives(\n validator\n .object({\n type: validator.string().valid('enabled').required(),\n // The wire requires at least 1024 (SDK: \"Must be 1024 or more and less than max_tokens\").\n // Rejecting a smaller value here is not request repair — it is refusing to send a request the\n // API is guaranteed to reject, with a validation error the caller can act on instead of a 400.\n budget_tokens: validator.number().integer().min(1024).required(),\n display: validator.string().valid('summarized', 'omitted').allow(null).optional(),\n })\n .unknown(true),\n validator\n .object({\n type: validator.string().valid('disabled').required(),\n })\n .unknown(true),\n validator\n .object({\n type: validator.string().valid('adaptive').required(),\n display: validator.string().valid('summarized', 'omitted').allow(null).optional(),\n })\n .unknown(true)\n )\n .optional()\n\nconst toolChoiceSchema = validator\n .alternatives(\n validator\n .object({\n type: validator.string().valid('auto').required(),\n disable_parallel_tool_use: validator.boolean().optional(),\n })\n .unknown(true),\n validator\n .object({\n type: validator.string().valid('any').required(),\n disable_parallel_tool_use: validator.boolean().optional(),\n })\n .unknown(true),\n validator\n .object({\n type: validator.string().valid('tool').required(),\n name: validator.string().min(1).required(),\n disable_parallel_tool_use: validator.boolean().optional(),\n })\n .unknown(true),\n validator\n .object({\n type: validator.string().valid('none').required(),\n })\n .unknown(true)\n )\n .optional()\n\nconst outputConfigSchema = validator\n .object({\n effort: validator\n .string()\n .valid('low', 'medium', 'high', 'xhigh', 'max')\n .allow(null)\n .optional(),\n format: providerObjectSchema.allow(null).optional(),\n })\n .unknown(true)\n\nconst headersSchema = validator.object().pattern(validator.string(), validator.string())\n\n// ─── Top-level schema ─────────────────────────────────────────────────────────\n\n/**\n * Validator schema for `AnthropicMessagesAdapterOptions`. Used by `validateOptions` at construction\n * time and again at the start of every iteration after options have been merged. Rejects unknown\n * top-level keys so typos fail loud.\n */\nexport const anthropicMessagesOptionsSchema = validator\n .object<AnthropicMessagesAdapterOptions>({\n // ADK control and HTTP transport\n apiKey: validator.string().optional(),\n baseURL: validator.string().optional(),\n headers: headersSchema.optional(),\n fetch: validator.function().optional(),\n stream: validator.boolean().default(true),\n streamIdleTimeoutMs: validator.number().integer().min(0).default(0),\n requestTimeoutMs: validator.number().integer().min(0).default(0),\n retry: retrySchema.default({}),\n // Consumer hook; validated as a function only. Its RETURN value is range-checked at call time\n // in error_translation.ts, because a schema cannot police what a function does at runtime.\n resolveErrorStatus: validator.function().optional(),\n bucketOrder: bucketOrderSchema,\n contextWindow: validator.number().integer().min(1).optional(),\n selfIdentity: validator.string().min(1).default('assistant'),\n thoughtSurfacing: validator\n .string()\n .valid('all-self', 'latest-self', 'all')\n .default('all-self'),\n tokenEncoding: tokenEncodingSchema,\n replayCompatibility: validator.array().items(validator.string().min(1)).default([]),\n helpers: helpersSchema.optional(),\n spoolStore: byteStoreSchema.optional(),\n autoAck: validator.boolean().default(false),\n unsupportedMediaPolicy: unsupportedMediaPolicySchema,\n\n // Anthropic Messages request surface\n model: validator.string().required(),\n maxTokens: validator.number().integer().min(0).required(),\n stopSequences: validator.array().items(validator.string()).optional(),\n thinking: thinkingSchema,\n outputConfig: outputConfigSchema.optional(),\n toolChoice: toolChoiceSchema,\n dangerouslyAllowBrowser: validator.boolean().default(false),\n cacheBreakpoints: validator.string().valid('auto', 'system-only', 'off').default('auto'),\n cacheTtl: validator.string().valid('5m', '1h').optional(),\n metadata: providerObjectSchema.optional(),\n serviceTier: validator.string().valid('auto', 'standard_only').optional(),\n container: validator\n .alternatives(validator.string(), validator.any().valid(null).optional())\n .optional(),\n inferenceGeo: validator\n .alternatives(validator.string(), validator.any().valid(null).optional())\n .optional(),\n userProfileId: validator.string().optional(),\n // Deprecated sampling parameters are intentionally optional and never defaulted.\n temperature: validator.number().optional(),\n topP: validator.number().optional(),\n topK: validator.number().optional(),\n onRawGeneration: validator.function().optional(),\n onPromptAssembled: validator.function().optional(),\n localToolCallParser: localToolCallParserSchema,\n toolCallIdFilter: validator.function().optional(),\n })\n .unknown(false)\n\nconst formatValidationDetails = (err: ValidationError): string =>\n err.details.map((d) => d.message).join(' and ')\n\n/**\n * Validates arbitrary input against `anthropicMessagesOptionsSchema` and returns resolved options.\n * Throws `E_INVALID_ANTHROPIC_MESSAGES_OPTIONS` with validator details 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): AnthropicMessagesAdapterOptions => {\n const { value, error } = anthropicMessagesOptionsSchema.validate(input, {\n abortEarly: false,\n convert: false,\n })\n if (error) {\n throw new E_INVALID_ANTHROPIC_MESSAGES_OPTIONS([formatValidationDetails(error)], {\n cause: error,\n })\n }\n return value as AnthropicMessagesAdapterOptions\n}\n"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
require("../../chunk-Cek0wNdY.js");
|
|
3
|
-
const require_helpers = require("../../helpers-
|
|
4
|
-
const require_chat_common = require("../../chat_common-
|
|
3
|
+
const require_helpers = require("../../helpers-CEjjkXso.js");
|
|
4
|
+
const require_chat_common = require("../../chat_common-Dpan9moo.js");
|
|
5
5
|
const require_batteries_llm_anthropic_messages_exceptions = require("./anthropic_messages/exceptions.cjs");
|
|
6
6
|
const require_batteries_llm_anthropic_messages_validation = require("./anthropic_messages/validation.cjs");
|
|
7
7
|
const require_error_translation = require("../../error_translation-BCa4wxUL.js");
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { A as renderMemories, D as renderArtifactHandleBody, F as renderThirdPartyPrivateRetrievables, G as toolsToChatCompletionsTools, I as renderThirdPartyPublicRetrievables, L as renderThought, M as renderRetrievableSafetyDirective, N as renderRetrievables, O as renderChatCompletionsSystemPrompt, P as renderStandingInstructions, R as renderTrustedContent, _ as defaultRenderUntrustedContent, a as defaultRenderArtifactHandleBody, c as defaultRenderMemories, d as defaultRenderRetrievables, f as defaultRenderStandingInstructions, g as defaultRenderTrustedContent, h as defaultRenderThought, i as defaultFilterThoughts, k as renderFirstPartyRetrievables, m as defaultRenderThirdPartyPublicRetrievables, o as defaultRenderChatCompletionsSystemPrompt, p as defaultRenderThirdPartyPrivateRetrievables, r as defaultDescriptionToChatCompletionsJsonSchema, s as defaultRenderFirstPartyRetrievables, u as defaultRenderRetrievableSafetyDirective, v as defaultToolsToChatCompletionsTools, x as filterThoughts, y as descriptionToChatCompletionsJsonSchema, z as renderUntrustedContent } from "../../helpers-
|
|
2
|
-
import { t as deCollideToolCallIds } from "../../chat_common-
|
|
1
|
+
import { A as renderMemories, D as renderArtifactHandleBody, F as renderThirdPartyPrivateRetrievables, G as toolsToChatCompletionsTools, I as renderThirdPartyPublicRetrievables, L as renderThought, M as renderRetrievableSafetyDirective, N as renderRetrievables, O as renderChatCompletionsSystemPrompt, P as renderStandingInstructions, R as renderTrustedContent, _ as defaultRenderUntrustedContent, a as defaultRenderArtifactHandleBody, c as defaultRenderMemories, d as defaultRenderRetrievables, f as defaultRenderStandingInstructions, g as defaultRenderTrustedContent, h as defaultRenderThought, i as defaultFilterThoughts, k as renderFirstPartyRetrievables, m as defaultRenderThirdPartyPublicRetrievables, o as defaultRenderChatCompletionsSystemPrompt, p as defaultRenderThirdPartyPrivateRetrievables, r as defaultDescriptionToChatCompletionsJsonSchema, s as defaultRenderFirstPartyRetrievables, u as defaultRenderRetrievableSafetyDirective, v as defaultToolsToChatCompletionsTools, x as filterThoughts, y as descriptionToChatCompletionsJsonSchema, z as renderUntrustedContent } from "../../helpers-BH7HTtkD.mjs";
|
|
2
|
+
import { t as deCollideToolCallIds } from "../../chat_common-CmKV5Dz4.mjs";
|
|
3
3
|
import { E_ANTHROPIC_MESSAGES_CONTEXT_OVERFLOW, E_ANTHROPIC_MESSAGES_HTTP_ERROR, E_ANTHROPIC_MESSAGES_INVALID_TOOL_CALL_ARGS, E_ANTHROPIC_MESSAGES_REQUEST_TIMEOUT, E_ANTHROPIC_MESSAGES_STREAM_ERROR, E_ANTHROPIC_MESSAGES_STREAM_STALLED, E_ANTHROPIC_MESSAGES_UNSUPPORTED_MEDIA_MODALITY, E_INVALID_ANTHROPIC_MESSAGES_OPTIONS } from "./anthropic_messages/exceptions.mjs";
|
|
4
4
|
import { anthropicMessagesOptionsSchema, validateOptions } from "./anthropic_messages/validation.mjs";
|
|
5
5
|
import { n as translateAnthropicError, t as CONTEXT_OVERFLOW_PHRASE } from "../../error_translation-Bkz-bl27.mjs";
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
require("../../../chunk-Cek0wNdY.js");
|
|
3
3
|
const require_guards = require("../../../guards-05Uq3J4M.js");
|
|
4
|
-
const require_tokenizable = require("../../../tokenizable-
|
|
5
|
-
const require_spooled_artifact = require("../../../spooled_artifact-
|
|
6
|
-
const require_thought = require("../../../thought
|
|
7
|
-
const require_tool_call = require("../../../tool_call-
|
|
8
|
-
require("../../../common-
|
|
4
|
+
const require_tokenizable = require("../../../tokenizable-BMZuGWRd.js");
|
|
5
|
+
const require_spooled_artifact = require("../../../spooled_artifact-BpcesRBv.js");
|
|
6
|
+
const require_thought = require("../../../thought-bS7O9O5H.js");
|
|
7
|
+
const require_tool_call = require("../../../tool_call-Fs_Uh5wQ.js");
|
|
8
|
+
require("../../../common-H44Ik9ou.js");
|
|
9
9
|
require("../../../guards.cjs");
|
|
10
10
|
const require_tool_parsers = require("../../../tool_parsers-csSBFWob.js");
|
|
11
|
-
const require_helpers = require("../../../helpers-
|
|
11
|
+
const require_helpers = require("../../../helpers-CEjjkXso.js");
|
|
12
12
|
const require_batteries_llm_bedrock_converse_exceptions = require("./exceptions.cjs");
|
|
13
13
|
const require_batteries_llm_bedrock_converse_validation = require("./validation.cjs");
|
|
14
14
|
const require_batteries_llm_bedrock_converse_helpers = require("./helpers.cjs");
|
|
@@ -42,6 +42,7 @@ let uuid = require("uuid");
|
|
|
42
42
|
*/
|
|
43
43
|
var nowIso = () => luxon.DateTime.now().toISO() ?? (/* @__PURE__ */ new Date()).toISOString();
|
|
44
44
|
var DEFAULT_REGION = "us-east-1";
|
|
45
|
+
var estimateTokensOf = async (value, encoding) => Promise.resolve(value.estimateTokens(encoding));
|
|
45
46
|
var computeChecksum = (tool, args) => (0, js_sha256.sha256)(`${tool}:${require_spooled_artifact.canonicalStringify(args)}`);
|
|
46
47
|
/** Merge the three option layers, later winning. */
|
|
47
48
|
var mergeOptions = (...layers) => {
|
|
@@ -120,6 +121,7 @@ var BedrockConverseAdapter = class BedrockConverseAdapter {
|
|
|
120
121
|
};
|
|
121
122
|
const stashRaw = ctx.stash.get(adapterClass.STASH_KEY, {});
|
|
122
123
|
const merged = require_batteries_llm_bedrock_converse_validation.validateOptions(mergeOptions(baseline, overrides, require_guards.isObject(stashRaw) ? stashRaw : {}));
|
|
124
|
+
if (merged.tokenEncoding !== void 0 && merged.tokenEncoding !== null && merged.contextWindow === void 0) throw new require_batteries_llm_bedrock_converse_exceptions.E_INVALID_BEDROCK_CONVERSE_OPTIONS(["tokenEncoding is non-null but contextWindow is undefined"]);
|
|
123
125
|
const resolved = resolveHelpers(merged.helpers);
|
|
124
126
|
const selfIdentity = "assistant";
|
|
125
127
|
const dispatchStreamId = (0, uuid.v6)();
|
|
@@ -133,6 +135,26 @@ var BedrockConverseAdapter = class BedrockConverseAdapter {
|
|
|
133
135
|
unsupportedMediaPolicy: merged.unsupportedMediaPolicy ?? "throw",
|
|
134
136
|
warn
|
|
135
137
|
}));
|
|
138
|
+
if (merged.tokenEncoding !== void 0 && merged.tokenEncoding !== null && merged.contextWindow !== void 0) {
|
|
139
|
+
const encoding = merged.tokenEncoding;
|
|
140
|
+
let total = await estimateTokensOf(ctx.systemPrompt, encoding);
|
|
141
|
+
for (const value of ctx.standingInstructions) total += await estimateTokensOf(value, encoding);
|
|
142
|
+
for (const memory of ctx.turnMemories) total += await estimateTokensOf(memory.content, encoding);
|
|
143
|
+
for (const retrievable of ctx.turnRetrievables) total += await estimateTokensOf(retrievable.inline ? retrievable.content : new require_tokenizable.Tokenizable(`[Reference available: ${retrievable.id}]`), encoding);
|
|
144
|
+
for (const message of ctx.turnMessages) if (message.content !== void 0) total += await estimateTokensOf(message.content, encoding);
|
|
145
|
+
for (const thought of ctx.turnThoughts) total += await estimateTokensOf(thought.content, encoding);
|
|
146
|
+
for (const result of renderedToolCallResults.values()) total += await estimateTokensOf(new require_tokenizable.Tokenizable(JSON.stringify(result)), encoding);
|
|
147
|
+
const tools = ctx.tools.visible();
|
|
148
|
+
if (tools.length > 0) {
|
|
149
|
+
const toolTokens = await estimateTokensOf(new require_tokenizable.Tokenizable(JSON.stringify(resolved.toolsToConverseTools(tools))), encoding);
|
|
150
|
+
total += Math.ceil(toolTokens * 1.1);
|
|
151
|
+
}
|
|
152
|
+
if (total + (merged.maxTokens ?? 0) > merged.contextWindow) throw new require_batteries_llm_bedrock_converse_exceptions.E_BEDROCK_CONVERSE_CONTEXT_OVERFLOW([
|
|
153
|
+
total + (merged.maxTokens ?? 0),
|
|
154
|
+
merged.contextWindow,
|
|
155
|
+
encoding
|
|
156
|
+
]);
|
|
157
|
+
}
|
|
136
158
|
const request = await resolved.buildConverseRequest({
|
|
137
159
|
systemPrompt: ctx.systemPrompt,
|
|
138
160
|
standingInstructions: ctx.standingInstructions,
|
|
@@ -268,7 +290,7 @@ var BedrockConverseAdapter = class BedrockConverseAdapter {
|
|
|
268
290
|
message: `generation ended with stopReason=${stopReason ?? "unknown"} and no tool use`,
|
|
269
291
|
payload: { stopReason: stopReason ?? "unknown" }
|
|
270
292
|
});
|
|
271
|
-
ctx.ack();
|
|
293
|
+
if (merged.autoAck) ctx.ack();
|
|
272
294
|
return;
|
|
273
295
|
}
|
|
274
296
|
for (const call of calls) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.cjs","names":["#baseline"],"sources":["../../../../src/batteries/llm/bedrock_converse/adapter.ts"],"sourcesContent":["/**\n * Cross-environment executor adapter for AWS Bedrock's native Converse API.\n *\n * @module @nhtio/adk/batteries/llm/bedrock_converse/adapter\n *\n * @remarks\n * Targets `POST {baseURL}/model/{modelId}/converse` (and `/converse-stream` when `stream` is set)\n * over plain HTTPS with a Bedrock API key (`Authorization: Bearer ABSK…`). Deliberately NO AWS SDK\n * and no SigV4 signer: the battery must stay cross-environment and dependency-light, and a bearer\n * key removes the only reason to pull in a signer.\n *\n * Why a native battery rather than pointing `openai_chat_completions` at a Converse-backed gateway:\n * Converse is a content-BLOCK protocol with strict role alternation, a required `toolConfig`\n * whenever tool blocks appear, and tool results carried on `user` turns. A gateway must repair all\n * of that on your behalf — most notably by MERGING consecutive same-role turns — and that repair is\n * invisible in the response. For ordinary use it is fine; for anything that needs to know what the\n * VENDOR received it is fatal, because a gateway's fix is indistinguishable from vendor tolerance.\n * See the validation battery's \"Which API surface a rule applies to\" guide, and\n * {@link BedrockConverseAdapterOptions.alternationPolicy} for the `'reject'` escape hatch that lets\n * Converse's own error surface.\n *\n * Options layer as in every other battery: constructor baseline → `executor()` overrides →\n * per-iteration `ctx.stash.bedrockConverse`, re-validated each iteration.\n */\n\nimport { DateTime } from 'luxon'\nimport { sha256 } from 'js-sha256'\nimport { v6 as uuidv6 } from 'uuid'\nimport { validateOptions } from './validation'\nimport { normalizeToolName } from '../chat_common/helpers'\nimport { isError, isObject, isInstanceOf } from '@nhtio/adk/guards'\nimport { resolveToolCallParser } from '../chat_common/tool_parsers'\nimport { canonicalStringify } from '../../../lib/utils/canonical_json'\nimport { Media, Message, Thought, Tokenizable, ToolCall } from '@nhtio/adk/common'\nimport {\n DEFAULT_CONVERSE_BUCKET_ORDER,\n buildConverseRequest,\n extractConverseGeneration,\n mediaToConverseImage,\n renderConverseToolResult,\n toolsToConverseTools,\n} from './helpers'\nimport {\n E_CONVERSE_ALTERNATION_VIOLATION,\n E_CONVERSE_INVALID_TOOL_INPUT,\n E_CONVERSE_MISSING_TOOL_CONFIG,\n E_CONVERSE_REQUEST_FAILED,\n E_CONVERSE_STREAM_ERROR,\n} from './exceptions'\nimport {\n descriptionToChatCompletionsJsonSchema,\n filterThoughts,\n renderChatCompletionsSystemPrompt,\n renderFirstPartyRetrievables,\n renderMemories,\n renderRetrievableSafetyDirective,\n renderRetrievables,\n renderStandingInstructions,\n renderThirdPartyPrivateRetrievables,\n renderThirdPartyPublicRetrievables,\n renderThought,\n renderTrustedContent,\n renderUntrustedContent,\n} from '../chat_common/helpers'\nimport type { DispatchContext } from '@nhtio/adk/types'\nimport type { ArtifactTool, SpooledArtifact, Tool } from '@nhtio/adk/common'\nimport type { DispatchExecutorFn, DispatchExecutorHelpers } from '@nhtio/adk/types'\nimport type {\n BedrockConverseAdapterOptions,\n BedrockConverseHelpers,\n ConverseResponse,\n} from './types'\n\nconst nowIso = (): string => DateTime.now().toISO() ?? new Date().toISOString()\n\nconst DEFAULT_REGION = 'us-east-1'\n\nconst computeChecksum = (tool: string, args: Record<string, unknown>): string =>\n sha256(`${tool}:${canonicalStringify(args)}`)\n\n/** Merge the three option layers, later winning. */\nconst mergeOptions = (\n ...layers: Array<Partial<BedrockConverseAdapterOptions> | undefined>\n): Partial<BedrockConverseAdapterOptions> => {\n const out: Record<string, unknown> = {}\n for (const layer of layers) {\n if (!layer) continue\n for (const [k, v] of Object.entries(layer)) if (v !== undefined) out[k] = v\n }\n return out as Partial<BedrockConverseAdapterOptions>\n}\n\n/** Fill every injectable helper, preferring the caller's override. */\nconst resolveHelpers = (\n overrides: Partial<BedrockConverseHelpers> | undefined\n): BedrockConverseHelpers => {\n const src = (overrides ?? {}) as Record<string, unknown>\n const pick = <T>(key: string, fallback: T): T => (src[key] as T | undefined) ?? fallback\n return {\n descriptionToChatCompletionsJsonSchema: pick(\n 'descriptionToChatCompletionsJsonSchema',\n descriptionToChatCompletionsJsonSchema\n ),\n renderUntrustedContent: pick('renderUntrustedContent', renderUntrustedContent),\n renderTrustedContent: pick('renderTrustedContent', renderTrustedContent),\n renderStandingInstructions: pick('renderStandingInstructions', renderStandingInstructions),\n renderMemories: pick('renderMemories', renderMemories),\n renderRetrievables: pick('renderRetrievables', renderRetrievables),\n renderRetrievableSafetyDirective: pick(\n 'renderRetrievableSafetyDirective',\n renderRetrievableSafetyDirective\n ),\n renderFirstPartyRetrievables: pick(\n 'renderFirstPartyRetrievables',\n renderFirstPartyRetrievables\n ),\n renderThirdPartyPublicRetrievables: pick(\n 'renderThirdPartyPublicRetrievables',\n renderThirdPartyPublicRetrievables\n ),\n renderThirdPartyPrivateRetrievables: pick(\n 'renderThirdPartyPrivateRetrievables',\n renderThirdPartyPrivateRetrievables\n ),\n renderThought: pick('renderThought', renderThought),\n filterThoughts: pick('filterThoughts', filterThoughts),\n renderChatCompletionsSystemPrompt: pick(\n 'renderChatCompletionsSystemPrompt',\n renderChatCompletionsSystemPrompt\n ),\n toolsToConverseTools: pick('toolsToConverseTools', toolsToConverseTools),\n renderConverseToolResult: pick('renderConverseToolResult', renderConverseToolResult),\n buildConverseRequest: pick('buildConverseRequest', buildConverseRequest),\n } as BedrockConverseHelpers\n}\n\n/**\n * Native Bedrock Converse executor adapter.\n *\n * @example\n * ```ts\n * const adapter = new BedrockConverseAdapter({\n * model: 'us.amazon.nova-2-lite-v1:0',\n * apiKey: process.env.AWS_BEARER_TOKEN_BEDROCK,\n * region: 'us-east-1',\n * })\n * const runner = new TurnRunner({ executorCallback: adapter.executor(), ... })\n * ```\n */\nexport class BedrockConverseAdapter {\n /** Per-iteration override key on `ctx.stash`. */\n public static readonly STASH_KEY = 'bedrockConverse' as const\n\n readonly #baseline: BedrockConverseAdapterOptions\n\n /**\n * @param options - Constructor-baseline options, re-validated each iteration after overrides merge.\n * @throws {@link E_INVALID_BEDROCK_CONVERSE_OPTIONS} when `options` is invalid.\n */\n constructor(options: unknown) {\n this.#baseline = validateOptions(options)\n }\n\n /** Narrowing guard for cross-realm instances. */\n public static isBedrockConverseAdapter(value: unknown): value is BedrockConverseAdapter {\n return isInstanceOf(value, 'BedrockConverseAdapter', BedrockConverseAdapter)\n }\n\n /**\n * Build a {@link DispatchExecutorFn} bound to the baseline plus optional executor-scope overrides.\n *\n * @param overrides - Higher precedence than the baseline, lower than `ctx.stash`.\n */\n executor(overrides?: Partial<BedrockConverseAdapterOptions>): DispatchExecutorFn {\n const baseline = this.#baseline\n const adapterClass = BedrockConverseAdapter\n return async (ctx: DispatchContext, helpers: DispatchExecutorHelpers): Promise<void> => {\n const warn = (message: string): void => {\n helpers.log.warn({ kind: 'helper-warning', message })\n }\n\n const stashRaw = ctx.stash.get(adapterClass.STASH_KEY, {}) as unknown\n const stashOverrides = isObject(stashRaw)\n ? (stashRaw as Partial<BedrockConverseAdapterOptions>)\n : {}\n const merged = validateOptions(mergeOptions(baseline, overrides, stashOverrides))\n const resolved = resolveHelpers(merged.helpers)\n const selfIdentity = 'assistant'\n const dispatchStreamId = uuidv6()\n\n // Converse wants toolResult.content[] blocks, so results render ahead of assembly.\n const renderedToolCallResults = new Map<\n ToolCall,\n Array<{ text?: string; json?: Record<string, unknown> }>\n >()\n for (const tc of ctx.turnToolCalls) {\n renderedToolCallResults.set(\n tc,\n await resolved.renderConverseToolResult({\n toolCall: tc,\n results: tc.results as never,\n tool: ctx.tools.get(tc.tool) as Tool | ArtifactTool | undefined,\n renderUntrustedContent: resolved.renderUntrustedContent,\n renderTrustedContent: resolved.renderTrustedContent,\n unsupportedMediaPolicy: merged.unsupportedMediaPolicy ?? 'throw',\n warn,\n })\n )\n }\n\n const request = await resolved.buildConverseRequest({\n systemPrompt: ctx.systemPrompt,\n standingInstructions: ctx.standingInstructions,\n memories: ctx.turnMemories,\n retrievables: ctx.turnRetrievables,\n messages: ctx.turnMessages,\n thoughts: ctx.turnThoughts,\n toolCalls: ctx.turnToolCalls,\n tools: ctx.tools,\n renderedToolCallResults,\n bucketOrder: merged.bucketOrder ?? (DEFAULT_CONVERSE_BUCKET_ORDER as never),\n selfIdentity,\n thoughtSurfacing: merged.thoughtSurfacing ?? 'all-self',\n replayCompatibility: [],\n alternationPolicy: merged.alternationPolicy ?? 'merge',\n helpers: resolved,\n decodeMedia: mediaToConverseImage,\n unsupportedMediaPolicy: merged.unsupportedMediaPolicy,\n warn,\n })\n\n const inferenceConfig = {\n ...(merged.maxTokens !== undefined ? { maxTokens: merged.maxTokens } : {}),\n ...(merged.temperature !== undefined ? { temperature: merged.temperature } : {}),\n ...(merged.topP !== undefined ? { topP: merged.topP } : {}),\n ...(merged.stopSequences ? { stopSequences: merged.stopSequences } : {}),\n }\n const body = {\n ...request,\n ...(merged.toolChoice && request.toolConfig\n ? { toolConfig: { ...request.toolConfig, toolChoice: merged.toolChoice } }\n : {}),\n ...(Object.keys(inferenceConfig).length > 0 ? { inferenceConfig } : {}),\n ...(merged.additionalModelRequestFields\n ? { additionalModelRequestFields: merged.additionalModelRequestFields }\n : {}),\n }\n\n // The EXACT body about to be POSTed. An ADK-control key — stripped from the wire request.\n if (merged.onPromptAssembled) {\n try {\n merged.onPromptAssembled({\n battery: 'bedrock_converse',\n kind: 'request-body',\n messages: body.messages,\n tools: body.toolConfig?.tools,\n requestBody: body,\n streamed: merged.stream === true,\n streamId: dispatchStreamId,\n })\n } catch {\n /* observer errors are non-fatal */\n }\n }\n\n const base = (\n merged.baseURL ?? `https://bedrock-runtime.${merged.region ?? DEFAULT_REGION}.amazonaws.com`\n ).replace(/\\/$/, '')\n const action = merged.stream === true ? 'converse-stream' : 'converse'\n // The model id contains ':' and '.', both legal in a path segment but worth encoding so a\n // future id with a reserved character does not silently reshape the URL.\n const url = `${base}/model/${encodeURIComponent(merged.model)}/${action}`\n const headers: Record<string, string> = { 'Content-Type': 'application/json' }\n if (merged.apiKey) headers.Authorization = `Bearer ${merged.apiKey}`\n\n const doFetch = merged.fetch ?? globalThis.fetch\n let parsed: ConverseResponse\n try {\n const res = await doFetch(url, {\n method: 'POST',\n headers,\n body: JSON.stringify(body),\n signal: merged.timeoutMs ? AbortSignal.timeout(merged.timeoutMs) : ctx.abortSignal,\n })\n const text = await res.text()\n if (!res.ok) {\n // Classify the two Converse-specific rejections: both are actionable, and both otherwise\n // arrive as an undifferentiated ValidationException.\n if (/toolConfig/i.test(text)) {\n ctx.nack(new E_CONVERSE_MISSING_TOOL_CONFIG([text.slice(0, 400)]))\n return\n }\n if (/alternat|consecutive|must alternate/i.test(text)) {\n ctx.nack(new E_CONVERSE_ALTERNATION_VIOLATION([text.slice(0, 400)]))\n return\n }\n ctx.nack(new E_CONVERSE_REQUEST_FAILED([res.status, text.slice(0, 400)]))\n return\n }\n parsed = JSON.parse(text) as ConverseResponse\n } catch (err) {\n ctx.nack(new E_CONVERSE_STREAM_ERROR([isError(err) ? err.message : String(err)]))\n return\n }\n\n const { text, reasoning, toolUses, stopReason } = extractConverseGeneration(parsed)\n const responseId = uuidv6()\n\n if (text.length > 0) {\n const messageId = `${responseId}:message`\n helpers.reportMessage(messageId, text, { isComplete: true })\n await ctx.storeMessage(\n new Message({\n id: messageId,\n role: 'assistant',\n content: text,\n identity: selfIdentity,\n createdAt: nowIso(),\n updatedAt: nowIso(),\n })\n )\n }\n if (reasoning.length > 0) {\n const thoughtId = `${responseId}:thought`\n helpers.reportThought(thoughtId, reasoning, { isComplete: true })\n await ctx.storeThought(\n new Thought({\n id: thoughtId,\n content: reasoning,\n identity: selfIdentity,\n createdAt: nowIso(),\n updatedAt: nowIso(),\n })\n )\n }\n\n // Fallback recovery is consulted ONLY when the provider returned no structured tool use, so\n // a native toolUse always wins over a parsed one.\n const calls = toolUses.map((t) => ({ id: t.toolUseId, name: t.name, args: t.input }))\n if (calls.length === 0 && merged.localToolCallParser !== undefined && text.length > 0) {\n const parser = resolveToolCallParser(merged.localToolCallParser)\n const recovered = parser(text, { toolNames: ctx.tools.all().map((t) => t.name) })\n for (const call of recovered.calls) {\n calls.push({\n id: uuidv6(),\n name: call.name,\n args: (call.arguments ?? {}) as Record<string, unknown>,\n })\n }\n }\n\n if (merged.onRawGeneration) {\n try {\n merged.onRawGeneration({\n rawText: text,\n cleanedText: text,\n reasoning: reasoning.length > 0 ? [reasoning] : [],\n toolCalls: calls.map((c) => ({ name: c.name, arguments: c.args as never })),\n streamed: merged.stream === true,\n streamId: dispatchStreamId,\n })\n } catch {\n /* observer errors are non-fatal */\n }\n }\n\n if (calls.length === 0) {\n helpers.log.trace({\n kind: 'converse-finish',\n message: `generation ended with stopReason=${stopReason ?? 'unknown'} and no tool use`,\n payload: { stopReason: stopReason ?? 'unknown' },\n })\n ctx.ack()\n return\n }\n\n for (const call of calls) {\n if (ctx.abortSignal.aborted) return\n // Resolve once at ingress; Converse sanitises only when rendering, so this preserves the\n // filtered id consistently for reporting, persistence, and any spool key.\n const callId = merged.toolCallIdFilter?.(call.id, ctx) ?? call.id\n const toolName = normalizeToolName(call.name)\n const tool = ctx.tools.get(toolName) as Tool | ArtifactTool | undefined\n const completedAt = nowIso()\n\n if (!isObject(call.args)) {\n const results = new Tokenizable(\n new E_CONVERSE_INVALID_TOOL_INPUT([JSON.stringify(call.args)]).message\n )\n helpers.reportToolCall(callId, { tool: toolName, args: {} })\n helpers.reportToolCall(callId, { results, isError: true, isComplete: true })\n await ctx.storeToolCall(\n new ToolCall({\n id: callId,\n tool: toolName,\n args: {},\n checksum: computeChecksum(toolName, {}),\n isComplete: true,\n isError: true,\n results,\n createdAt: completedAt,\n updatedAt: completedAt,\n completedAt,\n })\n )\n continue\n }\n\n if (!tool) {\n const available = ctx.tools\n .all()\n .map((t) => t.name)\n .sort()\n const results = new Tokenizable(\n available.length > 0\n ? `Tool not found: ${toolName}. Available tools: ${available.join(', ')}.`\n : `Tool not found: ${toolName}. No tools are available this turn.`\n )\n helpers.reportToolCall(callId, { tool: toolName, args: call.args })\n helpers.reportToolCall(callId, { results, isError: true, isComplete: true })\n await ctx.storeToolCall(\n new ToolCall({\n id: callId,\n tool: toolName,\n args: call.args,\n checksum: computeChecksum(toolName, call.args),\n isComplete: true,\n isError: true,\n results,\n createdAt: completedAt,\n updatedAt: completedAt,\n completedAt,\n })\n )\n continue\n }\n\n helpers.reportToolCall(callId, { tool: tool.name, args: call.args })\n let results: Tokenizable | SpooledArtifact | SpooledArtifact[] | Media | Media[] =\n new Tokenizable('')\n let isToolError = false\n try {\n const raw = await tool.executor(ctx)(call.args)\n results = Tokenizable.isTokenizable(raw)\n ? raw\n : new Tokenizable(typeof raw === 'string' ? raw : JSON.stringify(raw ?? ''))\n } catch (err) {\n isToolError = true\n results = new Tokenizable(isError(err) ? err.message : String(err))\n }\n const finishedAt = nowIso()\n helpers.reportToolCall(callId, { results, isError: isToolError, isComplete: true })\n await ctx.storeToolCall(\n new ToolCall({\n id: callId,\n tool: tool.name,\n args: call.args,\n checksum: computeChecksum(tool.name, call.args),\n isComplete: true,\n isError: isToolError,\n results,\n createdAt: finishedAt,\n updatedAt: finishedAt,\n completedAt: finishedAt,\n })\n )\n }\n }\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"adapter.cjs","names":["#baseline"],"sources":["../../../../src/batteries/llm/bedrock_converse/adapter.ts"],"sourcesContent":["/**\n * Cross-environment executor adapter for AWS Bedrock's native Converse API.\n *\n * @module @nhtio/adk/batteries/llm/bedrock_converse/adapter\n *\n * @remarks\n * Targets `POST {baseURL}/model/{modelId}/converse` (and `/converse-stream` when `stream` is set)\n * over plain HTTPS with a Bedrock API key (`Authorization: Bearer ABSK…`). Deliberately NO AWS SDK\n * and no SigV4 signer: the battery must stay cross-environment and dependency-light, and a bearer\n * key removes the only reason to pull in a signer.\n *\n * Why a native battery rather than pointing `openai_chat_completions` at a Converse-backed gateway:\n * Converse is a content-BLOCK protocol with strict role alternation, a required `toolConfig`\n * whenever tool blocks appear, and tool results carried on `user` turns. A gateway must repair all\n * of that on your behalf — most notably by MERGING consecutive same-role turns — and that repair is\n * invisible in the response. For ordinary use it is fine; for anything that needs to know what the\n * VENDOR received it is fatal, because a gateway's fix is indistinguishable from vendor tolerance.\n * See the validation battery's \"Which API surface a rule applies to\" guide, and\n * {@link BedrockConverseAdapterOptions.alternationPolicy} for the `'reject'` escape hatch that lets\n * Converse's own error surface.\n *\n * Options layer as in every other battery: constructor baseline → `executor()` overrides →\n * per-iteration `ctx.stash.bedrockConverse`, re-validated each iteration.\n */\n\nimport { DateTime } from 'luxon'\nimport { sha256 } from 'js-sha256'\nimport { v6 as uuidv6 } from 'uuid'\nimport { validateOptions } from './validation'\nimport { normalizeToolName } from '../chat_common/helpers'\nimport { isError, isObject, isInstanceOf } from '@nhtio/adk/guards'\nimport { resolveToolCallParser } from '../chat_common/tool_parsers'\nimport { canonicalStringify } from '../../../lib/utils/canonical_json'\nimport { Media, Message, Thought, Tokenizable, ToolCall } from '@nhtio/adk/common'\nimport {\n DEFAULT_CONVERSE_BUCKET_ORDER,\n buildConverseRequest,\n extractConverseGeneration,\n mediaToConverseImage,\n renderConverseToolResult,\n toolsToConverseTools,\n} from './helpers'\nimport {\n E_BEDROCK_CONVERSE_CONTEXT_OVERFLOW,\n E_INVALID_BEDROCK_CONVERSE_OPTIONS,\n E_CONVERSE_ALTERNATION_VIOLATION,\n E_CONVERSE_INVALID_TOOL_INPUT,\n E_CONVERSE_MISSING_TOOL_CONFIG,\n E_CONVERSE_REQUEST_FAILED,\n E_CONVERSE_STREAM_ERROR,\n} from './exceptions'\nimport {\n descriptionToChatCompletionsJsonSchema,\n filterThoughts,\n renderChatCompletionsSystemPrompt,\n renderFirstPartyRetrievables,\n renderMemories,\n renderRetrievableSafetyDirective,\n renderRetrievables,\n renderStandingInstructions,\n renderThirdPartyPrivateRetrievables,\n renderThirdPartyPublicRetrievables,\n renderThought,\n renderTrustedContent,\n renderUntrustedContent,\n} from '../chat_common/helpers'\nimport type { DispatchContext } from '@nhtio/adk/types'\nimport type { TokenEncoding, TokenEncodingId } from '@nhtio/adk/types'\nimport type { DispatchExecutorFn, DispatchExecutorHelpers } from '@nhtio/adk/types'\nimport type { ArtifactTool, Memory, SpooledArtifact, Tool } from '@nhtio/adk/common'\nimport type {\n BedrockConverseAdapterOptions,\n BedrockConverseHelpers,\n ConverseResponse,\n} from './types'\n\nconst nowIso = (): string => DateTime.now().toISO() ?? new Date().toISOString()\n\nconst DEFAULT_REGION = 'us-east-1'\n\nconst estimateTokensOf = async (\n value: { estimateTokens: (encoding: TokenEncoding) => number | Promise<number> },\n encoding: TokenEncodingId\n): Promise<number> => Promise.resolve(value.estimateTokens(encoding as TokenEncoding))\n\nconst computeChecksum = (tool: string, args: Record<string, unknown>): string =>\n sha256(`${tool}:${canonicalStringify(args)}`)\n\n/** Merge the three option layers, later winning. */\nconst mergeOptions = (\n ...layers: Array<Partial<BedrockConverseAdapterOptions> | undefined>\n): Partial<BedrockConverseAdapterOptions> => {\n const out: Record<string, unknown> = {}\n for (const layer of layers) {\n if (!layer) continue\n for (const [k, v] of Object.entries(layer)) if (v !== undefined) out[k] = v\n }\n return out as Partial<BedrockConverseAdapterOptions>\n}\n\n/** Fill every injectable helper, preferring the caller's override. */\nconst resolveHelpers = (\n overrides: Partial<BedrockConverseHelpers> | undefined\n): BedrockConverseHelpers => {\n const src = (overrides ?? {}) as Record<string, unknown>\n const pick = <T>(key: string, fallback: T): T => (src[key] as T | undefined) ?? fallback\n return {\n descriptionToChatCompletionsJsonSchema: pick(\n 'descriptionToChatCompletionsJsonSchema',\n descriptionToChatCompletionsJsonSchema\n ),\n renderUntrustedContent: pick('renderUntrustedContent', renderUntrustedContent),\n renderTrustedContent: pick('renderTrustedContent', renderTrustedContent),\n renderStandingInstructions: pick('renderStandingInstructions', renderStandingInstructions),\n renderMemories: pick('renderMemories', renderMemories),\n renderRetrievables: pick('renderRetrievables', renderRetrievables),\n renderRetrievableSafetyDirective: pick(\n 'renderRetrievableSafetyDirective',\n renderRetrievableSafetyDirective\n ),\n renderFirstPartyRetrievables: pick(\n 'renderFirstPartyRetrievables',\n renderFirstPartyRetrievables\n ),\n renderThirdPartyPublicRetrievables: pick(\n 'renderThirdPartyPublicRetrievables',\n renderThirdPartyPublicRetrievables\n ),\n renderThirdPartyPrivateRetrievables: pick(\n 'renderThirdPartyPrivateRetrievables',\n renderThirdPartyPrivateRetrievables\n ),\n renderThought: pick('renderThought', renderThought),\n filterThoughts: pick('filterThoughts', filterThoughts),\n renderChatCompletionsSystemPrompt: pick(\n 'renderChatCompletionsSystemPrompt',\n renderChatCompletionsSystemPrompt\n ),\n toolsToConverseTools: pick('toolsToConverseTools', toolsToConverseTools),\n renderConverseToolResult: pick('renderConverseToolResult', renderConverseToolResult),\n buildConverseRequest: pick('buildConverseRequest', buildConverseRequest),\n } as BedrockConverseHelpers\n}\n\n/**\n * Native Bedrock Converse executor adapter.\n *\n * @example\n * ```ts\n * const adapter = new BedrockConverseAdapter({\n * model: 'us.amazon.nova-2-lite-v1:0',\n * apiKey: process.env.AWS_BEARER_TOKEN_BEDROCK,\n * region: 'us-east-1',\n * })\n * const runner = new TurnRunner({ executorCallback: adapter.executor(), ... })\n * ```\n */\nexport class BedrockConverseAdapter {\n /** Per-iteration override key on `ctx.stash`. */\n public static readonly STASH_KEY = 'bedrockConverse' as const\n\n readonly #baseline: BedrockConverseAdapterOptions\n\n /**\n * @param options - Constructor-baseline options, re-validated each iteration after overrides merge.\n * @throws {@link E_INVALID_BEDROCK_CONVERSE_OPTIONS} when `options` is invalid.\n */\n constructor(options: unknown) {\n this.#baseline = validateOptions(options)\n }\n\n /** Narrowing guard for cross-realm instances. */\n public static isBedrockConverseAdapter(value: unknown): value is BedrockConverseAdapter {\n return isInstanceOf(value, 'BedrockConverseAdapter', BedrockConverseAdapter)\n }\n\n /**\n * Build a {@link DispatchExecutorFn} bound to the baseline plus optional executor-scope overrides.\n *\n * @param overrides - Higher precedence than the baseline, lower than `ctx.stash`.\n */\n executor(overrides?: Partial<BedrockConverseAdapterOptions>): DispatchExecutorFn {\n const baseline = this.#baseline\n const adapterClass = BedrockConverseAdapter\n return async (ctx: DispatchContext, helpers: DispatchExecutorHelpers): Promise<void> => {\n const warn = (message: string): void => {\n helpers.log.warn({ kind: 'helper-warning', message })\n }\n\n const stashRaw = ctx.stash.get(adapterClass.STASH_KEY, {}) as unknown\n const stashOverrides = isObject(stashRaw)\n ? (stashRaw as Partial<BedrockConverseAdapterOptions>)\n : {}\n const merged = validateOptions(mergeOptions(baseline, overrides, stashOverrides))\n if (\n merged.tokenEncoding !== undefined &&\n merged.tokenEncoding !== null &&\n merged.contextWindow === undefined\n ) {\n throw new E_INVALID_BEDROCK_CONVERSE_OPTIONS([\n 'tokenEncoding is non-null but contextWindow is undefined',\n ])\n }\n const resolved = resolveHelpers(merged.helpers)\n const selfIdentity = 'assistant'\n const dispatchStreamId = uuidv6()\n\n // Converse wants toolResult.content[] blocks, so results render ahead of assembly.\n const renderedToolCallResults = new Map<\n ToolCall,\n Array<{ text?: string; json?: Record<string, unknown> }>\n >()\n for (const tc of ctx.turnToolCalls) {\n renderedToolCallResults.set(\n tc,\n await resolved.renderConverseToolResult({\n toolCall: tc,\n results: tc.results as never,\n tool: ctx.tools.get(tc.tool) as Tool | ArtifactTool | undefined,\n renderUntrustedContent: resolved.renderUntrustedContent,\n renderTrustedContent: resolved.renderTrustedContent,\n unsupportedMediaPolicy: merged.unsupportedMediaPolicy ?? 'throw',\n warn,\n })\n )\n }\n\n if (\n merged.tokenEncoding !== undefined &&\n merged.tokenEncoding !== null &&\n merged.contextWindow !== undefined\n ) {\n const encoding = merged.tokenEncoding\n let total = await estimateTokensOf(ctx.systemPrompt, encoding)\n for (const value of ctx.standingInstructions)\n total += await estimateTokensOf(value, encoding)\n for (const memory of ctx.turnMemories as Set<Memory>)\n total += await estimateTokensOf(memory.content, encoding)\n for (const retrievable of ctx.turnRetrievables)\n total += await estimateTokensOf(\n retrievable.inline\n ? (retrievable.content as any)\n : new Tokenizable(`[Reference available: ${retrievable.id}]`),\n encoding\n )\n for (const message of ctx.turnMessages) {\n if (message.content !== undefined)\n total += await estimateTokensOf(message.content, encoding)\n }\n for (const thought of ctx.turnThoughts)\n total += await estimateTokensOf(thought.content, encoding)\n for (const result of renderedToolCallResults.values()) {\n total += await estimateTokensOf(new Tokenizable(JSON.stringify(result)), encoding)\n }\n const tools = ctx.tools.visible()\n if (tools.length > 0) {\n // Tool DECLARATIONS: the Bedrock wire ships tools as an array, which the PROVIDER\n // serializes server-side into the model's own format. Tally the tokens of the wire\n // tools JSON (`JSON.stringify`) as an honest FLOOR — a truthful lower bound. We add\n // a safe 10% margin to cover JSON structural overhead and nested formatting.\n const toolTokens = await estimateTokensOf(\n new Tokenizable(JSON.stringify(resolved.toolsToConverseTools(tools))),\n encoding\n )\n total += Math.ceil(toolTokens * 1.1)\n }\n if (total + (merged.maxTokens ?? 0) > merged.contextWindow) {\n throw new E_BEDROCK_CONVERSE_CONTEXT_OVERFLOW([\n total + (merged.maxTokens ?? 0),\n merged.contextWindow,\n encoding,\n ])\n }\n }\n\n const request = await resolved.buildConverseRequest({\n systemPrompt: ctx.systemPrompt,\n standingInstructions: ctx.standingInstructions,\n memories: ctx.turnMemories,\n retrievables: ctx.turnRetrievables,\n messages: ctx.turnMessages,\n thoughts: ctx.turnThoughts,\n toolCalls: ctx.turnToolCalls,\n tools: ctx.tools,\n renderedToolCallResults,\n bucketOrder: merged.bucketOrder ?? (DEFAULT_CONVERSE_BUCKET_ORDER as never),\n selfIdentity,\n thoughtSurfacing: merged.thoughtSurfacing ?? 'all-self',\n replayCompatibility: [],\n alternationPolicy: merged.alternationPolicy ?? 'merge',\n helpers: resolved,\n decodeMedia: mediaToConverseImage,\n unsupportedMediaPolicy: merged.unsupportedMediaPolicy,\n warn,\n })\n\n const inferenceConfig = {\n ...(merged.maxTokens !== undefined ? { maxTokens: merged.maxTokens } : {}),\n ...(merged.temperature !== undefined ? { temperature: merged.temperature } : {}),\n ...(merged.topP !== undefined ? { topP: merged.topP } : {}),\n ...(merged.stopSequences ? { stopSequences: merged.stopSequences } : {}),\n }\n const body = {\n ...request,\n ...(merged.toolChoice && request.toolConfig\n ? { toolConfig: { ...request.toolConfig, toolChoice: merged.toolChoice } }\n : {}),\n ...(Object.keys(inferenceConfig).length > 0 ? { inferenceConfig } : {}),\n ...(merged.additionalModelRequestFields\n ? { additionalModelRequestFields: merged.additionalModelRequestFields }\n : {}),\n }\n\n // The EXACT body about to be POSTed. An ADK-control key — stripped from the wire request.\n if (merged.onPromptAssembled) {\n try {\n merged.onPromptAssembled({\n battery: 'bedrock_converse',\n kind: 'request-body',\n messages: body.messages,\n tools: body.toolConfig?.tools,\n requestBody: body,\n streamed: merged.stream === true,\n streamId: dispatchStreamId,\n })\n } catch {\n /* observer errors are non-fatal */\n }\n }\n\n const base = (\n merged.baseURL ?? `https://bedrock-runtime.${merged.region ?? DEFAULT_REGION}.amazonaws.com`\n ).replace(/\\/$/, '')\n const action = merged.stream === true ? 'converse-stream' : 'converse'\n // The model id contains ':' and '.', both legal in a path segment but worth encoding so a\n // future id with a reserved character does not silently reshape the URL.\n const url = `${base}/model/${encodeURIComponent(merged.model)}/${action}`\n const headers: Record<string, string> = { 'Content-Type': 'application/json' }\n if (merged.apiKey) headers.Authorization = `Bearer ${merged.apiKey}`\n\n const doFetch = merged.fetch ?? globalThis.fetch\n let parsed: ConverseResponse\n try {\n const res = await doFetch(url, {\n method: 'POST',\n headers,\n body: JSON.stringify(body),\n signal: merged.timeoutMs ? AbortSignal.timeout(merged.timeoutMs) : ctx.abortSignal,\n })\n const text = await res.text()\n if (!res.ok) {\n // Classify the two Converse-specific rejections: both are actionable, and both otherwise\n // arrive as an undifferentiated ValidationException.\n if (/toolConfig/i.test(text)) {\n ctx.nack(new E_CONVERSE_MISSING_TOOL_CONFIG([text.slice(0, 400)]))\n return\n }\n if (/alternat|consecutive|must alternate/i.test(text)) {\n ctx.nack(new E_CONVERSE_ALTERNATION_VIOLATION([text.slice(0, 400)]))\n return\n }\n ctx.nack(new E_CONVERSE_REQUEST_FAILED([res.status, text.slice(0, 400)]))\n return\n }\n parsed = JSON.parse(text) as ConverseResponse\n } catch (err) {\n ctx.nack(new E_CONVERSE_STREAM_ERROR([isError(err) ? err.message : String(err)]))\n return\n }\n\n const { text, reasoning, toolUses, stopReason } = extractConverseGeneration(parsed)\n const responseId = uuidv6()\n\n if (text.length > 0) {\n const messageId = `${responseId}:message`\n helpers.reportMessage(messageId, text, { isComplete: true })\n await ctx.storeMessage(\n new Message({\n id: messageId,\n role: 'assistant',\n content: text,\n identity: selfIdentity,\n createdAt: nowIso(),\n updatedAt: nowIso(),\n })\n )\n }\n if (reasoning.length > 0) {\n const thoughtId = `${responseId}:thought`\n helpers.reportThought(thoughtId, reasoning, { isComplete: true })\n await ctx.storeThought(\n new Thought({\n id: thoughtId,\n content: reasoning,\n identity: selfIdentity,\n createdAt: nowIso(),\n updatedAt: nowIso(),\n })\n )\n }\n\n // Fallback recovery is consulted ONLY when the provider returned no structured tool use, so\n // a native toolUse always wins over a parsed one.\n const calls = toolUses.map((t) => ({ id: t.toolUseId, name: t.name, args: t.input }))\n if (calls.length === 0 && merged.localToolCallParser !== undefined && text.length > 0) {\n const parser = resolveToolCallParser(merged.localToolCallParser)\n const recovered = parser(text, { toolNames: ctx.tools.all().map((t) => t.name) })\n for (const call of recovered.calls) {\n calls.push({\n id: uuidv6(),\n name: call.name,\n args: (call.arguments ?? {}) as Record<string, unknown>,\n })\n }\n }\n\n if (merged.onRawGeneration) {\n try {\n merged.onRawGeneration({\n rawText: text,\n cleanedText: text,\n reasoning: reasoning.length > 0 ? [reasoning] : [],\n toolCalls: calls.map((c) => ({ name: c.name, arguments: c.args as never })),\n streamed: merged.stream === true,\n streamId: dispatchStreamId,\n })\n } catch {\n /* observer errors are non-fatal */\n }\n }\n\n if (calls.length === 0) {\n helpers.log.trace({\n kind: 'converse-finish',\n message: `generation ended with stopReason=${stopReason ?? 'unknown'} and no tool use`,\n payload: { stopReason: stopReason ?? 'unknown' },\n })\n if (merged.autoAck) ctx.ack()\n return\n }\n\n for (const call of calls) {\n if (ctx.abortSignal.aborted) return\n // Resolve once at ingress; Converse sanitises only when rendering, so this preserves the\n // filtered id consistently for reporting, persistence, and any spool key.\n const callId = merged.toolCallIdFilter?.(call.id, ctx) ?? call.id\n const toolName = normalizeToolName(call.name)\n const tool = ctx.tools.get(toolName) as Tool | ArtifactTool | undefined\n const completedAt = nowIso()\n\n if (!isObject(call.args)) {\n const results = new Tokenizable(\n new E_CONVERSE_INVALID_TOOL_INPUT([JSON.stringify(call.args)]).message\n )\n helpers.reportToolCall(callId, { tool: toolName, args: {} })\n helpers.reportToolCall(callId, { results, isError: true, isComplete: true })\n await ctx.storeToolCall(\n new ToolCall({\n id: callId,\n tool: toolName,\n args: {},\n checksum: computeChecksum(toolName, {}),\n isComplete: true,\n isError: true,\n results,\n createdAt: completedAt,\n updatedAt: completedAt,\n completedAt,\n })\n )\n continue\n }\n\n if (!tool) {\n const available = ctx.tools\n .all()\n .map((t) => t.name)\n .sort()\n const results = new Tokenizable(\n available.length > 0\n ? `Tool not found: ${toolName}. Available tools: ${available.join(', ')}.`\n : `Tool not found: ${toolName}. No tools are available this turn.`\n )\n helpers.reportToolCall(callId, { tool: toolName, args: call.args })\n helpers.reportToolCall(callId, { results, isError: true, isComplete: true })\n await ctx.storeToolCall(\n new ToolCall({\n id: callId,\n tool: toolName,\n args: call.args,\n checksum: computeChecksum(toolName, call.args),\n isComplete: true,\n isError: true,\n results,\n createdAt: completedAt,\n updatedAt: completedAt,\n completedAt,\n })\n )\n continue\n }\n\n helpers.reportToolCall(callId, { tool: tool.name, args: call.args })\n let results: Tokenizable | SpooledArtifact | SpooledArtifact[] | Media | Media[] =\n new Tokenizable('')\n let isToolError = false\n try {\n const raw = await tool.executor(ctx)(call.args)\n results = Tokenizable.isTokenizable(raw)\n ? raw\n : new Tokenizable(typeof raw === 'string' ? raw : JSON.stringify(raw ?? ''))\n } catch (err) {\n isToolError = true\n results = new Tokenizable(isError(err) ? err.message : String(err))\n }\n const finishedAt = nowIso()\n helpers.reportToolCall(callId, { results, isError: isToolError, isComplete: true })\n await ctx.storeToolCall(\n new ToolCall({\n id: callId,\n tool: tool.name,\n args: call.args,\n checksum: computeChecksum(tool.name, call.args),\n isComplete: true,\n isError: isToolError,\n results,\n createdAt: finishedAt,\n updatedAt: finishedAt,\n completedAt: finishedAt,\n })\n )\n }\n }\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { n as isInstanceOf, r as isObject, t as isError } from "../../../guards-BEpY7lBI.mjs";
|
|
2
|
-
import { r as Tokenizable } from "../../../tokenizable-
|
|
3
|
-
import { h as canonicalStringify } from "../../../spooled_artifact-
|
|
4
|
-
import { n as Message, t as Thought } from "../../../thought-
|
|
5
|
-
import { t as ToolCall } from "../../../tool_call-
|
|
6
|
-
import "../../../common-
|
|
2
|
+
import { r as Tokenizable } from "../../../tokenizable-VB4Av8GF.mjs";
|
|
3
|
+
import { h as canonicalStringify } from "../../../spooled_artifact-Bw_7swIp.mjs";
|
|
4
|
+
import { n as Message, t as Thought } from "../../../thought-BE1KGEhV.mjs";
|
|
5
|
+
import { t as ToolCall } from "../../../tool_call-Cfaj-6zK.mjs";
|
|
6
|
+
import "../../../common-BpdHIpQE.mjs";
|
|
7
7
|
import "../../../guards.mjs";
|
|
8
8
|
import { O as resolveToolCallParser } from "../../../tool_parsers-DgZhgxV8.mjs";
|
|
9
|
-
import { A as renderMemories, E as normalizeToolName, F as renderThirdPartyPrivateRetrievables, I as renderThirdPartyPublicRetrievables, L as renderThought, M as renderRetrievableSafetyDirective, N as renderRetrievables, O as renderChatCompletionsSystemPrompt, P as renderStandingInstructions, R as renderTrustedContent, k as renderFirstPartyRetrievables, x as filterThoughts, y as descriptionToChatCompletionsJsonSchema, z as renderUntrustedContent } from "../../../helpers-
|
|
10
|
-
import { E_CONVERSE_ALTERNATION_VIOLATION, E_CONVERSE_INVALID_TOOL_INPUT, E_CONVERSE_MISSING_TOOL_CONFIG, E_CONVERSE_REQUEST_FAILED, E_CONVERSE_STREAM_ERROR } from "./exceptions.mjs";
|
|
9
|
+
import { A as renderMemories, E as normalizeToolName, F as renderThirdPartyPrivateRetrievables, I as renderThirdPartyPublicRetrievables, L as renderThought, M as renderRetrievableSafetyDirective, N as renderRetrievables, O as renderChatCompletionsSystemPrompt, P as renderStandingInstructions, R as renderTrustedContent, k as renderFirstPartyRetrievables, x as filterThoughts, y as descriptionToChatCompletionsJsonSchema, z as renderUntrustedContent } from "../../../helpers-BH7HTtkD.mjs";
|
|
10
|
+
import { E_BEDROCK_CONVERSE_CONTEXT_OVERFLOW, E_CONVERSE_ALTERNATION_VIOLATION, E_CONVERSE_INVALID_TOOL_INPUT, E_CONVERSE_MISSING_TOOL_CONFIG, E_CONVERSE_REQUEST_FAILED, E_CONVERSE_STREAM_ERROR, E_INVALID_BEDROCK_CONVERSE_OPTIONS } from "./exceptions.mjs";
|
|
11
11
|
import { validateOptions } from "./validation.mjs";
|
|
12
12
|
import { DEFAULT_CONVERSE_BUCKET_ORDER, buildConverseRequest, extractConverseGeneration, mediaToConverseImage, renderConverseToolResult, toolsToConverseTools } from "./helpers.mjs";
|
|
13
13
|
import { DateTime } from "luxon";
|
|
@@ -40,6 +40,7 @@ import { v6 } from "uuid";
|
|
|
40
40
|
*/
|
|
41
41
|
var nowIso = () => DateTime.now().toISO() ?? (/* @__PURE__ */ new Date()).toISOString();
|
|
42
42
|
var DEFAULT_REGION = "us-east-1";
|
|
43
|
+
var estimateTokensOf = async (value, encoding) => Promise.resolve(value.estimateTokens(encoding));
|
|
43
44
|
var computeChecksum = (tool, args) => sha256(`${tool}:${canonicalStringify(args)}`);
|
|
44
45
|
/** Merge the three option layers, later winning. */
|
|
45
46
|
var mergeOptions = (...layers) => {
|
|
@@ -118,6 +119,7 @@ var BedrockConverseAdapter = class BedrockConverseAdapter {
|
|
|
118
119
|
};
|
|
119
120
|
const stashRaw = ctx.stash.get(adapterClass.STASH_KEY, {});
|
|
120
121
|
const merged = validateOptions(mergeOptions(baseline, overrides, isObject(stashRaw) ? stashRaw : {}));
|
|
122
|
+
if (merged.tokenEncoding !== void 0 && merged.tokenEncoding !== null && merged.contextWindow === void 0) throw new E_INVALID_BEDROCK_CONVERSE_OPTIONS(["tokenEncoding is non-null but contextWindow is undefined"]);
|
|
121
123
|
const resolved = resolveHelpers(merged.helpers);
|
|
122
124
|
const selfIdentity = "assistant";
|
|
123
125
|
const dispatchStreamId = v6();
|
|
@@ -131,6 +133,26 @@ var BedrockConverseAdapter = class BedrockConverseAdapter {
|
|
|
131
133
|
unsupportedMediaPolicy: merged.unsupportedMediaPolicy ?? "throw",
|
|
132
134
|
warn
|
|
133
135
|
}));
|
|
136
|
+
if (merged.tokenEncoding !== void 0 && merged.tokenEncoding !== null && merged.contextWindow !== void 0) {
|
|
137
|
+
const encoding = merged.tokenEncoding;
|
|
138
|
+
let total = await estimateTokensOf(ctx.systemPrompt, encoding);
|
|
139
|
+
for (const value of ctx.standingInstructions) total += await estimateTokensOf(value, encoding);
|
|
140
|
+
for (const memory of ctx.turnMemories) total += await estimateTokensOf(memory.content, encoding);
|
|
141
|
+
for (const retrievable of ctx.turnRetrievables) total += await estimateTokensOf(retrievable.inline ? retrievable.content : new Tokenizable(`[Reference available: ${retrievable.id}]`), encoding);
|
|
142
|
+
for (const message of ctx.turnMessages) if (message.content !== void 0) total += await estimateTokensOf(message.content, encoding);
|
|
143
|
+
for (const thought of ctx.turnThoughts) total += await estimateTokensOf(thought.content, encoding);
|
|
144
|
+
for (const result of renderedToolCallResults.values()) total += await estimateTokensOf(new Tokenizable(JSON.stringify(result)), encoding);
|
|
145
|
+
const tools = ctx.tools.visible();
|
|
146
|
+
if (tools.length > 0) {
|
|
147
|
+
const toolTokens = await estimateTokensOf(new Tokenizable(JSON.stringify(resolved.toolsToConverseTools(tools))), encoding);
|
|
148
|
+
total += Math.ceil(toolTokens * 1.1);
|
|
149
|
+
}
|
|
150
|
+
if (total + (merged.maxTokens ?? 0) > merged.contextWindow) throw new E_BEDROCK_CONVERSE_CONTEXT_OVERFLOW([
|
|
151
|
+
total + (merged.maxTokens ?? 0),
|
|
152
|
+
merged.contextWindow,
|
|
153
|
+
encoding
|
|
154
|
+
]);
|
|
155
|
+
}
|
|
134
156
|
const request = await resolved.buildConverseRequest({
|
|
135
157
|
systemPrompt: ctx.systemPrompt,
|
|
136
158
|
standingInstructions: ctx.standingInstructions,
|
|
@@ -266,7 +288,7 @@ var BedrockConverseAdapter = class BedrockConverseAdapter {
|
|
|
266
288
|
message: `generation ended with stopReason=${stopReason ?? "unknown"} and no tool use`,
|
|
267
289
|
payload: { stopReason: stopReason ?? "unknown" }
|
|
268
290
|
});
|
|
269
|
-
ctx.ack();
|
|
291
|
+
if (merged.autoAck) ctx.ack();
|
|
270
292
|
return;
|
|
271
293
|
}
|
|
272
294
|
for (const call of calls) {
|