@od-oneapp/ai-platform 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +235 -0
- package/dist/agents-base.d.mts +12 -0
- package/dist/agents-base.d.mts.map +1 -0
- package/dist/agents-base.mjs +20 -0
- package/dist/agents-base.mjs.map +1 -0
- package/dist/agents-control-flow.d.mts +115 -0
- package/dist/agents-control-flow.d.mts.map +1 -0
- package/dist/agents-control-flow.mjs +514 -0
- package/dist/agents-control-flow.mjs.map +1 -0
- package/dist/agents-coordinator.d.mts +11 -0
- package/dist/agents-coordinator.d.mts.map +1 -0
- package/dist/agents-coordinator.mjs +12 -0
- package/dist/agents-coordinator.mjs.map +1 -0
- package/dist/agents-experimental.d.mts +153 -0
- package/dist/agents-experimental.d.mts.map +1 -0
- package/dist/agents-experimental.mjs +580 -0
- package/dist/agents-experimental.mjs.map +1 -0
- package/dist/agents-fallback.d.mts +10 -0
- package/dist/agents-fallback.d.mts.map +1 -0
- package/dist/agents-fallback.mjs +15 -0
- package/dist/agents-fallback.mjs.map +1 -0
- package/dist/agents-multi-swarm.d.mts +9 -0
- package/dist/agents-multi-swarm.d.mts.map +1 -0
- package/dist/agents-multi-swarm.mjs +44 -0
- package/dist/agents-multi-swarm.mjs.map +1 -0
- package/dist/agents-multi.d.mts +10 -0
- package/dist/agents-multi.d.mts.map +1 -0
- package/dist/agents-multi.mjs +44 -0
- package/dist/agents-multi.mjs.map +1 -0
- package/dist/agents-observability.d.mts +161 -0
- package/dist/agents-observability.d.mts.map +1 -0
- package/dist/agents-observability.mjs +550 -0
- package/dist/agents-observability.mjs.map +1 -0
- package/dist/agents-patterns.d.mts +9 -0
- package/dist/agents-patterns.d.mts.map +1 -0
- package/dist/agents-patterns.mjs +18 -0
- package/dist/agents-patterns.mjs.map +1 -0
- package/dist/agents-persistence.d.mts +234 -0
- package/dist/agents-persistence.d.mts.map +1 -0
- package/dist/agents-persistence.mjs +447 -0
- package/dist/agents-persistence.mjs.map +1 -0
- package/dist/agents-triage.d.mts +11 -0
- package/dist/agents-triage.d.mts.map +1 -0
- package/dist/agents-triage.mjs +13 -0
- package/dist/agents-triage.mjs.map +1 -0
- package/dist/agents-workflows.d.mts +9 -0
- package/dist/agents-workflows.d.mts.map +1 -0
- package/dist/agents-workflows.mjs +9 -0
- package/dist/agents-workflows.mjs.map +1 -0
- package/dist/agents.d.mts +30 -0
- package/dist/agents.d.mts.map +1 -0
- package/dist/agents.mjs +50 -0
- package/dist/agents.mjs.map +1 -0
- package/dist/aggregation-8KJF1uzp.d.mts +276 -0
- package/dist/aggregation-8KJF1uzp.d.mts.map +1 -0
- package/dist/aggregation-BDop87kL.mjs +1180 -0
- package/dist/aggregation-BDop87kL.mjs.map +1 -0
- package/dist/ai-runtime-CDzQztTt.mjs +85 -0
- package/dist/ai-runtime-CDzQztTt.mjs.map +1 -0
- package/dist/ai-runtime-DIwOEc6g.d.mts +56 -0
- package/dist/ai-runtime-DIwOEc6g.d.mts.map +1 -0
- package/dist/ai-sdk-error-integration-D0GDqrM0.d.mts +553 -0
- package/dist/ai-sdk-error-integration-D0GDqrM0.d.mts.map +1 -0
- package/dist/approval-queue-BcDDQ4oQ.mjs +104 -0
- package/dist/approval-queue-BcDDQ4oQ.mjs.map +1 -0
- package/dist/approval-queue-CiKiFT9z.d.mts +21 -0
- package/dist/approval-queue-CiKiFT9z.d.mts.map +1 -0
- package/dist/audio-BzvN7r10.d.mts +79 -0
- package/dist/audio-BzvN7r10.d.mts.map +1 -0
- package/dist/audio-vBG_62ME.mjs +226 -0
- package/dist/audio-vBG_62ME.mjs.map +1 -0
- package/dist/audit-logger-Bb2JIcIk.d.mts +12 -0
- package/dist/audit-logger-Bb2JIcIk.d.mts.map +1 -0
- package/dist/audit-logger-CHIP8bRO.mjs +596 -0
- package/dist/audit-logger-CHIP8bRO.mjs.map +1 -0
- package/dist/auto-resume-BpUNbPtp.d.mts +160 -0
- package/dist/auto-resume-BpUNbPtp.d.mts.map +1 -0
- package/dist/auto-resume-BuFRNvAX.mjs +638 -0
- package/dist/auto-resume-BuFRNvAX.mjs.map +1 -0
- package/dist/budget-guard-C83KCH9V.d.mts +52 -0
- package/dist/budget-guard-C83KCH9V.d.mts.map +1 -0
- package/dist/budget-guard-d_b5rq4u.mjs +158 -0
- package/dist/budget-guard-d_b5rq4u.mjs.map +1 -0
- package/dist/budget-guard-gyhJS00s.mjs +234 -0
- package/dist/budget-guard-gyhJS00s.mjs.map +1 -0
- package/dist/buffer-BC8mvXHE.d.mts +98 -0
- package/dist/buffer-BC8mvXHE.d.mts.map +1 -0
- package/dist/buffer-CefJGbRy.mjs +289 -0
- package/dist/buffer-CefJGbRy.mjs.map +1 -0
- package/dist/caching-adapters.d.mts +5 -0
- package/dist/caching-adapters.mjs +3 -0
- package/dist/caching-strategies.d.mts +52 -0
- package/dist/caching-strategies.d.mts.map +1 -0
- package/dist/caching-strategies.mjs +703 -0
- package/dist/caching-strategies.mjs.map +1 -0
- package/dist/caching.d.mts +14 -0
- package/dist/caching.d.mts.map +1 -0
- package/dist/caching.mjs +15 -0
- package/dist/caching.mjs.map +1 -0
- package/dist/catalog.d.mts +19 -0
- package/dist/catalog.d.mts.map +1 -0
- package/dist/catalog.mjs +1114 -0
- package/dist/catalog.mjs.map +1 -0
- package/dist/chunk-CkzbjWQW.mjs +20 -0
- package/dist/circuit-breaker-DoKWPORd.mjs +262 -0
- package/dist/circuit-breaker-DoKWPORd.mjs.map +1 -0
- package/dist/circuit-breaker-Mey3E7tW.d.mts +64 -0
- package/dist/circuit-breaker-Mey3E7tW.d.mts.map +1 -0
- package/dist/citation-generator-C-9RpbHq.mjs +103 -0
- package/dist/citation-generator-C-9RpbHq.mjs.map +1 -0
- package/dist/citation-generator-CDSymDs_.d.mts +18 -0
- package/dist/citation-generator-CDSymDs_.d.mts.map +1 -0
- package/dist/client-CpacYDIE.mjs +882 -0
- package/dist/client-CpacYDIE.mjs.map +1 -0
- package/dist/client.d.mts +103 -0
- package/dist/client.d.mts.map +1 -0
- package/dist/client.mjs +470 -0
- package/dist/client.mjs.map +1 -0
- package/dist/compliance-approval-queue-DQGLojAm.mjs +172 -0
- package/dist/compliance-approval-queue-DQGLojAm.mjs.map +1 -0
- package/dist/compliance-approval-queue-IrMxFfSJ.d.mts +99 -0
- package/dist/compliance-approval-queue-IrMxFfSJ.d.mts.map +1 -0
- package/dist/compliance-wrapper-CrOMHhHN.mjs +528 -0
- package/dist/compliance-wrapper-CrOMHhHN.mjs.map +1 -0
- package/dist/conditions-DmQ6Y1Wt.mjs +179 -0
- package/dist/conditions-DmQ6Y1Wt.mjs.map +1 -0
- package/dist/conditions-zDrKfrc3.d.mts +42 -0
- package/dist/conditions-zDrKfrc3.d.mts.map +1 -0
- package/dist/console-BGMxxPZN.mjs +181 -0
- package/dist/console-BGMxxPZN.mjs.map +1 -0
- package/dist/console-DqEqZd4A.d.mts +76 -0
- package/dist/console-DqEqZd4A.d.mts.map +1 -0
- package/dist/controller-BOy3-xbC.mjs +501 -0
- package/dist/controller-BOy3-xbC.mjs.map +1 -0
- package/dist/controller-Y0NGosbJ.d.mts +104 -0
- package/dist/controller-Y0NGosbJ.d.mts.map +1 -0
- package/dist/coordinator-agent-BglqZLwo.d.mts +54 -0
- package/dist/coordinator-agent-BglqZLwo.d.mts.map +1 -0
- package/dist/coordinator-agent-WFWBRL-G.mjs +236 -0
- package/dist/coordinator-agent-WFWBRL-G.mjs.map +1 -0
- package/dist/crypto-8ABhc3TD.mjs +40 -0
- package/dist/crypto-8ABhc3TD.mjs.map +1 -0
- package/dist/environment-CSoJb0SW.mjs +255 -0
- package/dist/environment-CSoJb0SW.mjs.map +1 -0
- package/dist/error-handling-DNVkm6RY.mjs +1334 -0
- package/dist/error-handling-DNVkm6RY.mjs.map +1 -0
- package/dist/errors-CQ8tF4dP.mjs +985 -0
- package/dist/errors-CQ8tF4dP.mjs.map +1 -0
- package/dist/errors-CfYdVeum.d.mts +212 -0
- package/dist/errors-CfYdVeum.d.mts.map +1 -0
- package/dist/errors-Dtn-UeRi.mjs +61 -0
- package/dist/errors-Dtn-UeRi.mjs.map +1 -0
- package/dist/evaluator-Cs84qkr8.mjs +91 -0
- package/dist/evaluator-Cs84qkr8.mjs.map +1 -0
- package/dist/evaluator-optimizer-De67_mJC.mjs +1086 -0
- package/dist/evaluator-optimizer-De67_mJC.mjs.map +1 -0
- package/dist/evaluator-optimizer-pattern-B5939s2Z.mjs +367 -0
- package/dist/evaluator-optimizer-pattern-B5939s2Z.mjs.map +1 -0
- package/dist/evaluator-optimizer-pattern-D1AJrzBD.d.mts +72 -0
- package/dist/evaluator-optimizer-pattern-D1AJrzBD.d.mts.map +1 -0
- package/dist/factory-DP6VSl8C.mjs +307 -0
- package/dist/factory-DP6VSl8C.mjs.map +1 -0
- package/dist/generative-ui-catalog.d.mts +8 -0
- package/dist/generative-ui-catalog.d.mts.map +1 -0
- package/dist/generative-ui-catalog.mjs +679 -0
- package/dist/generative-ui-catalog.mjs.map +1 -0
- package/dist/generative-ui-registry.d.mts +195 -0
- package/dist/generative-ui-registry.d.mts.map +1 -0
- package/dist/generative-ui-registry.mjs +250 -0
- package/dist/generative-ui-registry.mjs.map +1 -0
- package/dist/generative-ui-stream.d.mts +23 -0
- package/dist/generative-ui-stream.d.mts.map +1 -0
- package/dist/generative-ui-stream.mjs +219 -0
- package/dist/generative-ui-stream.mjs.map +1 -0
- package/dist/generative-ui-types.d.mts +123 -0
- package/dist/generative-ui-types.d.mts.map +1 -0
- package/dist/generative-ui-types.mjs +1 -0
- package/dist/generative-ui.d.mts +13 -0
- package/dist/generative-ui.d.mts.map +1 -0
- package/dist/generative-ui.mjs +21 -0
- package/dist/generative-ui.mjs.map +1 -0
- package/dist/governance-audit.d.mts +3 -0
- package/dist/governance-audit.mjs +3 -0
- package/dist/governance-compliance.d.mts +5 -0
- package/dist/governance-compliance.mjs +4 -0
- package/dist/governance-policies.d.mts +4 -0
- package/dist/governance-policies.mjs +4 -0
- package/dist/governance-tenancy.d.mts +3 -0
- package/dist/governance-tenancy.mjs +3 -0
- package/dist/governance.d.mts +88 -0
- package/dist/governance.d.mts.map +1 -0
- package/dist/governance.mjs +432 -0
- package/dist/governance.mjs.map +1 -0
- package/dist/grounding-attribution.d.mts +63 -0
- package/dist/grounding-attribution.d.mts.map +1 -0
- package/dist/grounding-attribution.mjs +259 -0
- package/dist/grounding-attribution.mjs.map +1 -0
- package/dist/grounding-citation.d.mts +2 -0
- package/dist/grounding-citation.mjs +3 -0
- package/dist/grounding-context.d.mts +9 -0
- package/dist/grounding-context.d.mts.map +1 -0
- package/dist/grounding-context.mjs +19 -0
- package/dist/grounding-context.mjs.map +1 -0
- package/dist/grounding-embed.d.mts +102 -0
- package/dist/grounding-embed.d.mts.map +1 -0
- package/dist/grounding-embed.mjs +417 -0
- package/dist/grounding-embed.mjs.map +1 -0
- package/dist/grounding-hallucination.d.mts +44 -0
- package/dist/grounding-hallucination.d.mts.map +1 -0
- package/dist/grounding-hallucination.mjs +115 -0
- package/dist/grounding-hallucination.mjs.map +1 -0
- package/dist/grounding-proof-map.d.mts +9 -0
- package/dist/grounding-proof-map.d.mts.map +1 -0
- package/dist/grounding-proof-map.mjs +26 -0
- package/dist/grounding-proof-map.mjs.map +1 -0
- package/dist/grounding-rag.d.mts +10 -0
- package/dist/grounding-rag.d.mts.map +1 -0
- package/dist/grounding-rag.mjs +27 -0
- package/dist/grounding-rag.mjs.map +1 -0
- package/dist/grounding-verification.d.mts +48 -0
- package/dist/grounding-verification.d.mts.map +1 -0
- package/dist/grounding-verification.mjs +224 -0
- package/dist/grounding-verification.mjs.map +1 -0
- package/dist/grounding.d.mts +24 -0
- package/dist/grounding.d.mts.map +1 -0
- package/dist/grounding.mjs +77 -0
- package/dist/grounding.mjs.map +1 -0
- package/dist/hitl-active-learning.d.mts +41 -0
- package/dist/hitl-active-learning.d.mts.map +1 -0
- package/dist/hitl-active-learning.mjs +178 -0
- package/dist/hitl-active-learning.mjs.map +1 -0
- package/dist/hitl-annotation.d.mts +74 -0
- package/dist/hitl-annotation.d.mts.map +1 -0
- package/dist/hitl-annotation.mjs +170 -0
- package/dist/hitl-annotation.mjs.map +1 -0
- package/dist/hitl-approval.d.mts +2 -0
- package/dist/hitl-approval.mjs +3 -0
- package/dist/hitl-feedback.d.mts +59 -0
- package/dist/hitl-feedback.d.mts.map +1 -0
- package/dist/hitl-feedback.mjs +137 -0
- package/dist/hitl-feedback.mjs.map +1 -0
- package/dist/hitl-review.d.mts +2 -0
- package/dist/hitl-review.mjs +3 -0
- package/dist/hitl.d.mts +14 -0
- package/dist/hitl.d.mts.map +1 -0
- package/dist/hitl.mjs +22 -0
- package/dist/hitl.mjs.map +1 -0
- package/dist/index-B17HT-VL.d.mts +285 -0
- package/dist/index-B17HT-VL.d.mts.map +1 -0
- package/dist/index-BDwgsK9B.d.mts +101 -0
- package/dist/index-BDwgsK9B.d.mts.map +1 -0
- package/dist/index-BGgMn_Ev.d.mts +2615 -0
- package/dist/index-BGgMn_Ev.d.mts.map +1 -0
- package/dist/index-DOqe5r9G.d.mts +318 -0
- package/dist/index-DOqe5r9G.d.mts.map +1 -0
- package/dist/index-DotINT7o.d.mts +1004 -0
- package/dist/index-DotINT7o.d.mts.map +1 -0
- package/dist/index-URlW7aD1.d.mts +67 -0
- package/dist/index-URlW7aD1.d.mts.map +1 -0
- package/dist/index.d.mts +64 -0
- package/dist/index.d.mts.map +1 -0
- package/dist/index.mjs +46 -0
- package/dist/index.mjs.map +1 -0
- package/dist/integrations-blob-storage.d.mts +25 -0
- package/dist/integrations-blob-storage.d.mts.map +1 -0
- package/dist/integrations-blob-storage.mjs +3 -0
- package/dist/integrations-notifications.d.mts +2 -0
- package/dist/integrations-notifications.mjs +3 -0
- package/dist/integrations-rate-limit.d.mts +27 -0
- package/dist/integrations-rate-limit.d.mts.map +1 -0
- package/dist/integrations-rate-limit.mjs +30 -0
- package/dist/integrations-rate-limit.mjs.map +1 -0
- package/dist/integrations-redis.d.mts +3 -0
- package/dist/integrations-redis.mjs +3 -0
- package/dist/integrations-stream.d.mts +14 -0
- package/dist/integrations-stream.d.mts.map +1 -0
- package/dist/integrations-stream.mjs +3 -0
- package/dist/integrations.d.mts +7 -0
- package/dist/integrations.mjs +7 -0
- package/dist/log-adapter-BLegSZtz.d.mts +16 -0
- package/dist/log-adapter-BLegSZtz.d.mts.map +1 -0
- package/dist/log-adapter-PPe_2Pwv.mjs +28 -0
- package/dist/log-adapter-PPe_2Pwv.mjs.map +1 -0
- package/dist/loop-BOYEtr2g.mjs +520 -0
- package/dist/loop-BOYEtr2g.mjs.map +1 -0
- package/dist/loop-C-tBBOqi.d.mts +219 -0
- package/dist/loop-C-tBBOqi.d.mts.map +1 -0
- package/dist/middleware-5wQ9bANW.mjs +306 -0
- package/dist/middleware-5wQ9bANW.mjs.map +1 -0
- package/dist/middleware-C1apSrj0.mjs +613 -0
- package/dist/middleware-C1apSrj0.mjs.map +1 -0
- package/dist/middleware-C7k0uItW.d.mts +9 -0
- package/dist/middleware-C7k0uItW.d.mts.map +1 -0
- package/dist/middleware-CZQCTHfl.mjs +366 -0
- package/dist/middleware-CZQCTHfl.mjs.map +1 -0
- package/dist/models.d.mts +11 -0
- package/dist/models.d.mts.map +1 -0
- package/dist/models.mjs +32 -0
- package/dist/models.mjs.map +1 -0
- package/dist/observability-analytics.d.mts +107 -0
- package/dist/observability-analytics.d.mts.map +1 -0
- package/dist/observability-analytics.mjs +409 -0
- package/dist/observability-analytics.mjs.map +1 -0
- package/dist/observability-cost.d.mts +10 -0
- package/dist/observability-cost.d.mts.map +1 -0
- package/dist/observability-cost.mjs +15 -0
- package/dist/observability-cost.mjs.map +1 -0
- package/dist/observability-telemetry.d.mts +111 -0
- package/dist/observability-telemetry.d.mts.map +1 -0
- package/dist/observability-telemetry.mjs +343 -0
- package/dist/observability-telemetry.mjs.map +1 -0
- package/dist/observability-tracing.d.mts +10 -0
- package/dist/observability-tracing.d.mts.map +1 -0
- package/dist/observability-tracing.mjs +17 -0
- package/dist/observability-tracing.mjs.map +1 -0
- package/dist/observability.d.mts +15 -0
- package/dist/observability.d.mts.map +1 -0
- package/dist/observability.mjs +17 -0
- package/dist/observability.mjs.map +1 -0
- package/dist/optimizer-DhXXpci6.mjs +97 -0
- package/dist/optimizer-DhXXpci6.mjs.map +1 -0
- package/dist/output-multimodal.d.mts +9 -0
- package/dist/output-multimodal.d.mts.map +1 -0
- package/dist/output-multimodal.mjs +18 -0
- package/dist/output-multimodal.mjs.map +1 -0
- package/dist/output.d.mts +11 -0
- package/dist/output.d.mts.map +1 -0
- package/dist/output.mjs +40 -0
- package/dist/output.mjs.map +1 -0
- package/dist/pii-filter-3AxmYSiu.d.mts +23 -0
- package/dist/pii-filter-3AxmYSiu.d.mts.map +1 -0
- package/dist/pipelines.d.mts +448 -0
- package/dist/pipelines.d.mts.map +1 -0
- package/dist/pipelines.mjs +1534 -0
- package/dist/pipelines.mjs.map +1 -0
- package/dist/prompt-injection-DQXchzsV.d.mts +8 -0
- package/dist/prompt-injection-DQXchzsV.d.mts.map +1 -0
- package/dist/prompt-injection-RpoLPwSa.mjs +52 -0
- package/dist/prompt-injection-RpoLPwSa.mjs.map +1 -0
- package/dist/prompts.d.mts +192 -0
- package/dist/prompts.d.mts.map +1 -0
- package/dist/prompts.mjs +732 -0
- package/dist/prompts.mjs.map +1 -0
- package/dist/protocol-DfBiEsnl.d.mts +112 -0
- package/dist/protocol-DfBiEsnl.d.mts.map +1 -0
- package/dist/quota-manager-0iPMkQWN.d.mts +62 -0
- package/dist/quota-manager-0iPMkQWN.d.mts.map +1 -0
- package/dist/quota-manager-D_N7FuQ2.mjs +180 -0
- package/dist/quota-manager-D_N7FuQ2.mjs.map +1 -0
- package/dist/redaction-utils-DcQwsiNh.mjs +438 -0
- package/dist/redaction-utils-DcQwsiNh.mjs.map +1 -0
- package/dist/redis-CpsSrF8K.mjs +102 -0
- package/dist/redis-CpsSrF8K.mjs.map +1 -0
- package/dist/redis-CwguYFGh.d.mts +33 -0
- package/dist/redis-CwguYFGh.d.mts.map +1 -0
- package/dist/registry-CsD3iTIx.mjs +190 -0
- package/dist/registry-CsD3iTIx.mjs.map +1 -0
- package/dist/registry-DVPWzkXR.d.mts +36 -0
- package/dist/registry-DVPWzkXR.d.mts.map +1 -0
- package/dist/reranking-BpWYhYzl.d.mts +72 -0
- package/dist/reranking-BpWYhYzl.d.mts.map +1 -0
- package/dist/reranking-Ck8aKZW7.mjs +331 -0
- package/dist/reranking-Ck8aKZW7.mjs.map +1 -0
- package/dist/resumable-adapter-CO1HtsgJ.mjs +21 -0
- package/dist/resumable-adapter-CO1HtsgJ.mjs.map +1 -0
- package/dist/review-trigger-DmAsiQlM.d.mts +24 -0
- package/dist/review-trigger-DmAsiQlM.d.mts.map +1 -0
- package/dist/review-trigger-DwXfpww9.mjs +112 -0
- package/dist/review-trigger-DwXfpww9.mjs.map +1 -0
- package/dist/safe-context-BynhkTKR.d.mts +54 -0
- package/dist/safe-context-BynhkTKR.d.mts.map +1 -0
- package/dist/safe-context-C5A3Wv3b.mjs +143 -0
- package/dist/safe-context-C5A3Wv3b.mjs.map +1 -0
- package/dist/schema-Bu2noOZ4.mjs +27 -0
- package/dist/schema-Bu2noOZ4.mjs.map +1 -0
- package/dist/schema-CwFvuCnA.mjs +97 -0
- package/dist/schema-CwFvuCnA.mjs.map +1 -0
- package/dist/schema-Wz-1-ro9.d.mts +37 -0
- package/dist/schema-Wz-1-ro9.d.mts.map +1 -0
- package/dist/schemas-CxQtxIga.mjs +62 -0
- package/dist/schemas-CxQtxIga.mjs.map +1 -0
- package/dist/schemas-DBOhxgW7.d.mts +32 -0
- package/dist/schemas-DBOhxgW7.d.mts.map +1 -0
- package/dist/schemas-Dp_OCqBt.d.mts +63 -0
- package/dist/schemas-Dp_OCqBt.d.mts.map +1 -0
- package/dist/schemas-SwCsnT0z.mjs +83 -0
- package/dist/schemas-SwCsnT0z.mjs.map +1 -0
- package/dist/sdk-errors.d.mts +2 -0
- package/dist/sdk-errors.mjs +3 -0
- package/dist/sdk-experimental.d.mts +59 -0
- package/dist/sdk-experimental.d.mts.map +1 -0
- package/dist/sdk-experimental.mjs +193 -0
- package/dist/sdk-experimental.mjs.map +1 -0
- package/dist/sdk-stop-conditions.d.mts +3 -0
- package/dist/sdk-stop-conditions.mjs +3 -0
- package/dist/sdk.d.mts +15 -0
- package/dist/sdk.d.mts.map +1 -0
- package/dist/sdk.mjs +50 -0
- package/dist/sdk.mjs.map +1 -0
- package/dist/security-guardrails.d.mts +3 -0
- package/dist/security-guardrails.mjs +3 -0
- package/dist/security-injection.d.mts +2 -0
- package/dist/security-injection.mjs +3 -0
- package/dist/security.d.mts +12 -0
- package/dist/security.d.mts.map +1 -0
- package/dist/security.mjs +18 -0
- package/dist/security.mjs.map +1 -0
- package/dist/server.d.mts +420 -0
- package/dist/server.d.mts.map +1 -0
- package/dist/server.mjs +2225 -0
- package/dist/server.mjs.map +1 -0
- package/dist/shared.d.mts +2 -0
- package/dist/shared.mjs +3 -0
- package/dist/streaming-control.d.mts +2 -0
- package/dist/streaming-control.mjs +4 -0
- package/dist/streaming-core.d.mts +4 -0
- package/dist/streaming-core.mjs +3 -0
- package/dist/streaming-infra-resilience.d.mts +120 -0
- package/dist/streaming-infra-resilience.d.mts.map +1 -0
- package/dist/streaming-infra-resilience.mjs +358 -0
- package/dist/streaming-infra-resilience.mjs.map +1 -0
- package/dist/streaming-infra-transport.d.mts +57 -0
- package/dist/streaming-infra-transport.d.mts.map +1 -0
- package/dist/streaming-infra-transport.mjs +488 -0
- package/dist/streaming-infra-transport.mjs.map +1 -0
- package/dist/streaming-infra.d.mts +5 -0
- package/dist/streaming-infra.mjs +5 -0
- package/dist/streaming.d.mts +17 -0
- package/dist/streaming.d.mts.map +1 -0
- package/dist/streaming.mjs +71 -0
- package/dist/streaming.mjs.map +1 -0
- package/dist/telemetry-2eKMojIb.mjs +1046 -0
- package/dist/telemetry-2eKMojIb.mjs.map +1 -0
- package/dist/telemetry-C2t03dwD.d.mts +59 -0
- package/dist/telemetry-C2t03dwD.d.mts.map +1 -0
- package/dist/tool-Btbththq.d.mts +253 -0
- package/dist/tool-Btbththq.d.mts.map +1 -0
- package/dist/tool-JSf8JXZ8.mjs +1150 -0
- package/dist/tool-JSf8JXZ8.mjs.map +1 -0
- package/dist/tool-safety-CZO8a4D4.d.mts +60 -0
- package/dist/tool-safety-CZO8a4D4.d.mts.map +1 -0
- package/dist/tool-safety-DXtYDXod.mjs +319 -0
- package/dist/tool-safety-DXtYDXod.mjs.map +1 -0
- package/dist/tools-BuS2Uv0q.mjs +1708 -0
- package/dist/tools-BuS2Uv0q.mjs.map +1 -0
- package/dist/tools-approval.d.mts +99 -0
- package/dist/tools-approval.d.mts.map +1 -0
- package/dist/tools-approval.mjs +395 -0
- package/dist/tools-approval.mjs.map +1 -0
- package/dist/tools-compliance.d.mts +67 -0
- package/dist/tools-compliance.d.mts.map +1 -0
- package/dist/tools-compliance.mjs +330 -0
- package/dist/tools-compliance.mjs.map +1 -0
- package/dist/tools-computer.d.mts +25 -0
- package/dist/tools-computer.d.mts.map +1 -0
- package/dist/tools-computer.mjs +64 -0
- package/dist/tools-computer.mjs.map +1 -0
- package/dist/tools-core.d.mts +3 -0
- package/dist/tools-core.mjs +3 -0
- package/dist/tools-mcp.d.mts +3 -0
- package/dist/tools-mcp.mjs +5 -0
- package/dist/tools-superpowers.d.mts +2 -0
- package/dist/tools-superpowers.mjs +3 -0
- package/dist/tools.d.mts +401 -0
- package/dist/tools.d.mts.map +1 -0
- package/dist/tools.mjs +1921 -0
- package/dist/tools.mjs.map +1 -0
- package/dist/transport-selector-D-Ib05X1.mjs +1936 -0
- package/dist/transport-selector-D-Ib05X1.mjs.map +1 -0
- package/dist/triage-agent-BEsXg5sw.d.mts +63 -0
- package/dist/triage-agent-BEsXg5sw.d.mts.map +1 -0
- package/dist/triage-agent-CBsfX-HW.mjs +167 -0
- package/dist/triage-agent-CBsfX-HW.mjs.map +1 -0
- package/dist/types-BPnq3GQo.d.mts +23 -0
- package/dist/types-BPnq3GQo.d.mts.map +1 -0
- package/dist/types-BjWgimpY.d.mts +16 -0
- package/dist/types-BjWgimpY.d.mts.map +1 -0
- package/dist/types-BxD-5btB.d.mts +41 -0
- package/dist/types-BxD-5btB.d.mts.map +1 -0
- package/dist/types-By-r93bE.d.mts +36 -0
- package/dist/types-By-r93bE.d.mts.map +1 -0
- package/dist/types-CLBWFRZN.d.mts +69 -0
- package/dist/types-CLBWFRZN.d.mts.map +1 -0
- package/dist/types-CQ0HFd0u.d.mts +62 -0
- package/dist/types-CQ0HFd0u.d.mts.map +1 -0
- package/dist/types-D3zJb59_.d.mts +47 -0
- package/dist/types-D3zJb59_.d.mts.map +1 -0
- package/dist/types-DJnugQX0.d.mts +80 -0
- package/dist/types-DJnugQX0.d.mts.map +1 -0
- package/dist/types-DbUfMCnT.d.mts +70 -0
- package/dist/types-DbUfMCnT.d.mts.map +1 -0
- package/dist/upstash-adapter-D96Caq2O.mjs +22 -0
- package/dist/upstash-adapter-D96Caq2O.mjs.map +1 -0
- package/dist/upstash-adapter-DD4433dx.d.mts +8 -0
- package/dist/upstash-adapter-DD4433dx.d.mts.map +1 -0
- package/dist/utils-BlYhcD6M.mjs +319 -0
- package/dist/utils-BlYhcD6M.mjs.map +1 -0
- package/dist/utils-DpJGOb3y.d.mts +120 -0
- package/dist/utils-DpJGOb3y.d.mts.map +1 -0
- package/dist/vercel-blob-adapter-CkOXLT2D.mjs +25 -0
- package/dist/vercel-blob-adapter-CkOXLT2D.mjs.map +1 -0
- package/dist/xai-CbV_dCnP.mjs +1600 -0
- package/dist/xai-CbV_dCnP.mjs.map +1 -0
- package/package.json +479 -0
- package/src/agents/base/factory.ts +382 -0
- package/src/agents/base/index.ts +8 -0
- package/src/agents/base/schemas.ts +117 -0
- package/src/agents/base/types.ts +192 -0
- package/src/agents/control-flow/index.ts +683 -0
- package/src/agents/coordinator/coordinator-agent.ts +381 -0
- package/src/agents/coordinator/index.ts +6 -0
- package/src/agents/default-agent.ts +211 -0
- package/src/agents/evaluator-optimizer/README.md +612 -0
- package/src/agents/evaluator-optimizer/evaluator-optimizer.example.ts +437 -0
- package/src/agents/evaluator-optimizer/evaluator.ts +282 -0
- package/src/agents/evaluator-optimizer/index.test.ts +416 -0
- package/src/agents/evaluator-optimizer/index.ts +519 -0
- package/src/agents/evaluator-optimizer/optimizer.ts +322 -0
- package/src/agents/evaluator-optimizer/schema.ts +302 -0
- package/src/agents/evaluator-optimizer/utils.ts +42 -0
- package/src/agents/experimental/index.ts +1095 -0
- package/src/agents/experimental/types.ts +212 -0
- package/src/agents/fallback/index.ts +18 -0
- package/src/agents/fallback/recovery/circuit-breaker.ts +166 -0
- package/src/agents/fallback/strategies/model-fallback.ts +192 -0
- package/src/agents/fallback/types.ts +87 -0
- package/src/agents/governance-agent.ts +446 -0
- package/src/agents/index.ts +79 -0
- package/src/agents/multi/coordination/index.ts +6 -0
- package/src/agents/multi/coordination/message-bus.ts +144 -0
- package/src/agents/multi/index.ts +6 -0
- package/src/agents/multi/state/index.ts +162 -0
- package/src/agents/multi/supervisor/index.ts +7 -0
- package/src/agents/multi/supervisor/supervisor.ts +254 -0
- package/src/agents/multi/swarm/aggregation.ts +466 -0
- package/src/agents/multi/swarm/communication.ts +388 -0
- package/src/agents/multi/swarm/coordination.ts +380 -0
- package/src/agents/multi/swarm/index.ts +73 -0
- package/src/agents/multi/swarm/swarm-executor.ts +479 -0
- package/src/agents/multi/types.ts +181 -0
- package/src/agents/observability/index.ts +914 -0
- package/src/agents/orchestrator.ts +218 -0
- package/src/agents/patterns/README.md +512 -0
- package/src/agents/patterns/evaluator-optimizer-pattern.example.ts +455 -0
- package/src/agents/patterns/evaluator-optimizer-pattern.ts +653 -0
- package/src/agents/patterns/index.ts +26 -0
- package/src/agents/persistence/index.ts +726 -0
- package/src/agents/tools/index.ts +291 -0
- package/src/agents/tools/mcp.ts +188 -0
- package/src/agents/triage/index.ts +6 -0
- package/src/agents/triage/triage-agent.ts +280 -0
- package/src/agents/workflows/index.ts +6 -0
- package/src/agents/workflows/interfaces.ts +36 -0
- package/src/agents/workflows/schema.ts +20 -0
- package/src/caching/adapters/index.ts +7 -0
- package/src/caching/adapters/memory.ts +77 -0
- package/src/caching/adapters/redis.ts +60 -0
- package/src/caching/index.ts +17 -0
- package/src/caching/middleware.ts +452 -0
- package/src/caching/strategies/index.ts +1008 -0
- package/src/caching/types.ts +47 -0
- package/src/catalog.ts +921 -0
- package/src/client/chat-usage.ts +53 -0
- package/src/client/hooks.ts +343 -0
- package/src/client/index.ts +36 -0
- package/src/client/message-utils.ts +29 -0
- package/src/client/use-generative-ui.ts +174 -0
- package/src/client/utils.ts +66 -0
- package/src/generative-ui/catalog.ts +653 -0
- package/src/generative-ui/index.ts +82 -0
- package/src/generative-ui/registry.ts +273 -0
- package/src/generative-ui/stream.ts +324 -0
- package/src/generative-ui/types.ts +376 -0
- package/src/governance/audit/audit-logger.ts +239 -0
- package/src/governance/audit/audit-schema.ts +82 -0
- package/src/governance/audit/index.ts +6 -0
- package/src/governance/compliance/abac/policy-engine.ts +175 -0
- package/src/governance/compliance/abac/types.ts +40 -0
- package/src/governance/compliance/approval/compliance-approval-queue.ts +217 -0
- package/src/governance/compliance/index.ts +16 -0
- package/src/governance/compliance/schemas.ts +68 -0
- package/src/governance/compliance/types.ts +143 -0
- package/src/governance/compliance/validators/phi-detector.ts +145 -0
- package/src/governance/compliance/validators/redaction-utils.ts +176 -0
- package/src/governance/compliance/validators/safe-harbor.ts +135 -0
- package/src/governance/entitlements/index.ts +585 -0
- package/src/governance/entitlements/middleware.ts +651 -0
- package/src/governance/entitlements/rate-limiter.ts +711 -0
- package/src/governance/index.ts +32 -0
- package/src/governance/policies/guardrails.ts +1121 -0
- package/src/governance/policies/index.ts +42 -0
- package/src/governance/policies/loop-controls.ts +136 -0
- package/src/governance/policies/telemetry.ts +63 -0
- package/src/governance/tenancy/index.ts +30 -0
- package/src/governance/tenancy/isolation/context.ts +92 -0
- package/src/governance/tenancy/isolation/index.ts +13 -0
- package/src/governance/tenancy/quotas/index.ts +11 -0
- package/src/governance/tenancy/quotas/quota-manager.ts +180 -0
- package/src/governance/tenancy/types.ts +66 -0
- package/src/governance/types.ts +16 -0
- package/src/governance/versioning/index.ts +573 -0
- package/src/grounding/attribution/index.ts +424 -0
- package/src/grounding/citation/citation-generator.ts +174 -0
- package/src/grounding/citation/index.ts +12 -0
- package/src/grounding/context/index.ts +32 -0
- package/src/grounding/context/safe-context.ts +116 -0
- package/src/grounding/context/types.ts +62 -0
- package/src/grounding/context-engineering/error-handling.ts +359 -0
- package/src/grounding/context-engineering/index.ts +23 -0
- package/src/grounding/context-engineering/memory.ts +559 -0
- package/src/grounding/context-engineering/tool-masking.ts +338 -0
- package/src/grounding/embed/index.ts +704 -0
- package/src/grounding/embed/reranking.ts +604 -0
- package/src/grounding/hallucination/index.ts +223 -0
- package/src/grounding/index.ts +82 -0
- package/src/grounding/proof-map/applyPatch.ts +172 -0
- package/src/grounding/proof-map/index.ts +41 -0
- package/src/grounding/proof-map/loop.ts +275 -0
- package/src/grounding/proof-map/schema.ts +217 -0
- package/src/grounding/rag/__tests__/pipeline.test.ts +274 -0
- package/src/grounding/rag/__tests__/tool.test.ts +202 -0
- package/src/grounding/rag/__tests__/trace.test.ts +229 -0
- package/src/grounding/rag/circuit-breaker.ts +152 -0
- package/src/grounding/rag/index.ts +64 -0
- package/src/grounding/rag/pipeline.ts +602 -0
- package/src/grounding/rag/tool.ts +281 -0
- package/src/grounding/rag/trace.ts +503 -0
- package/src/grounding/rag/types.ts +284 -0
- package/src/grounding/retrieval/in-memory-store.ts +107 -0
- package/src/grounding/sources/index.ts +943 -0
- package/src/grounding/tests/applyPatch.test.ts +194 -0
- package/src/grounding/tests/loop.test.ts +141 -0
- package/src/grounding/tests/schema.test.ts +160 -0
- package/src/grounding/types.ts +100 -0
- package/src/grounding/verification/index.ts +419 -0
- package/src/hitl/active-learning/index.ts +332 -0
- package/src/hitl/annotation/index.ts +362 -0
- package/src/hitl/approval/approval-queue.ts +132 -0
- package/src/hitl/approval/index.ts +5 -0
- package/src/hitl/feedback/index.ts +284 -0
- package/src/hitl/index.ts +69 -0
- package/src/hitl/review/index.ts +6 -0
- package/src/hitl/review/review-trigger.ts +162 -0
- package/src/hitl/types.ts +126 -0
- package/src/index.ts +125 -0
- package/src/integrations/blob-storage/index.ts +7 -0
- package/src/integrations/blob-storage/types.ts +28 -0
- package/src/integrations/blob-storage/vercel-blob-adapter.ts +35 -0
- package/src/integrations/index.ts +15 -0
- package/src/integrations/notifications/index.ts +7 -0
- package/src/integrations/notifications/log-adapter.ts +30 -0
- package/src/integrations/notifications/types.ts +27 -0
- package/src/integrations/rate-limit/index.ts +7 -0
- package/src/integrations/rate-limit/types.ts +26 -0
- package/src/integrations/rate-limit/upstash-adapter.ts +45 -0
- package/src/integrations/redis/index.ts +7 -0
- package/src/integrations/redis/types.ts +67 -0
- package/src/integrations/redis/upstash-adapter.ts +18 -0
- package/src/integrations/stream/index.ts +7 -0
- package/src/integrations/stream/resumable-adapter.ts +20 -0
- package/src/integrations/stream/types.ts +21 -0
- package/src/internal/__tests__/hallucination.test.ts +162 -0
- package/src/internal/__tests__/models.test.ts +104 -0
- package/src/internal/__tests__/sdk-errors.test.ts +201 -0
- package/src/internal/__tests__/stop-conditions.test.ts +210 -0
- package/src/internal/shared/ai-types.ts +942 -0
- package/src/internal/testing/evaluators.ts +575 -0
- package/src/internal/testing/index.ts +960 -0
- package/src/internal/ui/data-parts.ts +511 -0
- package/src/internal/ui/type-guards.ts +344 -0
- package/src/internal/ui-factories/__tests__/ui-factories.test.ts +548 -0
- package/src/internal/ui-factories/artifact-factory.ts +667 -0
- package/src/internal/ui-factories/index.ts +82 -0
- package/src/internal/ui-factories/shimmer-manager.ts +220 -0
- package/src/internal/ui-factories/status-helpers.ts +149 -0
- package/src/internal/ui-factories/tool-renderer.ts +167 -0
- package/src/internal/ui-factories/types.ts +235 -0
- package/src/models/capabilities.ts +88 -0
- package/src/models/index.ts +16 -0
- package/src/models/provider-factory.ts +229 -0
- package/src/models/providers/anthropic.ts +539 -0
- package/src/models/providers/google.ts +354 -0
- package/src/models/providers/index.ts +21 -0
- package/src/models/providers/openai.ts +346 -0
- package/src/models/providers/perplexity.ts +276 -0
- package/src/models/providers/shared.ts +90 -0
- package/src/models/providers/xai.ts +269 -0
- package/src/models/registry.ts +208 -0
- package/src/models/routing/index.ts +45 -0
- package/src/models/routing/intent-router.ts +143 -0
- package/src/models/routing/model-router.ts +300 -0
- package/src/models/routing/types.ts +106 -0
- package/src/models/types.ts +23 -0
- package/src/observability/analytics/index.ts +593 -0
- package/src/observability/cost/index.ts +16 -0
- package/src/observability/cost/tracking/budget-guard.ts +110 -0
- package/src/observability/cost/tracking/usage-tracker.ts +120 -0
- package/src/observability/cost/types.ts +85 -0
- package/src/observability/index.ts +17 -0
- package/src/observability/telemetry/index.ts +508 -0
- package/src/observability/tracing/index.ts +30 -0
- package/src/observability/tracing/otel/ai-instrumentation.ts +193 -0
- package/src/observability/tracing/otel/exporters/console.ts +58 -0
- package/src/observability/tracing/otel/exporters/index.ts +6 -0
- package/src/observability/tracing/provenance.ts +769 -0
- package/src/observability/tracing/types.ts +92 -0
- package/src/output/__tests__/output.test.ts +737 -0
- package/src/output/element-stream.ts +678 -0
- package/src/output/errors.ts +108 -0
- package/src/output/factories.ts +392 -0
- package/src/output/index.ts +98 -0
- package/src/output/multimodal/EXPORTS.md +306 -0
- package/src/output/multimodal/IMPLEMENTATION_SUMMARY.md +421 -0
- package/src/output/multimodal/README.md +349 -0
- package/src/output/multimodal/SETUP_GUIDE.md +472 -0
- package/src/output/multimodal/audio.ts +650 -0
- package/src/output/multimodal/image.ts +22 -0
- package/src/output/multimodal/index.ts +32 -0
- package/src/output/multimodal/providers.example.ts +375 -0
- package/src/output/validator.ts +495 -0
- package/src/pipelines/adapters/trace-storage-blob.ts +458 -0
- package/src/pipelines/adapters/trace-storage-memory.ts +319 -0
- package/src/pipelines/defaults.ts +109 -0
- package/src/pipelines/index.ts +24 -0
- package/src/pipelines/message-transforms.ts +107 -0
- package/src/pipelines/multi-step-wrapper.ts +433 -0
- package/src/pipelines/pipeline-presets.ts +339 -0
- package/src/pipelines/step-executor.ts +257 -0
- package/src/pipelines/storage-factory.ts +85 -0
- package/src/pipelines/trace-storage-interface.ts +216 -0
- package/src/pipelines/types.ts +255 -0
- package/src/pipelines/validation.ts +323 -0
- package/src/prompts/index.ts +271 -0
- package/src/prompts/model-variants.ts +410 -0
- package/src/prompts/templates.ts +327 -0
- package/src/sdk/errors/base.ts +296 -0
- package/src/sdk/errors/index.ts +31 -0
- package/src/sdk/errors/utils.ts +148 -0
- package/src/sdk/experimental/index.ts +286 -0
- package/src/sdk/index.ts +25 -0
- package/src/sdk/middleware/ai-middleware.ts +95 -0
- package/src/sdk/middleware/cache.ts +154 -0
- package/src/sdk/middleware/circuit-breaker.ts +388 -0
- package/src/sdk/middleware/compose.ts +81 -0
- package/src/sdk/middleware/deduplication.ts +307 -0
- package/src/sdk/middleware/index.ts +660 -0
- package/src/sdk/middleware/model-middleware.ts +200 -0
- package/src/sdk/stop-conditions/conditions.ts +209 -0
- package/src/sdk/stop-conditions/index.ts +35 -0
- package/src/sdk/stop-conditions/types.ts +59 -0
- package/src/security/guardrails/index.ts +6 -0
- package/src/security/guardrails/middleware.ts +465 -0
- package/src/security/guardrails/pii-filter.ts +396 -0
- package/src/security/index.ts +33 -0
- package/src/security/injection/index.ts +5 -0
- package/src/security/injection/prompt-injection.ts +64 -0
- package/src/security/types.ts +85 -0
- package/src/server/cache/crypto.ts +47 -0
- package/src/server/cache/performance.ts +79 -0
- package/src/server/error-handler.ts +93 -0
- package/src/server/errors.ts +73 -0
- package/src/server/helpers.ts +944 -0
- package/src/server/http.ts +156 -0
- package/src/server/index.ts +12 -0
- package/src/server/messages/__tests__/messages.test.ts +720 -0
- package/src/server/messages/converter.ts +245 -0
- package/src/server/messages/data-parts.ts +338 -0
- package/src/server/messages/extraction.ts +328 -0
- package/src/server/messages/index.ts +126 -0
- package/src/server/messages/types.ts +355 -0
- package/src/server/messages/window.ts +450 -0
- package/src/server/rate-limit/env.ts +8 -0
- package/src/server/rate-limit/rate-limit.ts +165 -0
- package/src/server/routes/HEALTH_CHECK.md +502 -0
- package/src/server/routes/IMPLEMENTATION_SUMMARY.md +432 -0
- package/src/server/routes/QUICK_START.md +327 -0
- package/src/server/routes/README.md +357 -0
- package/src/server/routes/__tests__/routes.test.ts +628 -0
- package/src/server/routes/agent-route.ts +224 -0
- package/src/server/routes/agent-routes.ts +191 -0
- package/src/server/routes/embed-config.ts +181 -0
- package/src/server/routes/health-check.example.ts +507 -0
- package/src/server/routes/health-check.test.ts +533 -0
- package/src/server/routes/health-check.ts +639 -0
- package/src/server/routes/health-check.types.ts +217 -0
- package/src/server/routes/index.ts +32 -0
- package/src/server/routes/types.ts +274 -0
- package/src/shared/__tests__/schemas.test.ts +317 -0
- package/src/shared/ai-runtime.ts +139 -0
- package/src/shared/ai-types.ts +133 -0
- package/src/shared/index.ts +30 -0
- package/src/shared/sdk-runtime.ts +198 -0
- package/src/shared/sdk-types.ts +301 -0
- package/src/streaming/control/__tests__/streaming-control.test.ts +708 -0
- package/src/streaming/control/budget-guard.ts +264 -0
- package/src/streaming/control/controller.ts +255 -0
- package/src/streaming/control/index.ts +105 -0
- package/src/streaming/control/smoothing.ts +201 -0
- package/src/streaming/control/step-limit.ts +215 -0
- package/src/streaming/control/types.ts +234 -0
- package/src/streaming/core/auto-resume.ts +276 -0
- package/src/streaming/core/index.ts +85 -0
- package/src/streaming/core/multi-step.ts +471 -0
- package/src/streaming/core/protocol.ts +194 -0
- package/src/streaming/core/types.ts +182 -0
- package/src/streaming/index.ts +97 -0
- package/src/streaming/infra/backpressure/buffer.ts +210 -0
- package/src/streaming/infra/backpressure/index.ts +6 -0
- package/src/streaming/infra/index.ts +75 -0
- package/src/streaming/infra/multiplexing/index.ts +311 -0
- package/src/streaming/infra/resilience/index.ts +684 -0
- package/src/streaming/infra/transform/index.ts +15 -0
- package/src/streaming/infra/transform/stream-transforms.ts +166 -0
- package/src/streaming/infra/transport/index.ts +774 -0
- package/src/streaming/infra/types.ts +118 -0
- package/src/streaming/infra-extra/types.ts +118 -0
- package/src/tools/advanced/caching.ts +299 -0
- package/src/tools/advanced/generator.ts +267 -0
- package/src/tools/advanced/hitl.ts +251 -0
- package/src/tools/advanced/index.ts +9 -0
- package/src/tools/advanced/llm-tool.ts +208 -0
- package/src/tools/approval/FILES.md +449 -0
- package/src/tools/approval/IMPLEMENTATION_SUMMARY.md +567 -0
- package/src/tools/approval/QUICK_START.md +362 -0
- package/src/tools/approval/README.md +514 -0
- package/src/tools/approval/advanced-approval-queue.ts +7 -0
- package/src/tools/approval/approval.example.ts +571 -0
- package/src/tools/approval/in-memory-queue.ts +405 -0
- package/src/tools/approval/index.ts +737 -0
- package/src/tools/approval/middleware.ts +590 -0
- package/src/tools/approval/queue-factory.ts +162 -0
- package/src/tools/approval/redis-queue.ts +327 -0
- package/src/tools/approval/testing.ts +493 -0
- package/src/tools/approval/types.ts +221 -0
- package/src/tools/approval/with-approval.ts +366 -0
- package/src/tools/artifacts/artifact-tools.ts +273 -0
- package/src/tools/artifacts/index.ts +6 -0
- package/src/tools/compliance/compliance-wrapper.ts +789 -0
- package/src/tools/compliance/create-compliant-stream.ts +226 -0
- package/src/tools/compliance/index.ts +8 -0
- package/src/tools/compliance/phi-redaction.ts +406 -0
- package/src/tools/compliance/tool-wrapper.ts +306 -0
- package/src/tools/computer/index.ts +99 -0
- package/src/tools/computer/types.ts +41 -0
- package/src/tools/core/abort.ts +202 -0
- package/src/tools/core/factory.ts +197 -0
- package/src/tools/core/index.ts +8 -0
- package/src/tools/core/tool-safety.ts +112 -0
- package/src/tools/generic/index.ts +9 -0
- package/src/tools/generic/json-schema-tool.ts +301 -0
- package/src/tools/generic/tiptap-context.ts +619 -0
- package/src/tools/generic/web-search-tool.ts +82 -0
- package/src/tools/generic/web-search.ts +142 -0
- package/src/tools/index.ts +36 -0
- package/src/tools/mcp/ai-sdk-error-integration.ts +401 -0
- package/src/tools/mcp/client.ts +988 -0
- package/src/tools/mcp/connection-manager.ts +380 -0
- package/src/tools/mcp/connection-pool.ts +408 -0
- package/src/tools/mcp/edge-runtime.ts +318 -0
- package/src/tools/mcp/environment.ts +310 -0
- package/src/tools/mcp/index.ts +20 -0
- package/src/tools/mcp/next-pattern.ts +401 -0
- package/src/tools/mcp/stream-lifecycle-integration.ts +617 -0
- package/src/tools/mcp/tool-cache.ts +359 -0
- package/src/tools/mcp/transport-selector.ts +492 -0
- package/src/tools/mcp/transports.ts +99 -0
- package/src/tools/simple-factory.ts +55 -0
- package/src/tools/superpowers/index.ts +122 -0
- package/src/tools/superpowers/prompts/index.ts +533 -0
- package/src/tools/superpowers/schemas/index.ts +701 -0
- package/src/tools/superpowers/tools/index.ts +721 -0
- package/src/tools/validation-wrapper.ts +97 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog.mjs","names":[],"sources":["../src/catalog.ts"],"sourcesContent":["/**\n * @fileoverview Pattern catalog for the ai-platform package.\n *\n * Machine-readable registry of every public module, pattern, and capability\n * exposed by this package. Designed for both human developers and AI agents\n * to discover what's available and when to use each piece.\n *\n * Import the catalog and search/filter programmatically:\n * ```ts\n * import { PATTERN_CATALOG } from '@od-oneapp/ai-platform/catalog';\n *\n * // Find all RAG-related patterns\n * const ragPatterns = PATTERN_CATALOG.filter(p => p.tags.includes('rag'));\n *\n * // Find patterns for a use case\n * const streaming = PATTERN_CATALOG.filter(p => p.domain === 'streaming');\n * ```\n *\n * @module @od-oneapp/ai-platform/catalog\n */\n\n// ---------------------------------------------------------------------------\n// Schema\n// ---------------------------------------------------------------------------\n\n/** A single entry in the pattern catalog. */\nexport interface CatalogEntry {\n /** Unique kebab-case identifier. */\n id: string;\n /** Human-readable name. */\n name: string;\n /** Package subpath export (e.g. `'./agents/triage'`). */\n module: string;\n /** Top-level domain grouping. */\n domain:\n | 'agents'\n | 'models'\n | 'streaming'\n | 'grounding'\n | 'tools'\n | 'sdk'\n | 'security'\n | 'governance'\n | 'observability'\n | 'hitl'\n | 'output'\n | 'prompts'\n | 'pipelines'\n | 'caching'\n | 'shared'\n | 'integrations'\n | 'generative-ui';\n /** One-sentence description of what this module provides. */\n description: string;\n /** Searchable tags for filtering. */\n tags: readonly string[];\n /** When you should reach for this pattern. */\n useCase: string;\n}\n\n// ---------------------------------------------------------------------------\n// Catalog\n// ---------------------------------------------------------------------------\n\n/**\n * Complete catalog of public patterns and modules in `@od-oneapp/ai-platform`.\n *\n * Every entry maps to a `package.json` subpath export.\n * Use `domain` or `tags` to filter programmatically.\n */\nexport const PATTERN_CATALOG: readonly CatalogEntry[] = [\n // ===========================================================================\n // MODELS\n // ===========================================================================\n {\n id: 'models',\n name: 'Model Registry',\n module: './models',\n domain: 'models',\n description:\n 'LLM provider integration with model registry, metadata, tier routing, and cost estimation.',\n tags: ['model', 'registry', 'routing', 'cost'],\n useCase: 'When you need to select, configure, or route between LLM providers.',\n },\n\n // ===========================================================================\n // AGENTS\n // ===========================================================================\n {\n id: 'agents',\n name: 'Agent Framework',\n module: './agents',\n domain: 'agents',\n description:\n 'Multi-faceted AI agent framework with core types, routing, coordination, patterns, and workflows.',\n tags: ['agent', 'orchestration', 'framework'],\n useCase: 'Top-level import when you need any agent capability.',\n },\n {\n id: 'agents-base',\n name: 'Agent Base',\n module: './agents/base',\n domain: 'agents',\n description: 'Base agent types, schemas, and default agent implementation.',\n tags: ['agent', 'base', 'types', 'schemas'],\n useCase: 'When building a custom agent from scratch or extending base types.',\n },\n {\n id: 'agents-coordinator',\n name: 'Coordinator Agent',\n module: './agents/coordinator',\n domain: 'agents',\n description:\n 'Multi-agent orchestration with task planning, delegation, and result aggregation.',\n tags: ['agent', 'coordinator', 'orchestration', 'planning'],\n useCase: 'When you need a lead agent that plans and delegates work to sub-agents.',\n },\n {\n id: 'agents-swarm',\n name: 'Swarm Agent',\n module: './agents/multi/swarm',\n domain: 'agents',\n description: 'Agent swarm coordination with parallel task execution and result aggregation.',\n tags: ['agent', 'swarm', 'parallel', 'multi-agent'],\n useCase: 'When you need many agents working in parallel on independent tasks.',\n },\n {\n id: 'agents-multi',\n name: 'Multi-Agent System',\n module: './agents/multi',\n domain: 'agents',\n description: 'Multi-agent coordination, supervision, and state management.',\n tags: ['agent', 'multi-agent', 'coordination', 'supervision'],\n useCase: 'When you need agents that communicate, delegate, and share state.',\n },\n {\n id: 'agents-persistence',\n name: 'Agent Persistence',\n module: './agents/persistence',\n domain: 'agents',\n description:\n 'Durable state management with checkpoint/restore for crash recovery and resumable workflows.',\n tags: ['agent', 'persistence', 'checkpoint', 'recovery'],\n useCase: 'When agent state must survive restarts or be resumed later.',\n },\n {\n id: 'agents-control-flow',\n name: 'Agent Control Flow',\n module: './agents/control-flow',\n domain: 'agents',\n description:\n 'Control patterns for agent execution: abort signals, stops, timeouts, and manual intervention.',\n tags: ['agent', 'control-flow', 'abort', 'timeout'],\n useCase: 'When you need to cancel, timeout, or manually intervene in agent execution.',\n },\n {\n id: 'agents-fallback',\n name: 'Agent Fallback',\n module: './agents/fallback',\n domain: 'agents',\n description: 'Model fallback strategies, circuit breakers, and resilience patterns.',\n tags: ['agent', 'fallback', 'resilience', 'circuit-breaker'],\n useCase: 'When you need automatic model failover or rate-limit recovery.',\n },\n {\n id: 'agents-patterns',\n name: 'Agent Patterns',\n module: './agents/patterns',\n domain: 'agents',\n description: 'Reusable agent architectures like evaluator-optimizer feedback loops.',\n tags: ['agent', 'patterns', 'evaluator-optimizer', 'feedback'],\n useCase: 'When you need a documented, reusable agent architecture pattern.',\n },\n {\n id: 'agents-experimental',\n name: 'Experimental Agents',\n module: './agents/experimental',\n domain: 'agents',\n description: 'AI SDK v6 agent patterns with prepareStep hook and phased tools (unstable).',\n tags: ['agent', 'experimental', 'prepareStep'],\n useCase: 'When you want to test new agent capabilities before they stabilize.',\n },\n {\n id: 'agents-observability',\n name: 'Agent Observability',\n module: './agents/observability',\n domain: 'agents',\n description:\n 'Step-by-step execution tracing and debugging for agents with decision logs and metrics.',\n tags: ['agent', 'observability', 'tracing', 'debugging'],\n useCase: 'When you need detailed visibility into agent decision-making.',\n },\n {\n id: 'agents-workflows',\n name: 'Agent Workflows',\n module: './agents/workflows',\n domain: 'agents',\n description:\n 'Workflow definition and execution interfaces for Vercel Workflows (WDK) integration.',\n tags: ['agent', 'workflow', 'wdk'],\n useCase: 'When agents need to execute as durable Vercel Workflows.',\n },\n\n // ===========================================================================\n // STREAMING\n // ===========================================================================\n {\n id: 'streaming',\n name: 'Streaming',\n module: './streaming',\n domain: 'streaming',\n description:\n 'Unified streaming utilities for AI responses with transforms and control patterns.',\n tags: ['streaming', 'response', 'transform'],\n useCase: 'Top-level import when you need any streaming capability.',\n },\n {\n id: 'streaming-core',\n name: 'Streaming Core',\n module: './streaming/core',\n domain: 'streaming',\n description: 'Core artifact and data streaming with writer utilities for streaming protocols.',\n tags: ['streaming', 'core', 'artifact', 'writer'],\n useCase: 'When building custom stream writers or artifact streams.',\n },\n {\n id: 'streaming-control',\n name: 'Streaming Control',\n module: './streaming/control',\n domain: 'streaming',\n description: 'Composable streaming patterns: budget guards, step limits, stream smoothing.',\n tags: ['streaming', 'control', 'budget', 'throttle'],\n useCase: 'When you need to limit, smooth, or guard streaming output.',\n },\n {\n id: 'streaming-infra',\n name: 'Streaming Infrastructure',\n module: './streaming/infra',\n domain: 'streaming',\n description: 'Infrastructure: transforms, metrics, backpressure, multiplexing.',\n tags: ['streaming', 'infra', 'transform', 'metrics'],\n useCase: 'When you need low-level stream processing or metrics collection.',\n },\n {\n id: 'streaming-resilience',\n name: 'Streaming Resilience',\n module: './streaming/infra/resilience',\n domain: 'streaming',\n description:\n 'Stream recovery and resumption from Redis checkpoints for fault-tolerant operations.',\n tags: ['streaming', 'resilience', 'checkpoint', 'recovery'],\n useCase: 'When long-running streams must survive disconnections.',\n },\n {\n id: 'streaming-transport',\n name: 'Streaming Transport',\n module: './streaming/infra/transport',\n domain: 'streaming',\n description: 'Transport adapters for SSE, WebSocket, and HTTP streaming protocols.',\n tags: ['streaming', 'transport', 'sse', 'websocket'],\n useCase: 'When you need to expose streams over different transport protocols.',\n },\n\n // ===========================================================================\n // TOOLS\n // ===========================================================================\n {\n id: 'tools',\n name: 'Tool System',\n module: './tools',\n domain: 'tools',\n description:\n 'Tool execution patterns including core definitions, computer use, MCP, and specialized capabilities.',\n tags: ['tool', 'execution', 'framework'],\n useCase: 'Top-level import when you need any tool capability.',\n },\n {\n id: 'tools-core',\n name: 'Tool Core',\n module: './tools/core',\n domain: 'tools',\n description:\n 'Core tool utilities: factory methods, abort signal handling, validation wrappers.',\n tags: ['tool', 'core', 'factory', 'validation'],\n useCase: 'When building or wrapping custom tools.',\n },\n {\n id: 'tools-computer',\n name: 'Computer Use',\n module: './tools/computer',\n domain: 'tools',\n description: 'Browser automation and computer use for agent interaction with web interfaces.',\n tags: ['tool', 'computer-use', 'browser', 'automation'],\n useCase: 'When agents need to interact with web UIs or take screenshots.',\n },\n {\n id: 'tools-mcp',\n name: 'MCP Integration',\n module: './tools/mcp',\n domain: 'tools',\n description:\n 'Model Context Protocol integration with client, connection management, and tool caching.',\n tags: ['tool', 'mcp', 'protocol', 'external'],\n useCase: 'When integrating external tool servers via MCP protocol.',\n },\n {\n id: 'tools-superpowers',\n name: 'Superpowers Tools',\n module: './tools/superpowers',\n domain: 'tools',\n description:\n '20 engineering-focused tools that enforce planning, testing, and validation patterns.',\n tags: ['tool', 'superpowers', 'engineering', 'planning'],\n useCase: 'When agents need structured engineering workflows (plan → implement → test).',\n },\n {\n id: 'tools-approval',\n name: 'Tool Approval',\n module: './tools/approval',\n domain: 'tools',\n description: 'HITL approval system: tool wrappers, middleware chain, pluggable queue backends.',\n tags: ['tool', 'approval', 'hitl', 'middleware'],\n useCase: 'When tool execution needs human approval before proceeding.',\n },\n {\n id: 'tools-compliance',\n name: 'Tool Compliance',\n module: './tools/compliance',\n domain: 'tools',\n description:\n 'Tool compliance wrappers for ABAC, approval workflows, timeouts, and retry patterns.',\n tags: ['tool', 'compliance', 'abac', 'wrapper'],\n useCase: 'When tools must enforce access control or compliance policies.',\n },\n\n // ===========================================================================\n // GROUNDING\n // ===========================================================================\n {\n id: 'grounding',\n name: 'Grounding',\n module: './grounding',\n domain: 'grounding',\n description:\n 'RAG, embeddings, and response verification: citation, hallucination detection, source attribution.',\n tags: ['grounding', 'rag', 'citation', 'verification'],\n useCase: 'Top-level import when you need any grounding capability.',\n },\n {\n id: 'grounding-rag',\n name: 'Research Pipeline',\n module: './grounding/rag',\n domain: 'grounding',\n description:\n 'Three-stage research pipeline (context expansion → reasoning → verification) with configurable models.',\n tags: ['grounding', 'rag', 'research', 'pipeline', 'multi-model'],\n useCase: 'When you need citation-backed, verified research answers.',\n },\n {\n id: 'grounding-embed',\n name: 'Embeddings',\n module: './grounding/embed',\n domain: 'grounding',\n description: 'Text chunking, embedding generation, similarity search, and reranking.',\n tags: ['grounding', 'embedding', 'search', 'reranking'],\n useCase: 'When you need vector-based retrieval for RAG.',\n },\n {\n id: 'grounding-citation',\n name: 'Citations',\n module: './grounding/citation',\n domain: 'grounding',\n description: 'Citation generation from retrieved sources with verification and formatting.',\n tags: ['grounding', 'citation', 'source'],\n useCase: 'When AI responses need inline citations referencing source material.',\n },\n {\n id: 'grounding-hallucination',\n name: 'Hallucination Detection',\n module: './grounding/hallucination',\n domain: 'grounding',\n description: 'Identifies claims in AI output that are unsupported by source documents.',\n tags: ['grounding', 'hallucination', 'detection', 'verification'],\n useCase: 'When you need post-generation truthfulness checking.',\n },\n {\n id: 'grounding-attribution',\n name: 'Source Attribution',\n module: './grounding/attribution',\n domain: 'grounding',\n description: 'Tracks which sources contributed to AI-generated content for transparency.',\n tags: ['grounding', 'attribution', 'transparency', 'audit'],\n useCase: 'When you need an audit trail of which sources informed each claim.',\n },\n {\n id: 'grounding-verification',\n name: 'Fact Verification',\n module: './grounding/verification',\n domain: 'grounding',\n description: 'Fact verification against knowledge sources with confidence scoring.',\n tags: ['grounding', 'verification', 'fact-check', 'confidence'],\n useCase: 'When individual claims must be verified against authoritative sources.',\n },\n {\n id: 'grounding-context',\n name: 'Request Context',\n module: './grounding/context',\n domain: 'grounding',\n description: 'Identity and request context management with permission checking.',\n tags: ['grounding', 'context', 'identity', 'permissions'],\n useCase: 'When you need request-scoped context propagation through the pipeline.',\n },\n {\n id: 'grounding-proof-map',\n name: 'Proof Maps',\n module: './grounding/proof-map',\n domain: 'grounding',\n description:\n 'Multi-model proof loops and patch application for structured verification of AI outputs.',\n tags: ['grounding', 'proof', 'verification', 'patch'],\n useCase: 'When you need structured, multi-step verification of complex AI outputs.',\n },\n\n // ===========================================================================\n // SDK\n // ===========================================================================\n {\n id: 'sdk',\n name: 'SDK Extensions',\n module: './sdk',\n domain: 'sdk',\n description:\n 'Vercel AI SDK v6 extensions: error hierarchy, stop conditions, and middleware patterns.',\n tags: ['sdk', 'extension', 'middleware'],\n useCase: 'Top-level import when you need any SDK extension.',\n },\n {\n id: 'sdk-errors',\n name: 'Error Hierarchy',\n module: './sdk/errors',\n domain: 'sdk',\n description: 'Unified error hierarchy with error codes, retry info, and structured metadata.',\n tags: ['sdk', 'errors', 'retry', 'hierarchy'],\n useCase: 'When you need typed, classifiable errors with retry semantics.',\n },\n {\n id: 'sdk-stop-conditions',\n name: 'Stop Conditions',\n module: './sdk/stop-conditions',\n domain: 'sdk',\n description: 'Utilities for controlling agentic loop termination with condition evaluation.',\n tags: ['sdk', 'stop', 'termination', 'control'],\n useCase: 'When you need custom logic for when an agent should stop iterating.',\n },\n {\n id: 'sdk-experimental',\n name: 'SDK Experimental',\n module: './sdk/experimental',\n domain: 'sdk',\n description: 'Experimental SDK v6 features using experimental_ prefix (unstable).',\n tags: ['sdk', 'experimental'],\n useCase: 'When you want to test new SDK capabilities before they stabilize.',\n },\n\n // ===========================================================================\n // SECURITY\n // ===========================================================================\n {\n id: 'security',\n name: 'Security',\n module: './security',\n domain: 'security',\n description: 'Guardrails, injection detection, and PII filtering for secure AI applications.',\n tags: ['security', 'guardrails', 'pii', 'injection'],\n useCase: 'Top-level import when you need any security capability.',\n },\n {\n id: 'security-guardrails',\n name: 'Guardrails',\n module: './security/guardrails',\n domain: 'security',\n description: 'PII filtering and content filtering middleware for response security.',\n tags: ['security', 'guardrails', 'pii', 'filter'],\n useCase: 'When AI responses must be scrubbed of PII or harmful content.',\n },\n {\n id: 'security-injection',\n name: 'Injection Defense',\n module: './security/injection',\n domain: 'security',\n description: 'Prompt injection detection and defense mechanisms.',\n tags: ['security', 'injection', 'defense', 'detection'],\n useCase: 'When user input must be screened for prompt injection attacks.',\n },\n\n // ===========================================================================\n // GOVERNANCE\n // ===========================================================================\n {\n id: 'governance',\n name: 'Governance',\n module: './governance',\n domain: 'governance',\n description:\n 'Enterprise compliance, audit, policy, and multi-tenant management for AI systems.',\n tags: ['governance', 'compliance', 'audit', 'policy'],\n useCase: 'Top-level import when you need any governance capability.',\n },\n {\n id: 'governance-compliance',\n name: 'Compliance',\n module: './governance/compliance',\n domain: 'governance',\n description: 'ABAC policy engine, PHI detection, redaction, and approval workflows.',\n tags: ['governance', 'compliance', 'abac', 'phi', 'redaction'],\n useCase: 'When you need access control policies or PHI handling.',\n },\n {\n id: 'governance-audit',\n name: 'Audit',\n module: './governance/audit',\n domain: 'governance',\n description: 'Audit logging and schema for tracking AI system operations.',\n tags: ['governance', 'audit', 'logging', 'tracking'],\n useCase: 'When you need a tamper-evident audit trail of AI operations.',\n },\n {\n id: 'governance-policies',\n name: 'Policies',\n module: './governance/policies',\n domain: 'governance',\n description:\n 'Policy definitions for guardrails, loop controls, and telemetry governing agent behavior.',\n tags: ['governance', 'policy', 'guardrails', 'rules'],\n useCase: 'When you need to define declarative rules that constrain agents.',\n },\n {\n id: 'governance-tenancy',\n name: 'Multi-Tenancy',\n module: './governance/tenancy',\n domain: 'governance',\n description: 'Tenant isolation, quota management, and per-tenant configuration.',\n tags: ['governance', 'tenancy', 'isolation', 'quota'],\n useCase: 'When you need to isolate AI resources across tenants with quotas.',\n },\n\n // ===========================================================================\n // OBSERVABILITY\n // ===========================================================================\n {\n id: 'observability',\n name: 'Observability',\n module: './observability',\n domain: 'observability',\n description:\n 'Monitoring, tracing, and cost management with telemetry, analytics, and budget tracking.',\n tags: ['observability', 'monitoring', 'tracing', 'cost'],\n useCase: 'Top-level import when you need any observability capability.',\n },\n {\n id: 'observability-telemetry',\n name: 'Telemetry',\n module: './observability/telemetry',\n domain: 'observability',\n description:\n 'AI SDK v6 telemetry: span tracing, token usage, cost estimation, and latency metrics.',\n tags: ['observability', 'telemetry', 'spans', 'tokens'],\n useCase: 'When you need fine-grained span-level metrics for AI calls.',\n },\n {\n id: 'observability-tracing',\n name: 'Distributed Tracing',\n module: './observability/tracing',\n domain: 'observability',\n description:\n 'OpenTelemetry-compatible instrumentation with multiple exporters (Langfuse, Axiom, Datadog).',\n tags: ['observability', 'tracing', 'otel', 'langfuse', 'axiom'],\n useCase: 'When you need distributed tracing exported to external APM tools.',\n },\n {\n id: 'observability-analytics',\n name: 'Analytics',\n module: './observability/analytics',\n domain: 'observability',\n description:\n 'AI usage analytics with token tracking, cost estimation, and performance metrics.',\n tags: ['observability', 'analytics', 'usage', 'performance'],\n useCase: 'When you need aggregate analytics over AI usage patterns.',\n },\n {\n id: 'observability-cost',\n name: 'Cost Tracking',\n module: './observability/cost',\n domain: 'observability',\n description:\n 'Cost tracking middleware for enforcing budgets and attributing costs to users/teams/features.',\n tags: ['observability', 'cost', 'budget', 'attribution'],\n useCase: 'When you need to enforce spend limits or attribute AI costs.',\n },\n\n // ===========================================================================\n // HITL\n // ===========================================================================\n {\n id: 'hitl',\n name: 'Human-in-the-Loop',\n module: './hitl',\n domain: 'hitl',\n description:\n 'Human-in-the-loop integration: approval queues, review triggers, and escalation handling.',\n tags: ['hitl', 'human', 'review', 'approval'],\n useCase: 'Top-level import when you need any HITL capability.',\n },\n {\n id: 'hitl-feedback',\n name: 'Feedback Collection',\n module: './hitl/feedback',\n domain: 'hitl',\n description:\n 'User feedback collection and aggregation for quality monitoring and model improvement.',\n tags: ['hitl', 'feedback', 'quality', 'rating'],\n useCase: 'When you need thumbs-up/down or free-text feedback on AI responses.',\n },\n {\n id: 'hitl-annotation',\n name: 'Annotation',\n module: './hitl/annotation',\n domain: 'hitl',\n description: 'Human annotation tools for labeling and correcting AI outputs as training data.',\n tags: ['hitl', 'annotation', 'labeling', 'training'],\n useCase: 'When humans need to label AI outputs for fine-tuning or evaluation.',\n },\n {\n id: 'hitl-active-learning',\n name: 'Active Learning',\n module: './hitl/active-learning',\n domain: 'hitl',\n description: 'Intelligent sample selection for human annotation to maximize model improvement.',\n tags: ['hitl', 'active-learning', 'sampling', 'optimization'],\n useCase: 'When you want to pick the most informative samples for human review.',\n },\n {\n id: 'hitl-approval',\n name: 'HITL Approval',\n module: './hitl/approval',\n domain: 'hitl',\n description: 'Approval queue for human review gates on sensitive AI outputs.',\n tags: ['hitl', 'approval', 'queue', 'gate'],\n useCase: 'When AI outputs must be approved by a human before being used.',\n },\n {\n id: 'hitl-review',\n name: 'Review Triggers',\n module: './hitl/review',\n domain: 'hitl',\n description: 'Human review workflow triggers based on confidence, risk, and content analysis.',\n tags: ['hitl', 'review', 'trigger', 'confidence'],\n useCase: 'When you need automatic escalation to humans based on risk signals.',\n },\n\n // ===========================================================================\n // OUTPUT\n // ===========================================================================\n {\n id: 'output',\n name: 'Output',\n module: './output',\n domain: 'output',\n description:\n 'Output API factories for structured generation: objects, arrays, choices, and streaming.',\n tags: ['output', 'structured', 'generation', 'factory'],\n useCase: 'When you need typed, validated structured output from models.',\n },\n {\n id: 'output-multimodal',\n name: 'Multimodal Output',\n module: './output/multimodal',\n domain: 'output',\n description: 'Image generation, audio, and speech/transcription for multimodal AI output.',\n tags: ['output', 'multimodal', 'image', 'audio'],\n useCase: 'When agents need to produce images, audio, or other non-text output.',\n },\n\n // ===========================================================================\n // PROMPTS\n // ===========================================================================\n {\n id: 'prompts',\n name: 'Prompt Management',\n module: './prompts',\n domain: 'prompts',\n description:\n 'Centralized system prompt management with model-specific composition and variants.',\n tags: ['prompt', 'template', 'composition', 'model-specific'],\n useCase: 'When you need reusable, model-optimized prompt templates.',\n },\n\n // ===========================================================================\n // PIPELINES\n // ===========================================================================\n {\n id: 'pipelines',\n name: 'Pipelines',\n module: './pipelines',\n domain: 'pipelines',\n description: 'Multi-step pipeline execution with resumption, compliance checking, and tracing.',\n tags: ['pipeline', 'multi-step', 'orchestration', 'resumption'],\n useCase: 'When you need a sequence of AI steps with built-in compliance and tracing.',\n },\n\n // ===========================================================================\n // CACHING\n // ===========================================================================\n {\n id: 'caching',\n name: 'Caching',\n module: './caching',\n domain: 'caching',\n description:\n 'Response caching middleware with multiple storage backends and eviction strategies.',\n tags: ['caching', 'middleware', 'storage'],\n useCase: 'Top-level import when you need any caching capability.',\n },\n {\n id: 'caching-adapters',\n name: 'Cache Adapters',\n module: './caching/adapters',\n domain: 'caching',\n description: 'Cache adapter implementations for memory and Redis storage backends.',\n tags: ['caching', 'adapter', 'memory', 'redis'],\n useCase: 'When you need to plug in a specific cache storage backend.',\n },\n {\n id: 'caching-strategies',\n name: 'Cache Strategies',\n module: './caching/strategies',\n domain: 'caching',\n description: 'Pluggable eviction strategies: LRU, LFU, TTL, FIFO, Adaptive.',\n tags: ['caching', 'strategy', 'lru', 'lfu', 'ttl', 'eviction'],\n useCase: 'When you need a specific eviction policy for your cache.',\n },\n\n // ===========================================================================\n // SHARED\n // ===========================================================================\n {\n id: 'shared',\n name: 'Shared SDK Layer',\n module: './shared',\n domain: 'shared',\n description:\n 'Centralized SDK types and runtime exports — canonical import path for all AI SDK usage.',\n tags: ['shared', 'sdk', 'types', 'runtime'],\n useCase: 'When importing AI SDK types or runtime functions (instead of directly from \"ai\").',\n },\n\n // ===========================================================================\n // INTEGRATIONS\n // ===========================================================================\n {\n id: 'integrations',\n name: 'Integrations',\n module: './integrations',\n domain: 'integrations',\n description:\n 'Third-party runtime adapter interfaces: Redis, Blob Storage, Rate Limit, Stream, Notifications.',\n tags: ['integrations', 'adapter', 'third-party'],\n useCase: 'Top-level import when you need any integration adapter.',\n },\n {\n id: 'integrations-redis',\n name: 'Redis Integration',\n module: './integrations/redis',\n domain: 'integrations',\n description: 'RedisClient/RedisClientExtended interfaces with Upstash adapter implementation.',\n tags: ['integrations', 'redis', 'upstash', 'cache'],\n useCase: 'When you need Redis KV or extended commands (lists, hashes, sorted sets).',\n },\n {\n id: 'integrations-blob-storage',\n name: 'Blob Storage Integration',\n module: './integrations/blob-storage',\n domain: 'integrations',\n description: 'BlobStorageClient interface with Vercel Blob adapter implementation.',\n tags: ['integrations', 'blob', 'storage', 'vercel'],\n useCase: 'When you need to store/retrieve files or large objects.',\n },\n {\n id: 'integrations-rate-limit',\n name: 'Rate Limit Integration',\n module: './integrations/rate-limit',\n domain: 'integrations',\n description: 'RateLimiter interface with Upstash rate-limit adapter.',\n tags: ['integrations', 'rate-limit', 'upstash', 'throttle'],\n useCase: 'When you need distributed rate limiting for API calls.',\n },\n {\n id: 'integrations-stream',\n name: 'Stream Integration',\n module: './integrations/stream',\n domain: 'integrations',\n description: 'ResumableStreamContext interface with resumable stream adapter.',\n tags: ['integrations', 'stream', 'resumable'],\n useCase: 'When you need streams that survive disconnections and resume.',\n },\n {\n id: 'integrations-notifications',\n name: 'Notifications Integration',\n module: './integrations/notifications',\n domain: 'integrations',\n description:\n 'Notifier interface with log adapter (replaces sonner for server-side notifications).',\n tags: ['integrations', 'notifications', 'toast', 'log'],\n useCase: 'When you need to emit notifications from AI pipeline events.',\n },\n\n // ===========================================================================\n // GENERATIVE UI\n // ===========================================================================\n {\n id: 'generative-ui',\n name: 'Generative UI',\n module: './generative-ui',\n domain: 'generative-ui',\n description:\n 'AI-driven dynamic interface generation with enterprise catalog, streaming, and governance.',\n tags: ['generative-ui', 'dynamic', 'catalog', 'streaming', 'json-render'],\n useCase: 'Top-level import when you need AI to generate dynamic user interfaces.',\n },\n {\n id: 'generative-ui-catalog',\n name: 'UI Catalog',\n module: './generative-ui/catalog',\n domain: 'generative-ui',\n description:\n 'Enterprise component catalog with entitlement-based filtering and prompt generation.',\n tags: ['generative-ui', 'catalog', 'entitlements', 'prompt'],\n useCase: 'When defining which UI components AI can use, filtered by user tier.',\n },\n {\n id: 'generative-ui-registry',\n name: 'UI Registry',\n module: './generative-ui/registry',\n domain: 'generative-ui',\n description: 'Zod schema registry for runtime validation of AI-generated component props.',\n tags: ['generative-ui', 'registry', 'validation', 'zod', 'schema'],\n useCase: 'When you need to validate AI-generated UI trees before rendering.',\n },\n {\n id: 'generative-ui-stream',\n name: 'UI Stream',\n module: './generative-ui/stream',\n domain: 'generative-ui',\n description:\n 'Streaming configuration for generative UI with budget guards, audit logging, and validation.',\n tags: ['generative-ui', 'stream', 'budget', 'audit', 'streaming'],\n useCase: 'When streaming AI-generated UI trees with cost control and audit.',\n },\n] as const;\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/** All unique domain names in the catalog. */\nexport const CATALOG_DOMAINS = [...new Set(PATTERN_CATALOG.map(e => e.domain))] as const;\n\n/** All unique tags used in the catalog. */\nexport const CATALOG_TAGS = [\n ...new Set(PATTERN_CATALOG.flatMap(e => e.tags)),\n].sort() as readonly string[];\n\n/**\n * Find catalog entries matching a query.\n *\n * Searches id, name, description, tags, and useCase fields (case-insensitive).\n *\n * @param query - Search string.\n * @returns Matching catalog entries.\n * @example\n * ```ts\n * import { searchCatalog } from '@od-oneapp/ai-platform/catalog';\n *\n * searchCatalog('approval');\n * // → [tools-approval, hitl-approval, governance-compliance, ...]\n *\n * searchCatalog('circuit breaker');\n * // → [agents-fallback, grounding-rag]\n * ```\n */\nexport function searchCatalog(query: string): readonly CatalogEntry[] {\n const q = query.toLowerCase();\n return PATTERN_CATALOG.filter(\n e =>\n e.id.includes(q) ||\n e.name.toLowerCase().includes(q) ||\n e.description.toLowerCase().includes(q) ||\n e.tags.some(t => t.includes(q)) ||\n e.useCase.toLowerCase().includes(q),\n );\n}\n\n/**\n * Get all catalog entries for a given domain.\n *\n * @param domain - Domain to filter by.\n * @returns Catalog entries in that domain.\n */\nexport function getCatalogByDomain(domain: CatalogEntry['domain']): readonly CatalogEntry[] {\n return PATTERN_CATALOG.filter(e => e.domain === domain);\n}\n\n/**\n * Get all catalog entries that include a specific tag.\n *\n * @param tag - Tag to filter by.\n * @returns Catalog entries with that tag.\n */\nexport function getCatalogByTag(tag: string): readonly CatalogEntry[] {\n return PATTERN_CATALOG.filter(e => e.tags.includes(tag));\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import "node:module";
|
|
2
|
+
|
|
3
|
+
//#region \0rolldown/runtime.js
|
|
4
|
+
var __defProp = Object.defineProperty;
|
|
5
|
+
var __exportAll = (all, no_symbols) => {
|
|
6
|
+
let target = {};
|
|
7
|
+
for (var name in all) {
|
|
8
|
+
__defProp(target, name, {
|
|
9
|
+
get: all[name],
|
|
10
|
+
enumerable: true
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
if (!no_symbols) {
|
|
14
|
+
__defProp(target, Symbol.toStringTag, { value: "Module" });
|
|
15
|
+
}
|
|
16
|
+
return target;
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
//#endregion
|
|
20
|
+
export { __exportAll as t };
|
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
import { p as createLanguageModel } from "./xai-CbV_dCnP.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/agents/fallback/types.ts
|
|
4
|
+
/**
|
|
5
|
+
* All models failed error
|
|
6
|
+
*/
|
|
7
|
+
var AllModelsFailedError = class AllModelsFailedError extends Error {
|
|
8
|
+
constructor(message, failures) {
|
|
9
|
+
super(message);
|
|
10
|
+
this.failures = failures;
|
|
11
|
+
this.name = "AllModelsFailedError";
|
|
12
|
+
Object.setPrototypeOf(this, AllModelsFailedError.prototype);
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Circuit open error
|
|
17
|
+
*/
|
|
18
|
+
var CircuitOpenError = class CircuitOpenError extends Error {
|
|
19
|
+
constructor(model, resetTime) {
|
|
20
|
+
super(`Circuit open for model ${model}, resets at ${resetTime.toISOString()}`);
|
|
21
|
+
this.model = model;
|
|
22
|
+
this.resetTime = resetTime;
|
|
23
|
+
this.name = "CircuitOpenError";
|
|
24
|
+
Object.setPrototypeOf(this, CircuitOpenError.prototype);
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
//#endregion
|
|
29
|
+
//#region src/agents/fallback/strategies/model-fallback.ts
|
|
30
|
+
/**
|
|
31
|
+
* Model fallback strategy
|
|
32
|
+
* Automatically falls back to alternative models on failure
|
|
33
|
+
*/
|
|
34
|
+
/**
|
|
35
|
+
* Sleep utility
|
|
36
|
+
*/
|
|
37
|
+
function sleep(ms) {
|
|
38
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Execute with model fallback
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* ```ts
|
|
45
|
+
* const result = await executeWithFallback(
|
|
46
|
+
* {
|
|
47
|
+
* primary: Model.SONNET,
|
|
48
|
+
* fallbacks: [Model.HAIKU, Model.GPT_4O_MINI],
|
|
49
|
+
* maxRetries: 2,
|
|
50
|
+
* },
|
|
51
|
+
* async (model) => {
|
|
52
|
+
* return generateText({ model, prompt: "Hello" });
|
|
53
|
+
* }
|
|
54
|
+
* );
|
|
55
|
+
*
|
|
56
|
+
* console.log(`Succeeded with ${result.model} after ${result.attempts} attempts`);
|
|
57
|
+
* ```
|
|
58
|
+
*/
|
|
59
|
+
async function executeWithFallback(config, execute) {
|
|
60
|
+
const { primary, fallbacks, maxRetries = 3, retryDelay = 1e3, exponentialBackoff = true } = config;
|
|
61
|
+
const resolveModel = config.resolveModel ?? createLanguageModel;
|
|
62
|
+
const allModels = [primary, ...fallbacks];
|
|
63
|
+
const failedModels = [];
|
|
64
|
+
let totalAttempts = 0;
|
|
65
|
+
for (const model of allModels) {
|
|
66
|
+
let attempts = 0;
|
|
67
|
+
let lastError = null;
|
|
68
|
+
while (attempts < maxRetries) {
|
|
69
|
+
attempts++;
|
|
70
|
+
totalAttempts++;
|
|
71
|
+
try {
|
|
72
|
+
return {
|
|
73
|
+
result: await execute(resolveModel(model)),
|
|
74
|
+
model,
|
|
75
|
+
attempts: totalAttempts,
|
|
76
|
+
failedModels
|
|
77
|
+
};
|
|
78
|
+
} catch (error) {
|
|
79
|
+
lastError = error;
|
|
80
|
+
if (!isRetryableError(error)) break;
|
|
81
|
+
if (attempts < maxRetries) await sleep(exponentialBackoff ? retryDelay * Math.pow(2, attempts - 1) : retryDelay);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
if (lastError) failedModels.push({
|
|
85
|
+
model,
|
|
86
|
+
error: lastError,
|
|
87
|
+
attempts
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
throw new AllModelsFailedError(`All models failed after ${totalAttempts} total attempts`, failedModels.map((f) => ({
|
|
91
|
+
model: f.model,
|
|
92
|
+
error: f.error
|
|
93
|
+
})));
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Check if an error is retryable
|
|
97
|
+
*/
|
|
98
|
+
function isRetryableError(error) {
|
|
99
|
+
if (!(error instanceof Error)) return false;
|
|
100
|
+
const message = error.message.toLowerCase();
|
|
101
|
+
if (message.includes("rate limit") || message.includes("429")) return true;
|
|
102
|
+
if (message.includes("timeout") || message.includes("timed out")) return true;
|
|
103
|
+
if (message.includes("500") || message.includes("502") || message.includes("503")) return true;
|
|
104
|
+
if (message.includes("network") || message.includes("connection")) return true;
|
|
105
|
+
return false;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Create fallback middleware for AI SDK
|
|
109
|
+
*/
|
|
110
|
+
function createFallbackMiddleware(config) {
|
|
111
|
+
const asLanguageModelV3 = (model, modelName) => {
|
|
112
|
+
if (typeof model === "string") throw new Error(`Fallback middleware requires LanguageModelV3 instances, got '${modelName}'.`);
|
|
113
|
+
if (model.specificationVersion !== "v3") throw new Error(`Fallback middleware requires LanguageModelV3 instances, got '${model.specificationVersion}'.`);
|
|
114
|
+
return model;
|
|
115
|
+
};
|
|
116
|
+
const isSameModel = (candidate, current) => candidate.provider === current.provider && candidate.modelId === current.modelId;
|
|
117
|
+
const describeModel = (model) => {
|
|
118
|
+
if (typeof model === "string") return model;
|
|
119
|
+
return `${model.provider}:${model.modelId}`;
|
|
120
|
+
};
|
|
121
|
+
return {
|
|
122
|
+
specificationVersion: "v3",
|
|
123
|
+
wrapGenerate: async ({ doGenerate, params, model }) => {
|
|
124
|
+
return (await executeWithFallback(config, async (providerModel) => {
|
|
125
|
+
const provider = asLanguageModelV3(providerModel, describeModel(providerModel));
|
|
126
|
+
if (isSameModel(provider, model)) return await doGenerate();
|
|
127
|
+
return await provider.doGenerate(params);
|
|
128
|
+
})).result;
|
|
129
|
+
},
|
|
130
|
+
wrapStream: async ({ doStream, params, model }) => {
|
|
131
|
+
return (await executeWithFallback(config, async (providerModel) => {
|
|
132
|
+
const provider = asLanguageModelV3(providerModel, describeModel(providerModel));
|
|
133
|
+
if (isSameModel(provider, model)) return await doStream();
|
|
134
|
+
return await provider.doStream(params);
|
|
135
|
+
})).result;
|
|
136
|
+
}
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
//#endregion
|
|
141
|
+
//#region src/agents/fallback/recovery/circuit-breaker.ts
|
|
142
|
+
/**
|
|
143
|
+
* Circuit breaker for model reliability
|
|
144
|
+
*/
|
|
145
|
+
/**
|
|
146
|
+
* Circuit breaker for model reliability
|
|
147
|
+
*
|
|
148
|
+
* Prevents cascading failures by temporarily blocking
|
|
149
|
+
* calls to failing models.
|
|
150
|
+
*
|
|
151
|
+
* @example
|
|
152
|
+
* ```ts
|
|
153
|
+
* const breaker = new CircuitBreaker({
|
|
154
|
+
* failureThreshold: 5,
|
|
155
|
+
* resetTimeout: 30000, // 30 seconds
|
|
156
|
+
* });
|
|
157
|
+
*
|
|
158
|
+
* try {
|
|
159
|
+
* breaker.checkCircuit(Model.SONNET);
|
|
160
|
+
* const result = await generateText({ model, prompt });
|
|
161
|
+
* breaker.recordSuccess(Model.SONNET);
|
|
162
|
+
* } catch (error) {
|
|
163
|
+
* breaker.recordFailure(Model.SONNET);
|
|
164
|
+
* throw error;
|
|
165
|
+
* }
|
|
166
|
+
* ```
|
|
167
|
+
*/
|
|
168
|
+
var CircuitBreaker = class {
|
|
169
|
+
circuits = /* @__PURE__ */ new Map();
|
|
170
|
+
config;
|
|
171
|
+
constructor(config) {
|
|
172
|
+
this.config = {
|
|
173
|
+
failureThreshold: config.failureThreshold,
|
|
174
|
+
resetTimeout: config.resetTimeout,
|
|
175
|
+
successThreshold: config.successThreshold ?? 2
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Get or create circuit state for a model
|
|
180
|
+
*/
|
|
181
|
+
getCircuit(model) {
|
|
182
|
+
const existing = this.circuits.get(model);
|
|
183
|
+
if (existing) return existing;
|
|
184
|
+
const created = {
|
|
185
|
+
state: "closed",
|
|
186
|
+
failures: 0,
|
|
187
|
+
successes: 0,
|
|
188
|
+
lastFailure: null,
|
|
189
|
+
nextRetry: null
|
|
190
|
+
};
|
|
191
|
+
this.circuits.set(model, created);
|
|
192
|
+
return created;
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Check if circuit allows request
|
|
196
|
+
* @throws CircuitOpenError if circuit is open
|
|
197
|
+
*/
|
|
198
|
+
checkCircuit(model) {
|
|
199
|
+
const circuit = this.getCircuit(model);
|
|
200
|
+
if (circuit.state === "closed") return;
|
|
201
|
+
if (circuit.state === "open") {
|
|
202
|
+
if (circuit.nextRetry && /* @__PURE__ */ new Date() >= circuit.nextRetry) {
|
|
203
|
+
circuit.state = "half-open";
|
|
204
|
+
circuit.successes = 0;
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
throw new CircuitOpenError(model, circuit.nextRetry ?? new Date(Date.now() + this.config.resetTimeout));
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Record a successful request
|
|
212
|
+
*/
|
|
213
|
+
recordSuccess(model) {
|
|
214
|
+
const circuit = this.getCircuit(model);
|
|
215
|
+
if (circuit.state === "half-open") {
|
|
216
|
+
circuit.successes++;
|
|
217
|
+
if (circuit.successes >= this.config.successThreshold) {
|
|
218
|
+
circuit.state = "closed";
|
|
219
|
+
circuit.failures = 0;
|
|
220
|
+
circuit.successes = 0;
|
|
221
|
+
circuit.nextRetry = null;
|
|
222
|
+
}
|
|
223
|
+
} else if (circuit.state === "closed") circuit.failures = 0;
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Record a failed request
|
|
227
|
+
*/
|
|
228
|
+
recordFailure(model) {
|
|
229
|
+
const circuit = this.getCircuit(model);
|
|
230
|
+
circuit.failures++;
|
|
231
|
+
circuit.lastFailure = /* @__PURE__ */ new Date();
|
|
232
|
+
if (circuit.state === "half-open") {
|
|
233
|
+
circuit.state = "open";
|
|
234
|
+
circuit.nextRetry = new Date(Date.now() + this.config.resetTimeout);
|
|
235
|
+
} else if (circuit.state === "closed" && circuit.failures >= this.config.failureThreshold) {
|
|
236
|
+
circuit.state = "open";
|
|
237
|
+
circuit.nextRetry = new Date(Date.now() + this.config.resetTimeout);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Get current circuit state
|
|
242
|
+
*/
|
|
243
|
+
getState(model) {
|
|
244
|
+
return this.getCircuit(model).state;
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Manually reset a circuit
|
|
248
|
+
*/
|
|
249
|
+
reset(model) {
|
|
250
|
+
this.circuits.delete(model);
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Reset all circuits
|
|
254
|
+
*/
|
|
255
|
+
resetAll() {
|
|
256
|
+
this.circuits.clear();
|
|
257
|
+
}
|
|
258
|
+
};
|
|
259
|
+
|
|
260
|
+
//#endregion
|
|
261
|
+
export { CircuitOpenError as a, AllModelsFailedError as i, createFallbackMiddleware as n, executeWithFallback as r, CircuitBreaker as t };
|
|
262
|
+
//# sourceMappingURL=circuit-breaker-DoKWPORd.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"circuit-breaker-DoKWPORd.mjs","names":[],"sources":["../src/agents/fallback/types.ts","../src/agents/fallback/strategies/model-fallback.ts","../src/agents/fallback/recovery/circuit-breaker.ts"],"sourcesContent":["/**\n * Fallback and recovery types\n */\n\nimport type { Model } from '../../models/registry';\nimport type { SDKLanguageModel } from '../../shared';\n\n/**\n * Fallback strategy configuration\n */\nexport interface FallbackConfig {\n /** Primary model to use */\n primary: Model;\n /** Fallback models in order of preference */\n fallbacks: Model[];\n /** Optional model resolver override for testing or advanced routing */\n resolveModel?: (model: Model) => SDKLanguageModel;\n /** Maximum retries per model */\n maxRetries?: number;\n /** Delay between retries in ms */\n retryDelay?: number;\n /** Whether to use exponential backoff */\n exponentialBackoff?: boolean;\n}\n\n/**\n * Fallback result with metadata\n */\nexport interface FallbackResult<T> {\n /** The result from successful model */\n result: T;\n /** Which model succeeded */\n model: Model;\n /** Number of attempts before success */\n attempts: number;\n /** Models that failed */\n failedModels: Array<{\n model: Model;\n error: Error;\n attempts: number;\n }>;\n}\n\n/**\n * Circuit breaker state\n */\nexport type CircuitState = 'closed' | 'open' | 'half-open';\n\n/**\n * Circuit breaker configuration\n */\nexport interface CircuitBreakerConfig {\n /** Number of failures before opening circuit */\n failureThreshold: number;\n /** Time in ms before trying again (half-open) */\n resetTimeout: number;\n /** Number of successes in half-open to close */\n successThreshold?: number;\n}\n\n/**\n * All models failed error\n */\nexport class AllModelsFailedError extends Error {\n constructor(\n message: string,\n public readonly failures: Array<{ model: Model; error: Error }>,\n ) {\n super(message);\n this.name = 'AllModelsFailedError';\n Object.setPrototypeOf(this, AllModelsFailedError.prototype);\n }\n}\n\n/**\n * Circuit open error\n */\nexport class CircuitOpenError extends Error {\n constructor(\n public readonly model: Model,\n public readonly resetTime: Date,\n ) {\n super(`Circuit open for model ${model}, resets at ${resetTime.toISOString()}`);\n this.name = 'CircuitOpenError';\n Object.setPrototypeOf(this, CircuitOpenError.prototype);\n }\n}\n","/**\n * Model fallback strategy\n * Automatically falls back to alternative models on failure\n */\n\nimport { createLanguageModel } from '../../../models';\nimport { AllModelsFailedError } from '../types';\n\nimport type { WrapGenerateArgs, WrapStreamArgs } from '../../../sdk/middleware/model-middleware';\nimport type { SDKLanguageModel , SDKLanguageModelV3, SDKLanguageModelV3Middleware } from '../../../shared';\nimport type { FallbackConfig, FallbackResult } from '../types';\n\n\n/**\n * Sleep utility\n */\nfunction sleep(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms));\n}\n\n/**\n * Execute with model fallback\n *\n * @example\n * ```ts\n * const result = await executeWithFallback(\n * {\n * primary: Model.SONNET,\n * fallbacks: [Model.HAIKU, Model.GPT_4O_MINI],\n * maxRetries: 2,\n * },\n * async (model) => {\n * return generateText({ model, prompt: \"Hello\" });\n * }\n * );\n *\n * console.log(`Succeeded with ${result.model} after ${result.attempts} attempts`);\n * ```\n */\nexport async function executeWithFallback<T>(\n config: FallbackConfig,\n execute: (model: SDKLanguageModel) => Promise<T>,\n): Promise<FallbackResult<T>> {\n const {\n primary,\n fallbacks,\n maxRetries = 3,\n retryDelay = 1000,\n exponentialBackoff = true,\n } = config;\n\n const resolveModel = config.resolveModel ?? createLanguageModel;\n const allModels = [primary, ...fallbacks];\n const failedModels: FallbackResult<T>['failedModels'] = [];\n let totalAttempts = 0;\n\n for (const model of allModels) {\n let attempts = 0;\n let lastError: Error | null = null;\n\n while (attempts < maxRetries) {\n attempts++;\n totalAttempts++;\n\n try {\n const provider = resolveModel(model);\n const result = await execute(provider);\n\n return {\n result,\n model,\n attempts: totalAttempts,\n failedModels,\n };\n } catch (error) {\n lastError = error as Error;\n\n // Check if error is retryable\n if (!isRetryableError(error)) {\n break; // Move to next model\n }\n\n // Wait before retry\n if (attempts < maxRetries) {\n const delay = exponentialBackoff ? retryDelay * Math.pow(2, attempts - 1) : retryDelay;\n await sleep(delay);\n }\n }\n }\n\n // Record failure for this model\n if (lastError) {\n failedModels.push({\n model,\n error: lastError,\n attempts,\n });\n }\n }\n\n throw new AllModelsFailedError(\n `All models failed after ${totalAttempts} total attempts`,\n failedModels.map(f => ({ model: f.model, error: f.error })),\n );\n}\n\n/**\n * Check if an error is retryable\n */\nfunction isRetryableError(error: unknown): boolean {\n if (!(error instanceof Error)) return false;\n\n const message = error.message.toLowerCase();\n\n // Rate limit errors are retryable\n if (message.includes('rate limit') || message.includes('429')) return true;\n\n // Timeout errors are retryable\n if (message.includes('timeout') || message.includes('timed out')) return true;\n\n // Server errors are retryable\n if (message.includes('500') || message.includes('502') || message.includes('503')) {\n return true;\n }\n\n // Network errors are retryable\n if (message.includes('network') || message.includes('connection')) return true;\n\n return false;\n}\n\n/**\n * Create fallback middleware for AI SDK\n */\nexport function createFallbackMiddleware(config: FallbackConfig): SDKLanguageModelV3Middleware {\n const asLanguageModelV3 = (model: SDKLanguageModel, modelName: string): SDKLanguageModelV3 => {\n if (typeof model === 'string') {\n throw new Error(\n `Fallback middleware requires LanguageModelV3 instances, got '${modelName}'.`,\n );\n }\n\n if (model.specificationVersion !== 'v3') {\n throw new Error(\n `Fallback middleware requires LanguageModelV3 instances, got '${model.specificationVersion}'.`,\n );\n }\n\n return model;\n };\n\n const isSameModel = (candidate: SDKLanguageModelV3, current: SDKLanguageModelV3): boolean =>\n candidate.provider === current.provider && candidate.modelId === current.modelId;\n\n const describeModel = (model: SDKLanguageModel): string => {\n if (typeof model === 'string') {\n return model;\n }\n\n return `${model.provider}:${model.modelId}`;\n };\n\n return {\n specificationVersion: 'v3',\n wrapGenerate: async ({ doGenerate, params, model }: WrapGenerateArgs) => {\n const result = await executeWithFallback(config, async providerModel => {\n const provider = asLanguageModelV3(providerModel, describeModel(providerModel));\n\n if (isSameModel(provider, model)) {\n return await doGenerate();\n }\n\n return await provider.doGenerate(params);\n });\n\n return result.result;\n },\n wrapStream: async ({ doStream, params, model }: WrapStreamArgs) => {\n const result = await executeWithFallback(config, async providerModel => {\n const provider = asLanguageModelV3(providerModel, describeModel(providerModel));\n\n if (isSameModel(provider, model)) {\n return await doStream();\n }\n\n return await provider.doStream(params);\n });\n\n return result.result;\n },\n };\n}\n","/**\n * Circuit breaker for model reliability\n */\n\nimport { CircuitOpenError } from '../types';\n\nimport type { Model } from '../../../models/registry';\nimport type { CircuitBreakerConfig, CircuitState } from '../types';\n\n/**\n * Circuit state for a single model\n */\ninterface CircuitModelState {\n state: CircuitState;\n failures: number;\n successes: number;\n lastFailure: Date | null;\n nextRetry: Date | null;\n}\n\n/**\n * Circuit breaker for model reliability\n *\n * Prevents cascading failures by temporarily blocking\n * calls to failing models.\n *\n * @example\n * ```ts\n * const breaker = new CircuitBreaker({\n * failureThreshold: 5,\n * resetTimeout: 30000, // 30 seconds\n * });\n *\n * try {\n * breaker.checkCircuit(Model.SONNET);\n * const result = await generateText({ model, prompt });\n * breaker.recordSuccess(Model.SONNET);\n * } catch (error) {\n * breaker.recordFailure(Model.SONNET);\n * throw error;\n * }\n * ```\n */\nexport class CircuitBreaker {\n private circuits = new Map<Model, CircuitModelState>();\n private config: Required<CircuitBreakerConfig>;\n\n constructor(config: CircuitBreakerConfig) {\n this.config = {\n failureThreshold: config.failureThreshold,\n resetTimeout: config.resetTimeout,\n successThreshold: config.successThreshold ?? 2,\n };\n }\n\n /**\n * Get or create circuit state for a model\n */\n private getCircuit(model: Model): CircuitModelState {\n const existing = this.circuits.get(model);\n if (existing) {\n return existing;\n }\n\n const created: CircuitModelState = {\n state: 'closed',\n failures: 0,\n successes: 0,\n lastFailure: null,\n nextRetry: null,\n };\n\n this.circuits.set(model, created);\n return created;\n }\n\n /**\n * Check if circuit allows request\n * @throws CircuitOpenError if circuit is open\n */\n checkCircuit(model: Model): void {\n const circuit = this.getCircuit(model);\n\n if (circuit.state === 'closed') {\n return; // Allow request\n }\n\n if (circuit.state === 'open') {\n // Check if we should transition to half-open\n if (circuit.nextRetry && new Date() >= circuit.nextRetry) {\n circuit.state = 'half-open';\n circuit.successes = 0;\n return; // Allow test request\n }\n\n throw new CircuitOpenError(\n model,\n circuit.nextRetry ?? new Date(Date.now() + this.config.resetTimeout),\n );\n }\n\n // half-open: allow request\n }\n\n /**\n * Record a successful request\n */\n recordSuccess(model: Model): void {\n const circuit = this.getCircuit(model);\n\n if (circuit.state === 'half-open') {\n circuit.successes++;\n\n if (circuit.successes >= this.config.successThreshold) {\n // Close the circuit\n circuit.state = 'closed';\n circuit.failures = 0;\n circuit.successes = 0;\n circuit.nextRetry = null;\n }\n } else if (circuit.state === 'closed') {\n // Reset failure count on success\n circuit.failures = 0;\n }\n }\n\n /**\n * Record a failed request\n */\n recordFailure(model: Model): void {\n const circuit = this.getCircuit(model);\n circuit.failures++;\n circuit.lastFailure = new Date();\n\n if (circuit.state === 'half-open') {\n // Failed during half-open, re-open circuit\n circuit.state = 'open';\n circuit.nextRetry = new Date(Date.now() + this.config.resetTimeout);\n } else if (circuit.state === 'closed' && circuit.failures >= this.config.failureThreshold) {\n // Threshold reached, open circuit\n circuit.state = 'open';\n circuit.nextRetry = new Date(Date.now() + this.config.resetTimeout);\n }\n }\n\n /**\n * Get current circuit state\n */\n getState(model: Model): CircuitState {\n return this.getCircuit(model).state;\n }\n\n /**\n * Manually reset a circuit\n */\n reset(model: Model): void {\n this.circuits.delete(model);\n }\n\n /**\n * Reset all circuits\n */\n resetAll(): void {\n this.circuits.clear();\n }\n}\n"],"mappings":";;;;;;AA+DA,IAAa,uBAAb,MAAa,6BAA6B,MAAM;CAC9C,YACE,SACA,AAAgB,UAChB;AACA,QAAM,QAAQ;EAFE;AAGhB,OAAK,OAAO;AACZ,SAAO,eAAe,MAAM,qBAAqB,UAAU;;;;;;AAO/D,IAAa,mBAAb,MAAa,yBAAyB,MAAM;CAC1C,YACE,AAAgB,OAChB,AAAgB,WAChB;AACA,QAAM,0BAA0B,MAAM,cAAc,UAAU,aAAa,GAAG;EAH9D;EACA;AAGhB,OAAK,OAAO;AACZ,SAAO,eAAe,MAAM,iBAAiB,UAAU;;;;;;;;;;;;;ACpE3D,SAAS,MAAM,IAA2B;AACxC,QAAO,IAAI,SAAQ,YAAW,WAAW,SAAS,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;AAsBxD,eAAsB,oBACpB,QACA,SAC4B;CAC5B,MAAM,EACJ,SACA,WACA,aAAa,GACb,aAAa,KACb,qBAAqB,SACnB;CAEJ,MAAM,eAAe,OAAO,gBAAgB;CAC5C,MAAM,YAAY,CAAC,SAAS,GAAG,UAAU;CACzC,MAAM,eAAkD,EAAE;CAC1D,IAAI,gBAAgB;AAEpB,MAAK,MAAM,SAAS,WAAW;EAC7B,IAAI,WAAW;EACf,IAAI,YAA0B;AAE9B,SAAO,WAAW,YAAY;AAC5B;AACA;AAEA,OAAI;AAIF,WAAO;KACL,QAHa,MAAM,QADJ,aAAa,MAAM,CACE;KAIpC;KACA,UAAU;KACV;KACD;YACM,OAAO;AACd,gBAAY;AAGZ,QAAI,CAAC,iBAAiB,MAAM,CAC1B;AAIF,QAAI,WAAW,WAEb,OAAM,MADQ,qBAAqB,aAAa,KAAK,IAAI,GAAG,WAAW,EAAE,GAAG,WAC1D;;;AAMxB,MAAI,UACF,cAAa,KAAK;GAChB;GACA,OAAO;GACP;GACD,CAAC;;AAIN,OAAM,IAAI,qBACR,2BAA2B,cAAc,kBACzC,aAAa,KAAI,OAAM;EAAE,OAAO,EAAE;EAAO,OAAO,EAAE;EAAO,EAAE,CAC5D;;;;;AAMH,SAAS,iBAAiB,OAAyB;AACjD,KAAI,EAAE,iBAAiB,OAAQ,QAAO;CAEtC,MAAM,UAAU,MAAM,QAAQ,aAAa;AAG3C,KAAI,QAAQ,SAAS,aAAa,IAAI,QAAQ,SAAS,MAAM,CAAE,QAAO;AAGtE,KAAI,QAAQ,SAAS,UAAU,IAAI,QAAQ,SAAS,YAAY,CAAE,QAAO;AAGzE,KAAI,QAAQ,SAAS,MAAM,IAAI,QAAQ,SAAS,MAAM,IAAI,QAAQ,SAAS,MAAM,CAC/E,QAAO;AAIT,KAAI,QAAQ,SAAS,UAAU,IAAI,QAAQ,SAAS,aAAa,CAAE,QAAO;AAE1E,QAAO;;;;;AAMT,SAAgB,yBAAyB,QAAsD;CAC7F,MAAM,qBAAqB,OAAyB,cAA0C;AAC5F,MAAI,OAAO,UAAU,SACnB,OAAM,IAAI,MACR,gEAAgE,UAAU,IAC3E;AAGH,MAAI,MAAM,yBAAyB,KACjC,OAAM,IAAI,MACR,gEAAgE,MAAM,qBAAqB,IAC5F;AAGH,SAAO;;CAGT,MAAM,eAAe,WAA+B,YAClD,UAAU,aAAa,QAAQ,YAAY,UAAU,YAAY,QAAQ;CAE3E,MAAM,iBAAiB,UAAoC;AACzD,MAAI,OAAO,UAAU,SACnB,QAAO;AAGT,SAAO,GAAG,MAAM,SAAS,GAAG,MAAM;;AAGpC,QAAO;EACL,sBAAsB;EACtB,cAAc,OAAO,EAAE,YAAY,QAAQ,YAA8B;AAWvE,WAVe,MAAM,oBAAoB,QAAQ,OAAM,kBAAiB;IACtE,MAAM,WAAW,kBAAkB,eAAe,cAAc,cAAc,CAAC;AAE/E,QAAI,YAAY,UAAU,MAAM,CAC9B,QAAO,MAAM,YAAY;AAG3B,WAAO,MAAM,SAAS,WAAW,OAAO;KACxC,EAEY;;EAEhB,YAAY,OAAO,EAAE,UAAU,QAAQ,YAA4B;AAWjE,WAVe,MAAM,oBAAoB,QAAQ,OAAM,kBAAiB;IACtE,MAAM,WAAW,kBAAkB,eAAe,cAAc,cAAc,CAAC;AAE/E,QAAI,YAAY,UAAU,MAAM,CAC9B,QAAO,MAAM,UAAU;AAGzB,WAAO,MAAM,SAAS,SAAS,OAAO;KACtC,EAEY;;EAEjB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnJH,IAAa,iBAAb,MAA4B;CAC1B,AAAQ,2BAAW,IAAI,KAA+B;CACtD,AAAQ;CAER,YAAY,QAA8B;AACxC,OAAK,SAAS;GACZ,kBAAkB,OAAO;GACzB,cAAc,OAAO;GACrB,kBAAkB,OAAO,oBAAoB;GAC9C;;;;;CAMH,AAAQ,WAAW,OAAiC;EAClD,MAAM,WAAW,KAAK,SAAS,IAAI,MAAM;AACzC,MAAI,SACF,QAAO;EAGT,MAAM,UAA6B;GACjC,OAAO;GACP,UAAU;GACV,WAAW;GACX,aAAa;GACb,WAAW;GACZ;AAED,OAAK,SAAS,IAAI,OAAO,QAAQ;AACjC,SAAO;;;;;;CAOT,aAAa,OAAoB;EAC/B,MAAM,UAAU,KAAK,WAAW,MAAM;AAEtC,MAAI,QAAQ,UAAU,SACpB;AAGF,MAAI,QAAQ,UAAU,QAAQ;AAE5B,OAAI,QAAQ,6BAAa,IAAI,MAAM,IAAI,QAAQ,WAAW;AACxD,YAAQ,QAAQ;AAChB,YAAQ,YAAY;AACpB;;AAGF,SAAM,IAAI,iBACR,OACA,QAAQ,aAAa,IAAI,KAAK,KAAK,KAAK,GAAG,KAAK,OAAO,aAAa,CACrE;;;;;;CASL,cAAc,OAAoB;EAChC,MAAM,UAAU,KAAK,WAAW,MAAM;AAEtC,MAAI,QAAQ,UAAU,aAAa;AACjC,WAAQ;AAER,OAAI,QAAQ,aAAa,KAAK,OAAO,kBAAkB;AAErD,YAAQ,QAAQ;AAChB,YAAQ,WAAW;AACnB,YAAQ,YAAY;AACpB,YAAQ,YAAY;;aAEb,QAAQ,UAAU,SAE3B,SAAQ,WAAW;;;;;CAOvB,cAAc,OAAoB;EAChC,MAAM,UAAU,KAAK,WAAW,MAAM;AACtC,UAAQ;AACR,UAAQ,8BAAc,IAAI,MAAM;AAEhC,MAAI,QAAQ,UAAU,aAAa;AAEjC,WAAQ,QAAQ;AAChB,WAAQ,YAAY,IAAI,KAAK,KAAK,KAAK,GAAG,KAAK,OAAO,aAAa;aAC1D,QAAQ,UAAU,YAAY,QAAQ,YAAY,KAAK,OAAO,kBAAkB;AAEzF,WAAQ,QAAQ;AAChB,WAAQ,YAAY,IAAI,KAAK,KAAK,KAAK,GAAG,KAAK,OAAO,aAAa;;;;;;CAOvE,SAAS,OAA4B;AACnC,SAAO,KAAK,WAAW,MAAM,CAAC;;;;;CAMhC,MAAM,OAAoB;AACxB,OAAK,SAAS,OAAO,MAAM;;;;;CAM7B,WAAiB;AACf,OAAK,SAAS,OAAO"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { Nr as SDKLanguageModel, Ur as SDKLanguageModelV3Middleware } from "./ai-runtime-DIwOEc6g.mjs";
|
|
2
|
+
import { n as Model } from "./registry-DVPWzkXR.mjs";
|
|
3
|
+
|
|
4
|
+
//#region src/agents/fallback/types.d.ts
|
|
5
|
+
interface FallbackConfig {
|
|
6
|
+
primary: Model;
|
|
7
|
+
fallbacks: Model[];
|
|
8
|
+
resolveModel?: (model: Model) => SDKLanguageModel;
|
|
9
|
+
maxRetries?: number;
|
|
10
|
+
retryDelay?: number;
|
|
11
|
+
exponentialBackoff?: boolean;
|
|
12
|
+
}
|
|
13
|
+
interface FallbackResult<T> {
|
|
14
|
+
result: T;
|
|
15
|
+
model: Model;
|
|
16
|
+
attempts: number;
|
|
17
|
+
failedModels: Array<{
|
|
18
|
+
model: Model;
|
|
19
|
+
error: Error;
|
|
20
|
+
attempts: number;
|
|
21
|
+
}>;
|
|
22
|
+
}
|
|
23
|
+
type CircuitState = 'closed' | 'open' | 'half-open';
|
|
24
|
+
interface CircuitBreakerConfig {
|
|
25
|
+
failureThreshold: number;
|
|
26
|
+
resetTimeout: number;
|
|
27
|
+
successThreshold?: number;
|
|
28
|
+
}
|
|
29
|
+
declare class AllModelsFailedError extends Error {
|
|
30
|
+
readonly failures: Array<{
|
|
31
|
+
model: Model;
|
|
32
|
+
error: Error;
|
|
33
|
+
}>;
|
|
34
|
+
constructor(message: string, failures: Array<{
|
|
35
|
+
model: Model;
|
|
36
|
+
error: Error;
|
|
37
|
+
}>);
|
|
38
|
+
}
|
|
39
|
+
declare class CircuitOpenError extends Error {
|
|
40
|
+
readonly model: Model;
|
|
41
|
+
readonly resetTime: Date;
|
|
42
|
+
constructor(model: Model, resetTime: Date);
|
|
43
|
+
}
|
|
44
|
+
//#endregion
|
|
45
|
+
//#region src/agents/fallback/strategies/model-fallback.d.ts
|
|
46
|
+
declare function executeWithFallback<T>(config: FallbackConfig, execute: (model: SDKLanguageModel) => Promise<T>): Promise<FallbackResult<T>>;
|
|
47
|
+
declare function createFallbackMiddleware(config: FallbackConfig): SDKLanguageModelV3Middleware;
|
|
48
|
+
//#endregion
|
|
49
|
+
//#region src/agents/fallback/recovery/circuit-breaker.d.ts
|
|
50
|
+
declare class CircuitBreaker {
|
|
51
|
+
private circuits;
|
|
52
|
+
private config;
|
|
53
|
+
constructor(config: CircuitBreakerConfig);
|
|
54
|
+
private getCircuit;
|
|
55
|
+
checkCircuit(model: Model): void;
|
|
56
|
+
recordSuccess(model: Model): void;
|
|
57
|
+
recordFailure(model: Model): void;
|
|
58
|
+
getState(model: Model): CircuitState;
|
|
59
|
+
reset(model: Model): void;
|
|
60
|
+
resetAll(): void;
|
|
61
|
+
}
|
|
62
|
+
//#endregion
|
|
63
|
+
export { CircuitBreakerConfig as a, FallbackConfig as c, AllModelsFailedError as i, FallbackResult as l, createFallbackMiddleware as n, CircuitOpenError as o, executeWithFallback as r, CircuitState as s, CircuitBreaker as t };
|
|
64
|
+
//# sourceMappingURL=circuit-breaker-Mey3E7tW.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"circuit-breaker-Mey3E7tW.d.mts","names":[],"sources":["../src/agents/fallback/types.ts","../src/agents/fallback/strategies/model-fallback.ts","../src/agents/fallback/recovery/circuit-breaker.ts"],"mappings":";;;;UAUiB,cAAA;EAEf,OAAA,EAAS,KAAA;EAET,SAAA,EAAW,KAAA;EAEX,YAAA,IAAgB,KAAA,EAAO,KAAA,KAAU,gBAAA;EAEjC,UAAA;EAEA,UAAA;EAEA,kBAAA;AAAA;AAAA,UAMe,cAAA;EAEf,MAAA,EAAQ,CAAA;EAER,KAAA,EAAO,KAAA;EAEP,QAAA;EAEA,YAAA,EAAc,KAAA;IACZ,KAAA,EAAO,KAAA;IACP,KAAA,EAAO,KAAA;IACP,QAAA;EAAA;AAAA;AAAA,KAOQ,YAAA;AAAA,UAKK,oBAAA;EAEf,gBAAA;EAEA,YAAA;EAEA,gBAAA;AAAA;AAAA,cAMW,oBAAA,SAA6B,KAAA;EAAA,SAGtB,QAAA,EAAU,KAAA;IAAQ,KAAA,EAAO,KAAA;IAAO,KAAA,EAAO,KAAA;EAAA;cADvD,OAAA,UACgB,QAAA,EAAU,KAAA;IAAQ,KAAA,EAAO,KAAA;IAAO,KAAA,EAAO,KAAA;EAAA;AAAA;AAAA,cAW9C,gBAAA,SAAyB,KAAA;EAAA,SAElB,KAAA,EAAO,KAAA;EAAA,SACP,SAAA,EAAW,IAAA;cADX,KAAA,EAAO,KAAA,EACP,SAAA,EAAW,IAAA;AAAA;;;iBCzCT,mBAAA,GAAA,CACpB,MAAA,EAAQ,cAAA,EACR,OAAA,GAAU,KAAA,EAAO,gBAAA,KAAqB,OAAA,CAAQ,CAAA,IAC7C,OAAA,CAAQ,cAAA,CAAe,CAAA;AAAA,iBA4FV,wBAAA,CAAyB,MAAA,EAAQ,cAAA,GAAiB,4BAAA;;;cC3FrD,cAAA;EAAA,QACH,QAAA;EAAA,QACA,MAAA;cAEI,MAAA,EAAQ,oBAAA;EAAA,QAWZ,UAAA;EAsBR,YAAA,CAAa,KAAA,EAAO,KAAA;EA2BpB,aAAA,CAAc,KAAA,EAAO,KAAA;EAsBrB,aAAA,CAAc,KAAA,EAAO,KAAA;EAmBrB,QAAA,CAAS,KAAA,EAAO,KAAA,GAAQ,YAAA;EAOxB,KAAA,CAAM,KAAA,EAAO,KAAA;EAOb,QAAA,CAAA;AAAA"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
//#region src/grounding/citation/citation-generator.ts
|
|
2
|
+
/**
|
|
3
|
+
* Generate citations for grounded text
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* ```ts
|
|
7
|
+
* const citations = generateCitations(
|
|
8
|
+
* "AI is powerful [1]. It transforms industries [2].",
|
|
9
|
+
* sources,
|
|
10
|
+
* { format: "footnote" }
|
|
11
|
+
* );
|
|
12
|
+
* ```
|
|
13
|
+
*/
|
|
14
|
+
function generateCitations(text, sources, options = {}) {
|
|
15
|
+
const format = options.format ?? "inline";
|
|
16
|
+
const citations = [];
|
|
17
|
+
const markerPattern = /\[(\d+)\]/g;
|
|
18
|
+
let match;
|
|
19
|
+
while ((match = markerPattern.exec(text)) !== null) {
|
|
20
|
+
const token = match[1];
|
|
21
|
+
if (!token) continue;
|
|
22
|
+
const index = parseInt(token, 10) - 1;
|
|
23
|
+
if (index >= 0 && index < sources.length) {
|
|
24
|
+
const source = sources[index];
|
|
25
|
+
if (!source) continue;
|
|
26
|
+
const citedText = extractCitedText(text, match.index);
|
|
27
|
+
citations.push({
|
|
28
|
+
id: `cite-${citations.length + 1}`,
|
|
29
|
+
sourceId: source.id,
|
|
30
|
+
citedText,
|
|
31
|
+
position: {
|
|
32
|
+
start: match.index,
|
|
33
|
+
end: match.index + match[0].length
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
if (citations.length === 0 && format !== "inline" && sources.length > 0) {
|
|
39
|
+
const endPosition = text.length;
|
|
40
|
+
const citedText = extractCitedText(text, endPosition);
|
|
41
|
+
sources.forEach((source, index) => {
|
|
42
|
+
citations.push({
|
|
43
|
+
id: `cite-${index + 1}`,
|
|
44
|
+
sourceId: source.id,
|
|
45
|
+
citedText,
|
|
46
|
+
position: {
|
|
47
|
+
start: endPosition,
|
|
48
|
+
end: endPosition
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
return citations;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Extract the text being cited (preceding content)
|
|
57
|
+
*/
|
|
58
|
+
function extractCitedText(text, citationPos) {
|
|
59
|
+
const beforeCitation = text.slice(0, citationPos);
|
|
60
|
+
const sentenceMatch = beforeCitation.match(/[.!?]\s*([^.!?]+)$/);
|
|
61
|
+
if (sentenceMatch?.[1]) return sentenceMatch[1].trim();
|
|
62
|
+
return beforeCitation.slice(-100).trim();
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Format citations as footnotes
|
|
66
|
+
*/
|
|
67
|
+
function formatAsFootnotes(text, sources, options = {}) {
|
|
68
|
+
const { includeUrls = true, template } = options;
|
|
69
|
+
let footnotes = "\n\n---\n";
|
|
70
|
+
sources.forEach((source, index) => {
|
|
71
|
+
const num = index + 1;
|
|
72
|
+
if (template) footnotes += `[${num}] ${template(source, index)}\n`;
|
|
73
|
+
else {
|
|
74
|
+
let citation = `[${num}] ${source.title || source.id}`;
|
|
75
|
+
if (includeUrls && source.url) citation += ` - ${source.url}`;
|
|
76
|
+
footnotes += `${citation}\n`;
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
return text + footnotes;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Verify that all claims in text are grounded in sources
|
|
83
|
+
*/
|
|
84
|
+
function verifyClaims(text, sources) {
|
|
85
|
+
const sentences = text.split(/[.!?]+/).filter((s) => s.trim());
|
|
86
|
+
const ungroundedClaims = [];
|
|
87
|
+
const sourceText = sources.map((s) => s.content.toLowerCase()).join(" ");
|
|
88
|
+
for (const sentence of sentences) {
|
|
89
|
+
const trimmed = sentence.trim();
|
|
90
|
+
if (trimmed.length < 20) continue;
|
|
91
|
+
const keyPhrases = trimmed.toLowerCase().split(/\s+/).filter((w) => w.length > 4);
|
|
92
|
+
const matchCount = keyPhrases.filter((phrase) => sourceText.includes(phrase)).length;
|
|
93
|
+
if ((keyPhrases.length > 0 ? matchCount / keyPhrases.length : 0) < .3) ungroundedClaims.push(trimmed);
|
|
94
|
+
}
|
|
95
|
+
return {
|
|
96
|
+
verified: ungroundedClaims.length === 0,
|
|
97
|
+
ungroundedClaims
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
//#endregion
|
|
102
|
+
export { generateCitations as n, verifyClaims as r, formatAsFootnotes as t };
|
|
103
|
+
//# sourceMappingURL=citation-generator-C-9RpbHq.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"citation-generator-C-9RpbHq.mjs","names":[],"sources":["../src/grounding/citation/citation-generator.ts"],"sourcesContent":["/**\n * Citation generation utilities\n */\n\nimport type { Citation, GroundingSource } from '../types';\n\n/**\n * Citation format options\n */\nexport type CitationFormat = 'inline' | 'footnote' | 'endnote';\n\n/**\n * Citation generator options\n */\nexport interface CitationGeneratorOptions {\n /** Citation format */\n format?: CitationFormat;\n /** Whether to include source URLs */\n includeUrls?: boolean;\n /** Custom citation template */\n template?: (source: GroundingSource, index: number) => string;\n}\n\n/**\n * Generate citations for grounded text\n *\n * @example\n * ```ts\n * const citations = generateCitations(\n * \"AI is powerful [1]. It transforms industries [2].\",\n * sources,\n * { format: \"footnote\" }\n * );\n * ```\n */\nexport function generateCitations(\n text: string,\n sources: GroundingSource[],\n options: CitationGeneratorOptions = {},\n): Citation[] {\n const format = options.format ?? 'inline';\n const citations: Citation[] = [];\n\n // Find citation markers [1], [2], etc.\n const markerPattern = /\\[(\\d+)\\]/g;\n let match;\n\n while ((match = markerPattern.exec(text)) !== null) {\n const token = match[1];\n if (!token) {\n continue;\n }\n const index = parseInt(token, 10) - 1;\n if (index >= 0 && index < sources.length) {\n const source = sources[index];\n if (!source) {\n continue;\n }\n\n // Find the text being cited (preceding sentence or clause)\n const citedText = extractCitedText(text, match.index);\n\n citations.push({\n id: `cite-${citations.length + 1}`,\n sourceId: source.id,\n citedText,\n position: {\n start: match.index,\n end: match.index + match[0].length,\n },\n });\n }\n }\n\n if (citations.length === 0 && format !== 'inline' && sources.length > 0) {\n const endPosition = text.length;\n const citedText = extractCitedText(text, endPosition);\n\n sources.forEach((source, index) => {\n citations.push({\n id: `cite-${index + 1}`,\n sourceId: source.id,\n citedText,\n position: {\n start: endPosition,\n end: endPosition,\n },\n });\n });\n }\n\n return citations;\n}\n\n/**\n * Extract the text being cited (preceding content)\n */\nfunction extractCitedText(text: string, citationPos: number): string {\n // Look back for sentence boundary\n const beforeCitation = text.slice(0, citationPos);\n const sentenceMatch = beforeCitation.match(/[.!?]\\s*([^.!?]+)$/);\n\n if (sentenceMatch?.[1]) {\n return sentenceMatch[1].trim();\n }\n\n // If no sentence boundary, take last 100 characters\n return beforeCitation.slice(-100).trim();\n}\n\n/**\n * Format citations as footnotes\n */\nexport function formatAsFootnotes(\n text: string,\n sources: GroundingSource[],\n options: CitationGeneratorOptions = {},\n): string {\n const { includeUrls = true, template } = options;\n\n let footnotes = '\\n\\n---\\n';\n\n sources.forEach((source, index) => {\n const num = index + 1;\n if (template) {\n footnotes += `[${num}] ${template(source, index)}\\n`;\n } else {\n let citation = `[${num}] ${source.title || source.id}`;\n if (includeUrls && source.url) {\n citation += ` - ${source.url}`;\n }\n footnotes += `${citation}\\n`;\n }\n });\n\n return text + footnotes;\n}\n\n/**\n * Verify that all claims in text are grounded in sources\n */\nexport function verifyClaims(\n text: string,\n sources: GroundingSource[],\n): { verified: boolean; ungroundedClaims: string[] } {\n // Simple heuristic: check if key phrases appear in sources\n const sentences = text.split(/[.!?]+/).filter(s => s.trim());\n const ungroundedClaims: string[] = [];\n\n const sourceText = sources.map(s => s.content.toLowerCase()).join(' ');\n\n for (const sentence of sentences) {\n const trimmed = sentence.trim();\n if (trimmed.length < 20) continue; // Skip short fragments\n\n // Extract key phrases (nouns and noun phrases)\n const words = trimmed.toLowerCase().split(/\\s+/);\n const keyPhrases = words.filter(w => w.length > 4);\n\n // Check if at least half of key phrases appear in sources\n const matchCount = keyPhrases.filter(phrase => sourceText.includes(phrase)).length;\n\n const matchRatio = keyPhrases.length > 0 ? matchCount / keyPhrases.length : 0;\n\n if (matchRatio < 0.3) {\n ungroundedClaims.push(trimmed);\n }\n }\n\n return {\n verified: ungroundedClaims.length === 0,\n ungroundedClaims,\n };\n}\n"],"mappings":";;;;;;;;;;;;;AAmCA,SAAgB,kBACd,MACA,SACA,UAAoC,EAAE,EAC1B;CACZ,MAAM,SAAS,QAAQ,UAAU;CACjC,MAAM,YAAwB,EAAE;CAGhC,MAAM,gBAAgB;CACtB,IAAI;AAEJ,SAAQ,QAAQ,cAAc,KAAK,KAAK,MAAM,MAAM;EAClD,MAAM,QAAQ,MAAM;AACpB,MAAI,CAAC,MACH;EAEF,MAAM,QAAQ,SAAS,OAAO,GAAG,GAAG;AACpC,MAAI,SAAS,KAAK,QAAQ,QAAQ,QAAQ;GACxC,MAAM,SAAS,QAAQ;AACvB,OAAI,CAAC,OACH;GAIF,MAAM,YAAY,iBAAiB,MAAM,MAAM,MAAM;AAErD,aAAU,KAAK;IACb,IAAI,QAAQ,UAAU,SAAS;IAC/B,UAAU,OAAO;IACjB;IACA,UAAU;KACR,OAAO,MAAM;KACb,KAAK,MAAM,QAAQ,MAAM,GAAG;KAC7B;IACF,CAAC;;;AAIN,KAAI,UAAU,WAAW,KAAK,WAAW,YAAY,QAAQ,SAAS,GAAG;EACvE,MAAM,cAAc,KAAK;EACzB,MAAM,YAAY,iBAAiB,MAAM,YAAY;AAErD,UAAQ,SAAS,QAAQ,UAAU;AACjC,aAAU,KAAK;IACb,IAAI,QAAQ,QAAQ;IACpB,UAAU,OAAO;IACjB;IACA,UAAU;KACR,OAAO;KACP,KAAK;KACN;IACF,CAAC;IACF;;AAGJ,QAAO;;;;;AAMT,SAAS,iBAAiB,MAAc,aAA6B;CAEnE,MAAM,iBAAiB,KAAK,MAAM,GAAG,YAAY;CACjD,MAAM,gBAAgB,eAAe,MAAM,qBAAqB;AAEhE,KAAI,gBAAgB,GAClB,QAAO,cAAc,GAAG,MAAM;AAIhC,QAAO,eAAe,MAAM,KAAK,CAAC,MAAM;;;;;AAM1C,SAAgB,kBACd,MACA,SACA,UAAoC,EAAE,EAC9B;CACR,MAAM,EAAE,cAAc,MAAM,aAAa;CAEzC,IAAI,YAAY;AAEhB,SAAQ,SAAS,QAAQ,UAAU;EACjC,MAAM,MAAM,QAAQ;AACpB,MAAI,SACF,cAAa,IAAI,IAAI,IAAI,SAAS,QAAQ,MAAM,CAAC;OAC5C;GACL,IAAI,WAAW,IAAI,IAAI,IAAI,OAAO,SAAS,OAAO;AAClD,OAAI,eAAe,OAAO,IACxB,aAAY,MAAM,OAAO;AAE3B,gBAAa,GAAG,SAAS;;GAE3B;AAEF,QAAO,OAAO;;;;;AAMhB,SAAgB,aACd,MACA,SACmD;CAEnD,MAAM,YAAY,KAAK,MAAM,SAAS,CAAC,QAAO,MAAK,EAAE,MAAM,CAAC;CAC5D,MAAM,mBAA6B,EAAE;CAErC,MAAM,aAAa,QAAQ,KAAI,MAAK,EAAE,QAAQ,aAAa,CAAC,CAAC,KAAK,IAAI;AAEtE,MAAK,MAAM,YAAY,WAAW;EAChC,MAAM,UAAU,SAAS,MAAM;AAC/B,MAAI,QAAQ,SAAS,GAAI;EAIzB,MAAM,aADQ,QAAQ,aAAa,CAAC,MAAM,MAAM,CACvB,QAAO,MAAK,EAAE,SAAS,EAAE;EAGlD,MAAM,aAAa,WAAW,QAAO,WAAU,WAAW,SAAS,OAAO,CAAC,CAAC;AAI5E,OAFmB,WAAW,SAAS,IAAI,aAAa,WAAW,SAAS,KAE3D,GACf,kBAAiB,KAAK,QAAQ;;AAIlC,QAAO;EACL,UAAU,iBAAiB,WAAW;EACtC;EACD"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { i as GroundingSource, t as Citation } from "./types-D3zJb59_.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/grounding/citation/citation-generator.d.ts
|
|
4
|
+
type CitationFormat = 'inline' | 'footnote' | 'endnote';
|
|
5
|
+
interface CitationGeneratorOptions {
|
|
6
|
+
format?: CitationFormat;
|
|
7
|
+
includeUrls?: boolean;
|
|
8
|
+
template?: (source: GroundingSource, index: number) => string;
|
|
9
|
+
}
|
|
10
|
+
declare function generateCitations(text: string, sources: GroundingSource[], options?: CitationGeneratorOptions): Citation[];
|
|
11
|
+
declare function formatAsFootnotes(text: string, sources: GroundingSource[], options?: CitationGeneratorOptions): string;
|
|
12
|
+
declare function verifyClaims(text: string, sources: GroundingSource[]): {
|
|
13
|
+
verified: boolean;
|
|
14
|
+
ungroundedClaims: string[];
|
|
15
|
+
};
|
|
16
|
+
//#endregion
|
|
17
|
+
export { verifyClaims as a, generateCitations as i, CitationGeneratorOptions as n, formatAsFootnotes as r, CitationFormat as t };
|
|
18
|
+
//# sourceMappingURL=citation-generator-CDSymDs_.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"citation-generator-CDSymDs_.d.mts","names":[],"sources":["../src/grounding/citation/citation-generator.ts"],"mappings":";;;KASY,cAAA;AAAA,UAKK,wBAAA;EAEf,MAAA,GAAS,cAAA;EAET,WAAA;EAEA,QAAA,IAAY,MAAA,EAAQ,eAAA,EAAiB,KAAA;AAAA;AAAA,iBAevB,iBAAA,CACd,IAAA,UACA,OAAA,EAAS,eAAA,IACT,OAAA,GAAS,wBAAA,GACR,QAAA;AAAA,iBA0Ea,iBAAA,CACd,IAAA,UACA,OAAA,EAAS,eAAA,IACT,OAAA,GAAS,wBAAA;AAAA,iBAyBK,YAAA,CACd,IAAA,UACA,OAAA,EAAS,eAAA;EACN,QAAA;EAAmB,gBAAA;AAAA"}
|