promptfoo 0.121.4 → 0.121.5
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-BRUsT43Y.js} +1 -1
- package/dist/src/{accounts-Dy17bs4D.cjs → accounts-BIFntVWB.cjs} +4 -4
- package/dist/src/{accounts-F9d_5sMC.js → accounts-CLJHCDDb.js} +6 -6
- package/dist/src/{accounts-DhMYUUbu.js → accounts-CaLNYnf7.js} +4 -4
- package/dist/src/{accounts-DdJ2pHMI.js → accounts-bnyHT7Ju.js} +5 -5
- package/dist/src/{agentic-utils-w68v6_Dz.js → agentic-utils-B5krlibj.js} +3 -3
- package/dist/src/{agentic-utils-P172hM8B.js → agentic-utils-Ba67xmgs.js} +2 -2
- package/dist/src/{agentic-utils-qFlm6zes.js → agentic-utils-BclbiXiq.js} +3 -3
- package/dist/src/{agentic-utils-BpX5b23w.cjs → agentic-utils-D2x0wGhB.cjs} +2 -2
- package/dist/src/{agents-CgaMXvLM.js → agents-BGqaTDnr.js} +5 -5
- package/dist/src/{agents-8FDnTriG.js → agents-BV9yFpXX.js} +5 -5
- package/dist/src/{agents-aYPQLf8W.js → agents-BYdMl1UE.js} +4 -4
- package/dist/src/{agents-pQeBEXMm.js → agents-DhxWMCtH.js} +5 -5
- package/dist/src/{agents-D7-HGxUj.cjs → agents-DiWmQYH9.cjs} +4 -4
- package/dist/src/{agents-BahDpe5G.cjs → agents-WULPVjbH.cjs} +4 -4
- package/dist/src/{agents-DJ35I3Nt.js → agents-emVcx3yh.js} +5 -5
- package/dist/src/{agents-C-R_jfzI.js → agents-n6vPqV3i.js} +4 -4
- package/dist/src/{aimlapi-BCq3MHeL.js → aimlapi-BxqK9HF_.js} +7 -7
- package/dist/src/{aimlapi-qcK4OT55.cjs → aimlapi-BzLjZI_m.cjs} +6 -6
- package/dist/src/{aimlapi-BD6J9oKt.js → aimlapi-DR4pgeiC.js} +6 -6
- package/dist/src/{aimlapi-sgYnkE54.js → aimlapi-uPGp0Zdo.js} +7 -7
- package/dist/src/app/app/tsconfig.app.tsbuildinfo +1 -1
- package/dist/src/app/assets/Report-vjzrbgce.js +1 -0
- package/dist/src/app/assets/index-B3NQ8HTd.js +385 -0
- package/dist/src/app/assets/{index-BXGkeMwh.css → index-Cli2yAXv.css} +1 -1
- package/dist/src/app/index.html +27 -2
- package/dist/src/{audio-DcVKoInv.js → audio-BvpTOArF.js} +4 -4
- package/dist/src/{audio-BQtNuYBj.cjs → audio-C0vDeS0j.cjs} +3 -3
- package/dist/src/{audio-B7izf48x.js → audio-CScmnmEB.js} +4 -4
- package/dist/src/{audio-COrn8rM6.js → audio-Da8U9IS5.js} +3 -3
- package/dist/src/{base-fZ9wgg50.js → base-BOMaNEes.js} +3 -3
- package/dist/src/{base-PYJvBE1i.js → base-BTux96b1.js} +2 -2
- package/dist/src/{base-D-670DX8.cjs → base-Tw6uhH8K.cjs} +2 -2
- package/dist/src/{base-yrI1Yal4.js → base-dYsl2hmL.js} +3 -3
- package/dist/src/{blobs-D2FAd1Q5.cjs → blobs-B95F_7vE.cjs} +2 -2
- package/dist/src/{blobs-C-F78Kfn.js → blobs-BW4U31ue.js} +2 -2
- package/dist/src/{blobs-BCZavS8s.js → blobs-D_gg8nbm.js} +3 -3
- package/dist/src/{blobs-BQWqnnvL.js → blobs-DjLby-uP.js} +3 -3
- package/dist/src/{cache-mb7c8hbp.js → cache-BI5BY7ey.js} +4 -4
- package/dist/src/{cache-DbLsVWB2.cjs → cache-BRkhlH3k.cjs} +1 -1
- package/dist/src/cache-BlC6aeJ0.js +3 -0
- package/dist/src/{cache-D5NZmMiT.js → cache-Bzttsk0X.js} +2 -2
- package/dist/src/{cache-C4Xb-hNb.js → cache-Cr-qWIbP.js} +3 -3
- package/dist/src/{cache-BIyPcp5v.cjs → cache-DGg-yTZG.cjs} +2 -2
- package/dist/src/{chat-Dr3DUQ0D.js → chat-BLOdH60v.js} +12 -12
- package/dist/src/{chat-BfPaS15_.js → chat-Cx_LkwvZ.js} +12 -12
- package/dist/src/{chat-mW0ORo8G.js → chat-D9nudO9b.js} +4 -4
- package/dist/src/{chat-I9izLm49.js → chat-DChSH_Es.js} +12 -12
- package/dist/src/{chat-MKxMnZJZ.js → chat-DG2LkwLq.js} +2 -2
- package/dist/src/{chat-BPXSW8Bv.cjs → chat-DH97tVV9.cjs} +2 -2
- package/dist/src/{chat-0bwXjVP0.js → chat-aMQZw6R7.js} +4 -4
- package/dist/src/{chat-CclRbxGf.cjs → chat-vYqqv1gP.cjs} +11 -11
- package/dist/src/{chatkit-zUIVoDos.js → chatkit-B8X34dQc.js} +4 -4
- package/dist/src/{chatkit-Cv6AhukM.js → chatkit-BXu42Qwt.js} +3 -3
- package/dist/src/{chatkit-CJnHRRMM.js → chatkit-CbMRoeYw.js} +4 -4
- package/dist/src/{chatkit-BoWoSgXl.cjs → chatkit-D44VyUyB.cjs} +3 -3
- package/dist/src/{claude-agent-sdk-CPJo3dBQ.cjs → claude-agent-sdk-BRq0bbIK.cjs} +8 -8
- package/dist/src/{claude-agent-sdk-BQNuLaAK.js → claude-agent-sdk-BjriSVRZ.js} +7 -7
- package/dist/src/{claude-agent-sdk-Dtq_L-Sc.js → claude-agent-sdk-BzNZeZ0N.js} +7 -7
- package/dist/src/{claude-agent-sdk-nfAIcxNf.js → claude-agent-sdk-DYv_AJ8u.js} +7 -7
- package/dist/src/cloud-CoD5OacT.js +3 -0
- package/dist/src/{cloud-DQZ5sVjW.js → cloud-Da0bofJd.js} +3 -3
- package/dist/src/{cloudflare-ai-BIB567w6.js → cloudflare-ai-CXC4b1EU.js} +4 -4
- package/dist/src/{cloudflare-ai-DlKr0rY7.js → cloudflare-ai-CyBoIs1Q.js} +6 -6
- package/dist/src/{cloudflare-ai-DGLte7Py.js → cloudflare-ai-DGOwgexC.js} +6 -6
- package/dist/src/{cloudflare-ai-Dl3N9OVD.cjs → cloudflare-ai-DJv5qnyb.cjs} +4 -4
- package/dist/src/{cloudflare-gateway-BDZrYydE.js → cloudflare-gateway-1sAoOyft.js} +5 -5
- package/dist/src/{cloudflare-gateway-CiIZHU0Q.js → cloudflare-gateway-D-dnkzCF.js} +5 -5
- package/dist/src/{cloudflare-gateway-BYDp495F.cjs → cloudflare-gateway-DKVjkDav.cjs} +3 -3
- package/dist/src/{cloudflare-gateway-DI1HNP5F.js → cloudflare-gateway-TJkVrZlB.js} +3 -3
- package/dist/src/codex-app-server-CCLjqCh9.js +1915 -0
- package/dist/src/codex-app-server-CCe0TiDc.js +1915 -0
- package/dist/src/codex-app-server-CPW1LFwh.js +1916 -0
- package/dist/src/codex-app-server-VMRnjZ68.cjs +1920 -0
- package/dist/src/codex-sdk-1jm_qPHf.js +3 -0
- package/dist/src/{codex-sdk-C2_M2pl_.cjs → codex-sdk-Bd8UbO9q.cjs} +5 -5
- package/dist/src/{codex-sdk-CpqiOqDO.js → codex-sdk-BgEFQ70r.js} +6 -6
- package/dist/src/{codex-sdk-Rtky3M4I.js → codex-sdk-Bzb_TqX9.js} +6 -6
- package/dist/src/{codex-sdk-CWEnH70W.cjs → codex-sdk-Danroptg.cjs} +1 -1
- package/dist/src/{codex-sdk-CErXn7qh.js → codex-sdk-DfvDTN33.js} +5 -5
- package/dist/src/{cometapi-CtJ-mS8R.js → cometapi-B5ImDlSm.js} +8 -8
- package/dist/src/{cometapi-UVOryo4W.cjs → cometapi-BgAkuYCw.cjs} +7 -7
- package/dist/src/{cometapi-BUlt_ELa.js → cometapi-CC7hWxmX.js} +8 -8
- package/dist/src/{cometapi-DT-jlVCB.js → cometapi-CCbpHkuF.js} +7 -7
- package/dist/src/{completion-x0a_c2y1.js → completion-2iuYVxwi.js} +6 -6
- package/dist/src/{completion-Dnxn7E-j.js → completion-CrD6MQ93.js} +5 -5
- package/dist/src/{completion-BozdoXba.cjs → completion-DtQ72Bm3.cjs} +5 -5
- package/dist/src/{completion-HUe8wDhZ.js → completion-Vq_ad618.js} +6 -6
- package/dist/src/{createHash-ChI45QR1.js → createHash-DPpsZgFF.js} +1 -1
- package/dist/src/{createHash-CwDVU5xr.js → createHash-Un4Q_huE.js} +1 -1
- package/dist/src/{createHash-B7KvgoOD.cjs → createHash-VvBIc-AW.cjs} +1 -1
- package/dist/src/{docker-DCgsveLD.js → docker--3qzPa-6.js} +6 -6
- package/dist/src/{docker-DS4_Osau.cjs → docker-D3AY-5F5.cjs} +5 -5
- package/dist/src/{docker-CQmlA2NU.js → docker-DCsCDvwM.js} +6 -6
- package/dist/src/{docker-ClnmCf1Z.js → docker-Dorv4_Dg.js} +5 -5
- package/dist/src/{embedding-I45KG3o7.cjs → embedding-BXhN5lCH.cjs} +5 -5
- package/dist/src/{embedding-nFbumxcv.js → embedding-ChS1ivFS.js} +5 -5
- package/dist/src/{embedding-D3xTseo7.js → embedding-DNRvZwRN.js} +6 -6
- package/dist/src/{embedding-DD9wa3ae.js → embedding-D_bI4NDq.js} +6 -6
- package/dist/src/{errors-Cw810C93.js → errors-DFHe4L-n.js} +1 -1
- package/dist/src/{esm-Dh4dOLlt.js → esm-B6whoAcf.js} +2 -2
- package/dist/src/{esm-C7PnfdF8.js → esm-BRkfNsYs.js} +1 -1
- package/dist/src/{esm-tVgYPY-f.js → esm-BX8fwlAO.js} +2 -2
- package/dist/src/{esm-CtEPLdAj.cjs → esm-B_rGuPTo.cjs} +1 -1
- package/dist/src/{eval-CzJFfFO9.js → eval-BQPLBJbw.js} +1 -1
- package/dist/src/{eval-u4UVafl6.js → eval-DJ_4A-tr.js} +14 -14
- package/dist/src/evalResult-BBJAHAtw.cjs +2 -0
- package/dist/src/evalResult-BBK58h2B.js +3 -0
- package/dist/src/{evalResult-KZqXl4XP.cjs → evalResult-Cx-8OWkb.cjs} +28 -10
- package/dist/src/{evalResult-D3hVYFis.js → evalResult-D6P5I5il.js} +29 -11
- package/dist/src/{evalResult-Bgm9ZH31.js → evalResult-pSvGWFMo.js} +29 -11
- package/dist/src/{evaluator-IvuDYSvQ.js → evaluator-D-UIbbYq.js} +845 -98
- package/dist/src/evaluator-DgLKaZk8.js +3 -0
- package/dist/src/{extractor-Dk6bRWkv.js → extractor-BM3jRERL.js} +5 -5
- package/dist/src/{extractor-WVPOrH43.cjs → extractor-Dxr2J_wK.cjs} +5 -5
- package/dist/src/{extractor-DNSeBVOJ.js → extractor-DxyiFhPk.js} +6 -6
- package/dist/src/{extractor-CAfTSraf.js → extractor-YlZbUMsL.js} +6 -6
- package/dist/src/fetch-8viavNv8.js +3 -0
- package/dist/src/{fetch-BEWnXrrG.js → fetch-B6ch2nU2.js} +9 -20
- package/dist/src/{fetch-Di00EQrc.js → fetch-D9xxyC1p.js} +221 -232
- package/dist/src/{fetch-CJU5ELPa.cjs → fetch-NuqXW1Xb.cjs} +221 -244
- package/dist/src/{fetch-B0Z3Oe4k.js → fetch-Y5qX_kST.js} +8 -19
- package/dist/src/{fileExtensions-BArZuxsI.js → fileExtensions-8CjoL7vB.js} +1 -1
- package/dist/src/{fileExtensions-DnqA1y9x.js → fileExtensions-BGh-W-HT.js} +1 -1
- package/dist/src/{fileExtensions-bYh77CN8.cjs → fileExtensions-D9h-8Wxg.cjs} +1 -1
- package/dist/src/{fileExtensions-AWa2ZML4.js → fileExtensions-DysCsxNG.js} +1 -1
- package/dist/src/{formatDuration-DZzPsexs.js → formatDuration-Ch4A7G3o.js} +1 -1
- package/dist/src/{genaiTracer-yRuxj9-L.cjs → genaiTracer-BokHC-MW.cjs} +1 -1
- package/dist/src/{genaiTracer-DWdZ28hY.js → genaiTracer-C3ZPQU60.js} +1 -1
- package/dist/src/{genaiTracer-XnrcgDCe.js → genaiTracer-CFny3gOy.js} +1 -1
- package/dist/src/{genaiTracer-COYDi-tC.js → genaiTracer-DxODqT9e.js} +1 -1
- package/dist/src/{graders-Zy3x0zqX.js → graders-BoUqsCEm.js} +1303 -2044
- package/dist/src/{graders--zknU_uk.cjs → graders-Bw1wk_21.cjs} +1553 -2240
- package/dist/src/graders-C84JI-m5.js +2 -0
- package/dist/src/graders-CBbd0K0Q.cjs +2 -0
- package/dist/src/graders-CbQqpHSN.js +3 -0
- package/dist/src/{graders-eIHhRqoC.js → graders-CgPn32yp.js} +1300 -2041
- package/dist/src/{graders-pvbReLLn.js → graders-CwrbifOo.js} +747 -1488
- package/dist/src/graders-DS42d3ZG.js +2 -0
- package/dist/src/{image-9302QVqR.js → image-BeWaInPF.js} +3 -3
- package/dist/src/{image-DVz2RiMF.js → image-BmilRNqO.js} +7 -7
- package/dist/src/{image-x6KqLQl4.cjs → image-CxJoa3aW.cjs} +6 -6
- package/dist/src/{image-De2FBmYV.cjs → image-D10dNAav.cjs} +3 -3
- package/dist/src/{image-dnoUgPrC.js → image-Dr_3I3nK.js} +4 -4
- package/dist/src/{image-B5Mv-Z3h.js → image-DsGRlkh7.js} +7 -7
- package/dist/src/{image-qUpPvmNZ.js → image-a_SGUobh.js} +6 -6
- package/dist/src/{image-u7-rKnYU.js → image-qjO6FWPs.js} +4 -4
- package/dist/src/index.cjs +1052 -296
- package/dist/src/index.d.cts +124 -13
- package/dist/src/index.d.ts +125 -14
- package/dist/src/index.js +1018 -262
- package/dist/src/{interactiveCheck-CLERUB0c.js → interactiveCheck-CCICw2cy.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/{knowledgeBase-RhFPGWDc.js → knowledgeBase-BBETc5-S.js} +6 -6
- package/dist/src/{knowledgeBase-Bpoe_nLu.cjs → knowledgeBase-C8qOo26M.cjs} +5 -5
- package/dist/src/{knowledgeBase-lm9RXSAm.js → knowledgeBase-CzAi2rUI.js} +6 -6
- package/dist/src/{knowledgeBase-Dgc7CBWF.js → knowledgeBase-Dr3Kib7F.js} +5 -5
- package/dist/src/{litellm-C2kqjxqp.js → litellm-BLSiANhk.js} +5 -5
- package/dist/src/{litellm-CoyI4IAl.cjs → litellm-CaUmV7Mk.cjs} +4 -4
- package/dist/src/{litellm-p37R1dzQ.js → litellm-DQGo_juI.js} +4 -4
- package/dist/src/{litellm-DRjpcSa7.js → litellm-DRc4qWfc.js} +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/{luma-ray-KgTCXrZC.js → luma-ray-B-tNZzqW.js} +6 -6
- package/dist/src/{luma-ray-B863CmuZ.js → luma-ray-CtS3OlGq.js} +5 -5
- package/dist/src/{luma-ray-BTTLtqQ8.js → luma-ray-PJJgUjOc.js} +6 -6
- package/dist/src/{luma-ray-BxVKaW2a.cjs → luma-ray-if-Ml4R9.cjs} +5 -5
- package/dist/src/main.js +242 -198
- package/dist/src/{messages-zWbkLLHz.js → messages-B9dSjrNf.js} +264 -16
- package/dist/src/{messages-811uVVW5.cjs → messages-BnsVHUnm.cjs} +266 -15
- package/dist/src/{messages-MYTQ2TWp.js → messages-CI69Lasb.js} +264 -16
- package/dist/src/{messages-BTQz42fn.js → messages-CewuNcNS.js} +264 -16
- package/dist/src/{meteor-Co1VQ1u5.cjs → meteor-BBGcGeCa.cjs} +1 -1
- package/dist/src/{meteor-DuAFv6gF.js → meteor-BKTM-7KS.js} +1 -1
- package/dist/src/{meteor-DHdzY1Ss.js → meteor-CeGo0Lu2.js} +2 -2
- package/dist/src/{meteor-CU5UAE-H.js → meteor-Wc_aUVvu.js} +2 -2
- package/dist/src/{modelslab-wu9yi5GE.js → modelslab-BCLOtfek.js} +7 -7
- package/dist/src/{modelslab-Dk1JAtVo.cjs → modelslab-BkapYJhh.cjs} +6 -6
- package/dist/src/{modelslab-DIq-6y7x.js → modelslab-D73OnKSx.js} +6 -6
- package/dist/src/{modelslab-D0erNWKe.js → modelslab-zpz9JcK0.js} +7 -7
- package/dist/src/{nova-reel-CCFRfeRb.js → nova-reel-B8F_TK5w.js} +6 -6
- package/dist/src/{nova-reel-DQrm74ng.js → nova-reel-Bx0NFV2f.js} +5 -5
- package/dist/src/{nova-reel-gr11WG7f.js → nova-reel-CNGJTLtG.js} +6 -6
- package/dist/src/{nova-reel-CrLXVKQf.cjs → nova-reel-DkT7tnoB.cjs} +5 -5
- package/dist/src/{nova-sonic-BYdp-QLs.js → nova-sonic-BaXRN1cr.js} +4 -4
- package/dist/src/{nova-sonic-TDgrlTk7.js → nova-sonic-BeTRaFOh.js} +4 -4
- package/dist/src/{nova-sonic-B_ZXcUJB.js → nova-sonic-CL7Zqv0G.js} +3 -3
- package/dist/src/{nova-sonic-i5tUvXKn.cjs → nova-sonic-YT426juD.cjs} +3 -3
- package/dist/src/{openai-DhVEmgeZ.js → openai-BMHD2Huo.js} +2 -2
- package/dist/src/{openai-Qsvz25mV.js → openai-BT-JvDse.js} +2 -2
- package/dist/src/{openai-URNyItar.cjs → openai-Cy1XLs0c.cjs} +1 -1
- package/dist/src/{openai-iYtrXzOX.js → openai-D4fxGvRx.js} +1 -1
- package/dist/src/{openclaw-CwzlQSQX.js → openclaw-Bq7RVR3k.js} +7 -6
- package/dist/src/{openclaw-CLWrW03k.js → openclaw-DA8U4DsD.js} +8 -7
- package/dist/src/{openclaw-CnQ363Wi.js → openclaw-DObVgpjC.js} +8 -7
- package/dist/src/{openclaw-wX9rtfke.cjs → openclaw-DUBZP3GL.cjs} +8 -7
- package/dist/src/{opencode-sdk-BUu5Nevv.js → opencode-sdk-BB40Wir1.js} +4 -4
- package/dist/src/{opencode-sdk-GI2KaAXq.js → opencode-sdk-BM1UAIv1.js} +3 -3
- package/dist/src/{opencode-sdk-BZ2idgYA.cjs → opencode-sdk-CeqiOcOU.cjs} +4 -4
- package/dist/src/{opencode-sdk-BxD8vXp_.js → opencode-sdk-ChdK7F7z.js} +4 -4
- package/dist/src/{otlpReceiver-DmVulbhC.js → otlpReceiver-C6thJRXi.js} +4 -4
- package/dist/src/{otlpReceiver-B2z58l4e.js → otlpReceiver-CcdIikOu.js} +3 -3
- package/dist/src/{otlpReceiver-BfcVq2Nq.cjs → otlpReceiver-DNSQj6bf.cjs} +3 -3
- package/dist/src/{otlpReceiver-BntK801g.js → otlpReceiver-UYMQx3sy.js} +4 -4
- package/dist/src/{providerRegistry-CPQ_CmVO.js → providerRegistry-1gB5vtzQ.js} +2 -2
- package/dist/src/{providerRegistry-CQMdTmHP.cjs → providerRegistry-BESeALrr.cjs} +1 -1
- package/dist/src/{providerRegistry-Bvh8mv85.js → providerRegistry-DoACwqhD.js} +1 -1
- package/dist/src/{providerRegistry-CWoPjKFZ.js → providerRegistry-PMsleEzs.js} +2 -2
- package/dist/src/{providers-Bp4S-FvO.js → providers-BuyzKt7C.js} +1 -1
- package/dist/src/{providers-DV3ax9e_.cjs → providers-C7lNVBjX.cjs} +1 -1
- package/dist/src/{providers-u9Enmfok.js → providers-CCE2COJi2.js} +1 -1
- package/dist/src/{providers-DruaQfwu.js → providers-CJh7iriU.js} +18103 -17952
- package/dist/src/{providers-iUt5fbAN.js → providers-Ctcc592x.js} +1 -1
- package/dist/src/{providers-Domz_llv.js → providers-DRrerKra.js} +432 -281
- package/dist/src/{providers-BV_KMZje.js → providers-DT-GtF2t.js} +19094 -18943
- package/dist/src/{providers-1eKkXBKp.cjs → providers-eDShy16E.cjs} +17946 -17795
- package/dist/src/{pythonUtils-Cldx7huE.js → pythonUtils-C4tltmIn.js} +3 -3
- package/dist/src/{pythonUtils-tAJvvpS-.cjs → pythonUtils-CoLaCwNY.cjs} +3 -3
- package/dist/src/{pythonUtils-C2UQ30Rz.js → pythonUtils-DMO68Jg7.js} +3 -3
- package/dist/src/{pythonUtils-CnndUbW-.js → pythonUtils-DNqbnRdx.js} +3 -3
- package/dist/src/{quiverai-DR0SnIQV.js → quiverai-BSS9a7wV.js} +3 -3
- package/dist/src/{quiverai-CtWi6x_g.js → quiverai-Bk1KrvL6.js} +4 -4
- package/dist/src/{quiverai-DFotyafY.cjs → quiverai-Bpx6MZ7T.cjs} +3 -3
- package/dist/src/{quiverai-aPPvXOgn.js → quiverai-CPKhWgaT.js} +4 -4
- package/dist/src/{render-DHIZ6_k8.js → render-7uNJ2V14.js} +2 -2
- package/dist/src/{render-CH-62LbA.js → render-DlscvAUJ.js} +1 -1
- package/dist/src/{render-CMEpfLaO.js → render-eui5p5mL.js} +2 -2
- package/dist/src/{render-CgVDrJmM.js → render-nj-UaPdn.js} +2 -2
- package/dist/src/{render-DfQSFxGE.cjs → render-tG6ir9_g.cjs} +1 -1
- package/dist/src/{responses--OsX2aYW.js → responses-1ztiVYsx.js} +49 -15
- package/dist/src/{responses-DL9m8CyY.js → responses-B8haB-mD.js} +49 -15
- package/dist/src/{responses-C-flexAY.js → responses-BiaBguAu.js} +49 -15
- package/dist/src/{responses-Bi9vBuW_.cjs → responses-CF-ayauu.cjs} +48 -14
- package/dist/src/rubyUtils-4hjGxvju.js +3 -0
- package/dist/src/{rubyUtils-DVLeA2jg.js → rubyUtils-BI0p46eZ.js} +3 -3
- package/dist/src/{rubyUtils-DsGrTx8R.js → rubyUtils-CIQFnVz4.js} +3 -3
- package/dist/src/rubyUtils-CO-tuszQ.cjs +2 -0
- package/dist/src/{rubyUtils-CYSQEG4a.js → rubyUtils-DGnoCYL2.js} +3 -3
- package/dist/src/{rubyUtils-B6eljPuh.cjs → rubyUtils-DoifqkiA.cjs} +4 -3
- package/dist/src/{sagemaker-BveBvuxm.js → sagemaker-BDLeW29y.js} +12 -12
- package/dist/src/{sagemaker-D67yzMzs.js → sagemaker-C5T60MKf.js} +13 -13
- package/dist/src/{sagemaker-BVkaG2-l.js → sagemaker-ClS_NB07.js} +13 -13
- package/dist/src/{sagemaker-XnfhheQv.cjs → sagemaker-ljtY12VM.cjs} +12 -12
- package/dist/src/{scanner-1DqWi1Ej.js → scanner-nOCWNIXa.js} +7 -7
- package/dist/src/server/index.js +1067 -265
- package/dist/src/{server-Dx2TyCH2.cjs → server-BEECpeGG.cjs} +5 -5
- package/dist/src/{server-BNYztJkh.js → server-ByiF3qlg.js} +9 -8
- package/dist/src/{server-BSB45Nt9.js → server-ByxbqAcQ.js} +8 -7
- package/dist/src/{server-DaA2eR26.cjs → server-C0XKRNB_.cjs} +1 -1
- package/dist/src/server-C_15p79-.js +3 -0
- package/dist/src/{server-D6Il2Sob.js → server-gyd6d4Hc.js} +5 -5
- package/dist/src/{signal-CE5G3a7x.js → signal-DTtUuU3l.js} +3 -3
- package/dist/src/{slack-acRb0IqQ.js → slack-4zZX1OKP.js} +1 -1
- package/dist/src/{slack-1Rhq0EoV.cjs → slack-BLlsDpfG.cjs} +1 -1
- package/dist/src/{slack-D5Wpy8LM.js → slack-BPYLQLgb.js} +2 -2
- package/dist/src/{slack-DDUe-5MC.js → slack-Bamy_7te.js} +2 -2
- package/dist/src/{store-DAAyxcy6.cjs → store-2K0kDi80.cjs} +2 -2
- package/dist/src/{store-Dn9HUkdW.js → store-2OXm_eBY.js} +3 -3
- package/dist/src/store-BELqNwvz.js +3 -0
- package/dist/src/{store-M0b1WfYb.js → store-BPkzEyFM.js} +2 -2
- package/dist/src/{store-CYEy5J2D.js → store-CPh25336.js} +3 -3
- package/dist/src/store-uQZ4AjPe.cjs +2 -0
- package/dist/src/{tables-CsWou1Bx.js → tables-BMSOS2Gg.js} +3 -3
- package/dist/src/{tables-DUfh1F7Z.cjs → tables-CXbaZ9y1.cjs} +2 -2
- package/dist/src/{tables-C4CH3zRr.js → tables-NlvH23ky.js} +3 -3
- package/dist/src/{tables-DQ4WU5tX.js → tables-WgdUZ8Ck.js} +2 -2
- package/dist/src/{telemetry-dbaJ0E98.js → telemetry--iqaGyaS.js} +5 -4
- package/dist/src/{telemetry-Dsw_faFj.cjs → telemetry-CEQxGnMZ.cjs} +7 -6
- package/dist/src/{telemetry-Dvqxv3YC.js → telemetry-CgdVGV8N.js} +4 -3
- package/dist/src/{telemetry-CQPez_Jp.js → telemetry-DWdGHvEf.js} +5 -4
- package/dist/src/telemetry-DjNoC_n3.cjs +2 -0
- package/dist/src/telemetry-ZdPZc0fm.js +3 -0
- package/dist/src/{text-BVi-cLPJ.cjs → text-BiNME7QG.cjs} +1 -1
- package/dist/src/{text-KvuD2Iko.js → text-D4lz-Jg_.js} +1 -1
- package/dist/src/{text-DHxdyQqT.js → text-DDQP0tuQ.js} +1 -1
- package/dist/src/{text-CZr46tp_.js → text-NWvfMfkF.js} +1 -1
- package/dist/src/{tokenUsageUtils-CXrvO-wA.js → tokenUsageUtils-2wIvAhB3.js} +1 -1
- package/dist/src/{tokenUsageUtils-C-bmyHoE.js → tokenUsageUtils-4c780gFd.js} +1 -1
- package/dist/src/tokenUsageUtils-BjVkdk18.js +142 -0
- package/dist/src/{tokenUsageUtils-Bb7DkZPz.cjs → tokenUsageUtils-C9odhsbW.cjs} +1 -1
- package/dist/src/{transcription-DuWDupG7.js → transcription-84t4ALo2.js} +5 -5
- package/dist/src/{transcription-CJspiD2c.js → transcription-Bm2emLmJ.js} +6 -6
- package/dist/src/{transcription-BvjmiYB1.cjs → transcription-CZ4LG5hQ.cjs} +5 -5
- package/dist/src/{transcription-V2HaAmy2.js → transcription-D7Q0vJsh.js} +6 -6
- package/dist/src/{transform-zDhMmzwX.js → transform-B-b6Cq-q.js} +5 -5
- package/dist/src/transform-BQt0BeAW.js +3 -0
- package/dist/src/{transform-DgKlRr73.cjs → transform-Bq5oqC0s.cjs} +1 -1
- package/dist/src/{transform-CUnzlsbn.cjs → transform-C9izGX54.cjs} +4 -4
- package/dist/src/{transform-DYX1_Xnh.js → transform-CwbAZ84V.js} +5 -5
- package/dist/src/{transform-CTeuTR3S.cjs → transform-Dg4LcO1Y.cjs} +6 -6
- package/dist/src/{transform-CG0ehZNG.js → transform-DtooZqYY.js} +6 -6
- package/dist/src/{transform-UN5UGu8U.js → transform-DzCF-wqV.js} +5 -5
- package/dist/src/{transform-lQrDE1BQ.js → transform-_DpNB4qp.js} +5 -5
- package/dist/src/{transform-Bbg6A8Jk.js → transform-eGiUAv86.js} +4 -4
- package/dist/src/{transformersAvailability-Cju9mHgR.cjs → transformersAvailability-B22swDxr.cjs} +1 -1
- package/dist/src/{transformersAvailability-CcHusyhw.js → transformersAvailability-lvCCvuPT.js} +1 -1
- package/dist/src/{transformersAvailability-DLlROWhg.js → transformersAvailability-rJGPccjr.js} +1 -1
- package/dist/src/{types-Bgh5SOn6.js → types-BDjGOq4E.js} +4 -2
- package/dist/src/{types-Dm9JM6Vb.js → types-BVH9hjgW.js} +4 -2
- package/dist/src/{types-CeaeaZdP.cjs → types-CgG2rKiW.cjs} +151 -149
- package/dist/src/{types-BGQDAP8i.js → types-DNRZVOue.js} +152 -150
- package/dist/src/{util-C8e5uydV.js → util-3pBZZb_H.js} +142 -17
- package/dist/src/{util-CN3SrLT4.cjs → util-A5_ZsQUn.cjs} +65 -43
- package/dist/src/{util-D3q0WQ-0.js → util-B9CNhyac.js} +66 -44
- package/dist/src/{util-DxWpWjhc.js → util-BQOCAHQC.js} +700 -575
- package/dist/src/{util-BYvQUPp7.js → util-BVXcTwXu.js} +3 -3
- package/dist/src/{util-D9TisOyk.js → util-BlFVL0UF.js} +65 -43
- package/dist/src/{util-C9J8ahRn.js → util-C-kmRosx.js} +66 -44
- package/dist/src/{util-DvU2Pw8c.js → util-DFPeFkiV.js} +3 -3
- package/dist/src/{util-DDs-7g6-.js → util-DN0-b81k.js} +3 -3
- package/dist/src/{util-olYL5C6N.cjs → util-Dpmm_dAI.cjs} +3 -3
- package/dist/src/{util-oGMLA7vc.js → util-Dub0f_ej.js} +700 -575
- package/dist/src/{util-Bxn8emtE.cjs → util-DvpHnLt0.cjs} +718 -570
- package/dist/src/{utils-DJfvjyMj.js → utils-BUMN8orw.js} +3 -3
- package/dist/src/{utils-B05gLxER.cjs → utils-DkVeShIB.cjs} +2 -2
- package/dist/src/{utils-BLJKfv0y.js → utils-kt7lv30R.js} +3 -3
- package/dist/src/{utils-hXtCYanr.js → utils-o8S5huU2.js} +2 -2
- package/dist/src/version-0frU0UTr.js +16 -0
- package/dist/src/version-CbpiUINz.js +17 -0
- package/dist/src/version-CbuBKu2U.js +16 -0
- package/dist/src/version-D9zu9FWB.cjs +27 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +22 -20
- package/dist/src/app/assets/Report-CQYFezYu.js +0 -1
- package/dist/src/app/assets/index-BzJt18Jz.js +0 -385
- package/dist/src/cache-Cr9oLMUa.js +0 -3
- package/dist/src/cloud-Hphvo8kr.js +0 -3
- package/dist/src/codex-sdk-BAmYE7qy.js +0 -3
- package/dist/src/evalResult-D8MT9p0s.js +0 -3
- 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/rubyUtils-D1L2d3jb.js +0 -3
- package/dist/src/rubyUtils-DUbq4tff.cjs +0 -2
- package/dist/src/server-DCtHUqlp.js +0 -3
- package/dist/src/store-CWOSz6D_.cjs +0 -2
- package/dist/src/store-DCDBhv7B.js +0 -3
- package/dist/src/telemetry-C1IqxcdW.js +0 -3
- package/dist/src/telemetry-C4ZEa_es.cjs +0 -2
- package/dist/src/transform-M6ITAESf.js +0 -3
- /package/dist/src/{evalResult-DElBuddX.js → evalResult-spPqh1G_.js} +0 -0
|
@@ -1,38 +1,39 @@
|
|
|
1
|
-
import { C as getEnvFloat, S as getEnvBool, T as getEnvString, _ as isValidJson, a as logger, c as REDACTED, f as sanitizeObject, k as state, l as isSecretField, m as extractFirstJsonObject, p as sanitizeUrl, u as looksLikeSecret, w as getEnvInt, x as getConfigDirectoryPath, y as safeJsonStringify } from "./logger-
|
|
2
|
-
import { C as toTitleCase, E as CLOUD_PROVIDER_PREFIX,
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import { n as
|
|
7
|
-
import {
|
|
8
|
-
import { t as
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import { n as
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import { a as
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
19
|
-
import { n as
|
|
20
|
-
import {
|
|
21
|
-
import {
|
|
22
|
-
import {
|
|
23
|
-
import {
|
|
24
|
-
import {
|
|
25
|
-
import {
|
|
26
|
-
import { n as
|
|
27
|
-
import { t as
|
|
28
|
-
import {
|
|
29
|
-
import {
|
|
30
|
-
import {
|
|
31
|
-
import { n as
|
|
32
|
-
import {
|
|
33
|
-
import {
|
|
34
|
-
import { t as
|
|
35
|
-
import {
|
|
1
|
+
import { C as getEnvFloat, S as getEnvBool, T as getEnvString, _ as isValidJson, a as logger, c as REDACTED, f as sanitizeObject, k as state, l as isSecretField, m as extractFirstJsonObject, p as sanitizeUrl, u as looksLikeSecret, w as getEnvInt, x as getConfigDirectoryPath, y as safeJsonStringify } from "./logger-KD8JjCRJ.js";
|
|
2
|
+
import { C as toTitleCase, E as CLOUD_PROVIDER_PREFIX, S as parseChatPrompt, T as transformTools, _ as isOpenAIToolArray, b as openaiToolChoiceToBedrock, d as sleep, f as parseRateLimitHeaders, g as calculateCost, h as REQUEST_TIMEOUT_MS$1, m as LONG_RUNNING_MODEL_TIMEOUT_MS, n as fetchWithRetries, o as cloudConfig, p as parseRetryAfter, r as fetchWithTimeout, t as fetchWithProxy, v as isOpenAIToolChoice, w as transformToolChoice, x as openaiToolsToBedrock } from "./fetch-Y5qX_kST.js";
|
|
3
|
+
import { n as VERSION } from "./version-0frU0UTr.js";
|
|
4
|
+
import { t as invariant } from "./invariant-DIYf9sP1.js";
|
|
5
|
+
import { c as isLoggedIntoCloud, o as getUserEmail } from "./accounts-bnyHT7Ju.js";
|
|
6
|
+
import { a as safeJoin, i as resolvePackageEntryPoint, n as getWrapperDir, o as safeResolve, r as importModule } from "./esm-B6whoAcf.js";
|
|
7
|
+
import { n as withGenAISpan } from "./genaiTracer-DxODqT9e.js";
|
|
8
|
+
import { a as getNunjucksEngine, i as extractVariablesFromTemplates, n as renderVarsInObject, r as extractVariablesFromTemplate, t as renderEnvOnlyInObject } from "./render-7uNJ2V14.js";
|
|
9
|
+
import { t as providerRegistry } from "./providerRegistry-1gB5vtzQ.js";
|
|
10
|
+
import { c as getRemoteGenerationUrl, d as neverGenerateRemote, f as neverGenerateRemoteForRegularEvals, l as getRemoteGenerationUrlForUnaligned, p as shouldGenerateRemote, r as checkServerFeatureSupport } from "./server-ByxbqAcQ.js";
|
|
11
|
+
import { a as evalResultsTable, h as getDb } from "./tables-BMSOS2Gg.js";
|
|
12
|
+
import { D as DATASET_PLUGINS, N as isCustomStrategy, R as pluginDescriptions, T as AGENTIC_STRATEGIES, g as ProviderOptionsSchema, k as MULTI_TURN_STRATEGIES, m as isProviderOptions, p as isApiProvider, st as STRATEGY_EXEMPT_PLUGINS, w as isUuid } from "./types-BDjGOq4E.js";
|
|
13
|
+
import { a as isVideoFile, i as isJavascriptFile, n as isAudioFile, r as isImageFile } from "./fileExtensions-BGh-W-HT.js";
|
|
14
|
+
import { n as sha256 } from "./createHash-4gFQpDDv.js";
|
|
15
|
+
import { t as getTraceStore } from "./store-2OXm_eBY.js";
|
|
16
|
+
import { a as isCacheEnabled, i as getCache, l as isTransientConnectionError, r as fetchWithCache } from "./cache-Cr-qWIbP.js";
|
|
17
|
+
import { a as createEmptyTokenUsage, n as accumulateResponseTokenUsage, r as accumulateTokenUsage } from "./tokenUsageUtils-BjVkdk18.js";
|
|
18
|
+
import { i as storeBlob } from "./blobs-D_gg8nbm.js";
|
|
19
|
+
import { n as isBlobStorageEnabled, r as shouldAttemptRemoteBlobUpload, t as extractAndStoreBinaryData } from "./extractor-YlZbUMsL.js";
|
|
20
|
+
import { n as telemetry } from "./telemetry--iqaGyaS.js";
|
|
21
|
+
import { i as validatePythonPath, n as getEnvInt$1, r as runPython, t as getConfiguredPythonPath } from "./pythonUtils-C4tltmIn.js";
|
|
22
|
+
import { A as maybeLoadFromExternalFileWithVars, C as loadProviderConfigsFromFile, D as getResolvedRelativePath, I as loadFunction, L as parseFileUrl, M as maybeLoadToolsFromExternalFile, N as parsePathOrGlob, O as maybeLoadConfigFromExternalFile, S as isProviderConfigFileReference, T as readProviderConfigFile, j as maybeLoadResponseFormatFromExternalFile, k as maybeLoadFromExternalFile, w as normalizeProviderRef } from "./util-3pBZZb_H.js";
|
|
23
|
+
import { i as normalizeFinishReason, n as MCPClient, r as FINISH_REASON_MAP, t as OpenAiChatCompletionProvider } from "./chat-DChSH_Es.js";
|
|
24
|
+
import { C as resolveProjectId, S as loadCredentials, T as toDataUri, _ as GoogleAuthManager, a as calculateGoogleCost, b as getGoogleClient, c as geminiFormatAndSystemInstructions, d as mergeParts, f as normalizeSafetySettings, g as CHAT_MODELS, i as transformMCPToolsToOpenAi, j as TOKEN_REFRESH_BUFFER_MS, l as getCandidate, m as parseConfigSystemInstruction, o as createAuthCacheDiscriminator, p as normalizeTools, r as transformMCPToolsToGoogle, s as formatCandidateContents, u as getGoogleAccessToken, v as determineGoogleVertexMode, y as getGoogleApiKey } from "./transform-DtooZqYY.js";
|
|
25
|
+
import { n as AnthropicGenericProvider, t as AnthropicMessagesProvider } from "./messages-CewuNcNS.js";
|
|
26
|
+
import { a as outputFromMessage, i as getTokenUsage$2, n as calculateAnthropicCost, o as parseMessages, t as ANTHROPIC_MODELS } from "./util-DFPeFkiV.js";
|
|
27
|
+
import { n as ResponsesProcessor, r as FunctionCallbackHandler, t as OpenAiResponsesProvider } from "./responses-1ztiVYsx.js";
|
|
28
|
+
import { t as OpenAiGenericProvider } from "./openai-BMHD2Huo.js";
|
|
29
|
+
import { a as calculateOpenAICost, c as getTokenUsage$3, o as failApiCall, r as OPENAI_REALTIME_MODELS, s as formatOpenAiError } from "./util-B9CNhyac.js";
|
|
30
|
+
import { t as OpenAiEmbeddingProvider } from "./embedding-D_bI4NDq.js";
|
|
31
|
+
import { i as getProcessShim, n as transform, t as TransformInputType } from "./transform-CwbAZ84V.js";
|
|
32
|
+
import { n as escapeRegExp, t as ellipsize } from "./text-NWvfMfkF.js";
|
|
33
|
+
import { a as novaParseMessages, i as novaOutputFromMessage, t as AwsBedrockGenericProvider } from "./base-dYsl2hmL.js";
|
|
34
|
+
import { i as formatOutput, n as buildStructuredImageOutputs, r as callOpenAiImageApi, t as OpenAiImageProvider } from "./image-DsGRlkh7.js";
|
|
35
|
+
import { t as OpenAiCompletionProvider } from "./completion-Vq_ad618.js";
|
|
36
|
+
import { n as runRuby } from "./rubyUtils-DGnoCYL2.js";
|
|
36
37
|
import * as fs$2 from "fs";
|
|
37
38
|
import fs, { promises } from "fs";
|
|
38
39
|
import * as path$1 from "path";
|
|
@@ -2811,7 +2812,7 @@ var AIStudioChatProvider = class extends GoogleGenericProvider {
|
|
|
2811
2812
|
headers,
|
|
2812
2813
|
body: JSON.stringify(body),
|
|
2813
2814
|
...authDiscriminator && { _authHash: authDiscriminator }
|
|
2814
|
-
}, REQUEST_TIMEOUT_MS$1, "json", context
|
|
2815
|
+
}, REQUEST_TIMEOUT_MS$1, "json", shouldBustCache(context)));
|
|
2815
2816
|
} catch (err) {
|
|
2816
2817
|
return { error: `API call error: ${String(err)}` };
|
|
2817
2818
|
}
|
|
@@ -5269,8 +5270,6 @@ var TokenUsageTracker = class TokenUsageTracker {
|
|
|
5269
5270
|
const ATTACKER_MODEL = "gpt-5.4-2026-03-05";
|
|
5270
5271
|
const ATTACKER_MODEL_SMALL = "gpt-5.4-mini-2026-03-17";
|
|
5271
5272
|
const TEMPERATURE = getEnvFloat("PROMPTFOO_JAILBREAK_TEMPERATURE") ? getEnvFloat("PROMPTFOO_JAILBREAK_TEMPERATURE") : .7;
|
|
5272
|
-
//#endregion
|
|
5273
|
-
//#region src/redteam/providers/shared.ts
|
|
5274
5273
|
async function loadRedteamProvider({ provider, jsonOnly = false, preferSmallModel = false, purpose = "redteam" } = {}) {
|
|
5275
5274
|
let ret;
|
|
5276
5275
|
const redteamProvider = provider || state.config?.redteam?.provider;
|
|
@@ -5279,7 +5278,7 @@ async function loadRedteamProvider({ provider, jsonOnly = false, preferSmallMode
|
|
|
5279
5278
|
ret = redteamProvider;
|
|
5280
5279
|
} else if (typeof redteamProvider === "string" || isProviderOptions(redteamProvider)) {
|
|
5281
5280
|
logger.debug(`Loading ${purpose} provider`, { provider: redteamProvider });
|
|
5282
|
-
ret = (await (await import("./providers-
|
|
5281
|
+
ret = (await (await import("./providers-BuyzKt7C.js")).loadApiProviders([redteamProvider]))[0];
|
|
5283
5282
|
} else {
|
|
5284
5283
|
const defaultModel = preferSmallModel ? ATTACKER_MODEL_SMALL : ATTACKER_MODEL;
|
|
5285
5284
|
logger.debug(`Using default ${purpose} provider: ${defaultModel}`);
|
|
@@ -5583,7 +5582,7 @@ async function tryUnblocking({ messages, lastResponse, goal, purpose }) {
|
|
|
5583
5582
|
logger.debug("[Unblocking] Disabled by default (set PROMPTFOO_ENABLE_UNBLOCKING=true to enable)");
|
|
5584
5583
|
return { success: false };
|
|
5585
5584
|
}
|
|
5586
|
-
const { checkServerFeatureSupport } = await import("./server-
|
|
5585
|
+
const { checkServerFeatureSupport } = await import("./server-ByxbqAcQ.js").then((n) => n.o);
|
|
5587
5586
|
if (!await checkServerFeatureSupport("blocking-question-analysis", "2025-06-16T14:49:11-07:00")) {
|
|
5588
5587
|
logger.debug("[Unblocking] Server does not support unblocking, skipping gracefully");
|
|
5589
5588
|
return { success: false };
|
|
@@ -5633,6 +5632,9 @@ async function tryUnblocking({ messages, lastResponse, goal, purpose }) {
|
|
|
5633
5632
|
return { success: false };
|
|
5634
5633
|
}
|
|
5635
5634
|
}
|
|
5635
|
+
function isSingleAssertion(assertToUse) {
|
|
5636
|
+
return Boolean(assertToUse && assertToUse.type !== "assert-set");
|
|
5637
|
+
}
|
|
5636
5638
|
/**
|
|
5637
5639
|
* Builds the assertion object for storedGraderResult with the rubric value.
|
|
5638
5640
|
* This ensures the grading template is preserved for display in the UI.
|
|
@@ -5642,11 +5644,15 @@ function buildGraderResultAssertion(gradeAssertion, assertToUse, rubric) {
|
|
|
5642
5644
|
...gradeAssertion,
|
|
5643
5645
|
value: rubric
|
|
5644
5646
|
};
|
|
5645
|
-
if (assertToUse
|
|
5647
|
+
if (isSingleAssertion(assertToUse)) return {
|
|
5646
5648
|
...assertToUse,
|
|
5647
5649
|
value: rubric
|
|
5648
5650
|
};
|
|
5649
5651
|
}
|
|
5652
|
+
function getGraderAssertionValue(assertToUse) {
|
|
5653
|
+
if (!isSingleAssertion(assertToUse)) return;
|
|
5654
|
+
return assertToUse.value;
|
|
5655
|
+
}
|
|
5650
5656
|
//#endregion
|
|
5651
5657
|
//#region src/redteam/providers/agentic/memoryPoisoning.ts
|
|
5652
5658
|
var MemoryPoisoningProvider = class {
|
|
@@ -10658,7 +10664,7 @@ var CrescendoProvider = class {
|
|
|
10658
10664
|
});
|
|
10659
10665
|
let assertToUse = test?.assert?.find((a) => a.type && a.type.includes(test.metadata?.pluginId));
|
|
10660
10666
|
if (!assertToUse) assertToUse = test?.assert?.find((a) => a.type);
|
|
10661
|
-
const { getGraderById } = await import("./graders-
|
|
10667
|
+
const { getGraderById } = await import("./graders-DS42d3ZG.js");
|
|
10662
10668
|
let graderPassed;
|
|
10663
10669
|
const additionalRubric = getGoalRubric(this.userGoal);
|
|
10664
10670
|
while (roundNum < this.maxTurns) try {
|
|
@@ -10809,7 +10815,7 @@ var CrescendoProvider = class {
|
|
|
10809
10815
|
conversationHistory: conversationHistoryForGrading,
|
|
10810
10816
|
conversationTranscript: formatRedteamHistoryAsTranscript(conversationHistoryForGrading)
|
|
10811
10817
|
};
|
|
10812
|
-
const { grade, rubric } = await grader.getResult(attackPrompt, lastResponse.output, test, provider,
|
|
10818
|
+
const { grade, rubric } = await grader.getResult(attackPrompt, lastResponse.output, test, provider, getGraderAssertionValue(assertToUse), additionalRubric, void 0, gradingContext);
|
|
10813
10819
|
graderPassed = grade.pass;
|
|
10814
10820
|
storedGraderResult = {
|
|
10815
10821
|
...grade,
|
|
@@ -11353,7 +11359,7 @@ var CustomProvider = class {
|
|
|
11353
11359
|
let lastTransformResult;
|
|
11354
11360
|
let assertToUse = test?.assert?.find((a) => a.type && a.type.includes(test.metadata?.pluginId));
|
|
11355
11361
|
if (!assertToUse) assertToUse = test?.assert?.find((a) => a.type);
|
|
11356
|
-
const { getGraderById } = await import("./graders-
|
|
11362
|
+
const { getGraderById } = await import("./graders-DS42d3ZG.js");
|
|
11357
11363
|
let graderPassed;
|
|
11358
11364
|
let storedGraderResult;
|
|
11359
11365
|
const additionalRubric = getGoalRubric(this.userGoal);
|
|
@@ -11469,7 +11475,7 @@ var CustomProvider = class {
|
|
|
11469
11475
|
if (test && assertToUse) {
|
|
11470
11476
|
const grader = getGraderById(assertToUse.type);
|
|
11471
11477
|
if (grader) {
|
|
11472
|
-
const { grade, rubric } = await grader.getResult(attackPrompt, lastResponse.output, test, provider,
|
|
11478
|
+
const { grade, rubric } = await grader.getResult(attackPrompt, lastResponse.output, test, provider, getGraderAssertionValue(assertToUse), additionalRubric);
|
|
11473
11479
|
graderPassed = grade.pass;
|
|
11474
11480
|
storedGraderResult = {
|
|
11475
11481
|
...grade,
|
|
@@ -11854,7 +11860,7 @@ var GoatProvider = class {
|
|
|
11854
11860
|
let assertToUse;
|
|
11855
11861
|
let graderPassed;
|
|
11856
11862
|
let storedGraderResult;
|
|
11857
|
-
const { getGraderById } = await import("./graders-
|
|
11863
|
+
const { getGraderById } = await import("./graders-DS42d3ZG.js");
|
|
11858
11864
|
let test;
|
|
11859
11865
|
if (context?.test) {
|
|
11860
11866
|
test = context?.test;
|
|
@@ -12173,7 +12179,7 @@ var GoatProvider = class {
|
|
|
12173
12179
|
traceContext: targetResponse.traceContext,
|
|
12174
12180
|
traceSummary: gradingTraceSummary
|
|
12175
12181
|
};
|
|
12176
|
-
const { grade, rubric } = await grader.getResult(attackerMessage.content, finalOutput, test, targetProvider,
|
|
12182
|
+
const { grade, rubric } = await grader.getResult(attackerMessage.content, finalOutput, test, targetProvider, getGraderAssertionValue(assertToUse), additionalRubric, void 0, gradingContext);
|
|
12177
12183
|
graderPassed = grade.pass;
|
|
12178
12184
|
storedGraderResult = {
|
|
12179
12185
|
...grade,
|
|
@@ -12322,7 +12328,7 @@ var HydraProvider = class {
|
|
|
12322
12328
|
let lastTransformResult;
|
|
12323
12329
|
let lastTransformDisplayVars;
|
|
12324
12330
|
let lastFinalAttackPrompt;
|
|
12325
|
-
const { getGraderById } = await import("./graders-
|
|
12331
|
+
const { getGraderById } = await import("./graders-DS42d3ZG.js");
|
|
12326
12332
|
let assertToUse = test?.assert?.find((a) => a.type && a.type.includes(test.metadata?.pluginId));
|
|
12327
12333
|
if (!assertToUse) assertToUse = test?.assert?.find((a) => a.type);
|
|
12328
12334
|
let previousTraceSummary;
|
|
@@ -12635,7 +12641,7 @@ var HydraProvider = class {
|
|
|
12635
12641
|
exfilRecords: []
|
|
12636
12642
|
});
|
|
12637
12643
|
}
|
|
12638
|
-
const { grade, rubric } = await grader.getResult(nextMessage, targetResponse.output, test, targetProvider,
|
|
12644
|
+
const { grade, rubric } = await grader.getResult(nextMessage, targetResponse.output, test, targetProvider, getGraderAssertionValue(assertToUse), void 0, void 0, gradingContext);
|
|
12639
12645
|
graderResult = grade;
|
|
12640
12646
|
storedGraderResult = {
|
|
12641
12647
|
...grade,
|
|
@@ -13170,7 +13176,7 @@ async function runRedteamConversation$2({ context, filters, injectVar, numIterat
|
|
|
13170
13176
|
if (sessionId) sessionIds.push(sessionId);
|
|
13171
13177
|
let assertToUse = test?.assert?.find((a) => a.type && a.type.includes(test.metadata?.pluginId));
|
|
13172
13178
|
if (!assertToUse) assertToUse = test?.assert?.find((a) => a.type);
|
|
13173
|
-
const { getGraderById } = await import("./graders-
|
|
13179
|
+
const { getGraderById } = await import("./graders-DS42d3ZG.js");
|
|
13174
13180
|
if (test && assertToUse) {
|
|
13175
13181
|
const grader = getGraderById(assertToUse.type);
|
|
13176
13182
|
if (grader) {
|
|
@@ -13223,7 +13229,7 @@ async function runRedteamConversation$2({ context, filters, injectVar, numIterat
|
|
|
13223
13229
|
traceContext,
|
|
13224
13230
|
traceSummary: graderTraceSummary
|
|
13225
13231
|
};
|
|
13226
|
-
const { grade, rubric } = await grader.getResult(newInjectVar, targetResponse.output, iterationTest, gradingProvider,
|
|
13232
|
+
const { grade, rubric } = await grader.getResult(newInjectVar, targetResponse.output, iterationTest, gradingProvider, getGraderAssertionValue(assertToUse), additionalRubric, void 0, gradingContext);
|
|
13227
13233
|
storedGraderResult = {
|
|
13228
13234
|
...grade,
|
|
13229
13235
|
assertion: buildGraderResultAssertion(grade.assertion, assertToUse, rubric)
|
|
@@ -13997,7 +14003,7 @@ async function runMetaAgentRedteam({ context, filters, injectVar, numIterations,
|
|
|
13997
14003
|
previousTraceSummary = attackTraceSummary;
|
|
13998
14004
|
let assertToUse = test?.assert?.find((a) => a.type && a.type.includes(test.metadata?.pluginId));
|
|
13999
14005
|
if (!assertToUse) assertToUse = test?.assert?.find((a) => a.type);
|
|
14000
|
-
const { getGraderById } = await import("./graders-
|
|
14006
|
+
const { getGraderById } = await import("./graders-DS42d3ZG.js");
|
|
14001
14007
|
if (test && assertToUse) {
|
|
14002
14008
|
const grader = getGraderById(assertToUse.type);
|
|
14003
14009
|
if (grader) {
|
|
@@ -14043,7 +14049,7 @@ async function runMetaAgentRedteam({ context, filters, injectVar, numIterations,
|
|
|
14043
14049
|
exfilRecords: []
|
|
14044
14050
|
});
|
|
14045
14051
|
}
|
|
14046
|
-
const { grade, rubric } = await grader.getResult(attackPrompt, targetResponse.output, iterationTest, gradingProvider,
|
|
14052
|
+
const { grade, rubric } = await grader.getResult(attackPrompt, targetResponse.output, iterationTest, gradingProvider, getGraderAssertionValue(assertToUse), additionalRubric, void 0, gradingContext);
|
|
14047
14053
|
graderResult = {
|
|
14048
14054
|
...grade,
|
|
14049
14055
|
assertion: buildGraderResultAssertion(grade.assertion, assertToUse, rubric)
|
|
@@ -14567,7 +14573,7 @@ async function runRedteamConversation({ context, filters, injectVar, options, pr
|
|
|
14567
14573
|
noImprovementCount++;
|
|
14568
14574
|
if (noImprovementCount % 5 === 0) logger.debug(`[Depth ${depth}, Attempt ${attempts}] No improvement for ${noImprovementCount} consecutive iterations. Max score: ${maxScore}`);
|
|
14569
14575
|
}
|
|
14570
|
-
const { getGraderById } = await import("./graders-
|
|
14576
|
+
const { getGraderById } = await import("./graders-DS42d3ZG.js");
|
|
14571
14577
|
let graderPassed;
|
|
14572
14578
|
let assertToUse = test?.assert?.find((a) => a.type && a.type.includes(test.metadata?.pluginId));
|
|
14573
14579
|
if (!assertToUse) assertToUse = test?.assert?.find((a) => a.type);
|
|
@@ -14610,7 +14616,7 @@ async function runRedteamConversation({ context, filters, injectVar, options, pr
|
|
|
14610
14616
|
exfilRecords: []
|
|
14611
14617
|
};
|
|
14612
14618
|
}
|
|
14613
|
-
const { grade, rubric } = await grader.getResult(newInjectVar, targetResponse.output, iterationTest, gradingProvider,
|
|
14619
|
+
const { grade, rubric } = await grader.getResult(newInjectVar, targetResponse.output, iterationTest, gradingProvider, getGraderAssertionValue(assertToUse), additionalRubric, void 0, gradingContext);
|
|
14614
14620
|
storedGraderResult = {
|
|
14615
14621
|
...grade,
|
|
14616
14622
|
assertion: buildGraderResultAssertion(grade.assertion, assertToUse, rubric)
|
|
@@ -15155,6 +15161,59 @@ var RedteamMischievousUserProvider = class extends SimulatedUser {
|
|
|
15155
15161
|
}
|
|
15156
15162
|
};
|
|
15157
15163
|
//#endregion
|
|
15164
|
+
//#region src/providers/abliteration.ts
|
|
15165
|
+
const ABLITERATION_API_BASE_URL = "https://api.abliteration.ai/v1";
|
|
15166
|
+
const ABLITERATION_API_BASE_URL_ENV_VAR = "ABLIT_API_BASE_URL";
|
|
15167
|
+
function normalizeApiBaseUrl(apiBaseUrl) {
|
|
15168
|
+
const trimmedApiBaseUrl = apiBaseUrl?.trim();
|
|
15169
|
+
return trimmedApiBaseUrl ? trimmedApiBaseUrl : void 0;
|
|
15170
|
+
}
|
|
15171
|
+
var AbliterationProvider = class extends OpenAiChatCompletionProvider {
|
|
15172
|
+
constructor(modelName, providerOptions = {}) {
|
|
15173
|
+
super(modelName, {
|
|
15174
|
+
...providerOptions,
|
|
15175
|
+
config: {
|
|
15176
|
+
...providerOptions.config,
|
|
15177
|
+
apiBaseUrl: normalizeApiBaseUrl(providerOptions.config?.apiBaseUrl) ?? normalizeApiBaseUrl(providerOptions.env?.ABLIT_API_BASE_URL) ?? normalizeApiBaseUrl(getEnvString(ABLITERATION_API_BASE_URL_ENV_VAR)) ?? ABLITERATION_API_BASE_URL,
|
|
15178
|
+
apiKeyEnvar: providerOptions.config?.apiKeyEnvar ?? "ABLIT_KEY",
|
|
15179
|
+
showThinking: providerOptions.config?.showThinking ?? false
|
|
15180
|
+
}
|
|
15181
|
+
});
|
|
15182
|
+
}
|
|
15183
|
+
getApiKey() {
|
|
15184
|
+
const apiKeyEnvar = this.config.apiKeyEnvar;
|
|
15185
|
+
return this.config.apiKey || (apiKeyEnvar ? this.env?.[apiKeyEnvar] || getEnvString(apiKeyEnvar) : void 0);
|
|
15186
|
+
}
|
|
15187
|
+
getOrganization() {}
|
|
15188
|
+
id() {
|
|
15189
|
+
return `abliteration:${this.modelName}`;
|
|
15190
|
+
}
|
|
15191
|
+
toString() {
|
|
15192
|
+
return `[Abliteration Provider ${this.modelName}]`;
|
|
15193
|
+
}
|
|
15194
|
+
toJSON() {
|
|
15195
|
+
return {
|
|
15196
|
+
provider: "abliteration",
|
|
15197
|
+
model: this.modelName,
|
|
15198
|
+
config: {
|
|
15199
|
+
...this.config,
|
|
15200
|
+
apiKey: void 0
|
|
15201
|
+
}
|
|
15202
|
+
};
|
|
15203
|
+
}
|
|
15204
|
+
};
|
|
15205
|
+
function createAbliterationProvider(providerPath, options = {}) {
|
|
15206
|
+
const splits = providerPath.split(":");
|
|
15207
|
+
const modelName = splits[1] === "chat" ? splits.slice(2).join(":") : splits.slice(1).join(":");
|
|
15208
|
+
if (!modelName) throw new Error("Abliteration provider requires a model name. Use format: abliteration:<model_name> or abliteration:chat:<model_name>");
|
|
15209
|
+
const providerOptions = options.config || {};
|
|
15210
|
+
return new AbliterationProvider(modelName, {
|
|
15211
|
+
...providerOptions,
|
|
15212
|
+
id: options.id ?? providerOptions.id,
|
|
15213
|
+
env: providerOptions.env ?? options.env
|
|
15214
|
+
});
|
|
15215
|
+
}
|
|
15216
|
+
//#endregion
|
|
15158
15217
|
//#region src/providers/ai21.ts
|
|
15159
15218
|
const AI21_CHAT_MODELS = [{
|
|
15160
15219
|
id: "jamba-1.5-mini",
|
|
@@ -17070,16 +17129,15 @@ function convertToolsToConverseFormat(tools) {
|
|
|
17070
17129
|
* Convert tool choice to Converse API format.
|
|
17071
17130
|
* Supports OpenAI tool choice format and native Bedrock format.
|
|
17072
17131
|
*/
|
|
17132
|
+
function isNamedConverseToolChoice(toolChoice) {
|
|
17133
|
+
if (!toolChoice || typeof toolChoice !== "object" || !("tool" in toolChoice)) return false;
|
|
17134
|
+
const tool = toolChoice.tool;
|
|
17135
|
+
return Boolean(tool && typeof tool === "object" && typeof tool.name === "string");
|
|
17136
|
+
}
|
|
17073
17137
|
function convertToolChoiceToConverseFormat(toolChoice) {
|
|
17074
17138
|
if (isOpenAIToolChoice(toolChoice)) return openaiToolChoiceToBedrock(toolChoice);
|
|
17075
17139
|
if (toolChoice === "any") return { any: {} };
|
|
17076
|
-
if (toolChoice
|
|
17077
|
-
const tool = toolChoice.tool;
|
|
17078
|
-
if (tool && typeof tool === "object") {
|
|
17079
|
-
const name = tool.name;
|
|
17080
|
-
if (typeof name === "string") return { tool: { name } };
|
|
17081
|
-
}
|
|
17082
|
-
}
|
|
17140
|
+
if (isNamedConverseToolChoice(toolChoice)) return { tool: { name: toolChoice.tool.name } };
|
|
17083
17141
|
return { auto: {} };
|
|
17084
17142
|
}
|
|
17085
17143
|
/**
|
|
@@ -28993,7 +29051,112 @@ async function processConfigFileReferences(config, basePath = "") {
|
|
|
28993
29051
|
return config;
|
|
28994
29052
|
}
|
|
28995
29053
|
//#endregion
|
|
29054
|
+
//#region src/providers/scriptContext.ts
|
|
29055
|
+
/**
|
|
29056
|
+
* Keys on `CallApiContextParams` that cannot be sent to a subprocess script
|
|
29057
|
+
* provider (Python, Ruby, etc.) because they are either non-serializable or
|
|
29058
|
+
* contain circular references (e.g., Timeout handles inside `logger`,
|
|
29059
|
+
* functions inside `filters`, or `ApiProvider` instances with methods).
|
|
29060
|
+
*
|
|
29061
|
+
* This list is the single source of truth for script-provider sanitization;
|
|
29062
|
+
* adding a new non-serializable field to `CallApiContextParams` requires only
|
|
29063
|
+
* a single update here so every script provider stays in lockstep.
|
|
29064
|
+
*/
|
|
29065
|
+
const NON_SERIALIZABLE_CONTEXT_KEYS = [
|
|
29066
|
+
"getCache",
|
|
29067
|
+
"logger",
|
|
29068
|
+
"filters",
|
|
29069
|
+
"originalProvider"
|
|
29070
|
+
];
|
|
29071
|
+
/**
|
|
29072
|
+
* Returns a shallow-cloned copy of `context` with non-serializable keys
|
|
29073
|
+
* removed. The caller's `context` is never mutated so wrappers that reuse
|
|
29074
|
+
* the same object across turns (e.g., redteam multi-turn strategies) are
|
|
29075
|
+
* safe. Logs the stripped keys at debug level for traceability when script
|
|
29076
|
+
* authors are investigating "missing filters/logger in my script" reports.
|
|
29077
|
+
*
|
|
29078
|
+
* @param providerLabel - Label used in debug logs (e.g., `"PythonProvider"`).
|
|
29079
|
+
* @param context - Caller-owned context, possibly `undefined`.
|
|
29080
|
+
* @returns A sanitized clone, or `undefined` if `context` was `undefined`.
|
|
29081
|
+
*/
|
|
29082
|
+
function sanitizeScriptContext(providerLabel, context) {
|
|
29083
|
+
if (!context) return;
|
|
29084
|
+
const sanitizedContext = { ...context };
|
|
29085
|
+
const stripped = [];
|
|
29086
|
+
for (const key of NON_SERIALIZABLE_CONTEXT_KEYS) if (key in sanitizedContext) {
|
|
29087
|
+
stripped.push(key);
|
|
29088
|
+
delete sanitizedContext[key];
|
|
29089
|
+
}
|
|
29090
|
+
if (stripped.length > 0) logger.debug(`${providerLabel} sanitized context: stripped non-serializable keys [${stripped.join(", ")}]`);
|
|
29091
|
+
return sanitizedContext;
|
|
29092
|
+
}
|
|
29093
|
+
//#endregion
|
|
28996
29094
|
//#region src/providers/pythonCompletion.ts
|
|
29095
|
+
function buildPythonScriptArgs(apiType, prompt, optionsWithProcessedConfig, sanitizedContext) {
|
|
29096
|
+
return apiType === "call_api" ? [
|
|
29097
|
+
prompt,
|
|
29098
|
+
optionsWithProcessedConfig,
|
|
29099
|
+
sanitizedContext
|
|
29100
|
+
] : [prompt, optionsWithProcessedConfig];
|
|
29101
|
+
}
|
|
29102
|
+
function hasPythonResultProperty(result, propertyName) {
|
|
29103
|
+
return Boolean(result) && typeof result === "object" && Object.prototype.hasOwnProperty.call(result, propertyName);
|
|
29104
|
+
}
|
|
29105
|
+
function applyCachedCallApiMetadata(apiType, parsedResult) {
|
|
29106
|
+
if (apiType !== "call_api" || typeof parsedResult !== "object" || parsedResult === null) return parsedResult;
|
|
29107
|
+
logger.debug(`PythonProvider setting cached=true for cached ${apiType} result`);
|
|
29108
|
+
parsedResult.cached = true;
|
|
29109
|
+
if (parsedResult.tokenUsage) {
|
|
29110
|
+
const total = parsedResult.tokenUsage.total || 0;
|
|
29111
|
+
parsedResult.tokenUsage = {
|
|
29112
|
+
cached: total,
|
|
29113
|
+
total,
|
|
29114
|
+
numRequests: parsedResult.tokenUsage.numRequests ?? 1
|
|
29115
|
+
};
|
|
29116
|
+
logger.debug(`Updated token usage for cached result: ${JSON.stringify(parsedResult.tokenUsage)}`);
|
|
29117
|
+
}
|
|
29118
|
+
return parsedResult;
|
|
29119
|
+
}
|
|
29120
|
+
function applyFreshCallApiMetadata(apiType, result) {
|
|
29121
|
+
if (apiType !== "call_api" || typeof result !== "object" || result === null) return result;
|
|
29122
|
+
logger.debug(`PythonProvider explicitly setting cached=false for fresh result`);
|
|
29123
|
+
result.cached = false;
|
|
29124
|
+
if (result.tokenUsage && !result.tokenUsage.numRequests) {
|
|
29125
|
+
result.tokenUsage.numRequests = 1;
|
|
29126
|
+
logger.debug(`Added numRequests to fresh result token usage: ${JSON.stringify(result.tokenUsage)}`);
|
|
29127
|
+
}
|
|
29128
|
+
return result;
|
|
29129
|
+
}
|
|
29130
|
+
function hasPythonResultError(result) {
|
|
29131
|
+
return hasPythonResultProperty(result, "error") && result.error !== null && result.error !== void 0 && result.error !== "";
|
|
29132
|
+
}
|
|
29133
|
+
function validateCallApiResult(functionName, result) {
|
|
29134
|
+
const resultType = result === null ? "null" : typeof result;
|
|
29135
|
+
const resultKeys = result && typeof result === "object" ? Object.keys(result).join(",") : "none";
|
|
29136
|
+
logger.debug(`Python provider result structure: ${resultType}, keys: ${resultKeys}`);
|
|
29137
|
+
if (hasPythonResultProperty(result, "output")) logger.debug(`Python provider output type: ${typeof result.output}, isArray: ${Array.isArray(result.output)}`);
|
|
29138
|
+
if (!hasPythonResultProperty(result, "output") && !hasPythonResultProperty(result, "error")) throw new Error(`The Python script \`${functionName}\` function must return a dict with an own \`output\` string/object or \`error\` string (inherited prototype properties are rejected), instead got: ${JSON.stringify(result)}`);
|
|
29139
|
+
}
|
|
29140
|
+
function validateEmbeddingResult(functionName, result) {
|
|
29141
|
+
if (!hasPythonResultProperty(result, "embedding") && !hasPythonResultProperty(result, "error")) throw new Error(`The Python script \`${functionName}\` function must return a dict with an own \`embedding\` array or \`error\` string (inherited prototype properties are rejected), instead got ${JSON.stringify(result)}`);
|
|
29142
|
+
}
|
|
29143
|
+
function validateClassificationResult(functionName, result) {
|
|
29144
|
+
if (!hasPythonResultProperty(result, "classification") && !hasPythonResultProperty(result, "error")) throw new Error(`The Python script \`${functionName}\` function must return a dict with an own \`classification\` object or \`error\` string (inherited prototype properties are rejected), instead of ${JSON.stringify(result)}`);
|
|
29145
|
+
}
|
|
29146
|
+
function validatePythonScriptResult(apiType, functionName, result) {
|
|
29147
|
+
switch (apiType) {
|
|
29148
|
+
case "call_api":
|
|
29149
|
+
validateCallApiResult(functionName, result);
|
|
29150
|
+
return;
|
|
29151
|
+
case "call_embedding_api":
|
|
29152
|
+
validateEmbeddingResult(functionName, result);
|
|
29153
|
+
return;
|
|
29154
|
+
case "call_classification_api":
|
|
29155
|
+
validateClassificationResult(functionName, result);
|
|
29156
|
+
return;
|
|
29157
|
+
default: throw new Error(`Unsupported apiType: ${apiType}`);
|
|
29158
|
+
}
|
|
29159
|
+
}
|
|
28997
29160
|
var PythonProvider = class {
|
|
28998
29161
|
config;
|
|
28999
29162
|
scriptPath;
|
|
@@ -29103,72 +29266,26 @@ var PythonProvider = class {
|
|
|
29103
29266
|
logger.debug(`Returning cached ${apiType} result for script ${absPath}`);
|
|
29104
29267
|
const parsedResult = JSON.parse(cachedResult);
|
|
29105
29268
|
logger.debug(`PythonProvider parsed cached result type: ${typeof parsedResult}, keys: ${Object.keys(parsedResult).join(",")}`);
|
|
29106
|
-
|
|
29107
|
-
logger.debug(`PythonProvider setting cached=true for cached ${apiType} result`);
|
|
29108
|
-
parsedResult.cached = true;
|
|
29109
|
-
if (parsedResult.tokenUsage) {
|
|
29110
|
-
const total = parsedResult.tokenUsage.total || 0;
|
|
29111
|
-
parsedResult.tokenUsage = {
|
|
29112
|
-
cached: total,
|
|
29113
|
-
total,
|
|
29114
|
-
numRequests: parsedResult.tokenUsage.numRequests ?? 1
|
|
29115
|
-
};
|
|
29116
|
-
logger.debug(`Updated token usage for cached result: ${JSON.stringify(parsedResult.tokenUsage)}`);
|
|
29117
|
-
}
|
|
29118
|
-
}
|
|
29119
|
-
return parsedResult;
|
|
29269
|
+
return applyCachedCallApiMetadata(apiType, parsedResult);
|
|
29120
29270
|
} else {
|
|
29121
|
-
const sanitizedContext =
|
|
29122
|
-
|
|
29123
|
-
delete sanitizedContext.getCache;
|
|
29124
|
-
delete sanitizedContext.logger;
|
|
29125
|
-
delete sanitizedContext.filters;
|
|
29126
|
-
delete sanitizedContext.originalProvider;
|
|
29127
|
-
}
|
|
29128
|
-
const optionsWithProcessedConfig = {
|
|
29271
|
+
const sanitizedContext = sanitizeScriptContext("PythonProvider", context);
|
|
29272
|
+
const args = buildPythonScriptArgs(apiType, prompt, {
|
|
29129
29273
|
...this.options,
|
|
29130
29274
|
config: {
|
|
29131
29275
|
...this.options?.config,
|
|
29132
29276
|
...this.config
|
|
29133
29277
|
}
|
|
29134
|
-
};
|
|
29135
|
-
const args = apiType === "call_api" ? [
|
|
29136
|
-
prompt,
|
|
29137
|
-
optionsWithProcessedConfig,
|
|
29138
|
-
sanitizedContext
|
|
29139
|
-
] : [prompt, optionsWithProcessedConfig];
|
|
29278
|
+
}, sanitizedContext);
|
|
29140
29279
|
logger.debug(`Executing python script ${absPath} via worker pool with args: ${safeJsonStringify(args)}`);
|
|
29141
29280
|
const functionName = this.functionName || apiType;
|
|
29142
|
-
|
|
29143
|
-
|
|
29144
|
-
|
|
29145
|
-
case "call_api":
|
|
29146
|
-
logger.debug(`Python provider result structure: ${result ? typeof result : "undefined"}, keys: ${result ? Object.keys(result).join(",") : "none"}`);
|
|
29147
|
-
if (result && "output" in result) logger.debug(`Python provider output type: ${typeof result.output}, isArray: ${Array.isArray(result.output)}`);
|
|
29148
|
-
if (!result || typeof result !== "object" || !("output" in result) && !("error" in result)) throw new Error(`The Python script \`${functionName}\` function must return a dict with an \`output\` string/object or \`error\` string, instead got: ${JSON.stringify(result)}`);
|
|
29149
|
-
break;
|
|
29150
|
-
case "call_embedding_api":
|
|
29151
|
-
if (!result || typeof result !== "object" || !("embedding" in result) && !("error" in result)) throw new Error(`The Python script \`${functionName}\` function must return a dict with an \`embedding\` array or \`error\` string, instead got ${JSON.stringify(result)}`);
|
|
29152
|
-
break;
|
|
29153
|
-
case "call_classification_api":
|
|
29154
|
-
if (!result || typeof result !== "object" || !("classification" in result) && !("error" in result)) throw new Error(`The Python script \`${functionName}\` function must return a dict with a \`classification\` object or \`error\` string, instead of ${JSON.stringify(result)}`);
|
|
29155
|
-
break;
|
|
29156
|
-
default: throw new Error(`Unsupported apiType: ${apiType}`);
|
|
29157
|
-
}
|
|
29158
|
-
const hasError = "error" in result && result.error !== null && result.error !== void 0 && result.error !== "";
|
|
29281
|
+
const result = await this.pool.execute(functionName, args);
|
|
29282
|
+
validatePythonScriptResult(apiType, functionName, result);
|
|
29283
|
+
const hasError = hasPythonResultError(result);
|
|
29159
29284
|
if (isCacheEnabled() && !hasError) {
|
|
29160
29285
|
logger.debug(`PythonProvider caching result: ${cacheKey}`);
|
|
29161
29286
|
await cache.set(cacheKey, JSON.stringify(result));
|
|
29162
29287
|
} else logger.debug(`PythonProvider not caching result: ${isCacheEnabled() ? hasError ? "has error" : "unknown reason" : "cache disabled"}`);
|
|
29163
|
-
|
|
29164
|
-
logger.debug(`PythonProvider explicitly setting cached=false for fresh result`);
|
|
29165
|
-
result.cached = false;
|
|
29166
|
-
if (result.tokenUsage && !result.tokenUsage.numRequests) {
|
|
29167
|
-
result.tokenUsage.numRequests = 1;
|
|
29168
|
-
logger.debug(`Added numRequests to fresh result token usage: ${JSON.stringify(result.tokenUsage)}`);
|
|
29169
|
-
}
|
|
29170
|
-
}
|
|
29171
|
-
return result;
|
|
29288
|
+
return applyFreshCallApiMetadata(apiType, result);
|
|
29172
29289
|
}
|
|
29173
29290
|
}
|
|
29174
29291
|
async callApi(prompt, context) {
|
|
@@ -29455,6 +29572,67 @@ var ReplicateImageProvider = class extends ReplicateProvider {
|
|
|
29455
29572
|
};
|
|
29456
29573
|
//#endregion
|
|
29457
29574
|
//#region src/providers/rubyCompletion.ts
|
|
29575
|
+
function buildRubyScriptArgs(apiType, prompt, optionsWithProcessedConfig, sanitizedContext) {
|
|
29576
|
+
return apiType === "call_api" ? [
|
|
29577
|
+
prompt,
|
|
29578
|
+
optionsWithProcessedConfig,
|
|
29579
|
+
sanitizedContext
|
|
29580
|
+
] : [prompt, optionsWithProcessedConfig];
|
|
29581
|
+
}
|
|
29582
|
+
function hasRubyResultProperty(result, propertyName) {
|
|
29583
|
+
return Boolean(result) && typeof result === "object" && Object.prototype.hasOwnProperty.call(result, propertyName);
|
|
29584
|
+
}
|
|
29585
|
+
function applyCachedRubyCallApiMetadata(apiType, parsedResult) {
|
|
29586
|
+
if (apiType !== "call_api" || typeof parsedResult !== "object" || parsedResult === null) return parsedResult;
|
|
29587
|
+
logger.debug(`RubyProvider setting cached=true for cached ${apiType} result`);
|
|
29588
|
+
parsedResult.cached = true;
|
|
29589
|
+
if (parsedResult.tokenUsage) {
|
|
29590
|
+
const total = parsedResult.tokenUsage.total || 0;
|
|
29591
|
+
parsedResult.tokenUsage = {
|
|
29592
|
+
cached: total,
|
|
29593
|
+
total,
|
|
29594
|
+
numRequests: parsedResult.tokenUsage.numRequests ?? 1
|
|
29595
|
+
};
|
|
29596
|
+
logger.debug(`Updated token usage for cached result: ${JSON.stringify(parsedResult.tokenUsage)}`);
|
|
29597
|
+
}
|
|
29598
|
+
return parsedResult;
|
|
29599
|
+
}
|
|
29600
|
+
function applyFreshRubyCallApiMetadata(apiType, result) {
|
|
29601
|
+
if (apiType !== "call_api" || typeof result !== "object" || result === null) return result;
|
|
29602
|
+
logger.debug(`RubyProvider explicitly setting cached=false for fresh result`);
|
|
29603
|
+
result.cached = false;
|
|
29604
|
+
return result;
|
|
29605
|
+
}
|
|
29606
|
+
function hasRubyResultError(result) {
|
|
29607
|
+
return hasRubyResultProperty(result, "error") && result.error !== null && result.error !== void 0 && result.error !== "";
|
|
29608
|
+
}
|
|
29609
|
+
function validateRubyCallApiResult(functionName, result) {
|
|
29610
|
+
const resultType = result === null ? "null" : typeof result;
|
|
29611
|
+
const resultKeys = result && typeof result === "object" ? Object.keys(result).join(",") : "none";
|
|
29612
|
+
logger.debug(`Ruby provider result structure: ${resultType}, keys: ${resultKeys}`);
|
|
29613
|
+
if (hasRubyResultProperty(result, "output")) logger.debug(`Ruby provider output type: ${typeof result.output}, isArray: ${Array.isArray(result.output)}`);
|
|
29614
|
+
if (!hasRubyResultProperty(result, "output") && !hasRubyResultProperty(result, "error")) throw new Error(`The Ruby script \`${functionName}\` function must return a hash with an own \`output\` string/object or \`error\` string (inherited prototype properties are rejected), instead got: ${JSON.stringify(result)}`);
|
|
29615
|
+
}
|
|
29616
|
+
function validateRubyEmbeddingResult(functionName, result) {
|
|
29617
|
+
if (!hasRubyResultProperty(result, "embedding") && !hasRubyResultProperty(result, "error")) throw new Error(`The Ruby script \`${functionName}\` function must return a hash with an own \`embedding\` array or \`error\` string (inherited prototype properties are rejected), instead got ${JSON.stringify(result)}`);
|
|
29618
|
+
}
|
|
29619
|
+
function validateRubyClassificationResult(functionName, result) {
|
|
29620
|
+
if (!hasRubyResultProperty(result, "classification") && !hasRubyResultProperty(result, "error")) throw new Error(`The Ruby script \`${functionName}\` function must return a hash with an own \`classification\` object or \`error\` string (inherited prototype properties are rejected), instead of ${JSON.stringify(result)}`);
|
|
29621
|
+
}
|
|
29622
|
+
function validateRubyScriptResult(apiType, functionName, result) {
|
|
29623
|
+
switch (apiType) {
|
|
29624
|
+
case "call_api":
|
|
29625
|
+
validateRubyCallApiResult(functionName, result);
|
|
29626
|
+
return;
|
|
29627
|
+
case "call_embedding_api":
|
|
29628
|
+
validateRubyEmbeddingResult(functionName, result);
|
|
29629
|
+
return;
|
|
29630
|
+
case "call_classification_api":
|
|
29631
|
+
validateRubyClassificationResult(functionName, result);
|
|
29632
|
+
return;
|
|
29633
|
+
default: throw new Error(`Unsupported apiType: ${apiType}`);
|
|
29634
|
+
}
|
|
29635
|
+
}
|
|
29458
29636
|
/**
|
|
29459
29637
|
* Ruby provider for executing custom Ruby scripts as API providers.
|
|
29460
29638
|
* Supports text generation, embeddings, and classification tasks.
|
|
@@ -29529,70 +29707,26 @@ var RubyProvider = class {
|
|
|
29529
29707
|
logger.debug(`Returning cached ${apiType} result for script ${absPath}`);
|
|
29530
29708
|
const parsedResult = JSON.parse(cachedResult);
|
|
29531
29709
|
logger.debug(`RubyProvider parsed cached result type: ${typeof parsedResult}, keys: ${Object.keys(parsedResult).join(",")}`);
|
|
29532
|
-
|
|
29533
|
-
logger.debug(`RubyProvider setting cached=true for cached ${apiType} result`);
|
|
29534
|
-
parsedResult.cached = true;
|
|
29535
|
-
if (parsedResult.tokenUsage) {
|
|
29536
|
-
const total = parsedResult.tokenUsage.total || 0;
|
|
29537
|
-
parsedResult.tokenUsage = {
|
|
29538
|
-
cached: total,
|
|
29539
|
-
total,
|
|
29540
|
-
numRequests: parsedResult.tokenUsage.numRequests ?? 1
|
|
29541
|
-
};
|
|
29542
|
-
logger.debug(`Updated token usage for cached result: ${JSON.stringify(parsedResult.tokenUsage)}`);
|
|
29543
|
-
}
|
|
29544
|
-
}
|
|
29545
|
-
return parsedResult;
|
|
29710
|
+
return applyCachedRubyCallApiMetadata(apiType, parsedResult);
|
|
29546
29711
|
} else {
|
|
29547
|
-
const sanitizedContext =
|
|
29548
|
-
|
|
29549
|
-
delete sanitizedContext.getCache;
|
|
29550
|
-
delete sanitizedContext.logger;
|
|
29551
|
-
delete sanitizedContext.filters;
|
|
29552
|
-
delete sanitizedContext.originalProvider;
|
|
29553
|
-
}
|
|
29554
|
-
const optionsWithProcessedConfig = {
|
|
29712
|
+
const sanitizedContext = sanitizeScriptContext("RubyProvider", context);
|
|
29713
|
+
const args = buildRubyScriptArgs(apiType, prompt, {
|
|
29555
29714
|
...this.options,
|
|
29556
29715
|
config: {
|
|
29557
29716
|
...this.options?.config,
|
|
29558
29717
|
...this.config
|
|
29559
29718
|
}
|
|
29560
|
-
};
|
|
29561
|
-
const args = apiType === "call_api" ? [
|
|
29562
|
-
prompt,
|
|
29563
|
-
optionsWithProcessedConfig,
|
|
29564
|
-
sanitizedContext
|
|
29565
|
-
] : [prompt, optionsWithProcessedConfig];
|
|
29719
|
+
}, sanitizedContext);
|
|
29566
29720
|
logger.debug(`Running ruby script ${absPath} with scriptPath ${this.scriptPath} and args: ${safeJsonStringify(args)}`);
|
|
29567
29721
|
const functionName = this.functionName || apiType;
|
|
29568
|
-
|
|
29569
|
-
|
|
29570
|
-
|
|
29571
|
-
result = await runRuby(absPath, functionName, args, { rubyExecutable: this.config.rubyExecutable });
|
|
29572
|
-
logger.debug(`Ruby provider result structure: ${result ? typeof result : "undefined"}, keys: ${result && typeof result === "object" ? Object.keys(result).join(",") : "none"}`);
|
|
29573
|
-
if (result && typeof result === "object" && "output" in result) logger.debug(`Ruby provider output type: ${typeof result.output}, isArray: ${Array.isArray(result.output)}`);
|
|
29574
|
-
if (!result || typeof result !== "object" || !("output" in result) && !("error" in result)) throw new Error(`The Ruby script \`${functionName}\` function must return a hash with an \`output\` string/object or \`error\` string, instead got: ${JSON.stringify(result)}`);
|
|
29575
|
-
break;
|
|
29576
|
-
case "call_embedding_api":
|
|
29577
|
-
result = await runRuby(absPath, functionName, args, { rubyExecutable: this.config.rubyExecutable });
|
|
29578
|
-
if (!result || typeof result !== "object" || !("embedding" in result) && !("error" in result)) throw new Error(`The Ruby script \`${functionName}\` function must return a hash with an \`embedding\` array or \`error\` string, instead got ${JSON.stringify(result)}`);
|
|
29579
|
-
break;
|
|
29580
|
-
case "call_classification_api":
|
|
29581
|
-
result = await runRuby(absPath, functionName, args, { rubyExecutable: this.config.rubyExecutable });
|
|
29582
|
-
if (!result || typeof result !== "object" || !("classification" in result) && !("error" in result)) throw new Error(`The Ruby script \`${functionName}\` function must return a hash with a \`classification\` object or \`error\` string, instead of ${JSON.stringify(result)}`);
|
|
29583
|
-
break;
|
|
29584
|
-
default: throw new Error(`Unsupported apiType: ${apiType}`);
|
|
29585
|
-
}
|
|
29586
|
-
const hasError = "error" in result && result.error !== null && result.error !== void 0 && result.error !== "";
|
|
29722
|
+
const result = await runRuby(absPath, functionName, args, { rubyExecutable: this.config.rubyExecutable });
|
|
29723
|
+
validateRubyScriptResult(apiType, functionName, result);
|
|
29724
|
+
const hasError = hasRubyResultError(result);
|
|
29587
29725
|
if (isCacheEnabled() && !hasError) {
|
|
29588
29726
|
logger.debug(`RubyProvider caching result: ${cacheKey}`);
|
|
29589
29727
|
await cache.set(cacheKey, JSON.stringify(result));
|
|
29590
29728
|
} else logger.debug(`RubyProvider not caching result: ${isCacheEnabled() ? hasError ? "has error" : "unknown reason" : "cache disabled"}`);
|
|
29591
|
-
|
|
29592
|
-
logger.debug(`RubyProvider explicitly setting cached=false for fresh result`);
|
|
29593
|
-
result.cached = false;
|
|
29594
|
-
}
|
|
29595
|
-
return result;
|
|
29729
|
+
return applyFreshRubyCallApiMetadata(apiType, result);
|
|
29596
29730
|
}
|
|
29597
29731
|
}
|
|
29598
29732
|
/**
|
|
@@ -29728,7 +29862,7 @@ var ScriptCompletionProvider = class {
|
|
|
29728
29862
|
const result = { output: standardOutput };
|
|
29729
29863
|
if (fileHashes.length > 0 && isCacheEnabled()) await (await getCache()).set(cacheKey, JSON.stringify(result));
|
|
29730
29864
|
resolve(result);
|
|
29731
|
-
});
|
|
29865
|
+
}).stdin?.end();
|
|
29732
29866
|
});
|
|
29733
29867
|
}
|
|
29734
29868
|
};
|
|
@@ -32549,6 +32683,15 @@ const providerMap = [
|
|
|
32549
32683
|
createScriptBasedProviderFactory("golang", "go", GolangProvider),
|
|
32550
32684
|
createScriptBasedProviderFactory("python", "py", PythonProvider),
|
|
32551
32685
|
createScriptBasedProviderFactory("ruby", "rb", RubyProvider),
|
|
32686
|
+
{
|
|
32687
|
+
test: (providerPath) => providerPath.startsWith("abliteration:"),
|
|
32688
|
+
create: async (providerPath, providerOptions, context) => {
|
|
32689
|
+
return createAbliterationProvider(providerPath, {
|
|
32690
|
+
config: providerOptions,
|
|
32691
|
+
env: context.env
|
|
32692
|
+
});
|
|
32693
|
+
}
|
|
32694
|
+
},
|
|
32552
32695
|
{
|
|
32553
32696
|
test: (providerPath) => providerPath === "agentic:memory-poisoning",
|
|
32554
32697
|
create: async (_providerPath, providerOptions, _context) => {
|
|
@@ -32575,7 +32718,7 @@ const providerMap = [
|
|
|
32575
32718
|
{
|
|
32576
32719
|
test: (providerPath) => providerPath.startsWith("opencode:") || providerPath === "opencode",
|
|
32577
32720
|
create: async (providerPath, providerOptions, context) => {
|
|
32578
|
-
const { OpenCodeSDKProvider } = await import("./opencode-sdk-
|
|
32721
|
+
const { OpenCodeSDKProvider } = await import("./opencode-sdk-BB40Wir1.js");
|
|
32579
32722
|
return new OpenCodeSDKProvider({
|
|
32580
32723
|
...providerOptions,
|
|
32581
32724
|
id: providerPath,
|
|
@@ -32587,14 +32730,14 @@ const providerMap = [
|
|
|
32587
32730
|
{
|
|
32588
32731
|
test: (providerPath) => providerPath.startsWith("openclaw:") || providerPath === "openclaw",
|
|
32589
32732
|
create: async (providerPath, providerOptions, context) => {
|
|
32590
|
-
const { createOpenClawProvider } = await import("./openclaw-
|
|
32733
|
+
const { createOpenClawProvider } = await import("./openclaw-Bq7RVR3k.js");
|
|
32591
32734
|
return createOpenClawProvider(providerPath, providerOptions, context.env);
|
|
32592
32735
|
}
|
|
32593
32736
|
},
|
|
32594
32737
|
{
|
|
32595
32738
|
test: (providerPath) => providerPath.startsWith("anthropic:claude-agent-sdk") || providerPath.startsWith("anthropic:claude-code"),
|
|
32596
32739
|
create: async (_providerPath, providerOptions, _context) => {
|
|
32597
|
-
const { ClaudeCodeSDKProvider } = await import("./claude-agent-sdk-
|
|
32740
|
+
const { ClaudeCodeSDKProvider } = await import("./claude-agent-sdk-BzNZeZ0N.js");
|
|
32598
32741
|
return new ClaudeCodeSDKProvider({ ...providerOptions });
|
|
32599
32742
|
}
|
|
32600
32743
|
},
|
|
@@ -32650,25 +32793,25 @@ const providerMap = [
|
|
|
32650
32793
|
const modelName = splits.slice(2).join(":");
|
|
32651
32794
|
if (modelType === "converse") return new AwsBedrockConverseProvider(modelName, providerOptions);
|
|
32652
32795
|
if (modelType === "nova-sonic" || modelType.includes("amazon.nova-sonic")) {
|
|
32653
|
-
const { NovaSonicProvider } = await import("./nova-sonic-
|
|
32796
|
+
const { NovaSonicProvider } = await import("./nova-sonic-BeTRaFOh.js");
|
|
32654
32797
|
return new NovaSonicProvider("amazon.nova-sonic-v1:0", providerOptions);
|
|
32655
32798
|
}
|
|
32656
32799
|
if (modelType.includes("luma.ray") || modelName.includes("luma.ray")) {
|
|
32657
|
-
const { LumaRayVideoProvider } = await import("./luma-ray-
|
|
32800
|
+
const { LumaRayVideoProvider } = await import("./luma-ray-B-tNZzqW.js");
|
|
32658
32801
|
return new LumaRayVideoProvider(modelName.includes("luma.ray") ? modelName : splits.slice(1).join(":") || "luma.ray-v2:0", providerOptions);
|
|
32659
32802
|
}
|
|
32660
32803
|
if (modelType.includes("amazon.nova-reel") || modelType === "video" && (modelName.includes("amazon.nova-reel") || modelName === "")) {
|
|
32661
|
-
const { NovaReelVideoProvider } = await import("./nova-reel-
|
|
32804
|
+
const { NovaReelVideoProvider } = await import("./nova-reel-CNGJTLtG.js");
|
|
32662
32805
|
return new NovaReelVideoProvider(modelName || "amazon.nova-reel-v1:1", providerOptions);
|
|
32663
32806
|
}
|
|
32664
32807
|
if (modelType === "agents") {
|
|
32665
|
-
const { AwsBedrockAgentsProvider } = await import("./agents-
|
|
32808
|
+
const { AwsBedrockAgentsProvider } = await import("./agents-BGqaTDnr.js");
|
|
32666
32809
|
return new AwsBedrockAgentsProvider(modelName, providerOptions);
|
|
32667
32810
|
}
|
|
32668
32811
|
if (modelType === "completion") return new AwsBedrockCompletionProvider(modelName, providerOptions);
|
|
32669
32812
|
if (modelType === "embeddings" || modelType === "embedding") return new AwsBedrockEmbeddingProvider(modelName, providerOptions);
|
|
32670
32813
|
if (modelType === "kb" || modelType === "knowledge-base") {
|
|
32671
|
-
const { AwsBedrockKnowledgeBaseProvider } = await import("./knowledgeBase-
|
|
32814
|
+
const { AwsBedrockKnowledgeBaseProvider } = await import("./knowledgeBase-BBETc5-S.js");
|
|
32672
32815
|
return new AwsBedrockKnowledgeBaseProvider(modelName, providerOptions);
|
|
32673
32816
|
}
|
|
32674
32817
|
return new AwsBedrockCompletionProvider(splits.slice(1).join(":"), providerOptions);
|
|
@@ -32678,7 +32821,7 @@ const providerMap = [
|
|
|
32678
32821
|
test: (providerPath) => providerPath.startsWith("bedrock-agent:"),
|
|
32679
32822
|
create: async (providerPath, providerOptions, _context) => {
|
|
32680
32823
|
const agentId = providerPath.substring(14);
|
|
32681
|
-
const { AwsBedrockAgentsProvider } = await import("./agents-
|
|
32824
|
+
const { AwsBedrockAgentsProvider } = await import("./agents-BGqaTDnr.js");
|
|
32682
32825
|
return new AwsBedrockAgentsProvider(agentId, providerOptions);
|
|
32683
32826
|
}
|
|
32684
32827
|
},
|
|
@@ -32688,7 +32831,7 @@ const providerMap = [
|
|
|
32688
32831
|
const splits = providerPath.split(":");
|
|
32689
32832
|
const modelType = splits[1];
|
|
32690
32833
|
const endpointName = splits.slice(2).join(":");
|
|
32691
|
-
const { SageMakerCompletionProvider, SageMakerEmbeddingProvider } = await import("./sagemaker-
|
|
32834
|
+
const { SageMakerCompletionProvider, SageMakerEmbeddingProvider } = await import("./sagemaker-ClS_NB07.js");
|
|
32692
32835
|
if (modelType === "embedding" || modelType === "embeddings") return new SageMakerEmbeddingProvider(endpointName || modelType, providerOptions);
|
|
32693
32836
|
if (splits.length === 2) return new SageMakerCompletionProvider(modelType, providerOptions);
|
|
32694
32837
|
if (endpointName.includes("jumpstart") || modelType === "jumpstart") return new SageMakerCompletionProvider(endpointName, {
|
|
@@ -32729,7 +32872,7 @@ const providerMap = [
|
|
|
32729
32872
|
{
|
|
32730
32873
|
test: (providerPath) => providerPath.startsWith("cloudflare-ai:"),
|
|
32731
32874
|
create: async (providerPath, providerOptions, context) => {
|
|
32732
|
-
const { createCloudflareAiProvider } = await import("./cloudflare-ai-
|
|
32875
|
+
const { createCloudflareAiProvider } = await import("./cloudflare-ai-DGOwgexC.js");
|
|
32733
32876
|
return createCloudflareAiProvider(providerPath, {
|
|
32734
32877
|
...providerOptions,
|
|
32735
32878
|
env: context.env
|
|
@@ -32739,7 +32882,7 @@ const providerMap = [
|
|
|
32739
32882
|
{
|
|
32740
32883
|
test: (providerPath) => providerPath.startsWith("cloudflare-gateway:"),
|
|
32741
32884
|
create: async (providerPath, providerOptions, context) => {
|
|
32742
|
-
const { createCloudflareGatewayProvider } = await import("./cloudflare-gateway-
|
|
32885
|
+
const { createCloudflareGatewayProvider } = await import("./cloudflare-gateway-D-dnkzCF.js");
|
|
32743
32886
|
return createCloudflareGatewayProvider(providerPath, {
|
|
32744
32887
|
...providerOptions,
|
|
32745
32888
|
env: context.env
|
|
@@ -32891,27 +33034,27 @@ const providerMap = [
|
|
|
32891
33034
|
create: async (providerPath, providerOptions, context) => {
|
|
32892
33035
|
const modelType = providerPath.split(":")[1];
|
|
32893
33036
|
if (modelType === "image") {
|
|
32894
|
-
const { createHyperbolicImageProvider } = await import("./image-
|
|
33037
|
+
const { createHyperbolicImageProvider } = await import("./image-qjO6FWPs.js");
|
|
32895
33038
|
return createHyperbolicImageProvider(providerPath, {
|
|
32896
33039
|
...providerOptions,
|
|
32897
33040
|
env: context.env
|
|
32898
33041
|
});
|
|
32899
33042
|
}
|
|
32900
33043
|
if (modelType === "audio") {
|
|
32901
|
-
const { createHyperbolicAudioProvider } = await import("./audio-
|
|
33044
|
+
const { createHyperbolicAudioProvider } = await import("./audio-BvpTOArF.js");
|
|
32902
33045
|
return createHyperbolicAudioProvider(providerPath, {
|
|
32903
33046
|
...providerOptions,
|
|
32904
33047
|
env: context.env
|
|
32905
33048
|
});
|
|
32906
33049
|
}
|
|
32907
|
-
const { createHyperbolicProvider } = await import("./chat-
|
|
33050
|
+
const { createHyperbolicProvider } = await import("./chat-aMQZw6R7.js");
|
|
32908
33051
|
return createHyperbolicProvider(providerPath, providerOptions);
|
|
32909
33052
|
}
|
|
32910
33053
|
},
|
|
32911
33054
|
{
|
|
32912
33055
|
test: (providerPath) => providerPath.startsWith("litellm:"),
|
|
32913
33056
|
create: async (providerPath, providerOptions, context) => {
|
|
32914
|
-
const { createLiteLLMProvider } = await import("./litellm-
|
|
33057
|
+
const { createLiteLLMProvider } = await import("./litellm-DRc4qWfc.js");
|
|
32915
33058
|
return createLiteLLMProvider(providerPath, {
|
|
32916
33059
|
config: providerOptions,
|
|
32917
33060
|
env: context.env
|
|
@@ -32967,8 +33110,25 @@ const providerMap = [
|
|
|
32967
33110
|
const modelType = splits[1];
|
|
32968
33111
|
const modelName = splits.slice(2).join(":");
|
|
32969
33112
|
const configuredModel = getConfiguredOpenAiModel(providerOptions);
|
|
33113
|
+
if (modelType === "codex-app-server" || modelType === "codex-desktop") {
|
|
33114
|
+
const { OpenAICodexAppServerProvider } = await import("./codex-app-server-CCLjqCh9.js");
|
|
33115
|
+
const codexModel = modelName || configuredModel;
|
|
33116
|
+
const codexProviderId = providerOptions.id ?? providerPath;
|
|
33117
|
+
return new OpenAICodexAppServerProvider({
|
|
33118
|
+
...providerOptions,
|
|
33119
|
+
id: codexProviderId,
|
|
33120
|
+
config: codexModel ? {
|
|
33121
|
+
...providerOptions.config,
|
|
33122
|
+
model: codexModel
|
|
33123
|
+
} : providerOptions.config,
|
|
33124
|
+
env: {
|
|
33125
|
+
...context.env,
|
|
33126
|
+
...providerOptions.env
|
|
33127
|
+
}
|
|
33128
|
+
});
|
|
33129
|
+
}
|
|
32970
33130
|
if (modelType === "codex-sdk" || modelType === "codex") {
|
|
32971
|
-
const { OpenAICodexSDKProvider } = await import("./codex-sdk-
|
|
33131
|
+
const { OpenAICodexSDKProvider } = await import("./codex-sdk-Bzb_TqX9.js").then((n) => n.n);
|
|
32972
33132
|
const codexModel = modelName || configuredModel;
|
|
32973
33133
|
const codexProviderId = providerOptions.id ?? providerPath;
|
|
32974
33134
|
return new OpenAICodexSDKProvider({
|
|
@@ -32988,7 +33148,7 @@ const providerMap = [
|
|
|
32988
33148
|
if (modelType === "realtime") return new OpenAiRealtimeProvider(modelName || configuredModel || "gpt-4o-realtime-preview-2024-12-17", providerOptions);
|
|
32989
33149
|
if (modelType === "responses") return new OpenAiResponsesProvider(modelName || configuredModel || "gpt-4.1-2025-04-14", providerOptions);
|
|
32990
33150
|
if (modelType === "transcription") {
|
|
32991
|
-
const { OpenAiTranscriptionProvider } = await import("./transcription-
|
|
33151
|
+
const { OpenAiTranscriptionProvider } = await import("./transcription-D7Q0vJsh.js");
|
|
32992
33152
|
return new OpenAiTranscriptionProvider(modelName || configuredModel || "gpt-4o-transcribe-diarize", providerOptions);
|
|
32993
33153
|
}
|
|
32994
33154
|
if (OpenAiChatCompletionProvider.OPENAI_CHAT_MODEL_NAMES.includes(modelType)) return new OpenAiChatCompletionProvider(modelType, providerOptions);
|
|
@@ -32996,11 +33156,11 @@ const providerMap = [
|
|
|
32996
33156
|
if (OpenAiRealtimeProvider.OPENAI_REALTIME_MODEL_NAMES.includes(modelType)) return new OpenAiRealtimeProvider(modelType, providerOptions);
|
|
32997
33157
|
if (OpenAiResponsesProvider.OPENAI_RESPONSES_MODEL_NAMES.includes(modelType)) return new OpenAiResponsesProvider(modelType, providerOptions);
|
|
32998
33158
|
if (modelType === "agents") {
|
|
32999
|
-
const { OpenAiAgentsProvider } = await import("./agents-
|
|
33159
|
+
const { OpenAiAgentsProvider } = await import("./agents-emVcx3yh.js");
|
|
33000
33160
|
return new OpenAiAgentsProvider(modelName || "default-agent", providerOptions);
|
|
33001
33161
|
}
|
|
33002
33162
|
if (modelType === "chatkit") {
|
|
33003
|
-
const { OpenAiChatKitProvider } = await import("./chatkit-
|
|
33163
|
+
const { OpenAiChatKitProvider } = await import("./chatkit-CbMRoeYw.js");
|
|
33004
33164
|
return new OpenAiChatKitProvider(modelName || "", providerOptions);
|
|
33005
33165
|
}
|
|
33006
33166
|
if (modelType === "assistant") return new OpenAiAssistantProvider(modelName, providerOptions);
|
|
@@ -33043,7 +33203,7 @@ const providerMap = [
|
|
|
33043
33203
|
{
|
|
33044
33204
|
test: (providerPath) => providerPath.startsWith("quiverai:"),
|
|
33045
33205
|
create: async (providerPath, providerOptions, context) => {
|
|
33046
|
-
const { createQuiverAiProvider } = await import("./quiverai-
|
|
33206
|
+
const { createQuiverAiProvider } = await import("./quiverai-Bk1KrvL6.js");
|
|
33047
33207
|
return createQuiverAiProvider(providerPath, providerOptions, context.env);
|
|
33048
33208
|
}
|
|
33049
33209
|
},
|
|
@@ -33061,7 +33221,7 @@ const providerMap = [
|
|
|
33061
33221
|
{
|
|
33062
33222
|
test: (providerPath) => providerPath.startsWith("modelslab:"),
|
|
33063
33223
|
create: async (providerPath, providerOptions, context) => {
|
|
33064
|
-
const { ModelsLabImageProvider } = await import("./modelslab-
|
|
33224
|
+
const { ModelsLabImageProvider } = await import("./modelslab-zpz9JcK0.js");
|
|
33065
33225
|
const splits = providerPath.split(":");
|
|
33066
33226
|
const modelType = splits[1];
|
|
33067
33227
|
const modelName = splits.slice(2).join(":");
|
|
@@ -33105,7 +33265,7 @@ const providerMap = [
|
|
|
33105
33265
|
{
|
|
33106
33266
|
test: (providerPath) => providerPath.startsWith("aimlapi:"),
|
|
33107
33267
|
create: async (providerPath, providerOptions, context) => {
|
|
33108
|
-
const { createAimlApiProvider } = await import("./aimlapi-
|
|
33268
|
+
const { createAimlApiProvider } = await import("./aimlapi-uPGp0Zdo.js");
|
|
33109
33269
|
return createAimlApiProvider(providerPath, {
|
|
33110
33270
|
...providerOptions,
|
|
33111
33271
|
env: context.env
|
|
@@ -33115,7 +33275,7 @@ const providerMap = [
|
|
|
33115
33275
|
{
|
|
33116
33276
|
test: (providerPath) => providerPath.startsWith("cometapi:"),
|
|
33117
33277
|
create: async (providerPath, providerOptions, context) => {
|
|
33118
|
-
const { createCometApiProvider } = await import("./cometapi-
|
|
33278
|
+
const { createCometApiProvider } = await import("./cometapi-CC7hWxmX.js");
|
|
33119
33279
|
return createCometApiProvider(providerPath, {
|
|
33120
33280
|
...providerOptions,
|
|
33121
33281
|
env: context.env
|
|
@@ -33125,7 +33285,7 @@ const providerMap = [
|
|
|
33125
33285
|
{
|
|
33126
33286
|
test: (providerPath) => providerPath.startsWith("docker:"),
|
|
33127
33287
|
create: async (providerPath, providerOptions, context) => {
|
|
33128
|
-
const { createDockerProvider } = await import("./docker-
|
|
33288
|
+
const { createDockerProvider } = await import("./docker--3qzPa-6.js");
|
|
33129
33289
|
return createDockerProvider(providerPath, {
|
|
33130
33290
|
...providerOptions,
|
|
33131
33291
|
env: context.env
|
|
@@ -33402,7 +33562,7 @@ const providerMap = [
|
|
|
33402
33562
|
{
|
|
33403
33563
|
test: (providerPath) => providerPath.startsWith("transformers:") || providerPath.startsWith("transformers.js:"),
|
|
33404
33564
|
create: async (providerPath, providerOptions, _context) => {
|
|
33405
|
-
const { validateTransformersDependency } = await import("./transformersAvailability-
|
|
33565
|
+
const { validateTransformersDependency } = await import("./transformersAvailability-lvCCvuPT.js");
|
|
33406
33566
|
await validateTransformersDependency();
|
|
33407
33567
|
const splits = providerPath.split(":");
|
|
33408
33568
|
if (splits.length < 3) throw new Error(`Invalid Transformers.js provider path: ${providerPath}. Format: transformers:<task>:<model>
|
|
@@ -33422,7 +33582,7 @@ Example: transformers:feature-extraction:Xenova/all-MiniLM-L6-v2`);
|
|
|
33422
33582
|
test: (providerPath) => providerPath === "slack" || providerPath.startsWith("slack:"),
|
|
33423
33583
|
create: async (providerPath, providerOptions, _context) => {
|
|
33424
33584
|
try {
|
|
33425
|
-
const { SlackProvider } = await import("./slack-
|
|
33585
|
+
const { SlackProvider } = await import("./slack-Bamy_7te.js");
|
|
33426
33586
|
if (providerPath === "slack") return new SlackProvider(providerOptions);
|
|
33427
33587
|
const splits = providerPath.split(":");
|
|
33428
33588
|
if (splits.length < 2) throw new Error("Invalid Slack provider path. Use slack:<channel_id> or slack:channel:<channel_id>");
|
|
@@ -33461,6 +33621,17 @@ Example: transformers:feature-extraction:Xenova/all-MiniLM-L6-v2`);
|
|
|
33461
33621
|
];
|
|
33462
33622
|
//#endregion
|
|
33463
33623
|
//#region src/providers/index.ts
|
|
33624
|
+
function describeInvalidProvider(provider) {
|
|
33625
|
+
try {
|
|
33626
|
+
return (safeJsonStringify(sanitizeObject(provider, {
|
|
33627
|
+
context: "invalid provider config",
|
|
33628
|
+
throwOnError: true
|
|
33629
|
+
})) ?? Object.prototype.toString.call(provider)).slice(0, 200);
|
|
33630
|
+
} catch (err) {
|
|
33631
|
+
logger.debug("Failed to sanitize invalid provider for error message", { error: err });
|
|
33632
|
+
return Object.prototype.toString.call(provider);
|
|
33633
|
+
}
|
|
33634
|
+
}
|
|
33464
33635
|
async function loadApiProvider(providerPath, context = {}) {
|
|
33465
33636
|
const { options = {}, basePath, env } = context;
|
|
33466
33637
|
const mergedEnv = env || options.env ? {
|
|
@@ -33507,17 +33678,19 @@ async function loadApiProvider(providerPath, context = {}) {
|
|
|
33507
33678
|
};
|
|
33508
33679
|
return loadApiProvider(cloudProvider.id, mergedContext);
|
|
33509
33680
|
}
|
|
33510
|
-
if (
|
|
33511
|
-
const
|
|
33512
|
-
const
|
|
33513
|
-
|
|
33514
|
-
|
|
33515
|
-
|
|
33516
|
-
|
|
33517
|
-
|
|
33518
|
-
|
|
33681
|
+
if (isProviderConfigFileReference(renderedProviderPath)) {
|
|
33682
|
+
const { configs, relativePath, wasArray } = readProviderConfigFile(renderedProviderPath, basePath);
|
|
33683
|
+
const fileContent = configs[0];
|
|
33684
|
+
invariant(fileContent, `Provider config file ${relativePath} contains no providers`);
|
|
33685
|
+
if (wasArray) throw new Error(`Multiple providers found in ${relativePath}. Use loadApiProviders instead of loadApiProvider.`);
|
|
33686
|
+
invariant(fileContent.id, `Provider config ${relativePath} must have an id`);
|
|
33687
|
+
logger.info("Loaded provider from config file", {
|
|
33688
|
+
providerConfigPath: relativePath,
|
|
33689
|
+
providerId: fileContent.id
|
|
33690
|
+
});
|
|
33691
|
+
const mergedFileEnv = fileContent.env || mergedEnv ? {
|
|
33519
33692
|
...fileContent.env,
|
|
33520
|
-
...
|
|
33693
|
+
...mergedEnv
|
|
33521
33694
|
} : void 0;
|
|
33522
33695
|
return loadApiProvider(fileContent.id, {
|
|
33523
33696
|
basePath,
|
|
@@ -33532,7 +33705,7 @@ async function loadApiProvider(providerPath, context = {}) {
|
|
|
33532
33705
|
ret.transform = options.transform;
|
|
33533
33706
|
ret.delay = options.delay;
|
|
33534
33707
|
ret.inputs = options.inputs;
|
|
33535
|
-
ret.label ||= renderEnvOnlyInObject(
|
|
33708
|
+
ret.label ||= renderEnvOnlyInObject(options.label || "", mergedEnv);
|
|
33536
33709
|
return ret;
|
|
33537
33710
|
}
|
|
33538
33711
|
const errorMessage = dedent`
|
|
@@ -33547,46 +33720,31 @@ async function loadApiProvider(providerPath, context = {}) {
|
|
|
33547
33720
|
throw new Error(errorMessage);
|
|
33548
33721
|
}
|
|
33549
33722
|
/**
|
|
33550
|
-
* Helper function to resolve provider from various formats (string, object, function)
|
|
33551
|
-
*
|
|
33723
|
+
* Helper function to resolve provider from various formats (string, object, function).
|
|
33724
|
+
* Checks the resolved provider cache first and falls back to loadApiProvider for uncached providers.
|
|
33552
33725
|
*/
|
|
33553
|
-
async function resolveProvider(provider,
|
|
33726
|
+
async function resolveProvider(provider, resolvedProviders, context = {}) {
|
|
33554
33727
|
if (provider == null) throw new Error("Provider cannot be null or undefined");
|
|
33555
33728
|
if (typeof provider === "string") {
|
|
33556
|
-
if (
|
|
33729
|
+
if (resolvedProviders[provider]) return resolvedProviders[provider];
|
|
33557
33730
|
const loadOptions = {};
|
|
33558
33731
|
if (context.env) loadOptions.env = context.env;
|
|
33559
33732
|
if (context.basePath) loadOptions.basePath = context.basePath;
|
|
33560
33733
|
return await loadApiProvider(provider, loadOptions);
|
|
33561
33734
|
} else if (typeof provider === "object") {
|
|
33562
|
-
const
|
|
33563
|
-
invariant(
|
|
33564
|
-
const loadOptions = { options:
|
|
33735
|
+
const descriptor = normalizeProviderRef(provider);
|
|
33736
|
+
invariant(descriptor.kind === "options" || descriptor.kind === "map", `Provider object must have an 'id' field or be a ProviderOptionsMap (e.g. { "openai:responses:gpt-5.4": { config: ... } }). Got: ${describeInvalidProvider(provider)}`);
|
|
33737
|
+
const loadOptions = { options: descriptor.loadOptions };
|
|
33565
33738
|
if (context.env) loadOptions.env = context.env;
|
|
33566
33739
|
if (context.basePath) loadOptions.basePath = context.basePath;
|
|
33567
|
-
return await loadApiProvider(
|
|
33568
|
-
} else if (typeof provider === "function")
|
|
33569
|
-
|
|
33570
|
-
|
|
33571
|
-
|
|
33572
|
-
|
|
33573
|
-
}
|
|
33574
|
-
|
|
33575
|
-
* Helper function to load provider configs from a file path without instantiating them.
|
|
33576
|
-
* Returns the raw ProviderOptions with all fields (including `prompts`) intact.
|
|
33577
|
-
*/
|
|
33578
|
-
function loadProviderConfigsFromFile(filePath, basePath) {
|
|
33579
|
-
const relativePath = filePath.slice(7);
|
|
33580
|
-
const modulePath = path.isAbsolute(relativePath) ? relativePath : path.join(basePath || process.cwd(), relativePath);
|
|
33581
|
-
const fileContent = maybeLoadConfigFromExternalFile(yaml.load(fs.readFileSync(modulePath, "utf8")));
|
|
33582
|
-
invariant(fileContent, `Provider config ${relativePath} is undefined`);
|
|
33583
|
-
return [fileContent].flat();
|
|
33584
|
-
}
|
|
33585
|
-
/**
|
|
33586
|
-
* Checks if a string is a file:// reference to a YAML/JSON config file.
|
|
33587
|
-
*/
|
|
33588
|
-
function isFileReference(str) {
|
|
33589
|
-
return str.startsWith("file://") && (str.endsWith(".yaml") || str.endsWith(".yml") || str.endsWith(".json"));
|
|
33740
|
+
return await loadApiProvider(descriptor.loadProviderPath, loadOptions);
|
|
33741
|
+
} else if (typeof provider === "function") {
|
|
33742
|
+
const descriptor = normalizeProviderRef(provider);
|
|
33743
|
+
return {
|
|
33744
|
+
id: () => descriptor.id,
|
|
33745
|
+
callApi: provider
|
|
33746
|
+
};
|
|
33747
|
+
} else throw new Error("Invalid provider type");
|
|
33590
33748
|
}
|
|
33591
33749
|
/**
|
|
33592
33750
|
* Resolves raw provider configurations, loading file:// references.
|
|
@@ -33601,16 +33759,18 @@ function isFileReference(str) {
|
|
|
33601
33759
|
function resolveProviderConfigs(providerPaths, options = {}) {
|
|
33602
33760
|
const { basePath } = options;
|
|
33603
33761
|
if (typeof providerPaths === "string") {
|
|
33604
|
-
if (
|
|
33762
|
+
if (isProviderConfigFileReference(providerPaths)) return loadProviderConfigsFromFile(providerPaths, basePath);
|
|
33605
33763
|
return providerPaths;
|
|
33606
33764
|
}
|
|
33607
33765
|
if (typeof providerPaths === "function") return providerPaths;
|
|
33608
33766
|
if (!Array.isArray(providerPaths)) return providerPaths;
|
|
33609
33767
|
const results = [];
|
|
33610
|
-
for (const provider of providerPaths)
|
|
33611
|
-
|
|
33612
|
-
|
|
33613
|
-
|
|
33768
|
+
for (const provider of providerPaths) {
|
|
33769
|
+
const descriptor = normalizeProviderRef(provider);
|
|
33770
|
+
if (descriptor.kind === "file") results.push(...loadProviderConfigsFromFile(descriptor.loadProviderPath, basePath));
|
|
33771
|
+
else if (descriptor.kind === "named") results.push(descriptor.loadProviderPath);
|
|
33772
|
+
else results.push(provider);
|
|
33773
|
+
}
|
|
33614
33774
|
return results;
|
|
33615
33775
|
}
|
|
33616
33776
|
/**
|
|
@@ -33637,7 +33797,7 @@ async function loadApiProviders(providerPaths, options = {}) {
|
|
|
33637
33797
|
...options.env
|
|
33638
33798
|
};
|
|
33639
33799
|
if (typeof providerPaths === "string") {
|
|
33640
|
-
if (
|
|
33800
|
+
if (isProviderConfigFileReference(providerPaths)) return loadProvidersFromFile(providerPaths, {
|
|
33641
33801
|
basePath,
|
|
33642
33802
|
env
|
|
33643
33803
|
});
|
|
@@ -33650,45 +33810,35 @@ async function loadApiProviders(providerPaths, options = {}) {
|
|
|
33650
33810
|
callApi: providerPaths
|
|
33651
33811
|
}];
|
|
33652
33812
|
else if (Array.isArray(providerPaths)) return (await Promise.all(providerPaths.map(async (provider, idx) => {
|
|
33653
|
-
|
|
33654
|
-
|
|
33813
|
+
const descriptor = normalizeProviderRef(provider, { index: idx });
|
|
33814
|
+
switch (descriptor.kind) {
|
|
33815
|
+
case "file": return loadProvidersFromFile(descriptor.loadProviderPath, {
|
|
33655
33816
|
basePath,
|
|
33656
33817
|
env
|
|
33657
33818
|
});
|
|
33658
|
-
return [await loadApiProvider(
|
|
33819
|
+
case "named": return [await loadApiProvider(descriptor.loadProviderPath, {
|
|
33820
|
+
basePath,
|
|
33821
|
+
env
|
|
33822
|
+
})];
|
|
33823
|
+
case "function": return [{
|
|
33824
|
+
id: () => descriptor.id,
|
|
33825
|
+
callApi: provider
|
|
33826
|
+
}];
|
|
33827
|
+
case "options":
|
|
33828
|
+
case "map": return [await loadApiProvider(descriptor.loadProviderPath, {
|
|
33829
|
+
options: descriptor.loadOptions,
|
|
33659
33830
|
basePath,
|
|
33660
33831
|
env
|
|
33661
33832
|
})];
|
|
33833
|
+
case "unknown": throw new Error(`Invalid provider at index ${idx}: expected a provider id string, ProviderOptions with an 'id' field, or a ProviderOptionsMap (e.g. { "openai:responses:gpt-5.4": { config: ... } }). Got: ${describeInvalidProvider(provider)}`);
|
|
33834
|
+
default: throw new Error(`Unhandled provider kind: ${descriptor.kind}`);
|
|
33662
33835
|
}
|
|
33663
|
-
if (typeof provider === "function") return [{
|
|
33664
|
-
id: () => provider.label ?? `custom-function-${idx}`,
|
|
33665
|
-
callApi: provider
|
|
33666
|
-
}];
|
|
33667
|
-
if (provider.id) return [await loadApiProvider(provider.id, {
|
|
33668
|
-
options: provider,
|
|
33669
|
-
basePath,
|
|
33670
|
-
env
|
|
33671
|
-
})];
|
|
33672
|
-
const id = Object.keys(provider)[0];
|
|
33673
|
-
const providerObject = provider[id];
|
|
33674
|
-
return [await loadApiProvider(id, {
|
|
33675
|
-
options: {
|
|
33676
|
-
...providerObject,
|
|
33677
|
-
id: providerObject.id || id
|
|
33678
|
-
},
|
|
33679
|
-
basePath,
|
|
33680
|
-
env
|
|
33681
|
-
})];
|
|
33682
33836
|
}))).flat();
|
|
33683
33837
|
throw new Error("Invalid providers list");
|
|
33684
33838
|
}
|
|
33685
33839
|
/**
|
|
33686
|
-
*
|
|
33687
|
-
*
|
|
33688
|
-
* object.
|
|
33689
|
-
*
|
|
33690
|
-
* @param providerPaths - The list of providers to get the IDs of.
|
|
33691
|
-
* @returns The IDs of the providers in the providerPaths list.
|
|
33840
|
+
* Reads a provider config file and returns the IDs of all providers defined in it.
|
|
33841
|
+
* Requires every provider entry to have an `id` field.
|
|
33692
33842
|
*/
|
|
33693
33843
|
function getProviderIdsFromFile(providerPath) {
|
|
33694
33844
|
const configs = loadProviderConfigsFromFile(providerPath, state.basePath || process.cwd());
|
|
@@ -33698,24 +33848,25 @@ function getProviderIdsFromFile(providerPath) {
|
|
|
33698
33848
|
return config.id;
|
|
33699
33849
|
});
|
|
33700
33850
|
}
|
|
33851
|
+
/**
|
|
33852
|
+
* Extracts provider IDs from a provider paths configuration without instantiating providers.
|
|
33853
|
+
* Handles strings, functions, and arrays of mixed provider types.
|
|
33854
|
+
* For file:// references, reads the config file to extract IDs.
|
|
33855
|
+
*/
|
|
33701
33856
|
function getProviderIds(providerPaths) {
|
|
33702
33857
|
if (typeof providerPaths === "string") {
|
|
33703
|
-
if (
|
|
33858
|
+
if (isProviderConfigFileReference(providerPaths)) return getProviderIdsFromFile(providerPaths);
|
|
33704
33859
|
return [providerPaths];
|
|
33705
33860
|
} else if (typeof providerPaths === "function") return ["custom-function"];
|
|
33706
33861
|
else if (Array.isArray(providerPaths)) return providerPaths.flatMap((provider, idx) => {
|
|
33707
|
-
|
|
33708
|
-
|
|
33709
|
-
|
|
33710
|
-
|
|
33711
|
-
if (typeof provider === "function") return provider.label || `custom-function-${idx}`;
|
|
33712
|
-
if (provider.id) return provider.id;
|
|
33713
|
-
const id = Object.keys(provider)[0];
|
|
33714
|
-
return provider[id].id || id;
|
|
33862
|
+
const descriptor = normalizeProviderRef(provider, { index: idx });
|
|
33863
|
+
if (descriptor.kind === "file") return getProviderIdsFromFile(descriptor.loadProviderPath);
|
|
33864
|
+
if (descriptor.kind === "unknown") throw new Error(`Invalid provider at index ${idx}: expected a provider id string, ProviderOptions with an 'id' field, or a ProviderOptionsMap. Got: ${describeInvalidProvider(provider)}`);
|
|
33865
|
+
return descriptor.id;
|
|
33715
33866
|
});
|
|
33716
33867
|
throw new Error("Invalid providers list");
|
|
33717
33868
|
}
|
|
33718
33869
|
//#endregion
|
|
33719
33870
|
export { AIStudioChatProvider as $, removePrefix as A, isRateLimitWrapped as B, extractInputVarsFromPrompt as C, getShortPluginId as D, getSessionId as E, loadFromPackage as F, throwIfTargetPromptExceedsMaxChars as G, MAX_CHARS_PER_MESSAGE_MODIFIER_KEY as H, redteamProviderManager as I, MistralChatCompletionProvider as J, REDTEAM_MEMORY_POISONING_PLUGIN_ID as K, TokenUsageTracker as L, renderPrompt as M, runExtensionHook as N, isBasicRefusal as O, isPackagePath as P, VertexChatProvider as Q, createRateLimitRegistry as R, extractGoalFromPrompt as S, extractVariablesFromJson as T, getGeneratedPromptOverLimit as U, PromptfooHarmfulCompletionProvider as V, getMaxCharsPerMessageModifierValue as W, DefaultEmbeddingProvider as X, MistralEmbeddingProvider as Y, DefaultGradingProvider as Z, mediaExists as _, resolveProviderConfigs as a, AzureModerationProvider as at, checkExfilTracking as b, MCPProvider as c, checkCloudPermissions as ct, createTransformResponse$1 as d, getOrgContext as dt, DefaultGradingJsonProvider as et, GoogleLiveProvider as f, getPluginSeverityOverridesFromCloud as ft, getMediaStorage as g, validateStrategies as h, resolveTeamId as ht, resolveProvider as i, DefaultSynthesizeProvider as it, collectFileMetadata as j, isEmptyResponse as k, HttpProvider as l, getCloudDatabaseId as lt, loadStrategy as m, isCloudProvider as mt, loadApiProvider as n, DefaultLlmRubricProvider as nt, getFileHashes as o, AzureEmbeddingProvider as ot, Strategies as p, getPoliciesFromCloud as pt, OpenAiModerationProvider as q, loadApiProviders as r, DefaultSuggestionsProvider as rt, parseScriptParts as s, AzureChatCompletionProvider as st, getProviderIds as t, DefaultGradingProvider$1 as tt, createTransformRequest as u, getEvalConfigFromCloud as ut, retrieveMedia as v, extractPromptFromTags as w, extractAllPromptsFromTags as x, pluginMatchesStrategyTargets as y, createProviderRateLimitOptions as z };
|
|
33720
33871
|
|
|
33721
|
-
//# sourceMappingURL=providers-
|
|
33872
|
+
//# sourceMappingURL=providers-DRrerKra.js.map
|