promptfoo 0.121.4 → 0.121.7
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/dist/src/{ListApp-DQkFNqE9.js → ListApp-DLmM02JS.js} +1 -1
- package/dist/src/{accounts-DhMYUUbu.js → accounts-Ca7WIoPY.js} +12 -7
- package/dist/src/{accounts-F9d_5sMC.js → accounts-CjFnOPmb.js} +14 -9
- package/dist/src/{accounts-Dy17bs4D.cjs → accounts-CmWzeD2d.cjs} +16 -10
- package/dist/src/{accounts-DdJ2pHMI.js → accounts-DanM1wq_.js} +13 -8
- package/dist/src/{agentic-utils-qFlm6zes.js → agentic-utils-CJ0j3fBi.js} +3 -3
- package/dist/src/{agentic-utils-w68v6_Dz.js → agentic-utils-DDEGRV9v.js} +3 -3
- package/dist/src/{agentic-utils-BpX5b23w.cjs → agentic-utils-DvPWSUpb.cjs} +8 -7
- package/dist/src/{agentic-utils-P172hM8B.js → agentic-utils-TxUEMPYS.js} +2 -2
- package/dist/src/{agents-BahDpe5G.cjs → agents-B4sRuXg3.cjs} +7 -6
- package/dist/src/{agents-pQeBEXMm.js → agents-B8q7h_ek.js} +5 -5
- package/dist/src/{agents-CgaMXvLM.js → agents-CBgJvRkB.js} +21 -10
- package/dist/src/{agents-C-R_jfzI.js → agents-CYn2n3QP.js} +4 -4
- package/dist/src/{agents-8FDnTriG.js → agents-D-vDNFx4.js} +21 -10
- package/dist/src/{agents-aYPQLf8W.js → agents-LrHuQqr1.js} +20 -9
- package/dist/src/{agents-DJ35I3Nt.js → agents-QGg76OF-.js} +5 -5
- package/dist/src/{agents-D7-HGxUj.cjs → agents-eHZ9nlgA.cjs} +21 -10
- package/dist/src/{aimlapi-sgYnkE54.js → aimlapi-CJEbQ0o6.js} +7 -7
- package/dist/src/{aimlapi-BD6J9oKt.js → aimlapi-D5HXzZ0s.js} +6 -6
- package/dist/src/{aimlapi-qcK4OT55.cjs → aimlapi-T6HGNxNe.cjs} +7 -7
- package/dist/src/{aimlapi-BCq3MHeL.js → aimlapi-eYv3a_DK.js} +7 -7
- package/dist/src/app/app/tsconfig.app.tsbuildinfo +1 -1
- package/dist/src/app/assets/Report-BNHJKN35.js +1 -0
- package/dist/src/app/assets/index-BnT6P6sF.js +388 -0
- package/dist/src/app/assets/index-yhM8y1PP.css +1 -0
- package/dist/src/app/assets/{scroll-timeline-D9IT_e8Z.js → scroll-timeline-RpeTwOvs.js} +1 -1
- package/dist/src/app/assets/sync-5gq6fmG4.js +4 -0
- package/dist/src/app/assets/vendor-charts-BL9OMNU7.js +36 -0
- package/dist/src/app/assets/{vendor-markdown-Ch00wnNI.js → vendor-markdown-BYsQqn7Z.js} +10 -10
- package/dist/src/app/assets/{vendor-react-CVvmk1UB.js → vendor-react-CqWgVW6T.js} +2 -2
- package/dist/src/app/assets/{vendor-utils-BnEYbx2Q.js → vendor-utils-BHPO71pu.js} +1 -1
- package/dist/src/app/index.html +31 -6
- package/dist/src/{audio-COrn8rM6.js → audio-BqnRvcWG.js} +3 -3
- package/dist/src/{audio-DcVKoInv.js → audio-CPMtV1yR.js} +4 -4
- package/dist/src/{audio-B7izf48x.js → audio-DyiebVB3.js} +4 -4
- package/dist/src/{audio-BQtNuYBj.cjs → audio-FnxbEnSE.cjs} +4 -4
- package/dist/src/authoritativeMarkupInjection-BZIywVjG.js +74 -0
- package/dist/src/authoritativeMarkupInjection-DyAXAsSr.js +75 -0
- package/dist/src/authoritativeMarkupInjection-F2gBw0lN.cjs +74 -0
- package/dist/src/authoritativeMarkupInjection-QEQmFS83.js +74 -0
- package/dist/src/{base-PYJvBE1i.js → base-CKLo890h.js} +4 -3
- package/dist/src/{base-fZ9wgg50.js → base-Co80MMCi.js} +5 -4
- package/dist/src/{base-D-670DX8.cjs → base-DGJW48uz.cjs} +5 -4
- package/dist/src/{base-yrI1Yal4.js → base-E9I8zXjz.js} +5 -4
- package/dist/src/bestOfN-B3wNzjSB.js +137 -0
- package/dist/src/bestOfN-BBsO41z4.js +136 -0
- package/dist/src/bestOfN-CAwmg5UL.cjs +140 -0
- package/dist/src/bestOfN-_kTi8Bxe.js +136 -0
- package/dist/src/{blobs-D2FAd1Q5.cjs → blobs-B0977K1O.cjs} +7 -6
- package/dist/src/{blobs-BCZavS8s.js → blobs-CeFdPn_T.js} +3 -3
- package/dist/src/{blobs-BQWqnnvL.js → blobs-DODuTK-a.js} +3 -3
- package/dist/src/{blobs-C-F78Kfn.js → blobs-Dwef1Ao1.js} +2 -2
- package/dist/src/{cache-BIyPcp5v.cjs → cache-CPGUA4Yl.cjs} +135 -25
- package/dist/src/cache-Cf7b4pWE.js +3 -0
- package/dist/src/{cache-D5NZmMiT.js → cache-DIXbtkNO.js} +125 -10
- package/dist/src/{cache-mb7c8hbp.js → cache-DpPWrkTE.js} +128 -12
- package/dist/src/{cache-C4Xb-hNb.js → cache-roFAE0cI.js} +126 -11
- package/dist/src/{chat-I9izLm49.js → chat-CUCorGiL.js} +12 -12
- package/dist/src/{chat-BPXSW8Bv.cjs → chat-DG1wG4w0.cjs} +6 -6
- package/dist/src/{chat-BfPaS15_.js → chat-Dabu84Br.js} +12 -12
- package/dist/src/{chat-Dr3DUQ0D.js → chat-DqUFcWI0.js} +12 -12
- package/dist/src/{chat-CclRbxGf.cjs → chat-DxTDQ83C.cjs} +14 -13
- package/dist/src/{chat-MKxMnZJZ.js → chat-GmlolEwo.js} +4 -4
- package/dist/src/{chat-0bwXjVP0.js → chat-TP8Qifkh.js} +6 -6
- package/dist/src/{chat-mW0ORo8G.js → chat-iwaM5UTQ.js} +6 -6
- package/dist/src/{chatkit-zUIVoDos.js → chatkit-B6DWi70Q.js} +4 -4
- package/dist/src/{chatkit-BoWoSgXl.cjs → chatkit-BYveR48_.cjs} +6 -5
- package/dist/src/{chatkit-Cv6AhukM.js → chatkit-fARZwEfV.js} +3 -3
- package/dist/src/{chatkit-CJnHRRMM.js → chatkit-lb6FK02w.js} +4 -4
- package/dist/src/{claude-agent-sdk-Dtq_L-Sc.js → claude-agent-sdk-BQNp_y-F.js} +212 -67
- package/dist/src/{claude-agent-sdk-BQNuLaAK.js → claude-agent-sdk-D5Jl0SDh.js} +212 -67
- package/dist/src/{claude-agent-sdk-CPJo3dBQ.cjs → claude-agent-sdk-DH416NBD.cjs} +218 -72
- package/dist/src/{claude-agent-sdk-nfAIcxNf.js → claude-agent-sdk-x1XJ1-pU.js} +212 -67
- package/dist/src/{cloud-DQZ5sVjW.js → cloud-D3DiFqH6.js} +3 -3
- package/dist/src/cloud-p96PA4MH.js +3 -0
- package/dist/src/{cloudflare-ai-BIB567w6.js → cloudflare-ai-B6NVI3ax.js} +4 -4
- package/dist/src/{cloudflare-ai-Dl3N9OVD.cjs → cloudflare-ai-CEAW-xQa.cjs} +6 -6
- package/dist/src/{cloudflare-ai-DlKr0rY7.js → cloudflare-ai-RFSojyXG.js} +6 -6
- package/dist/src/{cloudflare-ai-DGLte7Py.js → cloudflare-ai-r4tbYmWU.js} +6 -6
- package/dist/src/{cloudflare-gateway-CiIZHU0Q.js → cloudflare-gateway-BCkLouto.js} +5 -5
- package/dist/src/{cloudflare-gateway-DI1HNP5F.js → cloudflare-gateway-BaZ4insB.js} +3 -3
- package/dist/src/{cloudflare-gateway-BDZrYydE.js → cloudflare-gateway-CF-Vb-2Z.js} +5 -5
- package/dist/src/{cloudflare-gateway-BYDp495F.cjs → cloudflare-gateway-TJMLBj6I.cjs} +5 -5
- package/dist/src/codex-app-server-B8KHEiF4.js +1915 -0
- package/dist/src/codex-app-server-CnrLBCeA.cjs +1921 -0
- package/dist/src/codex-app-server-DIXZ230V.js +1915 -0
- package/dist/src/codex-app-server-Dd22dC_N.js +1916 -0
- package/dist/src/{codex-sdk-CpqiOqDO.js → codex-sdk-B6Wah8Pa.js} +6 -6
- package/dist/src/codex-sdk-BGjVAk23.js +3 -0
- package/dist/src/{codex-sdk-C2_M2pl_.cjs → codex-sdk-CFF6gUyi.cjs} +18 -10
- package/dist/src/{codex-sdk-Rtky3M4I.js → codex-sdk-CmQABzV3.js} +6 -6
- package/dist/src/{codex-sdk-CErXn7qh.js → codex-sdk-D2d54RL8.js} +5 -5
- package/dist/src/{cometapi-CtJ-mS8R.js → cometapi-Bu9B8NUY.js} +8 -8
- package/dist/src/{cometapi-DT-jlVCB.js → cometapi-CtzNCHKu.js} +7 -7
- package/dist/src/{cometapi-UVOryo4W.cjs → cometapi-DHCDlQUI.cjs} +8 -8
- package/dist/src/{cometapi-BUlt_ELa.js → cometapi-OBILPLlu.js} +8 -8
- package/dist/src/{completion-HUe8wDhZ.js → completion-CO2e1_62.js} +6 -6
- package/dist/src/{completion-BozdoXba.cjs → completion-CSYfl2cd.cjs} +6 -6
- package/dist/src/{completion-x0a_c2y1.js → completion-DZNxcyfG.js} +6 -6
- package/dist/src/{completion-Dnxn7E-j.js → completion-sNvCLTAP.js} +5 -5
- package/dist/src/constants-BjJV0cRr.js +6 -0
- package/dist/src/constants-DH5XYLKZ.js +7 -0
- package/dist/src/constants-DZGEFLsu.js +6 -0
- package/dist/src/constants-a2kYssQk.cjs +11 -0
- package/dist/src/{createHash-4gFQpDDv.js → createHash-BtbSX3mj.js} +1 -1
- package/dist/src/{createHash-CwDVU5xr.js → createHash-CGVzWdjj.js} +1 -1
- package/dist/src/{createHash-B7KvgoOD.cjs → createHash-CSiqnK5P.cjs} +2 -2
- package/dist/src/{createHash-ChI45QR1.js → createHash-CgRvs4Fn.js} +1 -1
- package/dist/src/crescendo-BXEJK_bi.cjs +704 -0
- package/dist/src/crescendo-CU_Y2i-m.js +702 -0
- package/dist/src/crescendo-J1Xx4_zb.js +703 -0
- package/dist/src/crescendo-QiaSLW0d.js +701 -0
- package/dist/src/custom-BJfP00Bh.js +619 -0
- package/dist/src/custom-CZVn-1-r.js +620 -0
- package/dist/src/custom-Cqia7M0D.cjs +621 -0
- package/dist/src/custom-notggYVl.js +618 -0
- package/dist/src/{docker-DCgsveLD.js → docker-4D1eL6Gq.js} +6 -6
- package/dist/src/{docker-ClnmCf1Z.js → docker-BBv1WUDu.js} +5 -5
- package/dist/src/{docker-DS4_Osau.cjs → docker-D06JUoe2.cjs} +6 -6
- package/dist/src/{docker-CQmlA2NU.js → docker-DdJQBxK9.js} +6 -6
- package/dist/src/{embedding-D3xTseo7.js → embedding--UZVe4_7.js} +6 -6
- package/dist/src/{embedding-I45KG3o7.cjs → embedding-BbrwopfX.cjs} +6 -6
- package/dist/src/{embedding-nFbumxcv.js → embedding-Bi3rxrZF.js} +5 -5
- package/dist/src/{embedding-DD9wa3ae.js → embedding-C251p1-8.js} +6 -6
- package/dist/src/{errors-Cw810C93.js → errors-9PcUL8BC.js} +1 -1
- package/dist/src/{esm-Dh4dOLlt.js → esm-B6whoAcf.js} +2 -2
- package/dist/src/{esm-CtEPLdAj.cjs → esm-BIKakvNa.cjs} +8 -7
- package/dist/src/{esm-C7PnfdF8.js → esm-BTK1W7lG.js} +1 -1
- package/dist/src/{esm-tVgYPY-f.js → esm-Bexx2PFc.js} +2 -2
- package/dist/src/{eval-u4UVafl6.js → eval-0VRANImH.js} +21 -21
- package/dist/src/{eval-CzJFfFO9.js → eval-DscR5iOM.js} +1 -1
- package/dist/src/{evalResult-Bgm9ZH31.js → evalResult-2RRJvFyB.js} +41 -16
- package/dist/src/{evalResult-KZqXl4XP.cjs → evalResult-CvtS8h8u.cjs} +51 -15
- package/dist/src/evalResult-DqzsS6_W.js +3 -0
- package/dist/src/{evalResult-D3hVYFis.js → evalResult-eUkJv9Ko.js} +40 -15
- package/dist/src/evaluator-DNdJF1Gv.js +3 -0
- package/dist/src/{evaluator-IvuDYSvQ.js → evaluator-DRoiYB2q.js} +1060 -187
- package/dist/src/evaluatorHelpers-BsYP_muT.js +511 -0
- package/dist/src/evaluatorHelpers-CRqTvSux.cjs +537 -0
- package/dist/src/evaluatorHelpers-DuqFFfq7.js +510 -0
- package/dist/src/{extractor-CAfTSraf.js → extractor-BR7XAzAL.js} +6 -6
- package/dist/src/{extractor-WVPOrH43.cjs → extractor-BdxEtt3J.cjs} +6 -6
- package/dist/src/{extractor-DNSeBVOJ.js → extractor-CIW3iN-b.js} +6 -6
- package/dist/src/{extractor-Dk6bRWkv.js → extractor-CxRtnaHl.js} +5 -5
- package/dist/src/{fetch-B0Z3Oe4k.js → fetch-BufrQtvR.js} +93 -40
- package/dist/src/{fetch-BEWnXrrG.js → fetch-DXUnXkVU.js} +89 -40
- package/dist/src/{fetch-CJU5ELPa.cjs → fetch-Dw4XZHjj.cjs} +330 -270
- package/dist/src/{fetch-Di00EQrc.js → fetch-It34O8Ur.js} +305 -252
- package/dist/src/fetch-_YgGd2qv.js +3 -0
- package/dist/src/{fileExtensions-bYh77CN8.cjs → fileExtensions-BhdwzYaD.cjs} +24 -1
- package/dist/src/{fileExtensions-DnqA1y9x.js → fileExtensions-CXRfY3Ss.js} +12 -2
- package/dist/src/{fileExtensions-AWa2ZML4.js → fileExtensions-D4GCJ67J.js} +12 -2
- package/dist/src/{formatDuration-DZzPsexs.js → formatDuration-CMVNrYvE.js} +1 -1
- package/dist/src/{genaiTracer-yRuxj9-L.cjs → genaiTracer-14nugQQx.cjs} +14 -2
- package/dist/src/{genaiTracer-DWdZ28hY.js → genaiTracer-BPVvltoW.js} +2 -2
- package/dist/src/{genaiTracer-XnrcgDCe.js → genaiTracer-D18lYzhB.js} +2 -2
- package/dist/src/{genaiTracer-COYDi-tC.js → genaiTracer-jJKYsnjc.js} +2 -2
- package/dist/src/goat-Ckd3q3AY.js +467 -0
- package/dist/src/goat-Qgurm-NP.js +466 -0
- package/dist/src/goat-ghadEDdy.js +465 -0
- package/dist/src/goat-una6pZGP.cjs +469 -0
- package/dist/src/graders-BDT7dif6.js +3 -0
- package/dist/src/{graders-eIHhRqoC.js → graders-BGP99PdK.js} +2416 -2224
- package/dist/src/{graders-Zy3x0zqX.js → graders-BX0f2tvS.js} +2423 -2226
- package/dist/src/{graders-pvbReLLn.js → graders-C0nXU_ZP.js} +1806 -1609
- package/dist/src/{graders--zknU_uk.cjs → graders-ClrU2fnd.cjs} +2219 -1949
- package/dist/src/hydra-BSNZZm2M.js +543 -0
- package/dist/src/hydra-BxdG4nkg.js +541 -0
- package/dist/src/hydra-DE4xWwyc.js +542 -0
- package/dist/src/hydra-DrJttnvw.cjs +542 -0
- package/dist/src/image-B4oBtu6J.js +443 -0
- package/dist/src/{image-dnoUgPrC.js → image-BN-hjLL9.js} +4 -4
- package/dist/src/{image-9302QVqR.js → image-B_fPIwdg.js} +3 -3
- package/dist/src/image-BvUAW344.js +442 -0
- package/dist/src/image-Cvjwx1uY.js +442 -0
- package/dist/src/{image-De2FBmYV.cjs → image-DfVCGPbI.cjs} +4 -4
- package/dist/src/{image-u7-rKnYU.js → image-QzmydkiG.js} +4 -4
- package/dist/src/image-X0oY4350.cjs +465 -0
- package/dist/src/index.cjs +1689 -558
- package/dist/src/index.d.cts +3270 -1624
- package/dist/src/index.d.ts +3270 -1624
- package/dist/src/index.js +1553 -438
- package/dist/src/indirectWebPwn-02ZIghCS.js +259 -0
- package/dist/src/indirectWebPwn-BJ22AbQa.cjs +397 -0
- package/dist/src/indirectWebPwn-CbjUG0rh.js +385 -0
- package/dist/src/indirectWebPwn-CfQJt3gk.cjs +260 -0
- package/dist/src/indirectWebPwn-DBQhOjoD.js +260 -0
- package/dist/src/indirectWebPwn-OsXnKejv.js +259 -0
- package/dist/src/indirectWebPwn-tNx9OZ35.js +385 -0
- package/dist/src/indirectWebPwn-uyWdHx04.js +386 -0
- package/dist/src/inputVariables-B0qUChbV.js +467 -0
- package/dist/src/inputVariables-DUGMb9Ka.js +464 -0
- package/dist/src/inputVariables-DXFdi7AI.js +468 -0
- package/dist/src/inputVariables-Dq9W-Z3a.cjs +475 -0
- package/dist/src/{interactiveCheck-CLERUB0c.js → interactiveCheck-C4QlIuoR.js} +2 -2
- package/dist/src/{invariant-BtWWVVhl.js → invariant-B2Rf6avk.js} +1 -1
- package/dist/src/{invariant-vgHWClmd.js → invariant-DIYf9sP1.js} +1 -1
- package/dist/src/{invariant-kfQ8Bu82.cjs → invariant-QtnLD03y.cjs} +1 -1
- package/dist/src/iterative-CpU6i2As.js +490 -0
- package/dist/src/iterative-DJQEQpG3.js +491 -0
- package/dist/src/iterative-DQBuWM-j.cjs +493 -0
- package/dist/src/iterative-FTS4Bz67.js +492 -0
- package/dist/src/iterativeImage-BUABMVOA.js +413 -0
- package/dist/src/iterativeImage-ByFWkxax.cjs +415 -0
- package/dist/src/iterativeImage-BzUapOUi.js +414 -0
- package/dist/src/iterativeImage-Doz8mgxF.js +413 -0
- package/dist/src/iterativeMeta-B3YiAOc8.js +386 -0
- package/dist/src/iterativeMeta-C7APE_P1.js +385 -0
- package/dist/src/iterativeMeta-CSS8M6Ds.cjs +385 -0
- package/dist/src/iterativeMeta-DgoQ7bLh.js +384 -0
- package/dist/src/iterativeTree-B5zxBBSW.js +769 -0
- package/dist/src/iterativeTree-CNyIk0Yn.js +768 -0
- package/dist/src/iterativeTree-CPMF10ve.cjs +771 -0
- package/dist/src/iterativeTree-DvZ7GBwt.js +770 -0
- package/dist/src/{knowledgeBase-Dgc7CBWF.js → knowledgeBase-BadkINlJ.js} +24 -10
- package/dist/src/{knowledgeBase-RhFPGWDc.js → knowledgeBase-Bi_8sV-H.js} +25 -11
- package/dist/src/{knowledgeBase-lm9RXSAm.js → knowledgeBase-CkMljjdg.js} +25 -11
- package/dist/src/{knowledgeBase-Bpoe_nLu.cjs → knowledgeBase-DUh34xba.cjs} +25 -11
- package/dist/src/{litellm-DRjpcSa7.js → litellm-BKBo0jpC.js} +5 -5
- package/dist/src/{litellm-C2kqjxqp.js → litellm-BXyn5kZK.js} +5 -5
- package/dist/src/{litellm-p37R1dzQ.js → litellm-CNcfbCfa.js} +4 -4
- package/dist/src/{litellm-CoyI4IAl.cjs → litellm-CtAr7bKG.cjs} +5 -5
- package/dist/src/{logger-DksKw1Qc.js → logger-BbY6ypFL.js} +2 -2
- package/dist/src/{logger-B88EkIn6.js → logger-KD8JjCRJ.js} +2 -2
- package/dist/src/{logger-COuQb2xB.cjs → logger-cfNpzI4o.cjs} +13 -55
- package/dist/src/{luma-ray-KgTCXrZC.js → luma-ray-BMX1iEB6.js} +5 -5
- package/dist/src/{luma-ray-B863CmuZ.js → luma-ray-CR5TSpp4.js} +5 -5
- package/dist/src/{luma-ray-BxVKaW2a.cjs → luma-ray-D3FUc2K3.cjs} +9 -8
- package/dist/src/{luma-ray-BTTLtqQ8.js → luma-ray-OEMmS1RB.js} +6 -6
- package/dist/src/main.js +909 -369
- package/dist/src/memoryPoisoning-CM83NWYl.js +107 -0
- package/dist/src/memoryPoisoning-D8h9gXJF.js +106 -0
- package/dist/src/memoryPoisoning-Dp-btinn.cjs +106 -0
- package/dist/src/memoryPoisoning-cLuCoTuJ.js +106 -0
- package/dist/src/{messages-BTQz42fn.js → messages-BabO-cX8.js} +273 -17
- package/dist/src/{messages-811uVVW5.cjs → messages-DBPir0TQ.cjs} +278 -18
- package/dist/src/{messages-zWbkLLHz.js → messages-DGUlSNU7.js} +273 -17
- package/dist/src/{messages-MYTQ2TWp.js → messages-vsE_-Lv0.js} +273 -17
- package/dist/src/{meteor-DHdzY1Ss.js → meteor--TZYICTI.js} +2 -2
- package/dist/src/{meteor-Co1VQ1u5.cjs → meteor-CR226f7Z.cjs} +2 -2
- package/dist/src/{meteor-CU5UAE-H.js → meteor-Cl_yd7rJ.js} +2 -2
- package/dist/src/{meteor-DuAFv6gF.js → meteor-Dce-_zGQ.js} +1 -1
- package/dist/src/mischievousUser-0l8GD7Dp.js +46 -0
- package/dist/src/mischievousUser-BUOP9W5r.js +46 -0
- package/dist/src/mischievousUser-frFYKxu6.js +47 -0
- package/dist/src/mischievousUser-olGgHIVR.cjs +46 -0
- package/dist/src/{modelslab-Dk1JAtVo.cjs → modelslab-CNV5bMSk.cjs} +7 -7
- package/dist/src/{modelslab-D0erNWKe.js → modelslab-Cogmu4mG.js} +6 -6
- package/dist/src/{modelslab-DIq-6y7x.js → modelslab-Dzst7VTU.js} +6 -6
- package/dist/src/{modelslab-wu9yi5GE.js → modelslab-EyDczZ5A.js} +7 -7
- package/dist/src/{nova-reel-CCFRfeRb.js → nova-reel-BGPNBOMS.js} +6 -6
- package/dist/src/{nova-reel-DQrm74ng.js → nova-reel-B_5NKFu1.js} +5 -5
- package/dist/src/{nova-reel-gr11WG7f.js → nova-reel-C4eUJGse.js} +5 -5
- package/dist/src/{nova-reel-CrLXVKQf.cjs → nova-reel-CjJRxI1X.cjs} +9 -8
- package/dist/src/{nova-sonic-BYdp-QLs.js → nova-sonic-BNGmgfFz.js} +4 -4
- package/dist/src/{nova-sonic-TDgrlTk7.js → nova-sonic-ChPlh5na.js} +4 -4
- package/dist/src/{nova-sonic-B_ZXcUJB.js → nova-sonic-CrV0iaY_.js} +3 -3
- package/dist/src/{nova-sonic-i5tUvXKn.cjs → nova-sonic-DuOG9Aun.cjs} +5 -4
- package/dist/src/{openai-DhVEmgeZ.js → openai-BMHD2Huo.js} +2 -2
- package/dist/src/{openai-URNyItar.cjs → openai-C3uXv8wS.cjs} +2 -2
- package/dist/src/{openai-Qsvz25mV.js → openai-CJrsh9n4.js} +2 -2
- package/dist/src/{openai-iYtrXzOX.js → openai-zgwBb4Ff.js} +1 -1
- package/dist/src/{openclaw-CnQ363Wi.js → openclaw-BIHlu_36.js} +10 -8
- package/dist/src/{openclaw-CwzlQSQX.js → openclaw-CF7fMido.js} +9 -7
- package/dist/src/{openclaw-wX9rtfke.cjs → openclaw-Dphc01BY.cjs} +18 -15
- package/dist/src/{openclaw-CLWrW03k.js → openclaw-zIJAsz3P.js} +10 -8
- package/dist/src/{opencode-sdk-BUu5Nevv.js → opencode-sdk-B3vlPLsp.js} +40 -5
- package/dist/src/{opencode-sdk-BxD8vXp_.js → opencode-sdk-D05JSgMQ.js} +40 -5
- package/dist/src/{opencode-sdk-BZ2idgYA.cjs → opencode-sdk-DoY6GbWw.cjs} +46 -10
- package/dist/src/{opencode-sdk-GI2KaAXq.js → opencode-sdk-sRKYHGoI.js} +39 -4
- package/dist/src/{otlpReceiver-BntK801g.js → otlpReceiver--gTpSagc.js} +120 -4
- package/dist/src/{otlpReceiver-DmVulbhC.js → otlpReceiver-B2eaKC8C.js} +120 -4
- package/dist/src/{otlpReceiver-B2z58l4e.js → otlpReceiver-BXjcRqAM.js} +119 -3
- package/dist/src/{otlpReceiver-BfcVq2Nq.cjs → otlpReceiver-CvJdBGSc.cjs} +125 -7
- package/dist/src/packageParser--MWTSrPW.js +36 -0
- package/dist/src/packageParser-CgE-ziRo.js +35 -0
- package/dist/src/packageParser-QoCS1FMl.cjs +54 -0
- package/dist/src/packageParser-hwwSGnAZ.js +35 -0
- package/dist/src/processShim-BBxt7LKO.js +95 -0
- package/dist/src/processShim-BcGzU8fY.js +94 -0
- package/dist/src/processShim-C_z3aRvF.js +94 -0
- package/dist/src/processShim-DSY9BV2T.cjs +98 -0
- package/dist/src/promptLength-0qIHyhA5.js +71 -0
- package/dist/src/promptLength-4X-Wd8PG.js +72 -0
- package/dist/src/promptLength-B9nZEfO6.js +71 -0
- package/dist/src/promptLength-BbBbDHNj.cjs +94 -0
- package/dist/src/promptfoo-BDrfT30-.js +180 -0
- package/dist/src/promptfoo-Cm4hiy1Y.js +180 -0
- package/dist/src/promptfoo-Rjp-MeBb.js +181 -0
- package/dist/src/promptfoo-b-baRMj-.cjs +205 -0
- package/dist/src/prompts-BYMtqPCw.js +259 -0
- package/dist/src/prompts-C-bqE1Yp.js +260 -0
- package/dist/src/prompts-Cp_Qx5Ml.js +270 -0
- package/dist/src/prompts-DHhQsANy.js +259 -0
- package/dist/src/prompts-D_QpZ2Dm.js +271 -0
- package/dist/src/prompts-hNvWBD3z.cjs +284 -0
- package/dist/src/prompts-huDVH2CI.js +270 -0
- package/dist/src/prompts-p78Hul5i.cjs +289 -0
- package/dist/src/{providerRegistry-CPQ_CmVO.js → providerRegistry-1gB5vtzQ.js} +2 -2
- package/dist/src/{providerRegistry-CQMdTmHP.cjs → providerRegistry-CZO_w7ue.cjs} +2 -2
- package/dist/src/{providerRegistry-Bvh8mv85.js → providerRegistry-DHcFiVWX.js} +1 -1
- package/dist/src/{providerRegistry-CWoPjKFZ.js → providerRegistry-ReCd0sFa.js} +2 -2
- package/dist/src/{providers-BV_KMZje.js → providers-B9KzWxAX.js} +10558 -21587
- package/dist/src/{providers-DruaQfwu.js → providers-BCCz6_IX.js} +1228 -12196
- package/dist/src/{providers-1eKkXBKp.cjs → providers-BDVVIQM6.cjs} +10649 -21843
- package/dist/src/{providers-iUt5fbAN.js → providers-BYAn82cf.js} +1 -1
- package/dist/src/{providers-Domz_llv.js → providers-DVYRZP4E.js} +10589 -21570
- package/dist/src/{pythonUtils-Cldx7huE.js → pythonUtils-CLCgQ9tt.js} +3 -3
- package/dist/src/{pythonUtils-CnndUbW-.js → pythonUtils-CgYxeSmO.js} +3 -3
- package/dist/src/{pythonUtils-tAJvvpS-.cjs → pythonUtils-Cokhluq3.cjs} +8 -7
- package/dist/src/{pythonUtils-C2UQ30Rz.js → pythonUtils-D0BYebvX.js} +3 -3
- package/dist/src/{quiverai-DFotyafY.cjs → quiverai-BAp6iTZD.cjs} +4 -4
- package/dist/src/{quiverai-aPPvXOgn.js → quiverai-BvIhI_0l.js} +4 -4
- package/dist/src/{quiverai-DR0SnIQV.js → quiverai-CdTWPe-A.js} +3 -3
- package/dist/src/{quiverai-CtWi6x_g.js → quiverai-Cv7rJKDz.js} +4 -4
- package/dist/src/registry-BUJrgjwv.js +124 -0
- package/dist/src/registry-DXm1t_x0.js +125 -0
- package/dist/src/registry-Dp5EqoXc.js +124 -0
- package/dist/src/registry-KCVF1CFC.cjs +124 -0
- package/dist/src/{server-D6Il2Sob.js → remoteGeneration-B1_XsKXU.js} +16 -108
- package/dist/src/{server-BSB45Nt9.js → remoteGeneration-COpWcmWd.js} +15 -146
- package/dist/src/{server-Dx2TyCH2.cjs → remoteGeneration-DS9N3pgB.cjs} +30 -119
- package/dist/src/remoteGeneration-DsaSwmG2.js +217 -0
- package/dist/src/render-BNTrbmBw.cjs +384 -0
- package/dist/src/render-CSP99NLm.js +348 -0
- package/dist/src/render-DFfDeYUK.js +347 -0
- package/dist/src/{render-CgVDrJmM.js → render-DznWrxGO.js} +2 -2
- package/dist/src/render-_6ur1fhE.js +347 -0
- package/dist/src/resourceAttributes-D1jP3kL5.js +17 -0
- package/dist/src/resourceAttributes-DQbBB--2.js +16 -0
- package/dist/src/resourceAttributes-ephgOvdR.cjs +27 -0
- package/dist/src/resourceAttributes-v6-I67fn.js +16 -0
- package/dist/src/{responses-Bi9vBuW_.cjs → responses-1UFFF9N_.cjs} +51 -16
- package/dist/src/{responses-DL9m8CyY.js → responses-B3W2JvOQ.js} +49 -15
- package/dist/src/{responses--OsX2aYW.js → responses-B6ktc3Ra.js} +49 -15
- package/dist/src/{responses-C-flexAY.js → responses-URRzV8qE.js} +49 -15
- package/dist/src/rolldown-runtime-D_mwlA32.cjs +43 -0
- package/dist/src/rubyUtils-BYVlQ94c.js +3 -0
- package/dist/src/{rubyUtils-DsGrTx8R.js → rubyUtils-CXlFM2rR.js} +3 -3
- package/dist/src/{rubyUtils-DVLeA2jg.js → rubyUtils-CnlW8AYb.js} +3 -3
- package/dist/src/{rubyUtils-B6eljPuh.cjs → rubyUtils-CqUWBZAt.cjs} +18 -27
- package/dist/src/{rubyUtils-CYSQEG4a.js → rubyUtils-DdGojpfv.js} +3 -3
- package/dist/src/runtimeTransform-BJOpL9Yc.js +142 -0
- package/dist/src/runtimeTransform-Dgh_D7DU.js +143 -0
- package/dist/src/runtimeTransform-DigbjU1r.js +142 -0
- package/dist/src/runtimeTransform-ON3YYILw.cjs +147 -0
- package/dist/src/{sagemaker-BVkaG2-l.js → sagemaker-CujrzP1a.js} +62 -51
- package/dist/src/{sagemaker-XnfhheQv.cjs → sagemaker-DzffAqo_.cjs} +65 -53
- package/dist/src/{sagemaker-D67yzMzs.js → sagemaker-vhtSV7JI.js} +62 -51
- package/dist/src/{sagemaker-BveBvuxm.js → sagemaker-yr1QKeBs.js} +61 -50
- package/dist/src/{scanner-1DqWi1Ej.js → scanner-DS0109SS.js} +7 -7
- package/dist/src/server/index.js +5105 -605
- package/dist/src/server-B8rqV126.cjs +126 -0
- package/dist/src/server-BaLytskk.js +3 -0
- package/dist/src/server-CMJD10J4.js +107 -0
- package/dist/src/server-Ddp8GNMp.js +146 -0
- package/dist/src/server-DhMHosWj.js +182 -0
- package/dist/src/shared-7pmVZLNO.js +1334 -0
- package/dist/src/shared-9WHQ1oNE.js +1335 -0
- package/dist/src/{fileExtensions-BArZuxsI.js → shared-BoG7qLMv.js} +12 -2
- package/dist/src/shared-D6IjElRI.js +1334 -0
- package/dist/src/shared-WkgnDkcg.cjs +1436 -0
- package/dist/src/{signal-CE5G3a7x.js → signal-CSurUUyV.js} +3 -3
- package/dist/src/simulatedUser-C9aQObBI.js +222 -0
- package/dist/src/simulatedUser-Cu601Dd4.cjs +227 -0
- package/dist/src/simulatedUser-U_qAHnuB.js +222 -0
- package/dist/src/simulatedUser-p3tACcmw.js +223 -0
- package/dist/src/{slack-DDUe-5MC.js → slack-Bapo-7_8.js} +2 -2
- package/dist/src/{slack-1Rhq0EoV.cjs → slack-DMC1QVEg.cjs} +3 -2
- package/dist/src/{slack-D5Wpy8LM.js → slack-DTEFhrMn.js} +2 -2
- package/dist/src/{slack-acRb0IqQ.js → slack-k-_CP84Q.js} +1 -1
- package/dist/src/storage-BU4qcnOb.js +875 -0
- package/dist/src/storage-CA-v9V2v.cjs +911 -0
- package/dist/src/storage-CD-GWAdx.js +822 -0
- package/dist/src/storage-QdU-SmvD.js +834 -0
- package/dist/src/{store-DAAyxcy6.cjs → store-B2NDDooM.cjs} +60 -24
- package/dist/src/{store-CYEy5J2D.js → store-DKd5592Q.js} +51 -20
- package/dist/src/{store-M0b1WfYb.js → store-HpopRVzl.js} +50 -19
- package/dist/src/store-IbiRIF3k.js +3 -0
- package/dist/src/strategies-7CS3Alao.cjs +2360 -0
- package/dist/src/strategies-CiSeroPH.js +2331 -0
- package/dist/src/strategies-DRJjGTIY.js +2333 -0
- package/dist/src/{tables-DQ4WU5tX.js → tables-CRSXQ2Ke.js} +2 -2
- package/dist/src/{tables-CsWou1Bx.js → tables-CxjU7bBd.js} +3 -3
- package/dist/src/{tables-DUfh1F7Z.cjs → tables-DBIJU0WE.cjs} +6 -5
- package/dist/src/{tables-C4CH3zRr.js → tables-DafUHOeh.js} +3 -3
- package/dist/src/{telemetry-CQPez_Jp.js → telemetry-00ezXr_t.js} +5 -4
- package/dist/src/telemetry-ByPqDcKC.js +3 -0
- package/dist/src/{telemetry-Dsw_faFj.cjs → telemetry-CJ7FnCsc.cjs} +18 -11
- package/dist/src/{telemetry-dbaJ0E98.js → telemetry-DmXYcJNV.js} +5 -4
- package/dist/src/{telemetry-Dvqxv3YC.js → telemetry-DwX9XUN5.js} +4 -3
- package/dist/src/{text-KvuD2Iko.js → text-Db-Wt2u2.js} +1 -1
- package/dist/src/{text-DHxdyQqT.js → text-DwYK5EBn.js} +1 -1
- package/dist/src/{text-BVi-cLPJ.cjs → text-nywWsRBM.cjs} +1 -1
- package/dist/src/{tokenUsageUtils-C-bmyHoE.js → tokenUsageUtils-BjVkdk18.js} +1 -1
- package/dist/src/{tokenUsageUtils-CXrvO-wA.js → tokenUsageUtils-CDet74yk.js} +1 -1
- package/dist/src/tokenUsageUtils-CmnQ0G2m.js +142 -0
- package/dist/src/{tokenUsageUtils-Bb7DkZPz.cjs → tokenUsageUtils-_B-P8IAi.cjs} +1 -1
- package/dist/src/toolAttributes-BAjwcBf0.cjs +103 -0
- package/dist/src/toolAttributes-COVgDrBG.js +87 -0
- package/dist/src/toolAttributes-DJ9ZEKXD.js +86 -0
- package/dist/src/tracingOptions-BnwKCkSB.js +221 -0
- package/dist/src/tracingOptions-Chi74lOD.js +219 -0
- package/dist/src/tracingOptions-DrbSFaKy.cjs +249 -0
- package/dist/src/tracingOptions-ji2OuXbT.js +220 -0
- package/dist/src/{transcription-DuWDupG7.js → transcription-B8uIgCYX.js} +5 -5
- package/dist/src/{transcription-CJspiD2c.js → transcription-CfU5loSq.js} +6 -6
- package/dist/src/{transcription-V2HaAmy2.js → transcription-Dkd22_4K.js} +6 -6
- package/dist/src/{transcription-BvjmiYB1.cjs → transcription-mzuf18Mq.cjs} +9 -8
- package/dist/src/{transform-lQrDE1BQ.js → transform-BIMynQsA.js} +9 -9
- package/dist/src/transform-BnSTnFlp.js +187 -0
- package/dist/src/transform-BnSXWmU_2.cjs +221 -0
- package/dist/src/transform-CGt7Kt3y2.js +186 -0
- package/dist/src/transform-CrPGTsij.js +186 -0
- package/dist/src/{transform-CTeuTR3S.cjs → transform-DhNkAUs8.cjs} +13 -12
- package/dist/src/{transform-CG0ehZNG.js → transform-DmvYBRll.js} +9 -9
- package/dist/src/{transform-zDhMmzwX.js → transform-EtD4jAWi.js} +9 -9
- package/dist/src/{transformersAvailability-CcHusyhw.js → transformersAvailability-0ThtPved.js} +1 -1
- package/dist/src/transformersAvailability-BYydDE5U.js +35 -0
- package/dist/src/{transformersAvailability-DLlROWhg.js → transformersAvailability-BvyU9vDD.js} +1 -1
- package/dist/src/{transformersAvailability-Cju9mHgR.cjs → transformersAvailability-BytPvKUW.cjs} +1 -1
- package/dist/src/{types-Dm9JM6Vb.js → types-BFevViUY.js} +115 -19
- package/dist/src/{types-Bgh5SOn6.js → types-BJQBBPTP.js} +115 -19
- package/dist/src/{types-CeaeaZdP.cjs → types-CxJvaY2S.cjs} +357 -172
- package/dist/src/{types-BGQDAP8i.js → types-D6glLbdF.js} +271 -170
- package/dist/src/{util-BYvQUPp7.js → util--WMgw7wM.js} +28 -8
- package/dist/src/{util-C9J8ahRn.js → util-5WnCSb0h.js} +72 -48
- package/dist/src/{util-CN3SrLT4.cjs → util-BSIuSLVK.cjs} +74 -49
- package/dist/src/{util-C8e5uydV.js → util-Bx677_k2.js} +154 -147
- package/dist/src/util-CN8om2rz.cjs +386 -0
- package/dist/src/{util-DDs-7g6-.js → util-CoQWM76y.js} +28 -8
- package/dist/src/util-DNl96nNs.js +327 -0
- package/dist/src/{util-DxWpWjhc.js → util-DURocbYR.js} +667 -507
- package/dist/src/util-Df8YMvS1.js +327 -0
- package/dist/src/{util-DvU2Pw8c.js → util-DiQ3QvBB.js} +28 -8
- package/dist/src/{util-oGMLA7vc.js → util-I-Rf-KaD.js} +862 -577
- package/dist/src/{util-olYL5C6N.cjs → util-IYzs5Y04.cjs} +33 -7
- package/dist/src/{util-D9TisOyk.js → util-LKTmNsMQ.js} +71 -47
- package/dist/src/{util-Bxn8emtE.cjs → util-SPsvFONY.cjs} +738 -582
- package/dist/src/{util-D3q0WQ-0.js → util-efByNxcr.js} +72 -48
- package/dist/src/util-kDURhgJW.js +328 -0
- package/dist/src/{utils-DJfvjyMj.js → utils-B0lzitHZ.js} +3 -3
- package/dist/src/{utils-BLJKfv0y.js → utils-BFOh20Gb.js} +3 -3
- package/dist/src/{utils-hXtCYanr.js → utils-BGY69tk_.js} +2 -2
- package/dist/src/{utils-B05gLxER.cjs → utils-Ve6kuJsa.cjs} +3 -3
- package/dist/src/version-BK20a4sw.js +16 -0
- package/dist/src/version-BWCSaByA.cjs +27 -0
- package/dist/src/version-eRkNuGv8.js +17 -0
- package/dist/src/version-lpHV_53E.js +16 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +56 -28
- package/dist/src/app/assets/Report-CQYFezYu.js +0 -1
- package/dist/src/app/assets/index-BXGkeMwh.css +0 -1
- package/dist/src/app/assets/index-BzJt18Jz.js +0 -385
- package/dist/src/app/assets/sync-IjzpWrOE.js +0 -4
- package/dist/src/app/assets/vendor-charts-BNdH8TCw.js +0 -36
- package/dist/src/cache-Cr9oLMUa.js +0 -3
- package/dist/src/cache-DbLsVWB2.cjs +0 -3
- package/dist/src/cloud-Hphvo8kr.js +0 -3
- package/dist/src/codex-sdk-BAmYE7qy.js +0 -3
- package/dist/src/codex-sdk-CWEnH70W.cjs +0 -2
- package/dist/src/evalResult-D8MT9p0s.js +0 -3
- package/dist/src/evalResult-DElBuddX.js +0 -2
- package/dist/src/evalResult-Dvc-iucu.cjs +0 -2
- package/dist/src/evaluator-CVessDWe.js +0 -3
- package/dist/src/fetch-C7bGKDlQ.js +0 -3
- package/dist/src/graders-BOAzQEUe.cjs +0 -2
- package/dist/src/graders-D4BTsZdG2.js +0 -3
- package/dist/src/graders-DOJK1XpV.js +0 -2
- package/dist/src/graders-NAv9LcBn.js +0 -2
- package/dist/src/image-B5Mv-Z3h.js +0 -257
- package/dist/src/image-DVz2RiMF.js +0 -258
- package/dist/src/image-qUpPvmNZ.js +0 -257
- package/dist/src/image-x6KqLQl4.cjs +0 -280
- package/dist/src/providers-Bp4S-FvO.js +0 -2
- package/dist/src/providers-DV3ax9e_.cjs +0 -3
- package/dist/src/providers-u9Enmfok.js +0 -2
- package/dist/src/render-CH-62LbA.js +0 -135
- package/dist/src/render-CMEpfLaO.js +0 -136
- package/dist/src/render-DHIZ6_k8.js +0 -135
- package/dist/src/render-DfQSFxGE.cjs +0 -165
- package/dist/src/rubyUtils-D1L2d3jb.js +0 -3
- package/dist/src/rubyUtils-DUbq4tff.cjs +0 -2
- package/dist/src/server-BNYztJkh.js +0 -385
- package/dist/src/server-DCtHUqlp.js +0 -3
- package/dist/src/server-DaA2eR26.cjs +0 -2
- package/dist/src/store-CWOSz6D_.cjs +0 -2
- package/dist/src/store-DCDBhv7B.js +0 -3
- package/dist/src/store-Dn9HUkdW.js +0 -240
- package/dist/src/telemetry-C1IqxcdW.js +0 -3
- package/dist/src/telemetry-C4ZEa_es.cjs +0 -2
- package/dist/src/transform-Bbg6A8Jk.js +0 -216
- package/dist/src/transform-CUnzlsbn.cjs +0 -228
- package/dist/src/transform-DYX1_Xnh.js +0 -216
- package/dist/src/transform-DgKlRr73.cjs +0 -2
- package/dist/src/transform-M6ITAESf.js +0 -3
- package/dist/src/transform-UN5UGu8U.js +0 -213
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { s as logger } from "./logger-BbY6ypFL.js";
|
|
3
|
+
//#region src/redteam/shared/runtimeTransform.ts
|
|
4
|
+
/**
|
|
5
|
+
* Runtime transform utility for applying strategy transforms per-turn.
|
|
6
|
+
*
|
|
7
|
+
* This module enables multi-turn attack providers (Hydra, Crescendo, etc.)
|
|
8
|
+
* to apply layer transforms (audio, base64, etc.) to each turn's prompt
|
|
9
|
+
* before sending to the target.
|
|
10
|
+
*
|
|
11
|
+
* It reuses existing strategy implementations, avoiding code duplication.
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Applies strategy transforms to a prompt at runtime (per-turn).
|
|
15
|
+
* This is used by multi-turn attack providers to transform each turn's
|
|
16
|
+
* output before sending to the target.
|
|
17
|
+
*
|
|
18
|
+
* @param prompt - The text prompt to transform
|
|
19
|
+
* @param injectVar - The variable name used for injection (e.g., 'query')
|
|
20
|
+
* @param layerConfigs - Array of layer configurations to apply in order
|
|
21
|
+
* @param strategies - The loaded strategies array (to avoid circular imports)
|
|
22
|
+
* @param context - Optional context metadata to pass to layer strategies
|
|
23
|
+
* @returns TransformResult with transformed prompt and audio metadata
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```typescript
|
|
27
|
+
* // In Hydra provider:
|
|
28
|
+
* const result = await applyRuntimeTransforms(
|
|
29
|
+
* attackPrompt,
|
|
30
|
+
* 'query',
|
|
31
|
+
* ['audio', 'base64'],
|
|
32
|
+
* Strategies,
|
|
33
|
+
* { evaluationId: context?.evaluationId, purpose: context?.test?.metadata?.purpose }
|
|
34
|
+
* );
|
|
35
|
+
* // result.prompt = transformed, result.audio = { data, format } if audio
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
async function applyRuntimeTransforms(prompt, injectVar, layerConfigs, strategies, context) {
|
|
39
|
+
const originalPrompt = prompt;
|
|
40
|
+
if (!layerConfigs?.length) return {
|
|
41
|
+
prompt,
|
|
42
|
+
originalPrompt
|
|
43
|
+
};
|
|
44
|
+
logger.debug(`[RuntimeTransform] Applying ${layerConfigs.length} transforms to prompt`, {
|
|
45
|
+
hasContext: !!context,
|
|
46
|
+
hasEvaluationId: !!context?.evaluationId,
|
|
47
|
+
hasPurpose: !!context?.purpose
|
|
48
|
+
});
|
|
49
|
+
let testCase = {
|
|
50
|
+
vars: { [injectVar]: prompt },
|
|
51
|
+
assert: [],
|
|
52
|
+
metadata: {
|
|
53
|
+
pluginId: "runtime-transform",
|
|
54
|
+
evaluationId: context?.evaluationId,
|
|
55
|
+
testCaseId: context?.testCaseId,
|
|
56
|
+
purpose: context?.purpose,
|
|
57
|
+
goal: context?.goal
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
let audioApplied = false;
|
|
61
|
+
let imageApplied = false;
|
|
62
|
+
for (const layer of layerConfigs) {
|
|
63
|
+
const layerId = typeof layer === "string" ? layer : layer.id;
|
|
64
|
+
const layerConfig = typeof layer === "string" ? {} : layer.config || {};
|
|
65
|
+
const strategy = strategies.find((s) => s.id === layerId);
|
|
66
|
+
if (!strategy) {
|
|
67
|
+
logger.warn(`[RuntimeTransform] Unknown layer strategy: ${layerId}, skipping`);
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
logger.debug(`[RuntimeTransform] Applying layer: ${layerId}`);
|
|
71
|
+
if (layerId === "audio") audioApplied = true;
|
|
72
|
+
else if (layerId === "image") imageApplied = true;
|
|
73
|
+
try {
|
|
74
|
+
const transformed = (await strategy.action([testCase], injectVar, layerConfig))[0];
|
|
75
|
+
if (transformed) testCase = {
|
|
76
|
+
...transformed,
|
|
77
|
+
metadata: {
|
|
78
|
+
...testCase.metadata,
|
|
79
|
+
...transformed.metadata,
|
|
80
|
+
pluginId: testCase.metadata.pluginId
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
else logger.warn(`[RuntimeTransform] Layer ${layerId} returned no test cases`);
|
|
84
|
+
} catch (error) {
|
|
85
|
+
const errorMsg = `Transform ${layerId} failed: ${error.message || "Unknown error"}`;
|
|
86
|
+
logger.error(`[RuntimeTransform] ${errorMsg}`, { error });
|
|
87
|
+
return {
|
|
88
|
+
prompt: originalPrompt,
|
|
89
|
+
originalPrompt,
|
|
90
|
+
error: errorMsg
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
const transformedPrompt = String(testCase.vars?.[injectVar] ?? prompt);
|
|
95
|
+
logger.debug(`[RuntimeTransform] Transform complete`, {
|
|
96
|
+
originalLength: prompt.length,
|
|
97
|
+
resultLength: transformedPrompt.length,
|
|
98
|
+
layersApplied: layerConfigs.length,
|
|
99
|
+
audioApplied,
|
|
100
|
+
imageApplied
|
|
101
|
+
});
|
|
102
|
+
const displayVars = {};
|
|
103
|
+
if (testCase.vars) {
|
|
104
|
+
for (const [key, value] of Object.entries(testCase.vars)) if (key !== injectVar && typeof value === "string") displayVars[key] = value;
|
|
105
|
+
}
|
|
106
|
+
const result = {
|
|
107
|
+
prompt: transformedPrompt,
|
|
108
|
+
originalPrompt,
|
|
109
|
+
...Object.keys(displayVars).length > 0 && { displayVars },
|
|
110
|
+
metadata: testCase.metadata
|
|
111
|
+
};
|
|
112
|
+
const audioStorageKey = testCase.metadata?.audioStorageKey;
|
|
113
|
+
const imageStorageKey = testCase.metadata?.imageStorageKey;
|
|
114
|
+
if (audioApplied && transformedPrompt !== originalPrompt) {
|
|
115
|
+
const dataUrlMatch = transformedPrompt.match(/^data:audio\/([^;]+);base64,(.+)$/);
|
|
116
|
+
if (dataUrlMatch) result.audio = {
|
|
117
|
+
data: dataUrlMatch[2],
|
|
118
|
+
format: dataUrlMatch[1]
|
|
119
|
+
};
|
|
120
|
+
else result.audio = {
|
|
121
|
+
data: transformedPrompt,
|
|
122
|
+
format: "mp3"
|
|
123
|
+
};
|
|
124
|
+
if (audioStorageKey) logger.debug(`[RuntimeTransform] Audio stored to: ${audioStorageKey} (will be sanitized before DB save)`);
|
|
125
|
+
}
|
|
126
|
+
if (imageApplied && transformedPrompt !== originalPrompt) {
|
|
127
|
+
const dataUrlMatch = transformedPrompt.match(/^data:image\/([^;]+);base64,(.+)$/);
|
|
128
|
+
if (dataUrlMatch) result.image = {
|
|
129
|
+
data: dataUrlMatch[2],
|
|
130
|
+
format: dataUrlMatch[1]
|
|
131
|
+
};
|
|
132
|
+
else result.image = {
|
|
133
|
+
data: transformedPrompt,
|
|
134
|
+
format: "png"
|
|
135
|
+
};
|
|
136
|
+
if (imageStorageKey) logger.debug(`[RuntimeTransform] Image stored to: ${imageStorageKey} (will be sanitized before DB save)`);
|
|
137
|
+
}
|
|
138
|
+
return result;
|
|
139
|
+
}
|
|
140
|
+
//#endregion
|
|
141
|
+
export { applyRuntimeTransforms as t };
|
|
142
|
+
|
|
143
|
+
//# sourceMappingURL=runtimeTransform-Dgh_D7DU.js.map
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { a as logger } from "./logger-Ct2S6Yx-.js";
|
|
2
|
+
//#region src/redteam/shared/runtimeTransform.ts
|
|
3
|
+
/**
|
|
4
|
+
* Runtime transform utility for applying strategy transforms per-turn.
|
|
5
|
+
*
|
|
6
|
+
* This module enables multi-turn attack providers (Hydra, Crescendo, etc.)
|
|
7
|
+
* to apply layer transforms (audio, base64, etc.) to each turn's prompt
|
|
8
|
+
* before sending to the target.
|
|
9
|
+
*
|
|
10
|
+
* It reuses existing strategy implementations, avoiding code duplication.
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Applies strategy transforms to a prompt at runtime (per-turn).
|
|
14
|
+
* This is used by multi-turn attack providers to transform each turn's
|
|
15
|
+
* output before sending to the target.
|
|
16
|
+
*
|
|
17
|
+
* @param prompt - The text prompt to transform
|
|
18
|
+
* @param injectVar - The variable name used for injection (e.g., 'query')
|
|
19
|
+
* @param layerConfigs - Array of layer configurations to apply in order
|
|
20
|
+
* @param strategies - The loaded strategies array (to avoid circular imports)
|
|
21
|
+
* @param context - Optional context metadata to pass to layer strategies
|
|
22
|
+
* @returns TransformResult with transformed prompt and audio metadata
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```typescript
|
|
26
|
+
* // In Hydra provider:
|
|
27
|
+
* const result = await applyRuntimeTransforms(
|
|
28
|
+
* attackPrompt,
|
|
29
|
+
* 'query',
|
|
30
|
+
* ['audio', 'base64'],
|
|
31
|
+
* Strategies,
|
|
32
|
+
* { evaluationId: context?.evaluationId, purpose: context?.test?.metadata?.purpose }
|
|
33
|
+
* );
|
|
34
|
+
* // result.prompt = transformed, result.audio = { data, format } if audio
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
async function applyRuntimeTransforms(prompt, injectVar, layerConfigs, strategies, context) {
|
|
38
|
+
const originalPrompt = prompt;
|
|
39
|
+
if (!layerConfigs?.length) return {
|
|
40
|
+
prompt,
|
|
41
|
+
originalPrompt
|
|
42
|
+
};
|
|
43
|
+
logger.debug(`[RuntimeTransform] Applying ${layerConfigs.length} transforms to prompt`, {
|
|
44
|
+
hasContext: !!context,
|
|
45
|
+
hasEvaluationId: !!context?.evaluationId,
|
|
46
|
+
hasPurpose: !!context?.purpose
|
|
47
|
+
});
|
|
48
|
+
let testCase = {
|
|
49
|
+
vars: { [injectVar]: prompt },
|
|
50
|
+
assert: [],
|
|
51
|
+
metadata: {
|
|
52
|
+
pluginId: "runtime-transform",
|
|
53
|
+
evaluationId: context?.evaluationId,
|
|
54
|
+
testCaseId: context?.testCaseId,
|
|
55
|
+
purpose: context?.purpose,
|
|
56
|
+
goal: context?.goal
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
let audioApplied = false;
|
|
60
|
+
let imageApplied = false;
|
|
61
|
+
for (const layer of layerConfigs) {
|
|
62
|
+
const layerId = typeof layer === "string" ? layer : layer.id;
|
|
63
|
+
const layerConfig = typeof layer === "string" ? {} : layer.config || {};
|
|
64
|
+
const strategy = strategies.find((s) => s.id === layerId);
|
|
65
|
+
if (!strategy) {
|
|
66
|
+
logger.warn(`[RuntimeTransform] Unknown layer strategy: ${layerId}, skipping`);
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
logger.debug(`[RuntimeTransform] Applying layer: ${layerId}`);
|
|
70
|
+
if (layerId === "audio") audioApplied = true;
|
|
71
|
+
else if (layerId === "image") imageApplied = true;
|
|
72
|
+
try {
|
|
73
|
+
const transformed = (await strategy.action([testCase], injectVar, layerConfig))[0];
|
|
74
|
+
if (transformed) testCase = {
|
|
75
|
+
...transformed,
|
|
76
|
+
metadata: {
|
|
77
|
+
...testCase.metadata,
|
|
78
|
+
...transformed.metadata,
|
|
79
|
+
pluginId: testCase.metadata.pluginId
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
else logger.warn(`[RuntimeTransform] Layer ${layerId} returned no test cases`);
|
|
83
|
+
} catch (error) {
|
|
84
|
+
const errorMsg = `Transform ${layerId} failed: ${error.message || "Unknown error"}`;
|
|
85
|
+
logger.error(`[RuntimeTransform] ${errorMsg}`, { error });
|
|
86
|
+
return {
|
|
87
|
+
prompt: originalPrompt,
|
|
88
|
+
originalPrompt,
|
|
89
|
+
error: errorMsg
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
const transformedPrompt = String(testCase.vars?.[injectVar] ?? prompt);
|
|
94
|
+
logger.debug(`[RuntimeTransform] Transform complete`, {
|
|
95
|
+
originalLength: prompt.length,
|
|
96
|
+
resultLength: transformedPrompt.length,
|
|
97
|
+
layersApplied: layerConfigs.length,
|
|
98
|
+
audioApplied,
|
|
99
|
+
imageApplied
|
|
100
|
+
});
|
|
101
|
+
const displayVars = {};
|
|
102
|
+
if (testCase.vars) {
|
|
103
|
+
for (const [key, value] of Object.entries(testCase.vars)) if (key !== injectVar && typeof value === "string") displayVars[key] = value;
|
|
104
|
+
}
|
|
105
|
+
const result = {
|
|
106
|
+
prompt: transformedPrompt,
|
|
107
|
+
originalPrompt,
|
|
108
|
+
...Object.keys(displayVars).length > 0 && { displayVars },
|
|
109
|
+
metadata: testCase.metadata
|
|
110
|
+
};
|
|
111
|
+
const audioStorageKey = testCase.metadata?.audioStorageKey;
|
|
112
|
+
const imageStorageKey = testCase.metadata?.imageStorageKey;
|
|
113
|
+
if (audioApplied && transformedPrompt !== originalPrompt) {
|
|
114
|
+
const dataUrlMatch = transformedPrompt.match(/^data:audio\/([^;]+);base64,(.+)$/);
|
|
115
|
+
if (dataUrlMatch) result.audio = {
|
|
116
|
+
data: dataUrlMatch[2],
|
|
117
|
+
format: dataUrlMatch[1]
|
|
118
|
+
};
|
|
119
|
+
else result.audio = {
|
|
120
|
+
data: transformedPrompt,
|
|
121
|
+
format: "mp3"
|
|
122
|
+
};
|
|
123
|
+
if (audioStorageKey) logger.debug(`[RuntimeTransform] Audio stored to: ${audioStorageKey} (will be sanitized before DB save)`);
|
|
124
|
+
}
|
|
125
|
+
if (imageApplied && transformedPrompt !== originalPrompt) {
|
|
126
|
+
const dataUrlMatch = transformedPrompt.match(/^data:image\/([^;]+);base64,(.+)$/);
|
|
127
|
+
if (dataUrlMatch) result.image = {
|
|
128
|
+
data: dataUrlMatch[2],
|
|
129
|
+
format: dataUrlMatch[1]
|
|
130
|
+
};
|
|
131
|
+
else result.image = {
|
|
132
|
+
data: transformedPrompt,
|
|
133
|
+
format: "png"
|
|
134
|
+
};
|
|
135
|
+
if (imageStorageKey) logger.debug(`[RuntimeTransform] Image stored to: ${imageStorageKey} (will be sanitized before DB save)`);
|
|
136
|
+
}
|
|
137
|
+
return result;
|
|
138
|
+
}
|
|
139
|
+
//#endregion
|
|
140
|
+
export { applyRuntimeTransforms as t };
|
|
141
|
+
|
|
142
|
+
//# sourceMappingURL=runtimeTransform-DigbjU1r.js.map
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
const require_logger = require("./logger-cfNpzI4o.cjs");
|
|
2
|
+
//#region src/redteam/shared/runtimeTransform.ts
|
|
3
|
+
/**
|
|
4
|
+
* Runtime transform utility for applying strategy transforms per-turn.
|
|
5
|
+
*
|
|
6
|
+
* This module enables multi-turn attack providers (Hydra, Crescendo, etc.)
|
|
7
|
+
* to apply layer transforms (audio, base64, etc.) to each turn's prompt
|
|
8
|
+
* before sending to the target.
|
|
9
|
+
*
|
|
10
|
+
* It reuses existing strategy implementations, avoiding code duplication.
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Applies strategy transforms to a prompt at runtime (per-turn).
|
|
14
|
+
* This is used by multi-turn attack providers to transform each turn's
|
|
15
|
+
* output before sending to the target.
|
|
16
|
+
*
|
|
17
|
+
* @param prompt - The text prompt to transform
|
|
18
|
+
* @param injectVar - The variable name used for injection (e.g., 'query')
|
|
19
|
+
* @param layerConfigs - Array of layer configurations to apply in order
|
|
20
|
+
* @param strategies - The loaded strategies array (to avoid circular imports)
|
|
21
|
+
* @param context - Optional context metadata to pass to layer strategies
|
|
22
|
+
* @returns TransformResult with transformed prompt and audio metadata
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```typescript
|
|
26
|
+
* // In Hydra provider:
|
|
27
|
+
* const result = await applyRuntimeTransforms(
|
|
28
|
+
* attackPrompt,
|
|
29
|
+
* 'query',
|
|
30
|
+
* ['audio', 'base64'],
|
|
31
|
+
* Strategies,
|
|
32
|
+
* { evaluationId: context?.evaluationId, purpose: context?.test?.metadata?.purpose }
|
|
33
|
+
* );
|
|
34
|
+
* // result.prompt = transformed, result.audio = { data, format } if audio
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
async function applyRuntimeTransforms(prompt, injectVar, layerConfigs, strategies, context) {
|
|
38
|
+
const originalPrompt = prompt;
|
|
39
|
+
if (!layerConfigs?.length) return {
|
|
40
|
+
prompt,
|
|
41
|
+
originalPrompt
|
|
42
|
+
};
|
|
43
|
+
require_logger.logger.debug(`[RuntimeTransform] Applying ${layerConfigs.length} transforms to prompt`, {
|
|
44
|
+
hasContext: !!context,
|
|
45
|
+
hasEvaluationId: !!context?.evaluationId,
|
|
46
|
+
hasPurpose: !!context?.purpose
|
|
47
|
+
});
|
|
48
|
+
let testCase = {
|
|
49
|
+
vars: { [injectVar]: prompt },
|
|
50
|
+
assert: [],
|
|
51
|
+
metadata: {
|
|
52
|
+
pluginId: "runtime-transform",
|
|
53
|
+
evaluationId: context?.evaluationId,
|
|
54
|
+
testCaseId: context?.testCaseId,
|
|
55
|
+
purpose: context?.purpose,
|
|
56
|
+
goal: context?.goal
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
let audioApplied = false;
|
|
60
|
+
let imageApplied = false;
|
|
61
|
+
for (const layer of layerConfigs) {
|
|
62
|
+
const layerId = typeof layer === "string" ? layer : layer.id;
|
|
63
|
+
const layerConfig = typeof layer === "string" ? {} : layer.config || {};
|
|
64
|
+
const strategy = strategies.find((s) => s.id === layerId);
|
|
65
|
+
if (!strategy) {
|
|
66
|
+
require_logger.logger.warn(`[RuntimeTransform] Unknown layer strategy: ${layerId}, skipping`);
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
require_logger.logger.debug(`[RuntimeTransform] Applying layer: ${layerId}`);
|
|
70
|
+
if (layerId === "audio") audioApplied = true;
|
|
71
|
+
else if (layerId === "image") imageApplied = true;
|
|
72
|
+
try {
|
|
73
|
+
const transformed = (await strategy.action([testCase], injectVar, layerConfig))[0];
|
|
74
|
+
if (transformed) testCase = {
|
|
75
|
+
...transformed,
|
|
76
|
+
metadata: {
|
|
77
|
+
...testCase.metadata,
|
|
78
|
+
...transformed.metadata,
|
|
79
|
+
pluginId: testCase.metadata.pluginId
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
else require_logger.logger.warn(`[RuntimeTransform] Layer ${layerId} returned no test cases`);
|
|
83
|
+
} catch (error) {
|
|
84
|
+
const errorMsg = `Transform ${layerId} failed: ${error.message || "Unknown error"}`;
|
|
85
|
+
require_logger.logger.error(`[RuntimeTransform] ${errorMsg}`, { error });
|
|
86
|
+
return {
|
|
87
|
+
prompt: originalPrompt,
|
|
88
|
+
originalPrompt,
|
|
89
|
+
error: errorMsg
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
const transformedPrompt = String(testCase.vars?.[injectVar] ?? prompt);
|
|
94
|
+
require_logger.logger.debug(`[RuntimeTransform] Transform complete`, {
|
|
95
|
+
originalLength: prompt.length,
|
|
96
|
+
resultLength: transformedPrompt.length,
|
|
97
|
+
layersApplied: layerConfigs.length,
|
|
98
|
+
audioApplied,
|
|
99
|
+
imageApplied
|
|
100
|
+
});
|
|
101
|
+
const displayVars = {};
|
|
102
|
+
if (testCase.vars) {
|
|
103
|
+
for (const [key, value] of Object.entries(testCase.vars)) if (key !== injectVar && typeof value === "string") displayVars[key] = value;
|
|
104
|
+
}
|
|
105
|
+
const result = {
|
|
106
|
+
prompt: transformedPrompt,
|
|
107
|
+
originalPrompt,
|
|
108
|
+
...Object.keys(displayVars).length > 0 && { displayVars },
|
|
109
|
+
metadata: testCase.metadata
|
|
110
|
+
};
|
|
111
|
+
const audioStorageKey = testCase.metadata?.audioStorageKey;
|
|
112
|
+
const imageStorageKey = testCase.metadata?.imageStorageKey;
|
|
113
|
+
if (audioApplied && transformedPrompt !== originalPrompt) {
|
|
114
|
+
const dataUrlMatch = transformedPrompt.match(/^data:audio\/([^;]+);base64,(.+)$/);
|
|
115
|
+
if (dataUrlMatch) result.audio = {
|
|
116
|
+
data: dataUrlMatch[2],
|
|
117
|
+
format: dataUrlMatch[1]
|
|
118
|
+
};
|
|
119
|
+
else result.audio = {
|
|
120
|
+
data: transformedPrompt,
|
|
121
|
+
format: "mp3"
|
|
122
|
+
};
|
|
123
|
+
if (audioStorageKey) require_logger.logger.debug(`[RuntimeTransform] Audio stored to: ${audioStorageKey} (will be sanitized before DB save)`);
|
|
124
|
+
}
|
|
125
|
+
if (imageApplied && transformedPrompt !== originalPrompt) {
|
|
126
|
+
const dataUrlMatch = transformedPrompt.match(/^data:image\/([^;]+);base64,(.+)$/);
|
|
127
|
+
if (dataUrlMatch) result.image = {
|
|
128
|
+
data: dataUrlMatch[2],
|
|
129
|
+
format: dataUrlMatch[1]
|
|
130
|
+
};
|
|
131
|
+
else result.image = {
|
|
132
|
+
data: transformedPrompt,
|
|
133
|
+
format: "png"
|
|
134
|
+
};
|
|
135
|
+
if (imageStorageKey) require_logger.logger.debug(`[RuntimeTransform] Image stored to: ${imageStorageKey} (will be sanitized before DB save)`);
|
|
136
|
+
}
|
|
137
|
+
return result;
|
|
138
|
+
}
|
|
139
|
+
//#endregion
|
|
140
|
+
Object.defineProperty(exports, "applyRuntimeTransforms", {
|
|
141
|
+
enumerable: true,
|
|
142
|
+
get: function() {
|
|
143
|
+
return applyRuntimeTransforms;
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
//# sourceMappingURL=runtimeTransform-ON3YYILw.cjs.map
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { C as getEnvFloat, T as getEnvString, a as logger, w as getEnvInt } from "./logger-
|
|
2
|
-
import { n as
|
|
3
|
-
import { n as
|
|
1
|
+
import { C as getEnvFloat, T as getEnvString, a as logger, w as getEnvInt } from "./logger-KD8JjCRJ.js";
|
|
2
|
+
import { n as StringOrFunctionSchema } from "./shared-BoG7qLMv.js";
|
|
3
|
+
import { n as telemetry } from "./telemetry-DmXYcJNV.js";
|
|
4
|
+
import { i as getTransformErrorMessage, o as transform, r as TransformInputType } from "./transform-CrPGTsij.js";
|
|
4
5
|
import { z } from "zod";
|
|
5
6
|
import crypto from "crypto";
|
|
6
7
|
//#region src/providers/sagemaker.ts
|
|
@@ -10,6 +11,14 @@ import crypto from "crypto";
|
|
|
10
11
|
* @returns Promise that resolves after the specified delay
|
|
11
12
|
*/
|
|
12
13
|
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
14
|
+
function stringifyTransformResult(result) {
|
|
15
|
+
if (result === void 0 || result === null) {
|
|
16
|
+
logger.debug("Transform function returned null or undefined, using original prompt");
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
if (typeof result === "string") return result;
|
|
20
|
+
return typeof result === "object" ? JSON.stringify(result) : String(result);
|
|
21
|
+
}
|
|
13
22
|
const SUPPORTED_MODEL_TYPES = [
|
|
14
23
|
"openai",
|
|
15
24
|
"llama",
|
|
@@ -34,7 +43,7 @@ const SageMakerConfigSchema = z.strictObject({
|
|
|
34
43
|
topP: z.number().optional(),
|
|
35
44
|
stopSequences: z.array(z.string()).optional(),
|
|
36
45
|
delay: z.number().optional(),
|
|
37
|
-
transform:
|
|
46
|
+
transform: StringOrFunctionSchema.optional(),
|
|
38
47
|
modelType: z.enum(SUPPORTED_MODEL_TYPES).optional(),
|
|
39
48
|
responseFormat: z.strictObject({
|
|
40
49
|
type: z.string().optional(),
|
|
@@ -154,53 +163,52 @@ var SageMakerGenericProvider = class {
|
|
|
154
163
|
prompt: context?.prompt || { raw: prompt },
|
|
155
164
|
uuid: `sagemaker-${this.endpointName}-${Date.now()}`
|
|
156
165
|
};
|
|
157
|
-
const transformFn = this.transform
|
|
158
|
-
if (!transformFn) return prompt;
|
|
166
|
+
const transformFn = this.transform;
|
|
159
167
|
logger.debug(`Applying transform to prompt for SageMaker endpoint ${this.getEndpointName()}`);
|
|
160
|
-
if (typeof transformFn === "string" && !transformFn.startsWith("file://"))
|
|
168
|
+
if (typeof transformFn === "string" && !transformFn.startsWith("file://")) {
|
|
169
|
+
let result;
|
|
161
170
|
if (transformFn.includes("=>")) {
|
|
162
|
-
const
|
|
163
|
-
|
|
164
|
-
logger.debug("Transform function returned null or undefined, using original prompt");
|
|
165
|
-
return prompt;
|
|
166
|
-
}
|
|
167
|
-
if (typeof result === "string") return result;
|
|
168
|
-
else if (typeof result === "object") return JSON.stringify(result);
|
|
169
|
-
else return String(result);
|
|
171
|
+
const fn = new Function("prompt", "context", `try { return (${transformFn})(prompt, context); } catch(e) { throw new Error("Transform function error: " + e.message); }`);
|
|
172
|
+
result = await Promise.resolve(fn(prompt, transformContext));
|
|
170
173
|
} else {
|
|
171
|
-
const
|
|
172
|
-
|
|
173
|
-
logger.debug("Transform function returned null or undefined, using original prompt");
|
|
174
|
-
return prompt;
|
|
175
|
-
}
|
|
176
|
-
if (typeof result === "string") return result;
|
|
177
|
-
else if (typeof result === "object") return JSON.stringify(result);
|
|
178
|
-
else return String(result);
|
|
179
|
-
}
|
|
180
|
-
} catch (transformError) {
|
|
181
|
-
logger.error(`Error executing inline transform: ${transformError}`);
|
|
182
|
-
}
|
|
183
|
-
else try {
|
|
184
|
-
const { TransformInputType } = await import("./transform-DYX1_Xnh.js").then((n) => n.r);
|
|
185
|
-
const transformed = await transform(transformFn, prompt, transformContext, false, TransformInputType.OUTPUT);
|
|
186
|
-
if (transformed === void 0 || transformed === null) {
|
|
187
|
-
logger.debug("Transform function returned null or undefined, using original prompt");
|
|
188
|
-
return prompt;
|
|
174
|
+
const fn = new Function("prompt", "context", `try { ${transformFn} } catch(e) { throw new Error("Transform function error: " + e.message); }`);
|
|
175
|
+
result = await Promise.resolve(fn(prompt, transformContext));
|
|
189
176
|
}
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
177
|
+
const transformedPrompt = stringifyTransformResult(result);
|
|
178
|
+
if (transformedPrompt !== void 0) return transformedPrompt;
|
|
179
|
+
} else {
|
|
180
|
+
const transformedPrompt = stringifyTransformResult(await transform(transformFn, prompt, transformContext, false, TransformInputType.OUTPUT));
|
|
181
|
+
if (transformedPrompt !== void 0) return transformedPrompt;
|
|
195
182
|
}
|
|
196
183
|
logger.warn(`Transform did not produce a valid result, using original prompt`);
|
|
197
184
|
return prompt;
|
|
198
|
-
} catch (
|
|
199
|
-
|
|
185
|
+
} catch (error) {
|
|
186
|
+
if (typeof this.transform === "function") throw error;
|
|
187
|
+
logger.error(`Error applying transform to prompt: ${error}`);
|
|
200
188
|
return prompt;
|
|
201
189
|
}
|
|
202
190
|
}
|
|
203
191
|
/**
|
|
192
|
+
* Run `applyTransformation` and convert a function-transform throw into a
|
|
193
|
+
* `ProviderResponse.error` so the evaluator sees a uniform error row instead
|
|
194
|
+
* of an uncaught rejection.
|
|
195
|
+
*/
|
|
196
|
+
async runTransformSafely(input, context, errorPrefix) {
|
|
197
|
+
try {
|
|
198
|
+
return {
|
|
199
|
+
ok: true,
|
|
200
|
+
value: await this.applyTransformation(input, context)
|
|
201
|
+
};
|
|
202
|
+
} catch (transformError) {
|
|
203
|
+
const message = `${errorPrefix}: ${getTransformErrorMessage(transformError)}`;
|
|
204
|
+
logger.error(message);
|
|
205
|
+
return {
|
|
206
|
+
ok: false,
|
|
207
|
+
error: message
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
204
212
|
* Extracts data from a response using a path expression
|
|
205
213
|
* Supports JavaScript expressions and file-based transforms
|
|
206
214
|
*/
|
|
@@ -208,7 +216,6 @@ var SageMakerGenericProvider = class {
|
|
|
208
216
|
if (!pathExpression) return responseJson;
|
|
209
217
|
try {
|
|
210
218
|
if (pathExpression.startsWith("file://")) try {
|
|
211
|
-
const { TransformInputType } = await import("./transform-DYX1_Xnh.js").then((n) => n.r);
|
|
212
219
|
const transformedResult = await transform(pathExpression, responseJson, { prompt: {} }, false, TransformInputType.OUTPUT);
|
|
213
220
|
return transformedResult !== void 0 && transformedResult !== null ? transformedResult : responseJson;
|
|
214
221
|
} catch (error) {
|
|
@@ -403,9 +410,11 @@ var SageMakerCompletionProvider = class extends SageMakerGenericProvider {
|
|
|
403
410
|
* Invoke SageMaker endpoint for text generation with caching, delay support, and transformations
|
|
404
411
|
*/
|
|
405
412
|
async callApi(prompt, context, _options) {
|
|
406
|
-
const { isCacheEnabled, getCache } = await import("./cache-
|
|
413
|
+
const { isCacheEnabled, getCache } = await import("./cache-roFAE0cI.js").then((n) => n.t);
|
|
407
414
|
const delayMs = context?.originalProvider?.delay || this.delay;
|
|
408
|
-
const
|
|
415
|
+
const transformResult = await this.runTransformSafely(prompt, context, "SageMaker transform error");
|
|
416
|
+
if (!transformResult.ok) return { error: transformResult.error };
|
|
417
|
+
const transformedPrompt = transformResult.value;
|
|
409
418
|
const isTransformed = transformedPrompt !== prompt;
|
|
410
419
|
if (isTransformed) {
|
|
411
420
|
logger.debug(`Prompt transformed for SageMaker endpoint ${this.getEndpointName()}`);
|
|
@@ -415,7 +424,7 @@ var SageMakerCompletionProvider = class extends SageMakerGenericProvider {
|
|
|
415
424
|
const bustCache = context?.bustCache ?? context?.debug === true;
|
|
416
425
|
if (isCacheEnabled() && !bustCache) {
|
|
417
426
|
const cacheKey = this.getCacheKey(transformedPrompt);
|
|
418
|
-
const cachedResult = await (getCache ? getCache() : await import("./cache-
|
|
427
|
+
const cachedResult = await (getCache ? getCache() : await import("./cache-roFAE0cI.js").then((n) => n.t).then((m) => m.getCache())).get(cacheKey);
|
|
419
428
|
if (cachedResult) {
|
|
420
429
|
logger.debug(`Using cached SageMaker response for ${this.getEndpointName()}`);
|
|
421
430
|
try {
|
|
@@ -489,7 +498,7 @@ var SageMakerCompletionProvider = class extends SageMakerGenericProvider {
|
|
|
489
498
|
};
|
|
490
499
|
if (isCacheEnabled() && !bustCache && result.output && !result.error) {
|
|
491
500
|
const cacheKey = this.getCacheKey(transformedPrompt);
|
|
492
|
-
const cache = getCache ? getCache() : await import("./cache-
|
|
501
|
+
const cache = getCache ? getCache() : await import("./cache-roFAE0cI.js").then((n) => n.t).then((m) => m.getCache());
|
|
493
502
|
const resultToCache = JSON.stringify(result);
|
|
494
503
|
try {
|
|
495
504
|
await cache.set(cacheKey, resultToCache);
|
|
@@ -534,9 +543,11 @@ var SageMakerEmbeddingProvider = class extends SageMakerGenericProvider {
|
|
|
534
543
|
* Invoke SageMaker endpoint for embeddings with caching, delay support, and transformations
|
|
535
544
|
*/
|
|
536
545
|
async callEmbeddingApi(text, context) {
|
|
537
|
-
const { isCacheEnabled, getCache } = await import("./cache-
|
|
546
|
+
const { isCacheEnabled, getCache } = await import("./cache-roFAE0cI.js").then((n) => n.t);
|
|
538
547
|
const delayMs = context?.originalProvider?.delay || this.delay;
|
|
539
|
-
const
|
|
548
|
+
const transformResult = await this.runTransformSafely(text, context, "SageMaker embedding transform error");
|
|
549
|
+
if (!transformResult.ok) return { error: transformResult.error };
|
|
550
|
+
const transformedText = transformResult.value;
|
|
540
551
|
const isTransformed = transformedText !== text;
|
|
541
552
|
if (isTransformed) {
|
|
542
553
|
logger.debug(`Text transformed for SageMaker embedding endpoint ${this.getEndpointName()}`);
|
|
@@ -546,7 +557,7 @@ var SageMakerEmbeddingProvider = class extends SageMakerGenericProvider {
|
|
|
546
557
|
const bustCache = context?.debug === true;
|
|
547
558
|
if (isCacheEnabled() && !bustCache) {
|
|
548
559
|
const cacheKey = this.getCacheKey(transformedText);
|
|
549
|
-
const cachedResult = await (await getCache ? await getCache() : await import("./cache-
|
|
560
|
+
const cachedResult = await (await getCache ? await getCache() : await import("./cache-roFAE0cI.js").then((n) => n.t).then((m) => m.getCache())).get(cacheKey);
|
|
550
561
|
if (cachedResult) {
|
|
551
562
|
logger.debug(`Using cached SageMaker embedding response for ${this.getEndpointName()}`);
|
|
552
563
|
try {
|
|
@@ -660,11 +671,11 @@ var SageMakerEmbeddingProvider = class extends SageMakerGenericProvider {
|
|
|
660
671
|
* Helper method to cache embedding results
|
|
661
672
|
*/
|
|
662
673
|
async cacheEmbeddingResult(result, text, context, isTransformed = false, originalText) {
|
|
663
|
-
const { isCacheEnabled, getCache } = await import("./cache-
|
|
674
|
+
const { isCacheEnabled, getCache } = await import("./cache-roFAE0cI.js").then((n) => n.t);
|
|
664
675
|
const bustCache = context?.debug === true;
|
|
665
676
|
if (isCacheEnabled() && !bustCache && result.embedding && !result.error) {
|
|
666
677
|
const cacheKey = this.getCacheKey(text);
|
|
667
|
-
const cache = await getCache ? await getCache() : await import("./cache-
|
|
678
|
+
const cache = await getCache ? await getCache() : await import("./cache-roFAE0cI.js").then((n) => n.t).then((m) => m.getCache());
|
|
668
679
|
if (isTransformed && originalText && !result.metadata) result.metadata = {
|
|
669
680
|
transformed: true,
|
|
670
681
|
originalText
|
|
@@ -686,4 +697,4 @@ var SageMakerEmbeddingProvider = class extends SageMakerGenericProvider {
|
|
|
686
697
|
//#endregion
|
|
687
698
|
export { SageMakerCompletionProvider, SageMakerEmbeddingProvider };
|
|
688
699
|
|
|
689
|
-
//# sourceMappingURL=sagemaker-
|
|
700
|
+
//# sourceMappingURL=sagemaker-CujrzP1a.js.map
|