@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,178 @@
|
|
|
1
|
+
//#region src/hitl/active-learning/index.ts
|
|
2
|
+
/**
|
|
3
|
+
* Uncertainty-based selection: picks samples where model is least confident.
|
|
4
|
+
*/
|
|
5
|
+
function uncertaintyScore(sample) {
|
|
6
|
+
if (!sample.prediction) return .5;
|
|
7
|
+
const { confidence } = sample.prediction;
|
|
8
|
+
return 1 - confidence;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Entropy-based uncertainty for multi-class predictions.
|
|
12
|
+
*/
|
|
13
|
+
function entropyScore(sample) {
|
|
14
|
+
const probs = sample.prediction?.probabilities;
|
|
15
|
+
if (!probs) return .5;
|
|
16
|
+
const values = Object.values(probs);
|
|
17
|
+
if (values.length === 0) return .5;
|
|
18
|
+
let entropy = 0;
|
|
19
|
+
for (const p of values) if (p > 0) entropy -= p * Math.log2(p);
|
|
20
|
+
const maxEntropy = Math.log2(values.length);
|
|
21
|
+
return maxEntropy > 0 ? entropy / maxEntropy : 0;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Diversity-based selection using embedding distance.
|
|
25
|
+
*/
|
|
26
|
+
function selectDiverse(samples, count, existingSelected = []) {
|
|
27
|
+
const selected = [...existingSelected];
|
|
28
|
+
const remaining = samples.filter((s) => !selected.includes(s));
|
|
29
|
+
while (selected.length < count && remaining.length > 0) {
|
|
30
|
+
let bestSample = null;
|
|
31
|
+
let bestMinDist = -1;
|
|
32
|
+
for (const candidate of remaining) {
|
|
33
|
+
if (!candidate.embedding) continue;
|
|
34
|
+
let minDist = Infinity;
|
|
35
|
+
for (const sel of selected) {
|
|
36
|
+
if (!sel.embedding) continue;
|
|
37
|
+
const dist = euclideanDistance(candidate.embedding, sel.embedding);
|
|
38
|
+
minDist = Math.min(minDist, dist);
|
|
39
|
+
}
|
|
40
|
+
if (minDist > bestMinDist) {
|
|
41
|
+
bestMinDist = minDist;
|
|
42
|
+
bestSample = candidate;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
if (bestSample) {
|
|
46
|
+
selected.push(bestSample);
|
|
47
|
+
remaining.splice(remaining.indexOf(bestSample), 1);
|
|
48
|
+
} else {
|
|
49
|
+
const randomIdx = Math.floor(Math.random() * remaining.length);
|
|
50
|
+
const randomSample = remaining[randomIdx];
|
|
51
|
+
if (randomSample) {
|
|
52
|
+
selected.push(randomSample);
|
|
53
|
+
remaining.splice(randomIdx, 1);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return selected.slice(existingSelected.length);
|
|
58
|
+
}
|
|
59
|
+
function euclideanDistance(a, b) {
|
|
60
|
+
if (a.length !== b.length) return Infinity;
|
|
61
|
+
let sum = 0;
|
|
62
|
+
for (let i = 0; i < a.length; i++) {
|
|
63
|
+
const diff = (a[i] ?? 0) - (b[i] ?? 0);
|
|
64
|
+
sum += diff * diff;
|
|
65
|
+
}
|
|
66
|
+
return Math.sqrt(sum);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Creates an active learner for intelligent sample selection.
|
|
70
|
+
*
|
|
71
|
+
* @example
|
|
72
|
+
* ```typescript
|
|
73
|
+
* const learner = createActiveLearner({
|
|
74
|
+
* strategy: 'uncertainty',
|
|
75
|
+
* batchSize: 10,
|
|
76
|
+
* uncertaintyThreshold: 0.3
|
|
77
|
+
* });
|
|
78
|
+
*
|
|
79
|
+
* const samples = [
|
|
80
|
+
* { id: '1', data: 'text1', prediction: { label: 'A', confidence: 0.9 } },
|
|
81
|
+
* { id: '2', data: 'text2', prediction: { label: 'B', confidence: 0.5 } },
|
|
82
|
+
* { id: '3', data: 'text3', prediction: { label: 'A', confidence: 0.3 } },
|
|
83
|
+
* ];
|
|
84
|
+
*
|
|
85
|
+
* const result = await learner.selectSamples(samples, 2);
|
|
86
|
+
* // Returns samples with confidence 0.3 and 0.5 (most uncertain)
|
|
87
|
+
* ```
|
|
88
|
+
*/
|
|
89
|
+
function createActiveLearner(config) {
|
|
90
|
+
let currentStrategy = config.strategy;
|
|
91
|
+
const batchSize = config.batchSize ?? 10;
|
|
92
|
+
const uncertaintyThreshold = config.uncertaintyThreshold ?? .5;
|
|
93
|
+
const diversityWeight = config.diversityWeight ?? .3;
|
|
94
|
+
async function selectSamples(samples, count) {
|
|
95
|
+
const targetCount = count ?? batchSize;
|
|
96
|
+
const scores = /* @__PURE__ */ new Map();
|
|
97
|
+
for (const sample of samples) {
|
|
98
|
+
let score;
|
|
99
|
+
switch (currentStrategy) {
|
|
100
|
+
case "uncertainty":
|
|
101
|
+
score = uncertaintyScore(sample);
|
|
102
|
+
break;
|
|
103
|
+
case "diversity":
|
|
104
|
+
score = Math.random();
|
|
105
|
+
break;
|
|
106
|
+
case "query-by-committee":
|
|
107
|
+
score = entropyScore(sample);
|
|
108
|
+
break;
|
|
109
|
+
case "expected-improvement":
|
|
110
|
+
score = uncertaintyScore(sample) * .7 + entropyScore(sample) * .3;
|
|
111
|
+
break;
|
|
112
|
+
default:
|
|
113
|
+
score = Math.random();
|
|
114
|
+
break;
|
|
115
|
+
}
|
|
116
|
+
scores.set(sample.id, score);
|
|
117
|
+
}
|
|
118
|
+
let selected;
|
|
119
|
+
if (currentStrategy === "diversity") selected = selectDiverse(samples, targetCount);
|
|
120
|
+
else if (currentStrategy === "uncertainty" && diversityWeight > 0) {
|
|
121
|
+
const topK = Math.min(targetCount * 3, samples.length);
|
|
122
|
+
selected = selectDiverse([...samples].sort((a, b) => (scores.get(b.id) ?? 0) - (scores.get(a.id) ?? 0)).slice(0, topK), targetCount);
|
|
123
|
+
} else selected = [...samples].sort((a, b) => (scores.get(b.id) ?? 0) - (scores.get(a.id) ?? 0)).slice(0, targetCount);
|
|
124
|
+
if (currentStrategy === "uncertainty" && uncertaintyThreshold > 0) selected = selected.filter((s) => (scores.get(s.id) ?? 0) >= uncertaintyThreshold);
|
|
125
|
+
return {
|
|
126
|
+
selected,
|
|
127
|
+
scores,
|
|
128
|
+
strategy: currentStrategy,
|
|
129
|
+
metadata: {
|
|
130
|
+
totalSamples: samples.length,
|
|
131
|
+
requestedCount: targetCount,
|
|
132
|
+
actualCount: selected.length,
|
|
133
|
+
avgScore: selected.length > 0 ? selected.reduce((sum, s) => sum + (scores.get(s.id) ?? 0), 0) / selected.length : 0
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
function updateStrategy(strategy) {
|
|
138
|
+
currentStrategy = strategy;
|
|
139
|
+
}
|
|
140
|
+
function getConfig() {
|
|
141
|
+
return {
|
|
142
|
+
strategy: currentStrategy,
|
|
143
|
+
batchSize,
|
|
144
|
+
uncertaintyThreshold,
|
|
145
|
+
diversityWeight
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
return {
|
|
149
|
+
selectSamples,
|
|
150
|
+
updateStrategy,
|
|
151
|
+
getConfig
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Creates a sample from raw data with optional prediction.
|
|
156
|
+
*/
|
|
157
|
+
function createSample(id, data, options) {
|
|
158
|
+
return {
|
|
159
|
+
id,
|
|
160
|
+
data,
|
|
161
|
+
prediction: options?.prediction,
|
|
162
|
+
embedding: options?.embedding,
|
|
163
|
+
metadata: options?.metadata
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Batch creates samples from an array of data.
|
|
168
|
+
*/
|
|
169
|
+
function createSamples(items, idPrefix = "sample") {
|
|
170
|
+
return items.map((data, i) => ({
|
|
171
|
+
id: `${idPrefix}-${i}`,
|
|
172
|
+
data
|
|
173
|
+
}));
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
//#endregion
|
|
177
|
+
export { createActiveLearner, createSample, createSamples };
|
|
178
|
+
//# sourceMappingURL=hitl-active-learning.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hitl-active-learning.mjs","names":[],"sources":["../src/hitl/active-learning/index.ts"],"sourcesContent":["/**\n * Active Learning Selection\n *\n * Intelligently selects samples for human annotation to maximize\n * model improvement with minimal labeling effort.\n *\n * @module @od-oneapp/ai-platform/hitl/active-learning\n *\n * @example\n * ```typescript\n * import { createActiveLearner } from '@od-oneapp/ai-platform/hitl/active-learning';\n *\n * const learner = createActiveLearner({\n * strategy: 'uncertainty',\n * batchSize: 10\n * });\n *\n * // Get most informative samples to label\n * const samples = await learner.selectSamples(unlabeledData);\n * ```\n */\n\n// -----------------------------------------------------------------------------\n// Types\n// -----------------------------------------------------------------------------\n\n/** Active learning strategy */\nexport type SelectionStrategy =\n | 'uncertainty' // Select samples with highest model uncertainty\n | 'diversity' // Select diverse samples to cover feature space\n | 'query-by-committee' // Select samples where multiple models disagree\n | 'expected-improvement' // Select samples with highest expected improvement\n | 'random'; // Random baseline\n\n/** Sample with prediction metadata */\nexport interface Sample<T = unknown> {\n readonly id: string;\n readonly data: T;\n readonly prediction?: {\n label: string;\n confidence: number;\n probabilities?: Record<string, number>;\n };\n readonly embedding?: number[];\n readonly metadata?: Record<string, unknown>;\n}\n\n/** Selection result */\nexport interface SelectionResult<T = unknown> {\n readonly selected: Sample<T>[];\n readonly scores: Map<string, number>;\n readonly strategy: SelectionStrategy;\n readonly metadata?: Record<string, unknown>;\n}\n\n/** Active learner configuration */\nexport interface ActiveLearnerConfig {\n readonly strategy: SelectionStrategy;\n readonly batchSize?: number;\n readonly uncertaintyThreshold?: number;\n readonly diversityWeight?: number;\n readonly randomSeed?: number;\n}\n\n/** Active learner interface */\nexport interface ActiveLearner<T = unknown> {\n selectSamples(samples: Sample<T>[], count?: number): Promise<SelectionResult<T>>;\n updateStrategy(strategy: SelectionStrategy): void;\n getConfig(): ActiveLearnerConfig;\n}\n\n// -----------------------------------------------------------------------------\n// Selection Strategies\n// -----------------------------------------------------------------------------\n\n/**\n * Uncertainty-based selection: picks samples where model is least confident.\n */\nfunction uncertaintyScore(sample: Sample): number {\n if (!sample.prediction) return 0.5; // No prediction = medium uncertainty\n\n const { confidence } = sample.prediction;\n // Higher score = more uncertain = better candidate\n return 1 - confidence;\n}\n\n/**\n * Entropy-based uncertainty for multi-class predictions.\n */\nfunction entropyScore(sample: Sample): number {\n const probs = sample.prediction?.probabilities;\n if (!probs) return 0.5;\n\n const values = Object.values(probs);\n if (values.length === 0) return 0.5;\n\n // Calculate entropy: -sum(p * log(p))\n let entropy = 0;\n for (const p of values) {\n if (p > 0) {\n entropy -= p * Math.log2(p);\n }\n }\n\n // Normalize by max entropy (uniform distribution)\n const maxEntropy = Math.log2(values.length);\n return maxEntropy > 0 ? entropy / maxEntropy : 0;\n}\n\n/**\n * Diversity-based selection using embedding distance.\n */\nfunction selectDiverse<T>(\n samples: Sample<T>[],\n count: number,\n existingSelected: Sample<T>[] = [],\n): Sample<T>[] {\n const selected: Sample<T>[] = [...existingSelected];\n const remaining = samples.filter(s => !selected.includes(s));\n\n while (selected.length < count && remaining.length > 0) {\n let bestSample: Sample<T> | null = null;\n let bestMinDist = -1;\n\n for (const candidate of remaining) {\n if (!candidate.embedding) continue;\n\n // Find minimum distance to any selected sample\n let minDist = Infinity;\n for (const sel of selected) {\n if (!sel.embedding) continue;\n const dist = euclideanDistance(candidate.embedding, sel.embedding);\n minDist = Math.min(minDist, dist);\n }\n\n // Select sample with maximum minimum distance (most diverse)\n if (minDist > bestMinDist) {\n bestMinDist = minDist;\n bestSample = candidate;\n }\n }\n\n if (bestSample) {\n selected.push(bestSample);\n remaining.splice(remaining.indexOf(bestSample), 1);\n } else {\n // No more samples with embeddings, pick randomly\n const randomIdx = Math.floor(Math.random() * remaining.length);\n const randomSample = remaining[randomIdx];\n if (randomSample) {\n selected.push(randomSample);\n remaining.splice(randomIdx, 1);\n }\n }\n }\n\n return selected.slice(existingSelected.length);\n}\n\nfunction euclideanDistance(a: number[], b: number[]): number {\n if (a.length !== b.length) return Infinity;\n let sum = 0;\n for (let i = 0; i < a.length; i++) {\n const diff = (a[i] ?? 0) - (b[i] ?? 0);\n sum += diff * diff;\n }\n return Math.sqrt(sum);\n}\n\n// -----------------------------------------------------------------------------\n// Active Learner Implementation\n// -----------------------------------------------------------------------------\n\n/**\n * Creates an active learner for intelligent sample selection.\n *\n * @example\n * ```typescript\n * const learner = createActiveLearner({\n * strategy: 'uncertainty',\n * batchSize: 10,\n * uncertaintyThreshold: 0.3\n * });\n *\n * const samples = [\n * { id: '1', data: 'text1', prediction: { label: 'A', confidence: 0.9 } },\n * { id: '2', data: 'text2', prediction: { label: 'B', confidence: 0.5 } },\n * { id: '3', data: 'text3', prediction: { label: 'A', confidence: 0.3 } },\n * ];\n *\n * const result = await learner.selectSamples(samples, 2);\n * // Returns samples with confidence 0.3 and 0.5 (most uncertain)\n * ```\n */\nexport function createActiveLearner<T = unknown>(config: ActiveLearnerConfig): ActiveLearner<T> {\n let currentStrategy = config.strategy;\n const batchSize = config.batchSize ?? 10;\n const uncertaintyThreshold = config.uncertaintyThreshold ?? 0.5;\n const diversityWeight = config.diversityWeight ?? 0.3;\n\n async function selectSamples(samples: Sample<T>[], count?: number): Promise<SelectionResult<T>> {\n const targetCount = count ?? batchSize;\n const scores = new Map<string, number>();\n\n // Score all samples based on strategy\n for (const sample of samples) {\n let score: number;\n\n switch (currentStrategy) {\n case 'uncertainty':\n score = uncertaintyScore(sample);\n break;\n case 'diversity':\n // For diversity, we use a different selection approach\n score = Math.random(); // Initial random scores, diversity handled separately\n break;\n case 'query-by-committee':\n // Use entropy as proxy for committee disagreement\n score = entropyScore(sample);\n break;\n case 'expected-improvement':\n // Combine uncertainty with potential information gain\n score = uncertaintyScore(sample) * 0.7 + entropyScore(sample) * 0.3;\n break;\n case 'random':\n default:\n score = Math.random();\n break;\n }\n\n scores.set(sample.id, score);\n }\n\n let selected: Sample<T>[];\n\n if (currentStrategy === 'diversity') {\n // Use diversity-based selection\n selected = selectDiverse(samples, targetCount);\n } else if (currentStrategy === 'uncertainty' && diversityWeight > 0) {\n // Hybrid: uncertainty + diversity\n // First get top candidates by uncertainty\n const topK = Math.min(targetCount * 3, samples.length);\n const sortedByScore = [...samples].sort(\n (a, b) => (scores.get(b.id) ?? 0) - (scores.get(a.id) ?? 0),\n );\n const topCandidates = sortedByScore.slice(0, topK);\n\n // Then select diverse subset\n selected = selectDiverse(topCandidates, targetCount);\n } else {\n // Pure score-based selection\n const sortedByScore = [...samples].sort(\n (a, b) => (scores.get(b.id) ?? 0) - (scores.get(a.id) ?? 0),\n );\n selected = sortedByScore.slice(0, targetCount);\n }\n\n // Filter by uncertainty threshold if using uncertainty strategy\n if (currentStrategy === 'uncertainty' && uncertaintyThreshold > 0) {\n selected = selected.filter(s => (scores.get(s.id) ?? 0) >= uncertaintyThreshold);\n }\n\n return {\n selected,\n scores,\n strategy: currentStrategy,\n metadata: {\n totalSamples: samples.length,\n requestedCount: targetCount,\n actualCount: selected.length,\n avgScore:\n selected.length > 0\n ? selected.reduce((sum, s) => sum + (scores.get(s.id) ?? 0), 0) / selected.length\n : 0,\n },\n };\n }\n\n function updateStrategy(strategy: SelectionStrategy): void {\n currentStrategy = strategy;\n }\n\n function getConfig(): ActiveLearnerConfig {\n return {\n strategy: currentStrategy,\n batchSize,\n uncertaintyThreshold,\n diversityWeight,\n };\n }\n\n return {\n selectSamples,\n updateStrategy,\n getConfig,\n };\n}\n\n// -----------------------------------------------------------------------------\n// Utility Functions\n// -----------------------------------------------------------------------------\n\n/**\n * Creates a sample from raw data with optional prediction.\n */\nexport function createSample<T>(\n id: string,\n data: T,\n options?: {\n prediction?: Sample['prediction'];\n embedding?: number[];\n metadata?: Record<string, unknown>;\n },\n): Sample<T> {\n return {\n id,\n data,\n prediction: options?.prediction,\n embedding: options?.embedding,\n metadata: options?.metadata,\n };\n}\n\n/**\n * Batch creates samples from an array of data.\n */\nexport function createSamples<T>(items: T[], idPrefix: string = 'sample'): Sample<T>[] {\n return items.map((data, i) => ({\n id: `${idPrefix}-${i}`,\n data,\n }));\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
//#region src/hitl/annotation/index.d.ts
|
|
2
|
+
type TaskPriority = 'low' | 'medium' | 'high' | 'urgent';
|
|
3
|
+
type TaskStatus = 'pending' | 'assigned' | 'in_progress' | 'completed' | 'skipped';
|
|
4
|
+
type TaskType = 'quality-check' | 'factual-accuracy' | 'safety-review' | 'preference-ranking' | 'correction' | 'labeling' | 'custom';
|
|
5
|
+
interface AnnotationTask {
|
|
6
|
+
readonly id: string;
|
|
7
|
+
readonly responseId: string;
|
|
8
|
+
readonly type: TaskType;
|
|
9
|
+
readonly priority: TaskPriority;
|
|
10
|
+
readonly status: TaskStatus;
|
|
11
|
+
readonly assigneeId?: string;
|
|
12
|
+
readonly instructions?: string;
|
|
13
|
+
readonly metadata?: Record<string, unknown>;
|
|
14
|
+
readonly createdAt: Date;
|
|
15
|
+
readonly updatedAt: Date;
|
|
16
|
+
readonly completedAt?: Date;
|
|
17
|
+
}
|
|
18
|
+
type TaskInput = Omit<AnnotationTask, 'id' | 'status' | 'createdAt' | 'updatedAt' | 'completedAt'>;
|
|
19
|
+
interface TextCorrection {
|
|
20
|
+
readonly original: string;
|
|
21
|
+
readonly corrected: string;
|
|
22
|
+
readonly reason?: string;
|
|
23
|
+
readonly startOffset?: number;
|
|
24
|
+
readonly endOffset?: number;
|
|
25
|
+
}
|
|
26
|
+
interface Annotation {
|
|
27
|
+
readonly id: string;
|
|
28
|
+
readonly taskId: string;
|
|
29
|
+
readonly annotatorId: string;
|
|
30
|
+
readonly labels?: string[];
|
|
31
|
+
readonly score?: number;
|
|
32
|
+
readonly corrections?: TextCorrection[];
|
|
33
|
+
readonly notes?: string;
|
|
34
|
+
readonly timeSpentMs?: number;
|
|
35
|
+
readonly metadata?: Record<string, unknown>;
|
|
36
|
+
readonly createdAt: Date;
|
|
37
|
+
}
|
|
38
|
+
type AnnotationInput = Omit<Annotation, 'id' | 'taskId' | 'createdAt'>;
|
|
39
|
+
interface TaskQuery {
|
|
40
|
+
readonly status?: TaskStatus | TaskStatus[];
|
|
41
|
+
readonly type?: TaskType;
|
|
42
|
+
readonly priority?: TaskPriority;
|
|
43
|
+
readonly assigneeId?: string;
|
|
44
|
+
readonly limit?: number;
|
|
45
|
+
readonly offset?: number;
|
|
46
|
+
}
|
|
47
|
+
interface AnnotationStore {
|
|
48
|
+
createTask(input: TaskInput): Promise<AnnotationTask>;
|
|
49
|
+
getTask(id: string): Promise<AnnotationTask | null>;
|
|
50
|
+
queryTasks(query: TaskQuery): Promise<AnnotationTask[]>;
|
|
51
|
+
assignTask(taskId: string, annotatorId: string): Promise<AnnotationTask>;
|
|
52
|
+
updateTaskStatus(taskId: string, status: TaskStatus): Promise<AnnotationTask>;
|
|
53
|
+
submitAnnotation(taskId: string, input: AnnotationInput): Promise<Annotation>;
|
|
54
|
+
getAnnotation(id: string): Promise<Annotation | null>;
|
|
55
|
+
getAnnotationsForTask(taskId: string): Promise<Annotation[]>;
|
|
56
|
+
getStats(): Promise<AnnotationStats>;
|
|
57
|
+
}
|
|
58
|
+
interface AnnotationStats {
|
|
59
|
+
readonly totalTasks: number;
|
|
60
|
+
readonly pendingTasks: number;
|
|
61
|
+
readonly completedTasks: number;
|
|
62
|
+
readonly avgCompletionTimeMs: number;
|
|
63
|
+
readonly annotatorStats: Map<string, AnnotatorStats>;
|
|
64
|
+
}
|
|
65
|
+
interface AnnotatorStats {
|
|
66
|
+
readonly annotatorId: string;
|
|
67
|
+
readonly tasksCompleted: number;
|
|
68
|
+
readonly avgTimeMs: number;
|
|
69
|
+
readonly avgScore?: number;
|
|
70
|
+
}
|
|
71
|
+
declare function createAnnotationStore(): AnnotationStore;
|
|
72
|
+
//#endregion
|
|
73
|
+
export { Annotation, AnnotationInput, AnnotationStats, AnnotationStore, AnnotationTask, AnnotatorStats, TaskInput, TaskPriority, TaskQuery, TaskStatus, TaskType, TextCorrection, createAnnotationStore };
|
|
74
|
+
//# sourceMappingURL=hitl-annotation.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hitl-annotation.d.mts","names":[],"sources":["../src/hitl/annotation/index.ts"],"mappings":";KAkCY,YAAA;AAAA,KAGA,UAAA;AAAA,KAGA,QAAA;AAAA,UAUK,cAAA;EAAA,SACN,EAAA;EAAA,SACA,UAAA;EAAA,SACA,IAAA,EAAM,QAAA;EAAA,SACN,QAAA,EAAU,YAAA;EAAA,SACV,MAAA,EAAQ,UAAA;EAAA,SACR,UAAA;EAAA,SACA,YAAA;EAAA,SACA,QAAA,GAAW,MAAA;EAAA,SACX,SAAA,EAAW,IAAA;EAAA,SACX,SAAA,EAAW,IAAA;EAAA,SACX,WAAA,GAAc,IAAA;AAAA;AAAA,KAIb,SAAA,GAAY,IAAA,CACtB,cAAA;AAAA,UAKe,cAAA;EAAA,SACN,QAAA;EAAA,SACA,SAAA;EAAA,SACA,MAAA;EAAA,SACA,WAAA;EAAA,SACA,SAAA;AAAA;AAAA,UAIM,UAAA;EAAA,SACN,EAAA;EAAA,SACA,MAAA;EAAA,SACA,WAAA;EAAA,SACA,MAAA;EAAA,SACA,KAAA;EAAA,SACA,WAAA,GAAc,cAAA;EAAA,SACd,KAAA;EAAA,SACA,WAAA;EAAA,SACA,QAAA,GAAW,MAAA;EAAA,SACX,SAAA,EAAW,IAAA;AAAA;AAAA,KAIV,eAAA,GAAkB,IAAA,CAAK,UAAA;AAAA,UAGlB,SAAA;EAAA,SACN,MAAA,GAAS,UAAA,GAAa,UAAA;EAAA,SACtB,IAAA,GAAO,QAAA;EAAA,SACP,QAAA,GAAW,YAAA;EAAA,SACX,UAAA;EAAA,SACA,KAAA;EAAA,SACA,MAAA;AAAA;AAAA,UAIM,eAAA;EAEf,UAAA,CAAW,KAAA,EAAO,SAAA,GAAY,OAAA,CAAQ,cAAA;EACtC,OAAA,CAAQ,EAAA,WAAa,OAAA,CAAQ,cAAA;EAC7B,UAAA,CAAW,KAAA,EAAO,SAAA,GAAY,OAAA,CAAQ,cAAA;EACtC,UAAA,CAAW,MAAA,UAAgB,WAAA,WAAsB,OAAA,CAAQ,cAAA;EACzD,gBAAA,CAAiB,MAAA,UAAgB,MAAA,EAAQ,UAAA,GAAa,OAAA,CAAQ,cAAA;EAG9D,gBAAA,CAAiB,MAAA,UAAgB,KAAA,EAAO,eAAA,GAAkB,OAAA,CAAQ,UAAA;EAClE,aAAA,CAAc,EAAA,WAAa,OAAA,CAAQ,UAAA;EACnC,qBAAA,CAAsB,MAAA,WAAiB,OAAA,CAAQ,UAAA;EAG/C,QAAA,IAAY,OAAA,CAAQ,eAAA;AAAA;AAAA,UAIL,eAAA;EAAA,SACN,UAAA;EAAA,SACA,YAAA;EAAA,SACA,cAAA;EAAA,SACA,mBAAA;EAAA,SACA,cAAA,EAAgB,GAAA,SAAY,cAAA;AAAA;AAAA,UAItB,cAAA;EAAA,SACN,WAAA;EAAA,SACA,cAAA;EAAA,SACA,SAAA;EAAA,SACA,QAAA;AAAA;AAAA,iBAgCK,qBAAA,CAAA,GAAyB,eAAA"}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
//#region src/hitl/annotation/index.ts
|
|
2
|
+
/**
|
|
3
|
+
* Creates an in-memory annotation store.
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* ```typescript
|
|
7
|
+
* const store = createAnnotationStore();
|
|
8
|
+
*
|
|
9
|
+
* // Create a task
|
|
10
|
+
* const task = await store.createTask({
|
|
11
|
+
* responseId: 'resp-123',
|
|
12
|
+
* type: 'quality-check',
|
|
13
|
+
* priority: 'medium'
|
|
14
|
+
* });
|
|
15
|
+
*
|
|
16
|
+
* // Assign to annotator
|
|
17
|
+
* await store.assignTask(task.id, 'annotator-1');
|
|
18
|
+
*
|
|
19
|
+
* // Submit annotation
|
|
20
|
+
* await store.submitAnnotation(task.id, {
|
|
21
|
+
* annotatorId: 'annotator-1',
|
|
22
|
+
* labels: ['accurate', 'helpful'],
|
|
23
|
+
* score: 4
|
|
24
|
+
* });
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
function createAnnotationStore() {
|
|
28
|
+
const tasks = /* @__PURE__ */ new Map();
|
|
29
|
+
const annotations = /* @__PURE__ */ new Map();
|
|
30
|
+
const taskAnnotations = /* @__PURE__ */ new Map();
|
|
31
|
+
async function createTask(input) {
|
|
32
|
+
const now = /* @__PURE__ */ new Date();
|
|
33
|
+
const task = {
|
|
34
|
+
...input,
|
|
35
|
+
id: generateTaskId(),
|
|
36
|
+
status: "pending",
|
|
37
|
+
createdAt: now,
|
|
38
|
+
updatedAt: now
|
|
39
|
+
};
|
|
40
|
+
tasks.set(task.id, task);
|
|
41
|
+
taskAnnotations.set(task.id, []);
|
|
42
|
+
return task;
|
|
43
|
+
}
|
|
44
|
+
async function getTask(id) {
|
|
45
|
+
return tasks.get(id) ?? null;
|
|
46
|
+
}
|
|
47
|
+
async function queryTasks(query) {
|
|
48
|
+
let results = Array.from(tasks.values());
|
|
49
|
+
if (query.status) {
|
|
50
|
+
const statuses = Array.isArray(query.status) ? query.status : [query.status];
|
|
51
|
+
results = results.filter((t) => statuses.includes(t.status));
|
|
52
|
+
}
|
|
53
|
+
if (query.type) results = results.filter((t) => t.type === query.type);
|
|
54
|
+
if (query.priority) results = results.filter((t) => t.priority === query.priority);
|
|
55
|
+
if (query.assigneeId) results = results.filter((t) => t.assigneeId === query.assigneeId);
|
|
56
|
+
const priorityOrder = {
|
|
57
|
+
urgent: 0,
|
|
58
|
+
high: 1,
|
|
59
|
+
medium: 2,
|
|
60
|
+
low: 3
|
|
61
|
+
};
|
|
62
|
+
results.sort((a, b) => {
|
|
63
|
+
const pDiff = priorityOrder[a.priority] - priorityOrder[b.priority];
|
|
64
|
+
if (pDiff !== 0) return pDiff;
|
|
65
|
+
return a.createdAt.getTime() - b.createdAt.getTime();
|
|
66
|
+
});
|
|
67
|
+
const offset = query.offset ?? 0;
|
|
68
|
+
const limit = query.limit ?? 100;
|
|
69
|
+
return results.slice(offset, offset + limit);
|
|
70
|
+
}
|
|
71
|
+
async function assignTask(taskId, annotatorId) {
|
|
72
|
+
const task = tasks.get(taskId);
|
|
73
|
+
if (!task) throw new Error(`Task not found: ${taskId}`);
|
|
74
|
+
const updated = {
|
|
75
|
+
...task,
|
|
76
|
+
assigneeId: annotatorId,
|
|
77
|
+
status: "assigned",
|
|
78
|
+
updatedAt: /* @__PURE__ */ new Date()
|
|
79
|
+
};
|
|
80
|
+
tasks.set(taskId, updated);
|
|
81
|
+
return updated;
|
|
82
|
+
}
|
|
83
|
+
async function updateTaskStatus(taskId, status) {
|
|
84
|
+
const task = tasks.get(taskId);
|
|
85
|
+
if (!task) throw new Error(`Task not found: ${taskId}`);
|
|
86
|
+
const updated = {
|
|
87
|
+
...task,
|
|
88
|
+
status,
|
|
89
|
+
updatedAt: /* @__PURE__ */ new Date(),
|
|
90
|
+
completedAt: status === "completed" ? /* @__PURE__ */ new Date() : task.completedAt
|
|
91
|
+
};
|
|
92
|
+
tasks.set(taskId, updated);
|
|
93
|
+
return updated;
|
|
94
|
+
}
|
|
95
|
+
async function submitAnnotation(taskId, input) {
|
|
96
|
+
if (!tasks.get(taskId)) throw new Error(`Task not found: ${taskId}`);
|
|
97
|
+
const annotation = {
|
|
98
|
+
...input,
|
|
99
|
+
id: generateAnnotationId(),
|
|
100
|
+
taskId,
|
|
101
|
+
createdAt: /* @__PURE__ */ new Date()
|
|
102
|
+
};
|
|
103
|
+
annotations.set(annotation.id, annotation);
|
|
104
|
+
const taskAnns = taskAnnotations.get(taskId) ?? [];
|
|
105
|
+
taskAnns.push(annotation.id);
|
|
106
|
+
taskAnnotations.set(taskId, taskAnns);
|
|
107
|
+
await updateTaskStatus(taskId, "completed");
|
|
108
|
+
return annotation;
|
|
109
|
+
}
|
|
110
|
+
async function getAnnotation(id) {
|
|
111
|
+
return annotations.get(id) ?? null;
|
|
112
|
+
}
|
|
113
|
+
async function getAnnotationsForTask(taskId) {
|
|
114
|
+
return (taskAnnotations.get(taskId) ?? []).map((id) => annotations.get(id)).filter((a) => a !== void 0);
|
|
115
|
+
}
|
|
116
|
+
async function getStats() {
|
|
117
|
+
const allTasks = Array.from(tasks.values());
|
|
118
|
+
const completedTasks = allTasks.filter((t) => t.status === "completed");
|
|
119
|
+
const pendingTasks = allTasks.filter((t) => t.status === "pending");
|
|
120
|
+
let totalCompletionTime = 0;
|
|
121
|
+
for (const task of completedTasks) if (task.completedAt) totalCompletionTime += task.completedAt.getTime() - task.createdAt.getTime();
|
|
122
|
+
const avgCompletionTimeMs = completedTasks.length > 0 ? totalCompletionTime / completedTasks.length : 0;
|
|
123
|
+
const annotatorStats = /* @__PURE__ */ new Map();
|
|
124
|
+
const allAnnotations = Array.from(annotations.values());
|
|
125
|
+
const annotatorData = /* @__PURE__ */ new Map();
|
|
126
|
+
for (const ann of allAnnotations) {
|
|
127
|
+
const data = annotatorData.get(ann.annotatorId) ?? {
|
|
128
|
+
times: [],
|
|
129
|
+
scores: []
|
|
130
|
+
};
|
|
131
|
+
if (ann.timeSpentMs) data.times.push(ann.timeSpentMs);
|
|
132
|
+
if (ann.score !== void 0) data.scores.push(ann.score);
|
|
133
|
+
annotatorData.set(ann.annotatorId, data);
|
|
134
|
+
}
|
|
135
|
+
for (const [annotatorId, data] of annotatorData) annotatorStats.set(annotatorId, {
|
|
136
|
+
annotatorId,
|
|
137
|
+
tasksCompleted: data.times.length || data.scores.length,
|
|
138
|
+
avgTimeMs: data.times.length > 0 ? data.times.reduce((a, b) => a + b, 0) / data.times.length : 0,
|
|
139
|
+
avgScore: data.scores.length > 0 ? data.scores.reduce((a, b) => a + b, 0) / data.scores.length : void 0
|
|
140
|
+
});
|
|
141
|
+
return {
|
|
142
|
+
totalTasks: allTasks.length,
|
|
143
|
+
pendingTasks: pendingTasks.length,
|
|
144
|
+
completedTasks: completedTasks.length,
|
|
145
|
+
avgCompletionTimeMs,
|
|
146
|
+
annotatorStats
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
return {
|
|
150
|
+
createTask,
|
|
151
|
+
getTask,
|
|
152
|
+
queryTasks,
|
|
153
|
+
assignTask,
|
|
154
|
+
updateTaskStatus,
|
|
155
|
+
submitAnnotation,
|
|
156
|
+
getAnnotation,
|
|
157
|
+
getAnnotationsForTask,
|
|
158
|
+
getStats
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
function generateTaskId() {
|
|
162
|
+
return `task-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
|
|
163
|
+
}
|
|
164
|
+
function generateAnnotationId() {
|
|
165
|
+
return `ann-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
//#endregion
|
|
169
|
+
export { createAnnotationStore };
|
|
170
|
+
//# sourceMappingURL=hitl-annotation.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hitl-annotation.mjs","names":[],"sources":["../src/hitl/annotation/index.ts"],"sourcesContent":["/**\n * Human Annotation Tools\n *\n * Enables human annotators to label, tag, and correct AI outputs\n * for training data generation and quality assurance.\n *\n * @module @od-oneapp/ai-platform/hitl/annotation\n *\n * @example\n * ```typescript\n * import { createAnnotationStore } from '@od-oneapp/ai-platform/hitl/annotation';\n *\n * const store = createAnnotationStore();\n *\n * // Create annotation task\n * const task = await store.createTask({\n * responseId: 'resp-123',\n * type: 'quality-check',\n * priority: 'high'\n * });\n *\n * // Submit annotation\n * await store.submitAnnotation(task.id, {\n * labels: ['accurate', 'helpful'],\n * corrections: [{ original: 'bad text', corrected: 'good text' }]\n * });\n * ```\n */\n\n// -----------------------------------------------------------------------------\n// Types\n// -----------------------------------------------------------------------------\n\n/** Annotation task priority */\nexport type TaskPriority = 'low' | 'medium' | 'high' | 'urgent';\n\n/** Annotation task status */\nexport type TaskStatus = 'pending' | 'assigned' | 'in_progress' | 'completed' | 'skipped';\n\n/** Annotation task type */\nexport type TaskType =\n | 'quality-check'\n | 'factual-accuracy'\n | 'safety-review'\n | 'preference-ranking'\n | 'correction'\n | 'labeling'\n | 'custom';\n\n/** Annotation task */\nexport interface AnnotationTask {\n readonly id: string;\n readonly responseId: string;\n readonly type: TaskType;\n readonly priority: TaskPriority;\n readonly status: TaskStatus;\n readonly assigneeId?: string;\n readonly instructions?: string;\n readonly metadata?: Record<string, unknown>;\n readonly createdAt: Date;\n readonly updatedAt: Date;\n readonly completedAt?: Date;\n}\n\n/** Task input */\nexport type TaskInput = Omit<\n AnnotationTask,\n 'id' | 'status' | 'createdAt' | 'updatedAt' | 'completedAt'\n>;\n\n/** Text correction */\nexport interface TextCorrection {\n readonly original: string;\n readonly corrected: string;\n readonly reason?: string;\n readonly startOffset?: number;\n readonly endOffset?: number;\n}\n\n/** Annotation data */\nexport interface Annotation {\n readonly id: string;\n readonly taskId: string;\n readonly annotatorId: string;\n readonly labels?: string[];\n readonly score?: number;\n readonly corrections?: TextCorrection[];\n readonly notes?: string;\n readonly timeSpentMs?: number;\n readonly metadata?: Record<string, unknown>;\n readonly createdAt: Date;\n}\n\n/** Annotation input */\nexport type AnnotationInput = Omit<Annotation, 'id' | 'taskId' | 'createdAt'>;\n\n/** Task query options */\nexport interface TaskQuery {\n readonly status?: TaskStatus | TaskStatus[];\n readonly type?: TaskType;\n readonly priority?: TaskPriority;\n readonly assigneeId?: string;\n readonly limit?: number;\n readonly offset?: number;\n}\n\n/** Annotation store interface */\nexport interface AnnotationStore {\n // Tasks\n createTask(input: TaskInput): Promise<AnnotationTask>;\n getTask(id: string): Promise<AnnotationTask | null>;\n queryTasks(query: TaskQuery): Promise<AnnotationTask[]>;\n assignTask(taskId: string, annotatorId: string): Promise<AnnotationTask>;\n updateTaskStatus(taskId: string, status: TaskStatus): Promise<AnnotationTask>;\n\n // Annotations\n submitAnnotation(taskId: string, input: AnnotationInput): Promise<Annotation>;\n getAnnotation(id: string): Promise<Annotation | null>;\n getAnnotationsForTask(taskId: string): Promise<Annotation[]>;\n\n // Stats\n getStats(): Promise<AnnotationStats>;\n}\n\n/** Annotation statistics */\nexport interface AnnotationStats {\n readonly totalTasks: number;\n readonly pendingTasks: number;\n readonly completedTasks: number;\n readonly avgCompletionTimeMs: number;\n readonly annotatorStats: Map<string, AnnotatorStats>;\n}\n\n/** Per-annotator statistics */\nexport interface AnnotatorStats {\n readonly annotatorId: string;\n readonly tasksCompleted: number;\n readonly avgTimeMs: number;\n readonly avgScore?: number;\n}\n\n// -----------------------------------------------------------------------------\n// In-Memory Implementation\n// -----------------------------------------------------------------------------\n\n/**\n * Creates an in-memory annotation store.\n *\n * @example\n * ```typescript\n * const store = createAnnotationStore();\n *\n * // Create a task\n * const task = await store.createTask({\n * responseId: 'resp-123',\n * type: 'quality-check',\n * priority: 'medium'\n * });\n *\n * // Assign to annotator\n * await store.assignTask(task.id, 'annotator-1');\n *\n * // Submit annotation\n * await store.submitAnnotation(task.id, {\n * annotatorId: 'annotator-1',\n * labels: ['accurate', 'helpful'],\n * score: 4\n * });\n * ```\n */\nexport function createAnnotationStore(): AnnotationStore {\n const tasks = new Map<string, AnnotationTask>();\n const annotations = new Map<string, Annotation>();\n const taskAnnotations = new Map<string, string[]>(); // taskId -> annotationIds\n\n async function createTask(input: TaskInput): Promise<AnnotationTask> {\n const now = new Date();\n const task: AnnotationTask = {\n ...input,\n id: generateTaskId(),\n status: 'pending',\n createdAt: now,\n updatedAt: now,\n };\n tasks.set(task.id, task);\n taskAnnotations.set(task.id, []);\n return task;\n }\n\n async function getTask(id: string): Promise<AnnotationTask | null> {\n return tasks.get(id) ?? null;\n }\n\n async function queryTasks(query: TaskQuery): Promise<AnnotationTask[]> {\n let results = Array.from(tasks.values());\n\n if (query.status) {\n const statuses = Array.isArray(query.status) ? query.status : [query.status];\n results = results.filter(t => statuses.includes(t.status));\n }\n if (query.type) {\n results = results.filter(t => t.type === query.type);\n }\n if (query.priority) {\n results = results.filter(t => t.priority === query.priority);\n }\n if (query.assigneeId) {\n results = results.filter(t => t.assigneeId === query.assigneeId);\n }\n\n // Sort by priority (urgent first) then by creation date\n const priorityOrder: Record<TaskPriority, number> = {\n urgent: 0,\n high: 1,\n medium: 2,\n low: 3,\n };\n results.sort((a, b) => {\n const pDiff = priorityOrder[a.priority] - priorityOrder[b.priority];\n if (pDiff !== 0) return pDiff;\n return a.createdAt.getTime() - b.createdAt.getTime();\n });\n\n const offset = query.offset ?? 0;\n const limit = query.limit ?? 100;\n return results.slice(offset, offset + limit);\n }\n\n async function assignTask(taskId: string, annotatorId: string): Promise<AnnotationTask> {\n const task = tasks.get(taskId);\n if (!task) throw new Error(`Task not found: ${taskId}`);\n\n const updated: AnnotationTask = {\n ...task,\n assigneeId: annotatorId,\n status: 'assigned',\n updatedAt: new Date(),\n };\n tasks.set(taskId, updated);\n return updated;\n }\n\n async function updateTaskStatus(taskId: string, status: TaskStatus): Promise<AnnotationTask> {\n const task = tasks.get(taskId);\n if (!task) throw new Error(`Task not found: ${taskId}`);\n\n const updated: AnnotationTask = {\n ...task,\n status,\n updatedAt: new Date(),\n completedAt: status === 'completed' ? new Date() : task.completedAt,\n };\n tasks.set(taskId, updated);\n return updated;\n }\n\n async function submitAnnotation(taskId: string, input: AnnotationInput): Promise<Annotation> {\n const task = tasks.get(taskId);\n if (!task) throw new Error(`Task not found: ${taskId}`);\n\n const annotation: Annotation = {\n ...input,\n id: generateAnnotationId(),\n taskId,\n createdAt: new Date(),\n };\n\n annotations.set(annotation.id, annotation);\n\n const taskAnns = taskAnnotations.get(taskId) ?? [];\n taskAnns.push(annotation.id);\n taskAnnotations.set(taskId, taskAnns);\n\n // Auto-complete task\n await updateTaskStatus(taskId, 'completed');\n\n return annotation;\n }\n\n async function getAnnotation(id: string): Promise<Annotation | null> {\n return annotations.get(id) ?? null;\n }\n\n async function getAnnotationsForTask(taskId: string): Promise<Annotation[]> {\n const ids = taskAnnotations.get(taskId) ?? [];\n return ids.map(id => annotations.get(id)).filter((a): a is Annotation => a !== undefined);\n }\n\n async function getStats(): Promise<AnnotationStats> {\n const allTasks = Array.from(tasks.values());\n const completedTasks = allTasks.filter(t => t.status === 'completed');\n const pendingTasks = allTasks.filter(t => t.status === 'pending');\n\n // Calculate avg completion time\n let totalCompletionTime = 0;\n for (const task of completedTasks) {\n if (task.completedAt) {\n totalCompletionTime += task.completedAt.getTime() - task.createdAt.getTime();\n }\n }\n const avgCompletionTimeMs =\n completedTasks.length > 0 ? totalCompletionTime / completedTasks.length : 0;\n\n // Calculate annotator stats\n const annotatorStats = new Map<string, AnnotatorStats>();\n const allAnnotations = Array.from(annotations.values());\n\n const annotatorData = new Map<string, { times: number[]; scores: number[] }>();\n\n for (const ann of allAnnotations) {\n const data = annotatorData.get(ann.annotatorId) ?? { times: [], scores: [] };\n if (ann.timeSpentMs) data.times.push(ann.timeSpentMs);\n if (ann.score !== undefined) data.scores.push(ann.score);\n annotatorData.set(ann.annotatorId, data);\n }\n\n for (const [annotatorId, data] of annotatorData) {\n annotatorStats.set(annotatorId, {\n annotatorId,\n tasksCompleted: data.times.length || data.scores.length,\n avgTimeMs:\n data.times.length > 0 ? data.times.reduce((a, b) => a + b, 0) / data.times.length : 0,\n avgScore:\n data.scores.length > 0\n ? data.scores.reduce((a, b) => a + b, 0) / data.scores.length\n : undefined,\n });\n }\n\n return {\n totalTasks: allTasks.length,\n pendingTasks: pendingTasks.length,\n completedTasks: completedTasks.length,\n avgCompletionTimeMs,\n annotatorStats,\n };\n }\n\n return {\n createTask,\n getTask,\n queryTasks,\n assignTask,\n updateTaskStatus,\n submitAnnotation,\n getAnnotation,\n getAnnotationsForTask,\n getStats,\n };\n}\n\n// -----------------------------------------------------------------------------\n// Utilities\n// -----------------------------------------------------------------------------\n\nfunction generateTaskId(): string {\n return `task-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;\n}\n\nfunction generateAnnotationId(): string {\n return `ann-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
//#region src/hitl/feedback/index.d.ts
|
|
2
|
+
interface Feedback {
|
|
3
|
+
readonly id: string;
|
|
4
|
+
readonly responseId: string;
|
|
5
|
+
readonly userId?: string;
|
|
6
|
+
readonly rating: number;
|
|
7
|
+
readonly comment?: string;
|
|
8
|
+
readonly tags?: string[];
|
|
9
|
+
readonly metadata?: Record<string, unknown>;
|
|
10
|
+
readonly timestamp: Date;
|
|
11
|
+
}
|
|
12
|
+
type FeedbackInput = Omit<Feedback, 'id' | 'timestamp'>;
|
|
13
|
+
interface FeedbackStats {
|
|
14
|
+
readonly avgRating: number;
|
|
15
|
+
readonly count: number;
|
|
16
|
+
readonly distribution: Record<number, number>;
|
|
17
|
+
readonly recentTrend: 'improving' | 'declining' | 'stable';
|
|
18
|
+
}
|
|
19
|
+
interface FeedbackQuery {
|
|
20
|
+
readonly responseId?: string;
|
|
21
|
+
readonly userId?: string;
|
|
22
|
+
readonly minRating?: number;
|
|
23
|
+
readonly maxRating?: number;
|
|
24
|
+
readonly startDate?: Date;
|
|
25
|
+
readonly endDate?: Date;
|
|
26
|
+
readonly tags?: string[];
|
|
27
|
+
readonly limit?: number;
|
|
28
|
+
readonly offset?: number;
|
|
29
|
+
}
|
|
30
|
+
interface FeedbackStore {
|
|
31
|
+
save(feedback: Feedback): Promise<void>;
|
|
32
|
+
get(id: string): Promise<Feedback | null>;
|
|
33
|
+
query(query: FeedbackQuery): Promise<Feedback[]>;
|
|
34
|
+
delete(id: string): Promise<void>;
|
|
35
|
+
}
|
|
36
|
+
interface FeedbackCollector {
|
|
37
|
+
collect(input: FeedbackInput): Promise<Feedback>;
|
|
38
|
+
getByResponse(responseId: string): Promise<Feedback[]>;
|
|
39
|
+
getByUser(userId: string): Promise<Feedback[]>;
|
|
40
|
+
query(query: FeedbackQuery): Promise<Feedback[]>;
|
|
41
|
+
aggregate(query?: FeedbackQuery): Promise<FeedbackStats>;
|
|
42
|
+
}
|
|
43
|
+
declare class InMemoryFeedbackStore implements FeedbackStore {
|
|
44
|
+
private readonly feedbacks;
|
|
45
|
+
save(feedback: Feedback): Promise<void>;
|
|
46
|
+
get(id: string): Promise<Feedback | null>;
|
|
47
|
+
query(query: FeedbackQuery): Promise<Feedback[]>;
|
|
48
|
+
delete(id: string): Promise<void>;
|
|
49
|
+
clear(): void;
|
|
50
|
+
}
|
|
51
|
+
interface FeedbackCollectorConfig {
|
|
52
|
+
readonly store?: FeedbackStore;
|
|
53
|
+
readonly validateRating?: (rating: number) => boolean;
|
|
54
|
+
readonly onFeedback?: (feedback: Feedback) => void;
|
|
55
|
+
}
|
|
56
|
+
declare function createFeedbackCollector(config?: FeedbackCollectorConfig): FeedbackCollector;
|
|
57
|
+
//#endregion
|
|
58
|
+
export { Feedback, FeedbackCollector, FeedbackCollectorConfig, FeedbackInput, FeedbackQuery, FeedbackStats, FeedbackStore, InMemoryFeedbackStore, createFeedbackCollector };
|
|
59
|
+
//# sourceMappingURL=hitl-feedback.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hitl-feedback.d.mts","names":[],"sources":["../src/hitl/feedback/index.ts"],"mappings":";UAgCiB,QAAA;EAAA,SACN,EAAA;EAAA,SACA,UAAA;EAAA,SACA,MAAA;EAAA,SACA,MAAA;EAAA,SACA,OAAA;EAAA,SACA,IAAA;EAAA,SACA,QAAA,GAAW,MAAA;EAAA,SACX,SAAA,EAAW,IAAA;AAAA;AAAA,KAIV,aAAA,GAAgB,IAAA,CAAK,QAAA;AAAA,UAGhB,aAAA;EAAA,SACN,SAAA;EAAA,SACA,KAAA;EAAA,SACA,YAAA,EAAc,MAAA;EAAA,SACd,WAAA;AAAA;AAAA,UAIM,aAAA;EAAA,SACN,UAAA;EAAA,SACA,MAAA;EAAA,SACA,SAAA;EAAA,SACA,SAAA;EAAA,SACA,SAAA,GAAY,IAAA;EAAA,SACZ,OAAA,GAAU,IAAA;EAAA,SACV,IAAA;EAAA,SACA,KAAA;EAAA,SACA,MAAA;AAAA;AAAA,UAIM,aAAA;EACf,IAAA,CAAK,QAAA,EAAU,QAAA,GAAW,OAAA;EAC1B,GAAA,CAAI,EAAA,WAAa,OAAA,CAAQ,QAAA;EACzB,KAAA,CAAM,KAAA,EAAO,aAAA,GAAgB,OAAA,CAAQ,QAAA;EACrC,MAAA,CAAO,EAAA,WAAa,OAAA;AAAA;AAAA,UAIL,iBAAA;EACf,OAAA,CAAQ,KAAA,EAAO,aAAA,GAAgB,OAAA,CAAQ,QAAA;EACvC,aAAA,CAAc,UAAA,WAAqB,OAAA,CAAQ,QAAA;EAC3C,SAAA,CAAU,MAAA,WAAiB,OAAA,CAAQ,QAAA;EACnC,KAAA,CAAM,KAAA,EAAO,aAAA,GAAgB,OAAA,CAAQ,QAAA;EACrC,SAAA,CAAU,KAAA,GAAQ,aAAA,GAAgB,OAAA,CAAQ,aAAA;AAAA;AAAA,cAU/B,qBAAA,YAAiC,aAAA;EAAA,iBAC3B,SAAA;EAEX,IAAA,CAAK,QAAA,EAAU,QAAA,GAAW,OAAA;EAI1B,GAAA,CAAI,EAAA,WAAa,OAAA,CAAQ,QAAA;EAIzB,KAAA,CAAM,KAAA,EAAO,aAAA,GAAgB,OAAA,CAAQ,QAAA;EAmCrC,MAAA,CAAO,EAAA,WAAa,OAAA;EAK1B,KAAA,CAAA;AAAA;AAAA,UAUe,uBAAA;EAAA,SACN,KAAA,GAAQ,aAAA;EAAA,SACR,cAAA,IAAkB,MAAA;EAAA,SAClB,UAAA,IAAc,QAAA,EAAU,QAAA;AAAA;AAAA,iBAqBnB,uBAAA,CAAwB,MAAA,GAAQ,uBAAA,GAA+B,iBAAA"}
|