promptfoo 0.121.2 → 0.121.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/dist/src/{ListApp-Du7YVwj5.js → ListApp-DQkFNqE9.js} +1 -1
- package/dist/src/{accounts-B0pgC1oV.js → accounts-DdJ2pHMI.js} +5 -5
- package/dist/src/{accounts-CiBLOnA7.js → accounts-DhMYUUbu.js} +5 -5
- package/dist/src/{accounts-gtkH-5KX.cjs → accounts-Dy17bs4D.cjs} +5 -5
- package/dist/src/{accounts-Bm2D8Db9.js → accounts-F9d_5sMC.js} +6 -6
- package/dist/src/{cometapi-C4xSqeID.cjs → agentic-utils-BpX5b23w.cjs} +24 -62
- package/dist/src/{cometapi-CUQq3H_a.js → agentic-utils-P172hM8B.js} +4 -61
- package/dist/src/agentic-utils-qFlm6zes.js +153 -0
- package/dist/src/{agentic-utils-DS1g3GLF.js → agentic-utils-w68v6_Dz.js} +3 -3
- package/dist/src/{agents-CmvBq8LV.js → agents-8FDnTriG.js} +6 -7
- package/dist/src/{agents-DbRtpYxR.cjs → agents-BahDpe5G.cjs} +255 -20
- package/dist/src/{agents-DgF2zDag.js → agents-C-R_jfzI.js} +255 -20
- package/dist/src/{agents-9qiOy0ho.js → agents-CgaMXvLM.js} +5 -7
- package/dist/src/{agents-Di9DKPzn.cjs → agents-D7-HGxUj.cjs} +5 -7
- package/dist/src/{agents-CBr9A01V.js → agents-DJ35I3Nt.js} +255 -20
- package/dist/src/{agents-cLXA8a_8.js → agents-aYPQLf8W.js} +5 -9
- package/dist/src/{agents-D__IdAlg.js → agents-pQeBEXMm.js} +255 -21
- package/dist/src/{aimlapi-B4rcnZgv.js → aimlapi-BCq3MHeL.js} +8 -14
- package/dist/src/{aimlapi-DHJU_kcV.js → aimlapi-BD6J9oKt.js} +7 -14
- package/dist/src/{aimlapi-BvlNH0gr.cjs → aimlapi-qcK4OT55.cjs} +8 -15
- package/dist/src/{aimlapi-CnkC2HqE.js → aimlapi-sgYnkE54.js} +7 -16
- package/dist/src/app/app/tsconfig.app.tsbuildinfo +1 -0
- package/dist/src/app/assets/Report-CQYFezYu.js +1 -0
- package/dist/src/app/assets/index-BXGkeMwh.css +1 -0
- package/dist/src/app/assets/index-BzJt18Jz.js +385 -0
- package/dist/src/app/assets/rolldown-runtime-COnpUsM8.js +1 -0
- package/dist/src/app/assets/scroll-timeline-D9IT_e8Z.js +1 -0
- package/dist/src/app/assets/sync-IjzpWrOE.js +4 -0
- package/dist/src/app/assets/vendor-charts-BNdH8TCw.js +36 -0
- package/dist/src/app/assets/vendor-markdown-Ch00wnNI.js +29 -0
- package/dist/src/app/assets/vendor-react-CVvmk1UB.js +9 -0
- package/dist/src/app/assets/vendor-utils-BnEYbx2Q.js +37 -0
- package/dist/src/app/index.html +7 -7
- package/dist/src/{audio-Dz3z7s3J.js → audio-B7izf48x.js} +4 -5
- package/dist/src/{audio-CGMyULza.cjs → audio-BQtNuYBj.cjs} +4 -4
- package/dist/src/{audio-Bkv46et0.js → audio-COrn8rM6.js} +4 -4
- package/dist/src/{audio-ClI_AFre.js → audio-DcVKoInv.js} +4 -4
- package/dist/src/{base-CGrhspbK.cjs → base-D-670DX8.cjs} +3 -3
- package/dist/src/{base-CpjcHe4e.js → base-PYJvBE1i.js} +3 -3
- package/dist/src/{base-Dy1V8--Z.js → base-fZ9wgg50.js} +3 -3
- package/dist/src/{base-DLKtKMFh.js → base-yrI1Yal4.js} +3 -3
- package/dist/src/{blobs-BDbfYdrJ.js → blobs-BCZavS8s.js} +4 -4
- package/dist/src/{blobs-CMHN0Qcz.js → blobs-BQWqnnvL.js} +4 -4
- package/dist/src/{blobs-CBO20krR.js → blobs-C-F78Kfn.js} +3 -3
- package/dist/src/{blobs-D23XLin-.cjs → blobs-D2FAd1Q5.cjs} +3 -3
- package/dist/src/cache-BIyPcp5v.cjs +376 -0
- package/dist/src/cache-C4Xb-hNb.js +310 -0
- package/dist/src/cache-Cr9oLMUa.js +3 -0
- package/dist/src/cache-D5NZmMiT.js +310 -0
- package/dist/src/cache-DbLsVWB2.cjs +3 -0
- package/dist/src/cache-mb7c8hbp.js +280 -0
- package/dist/src/{chat-C2jrdPMx.js → chat-0bwXjVP0.js} +3 -13
- package/dist/src/{chat-C1Qst7jL.cjs → chat-BPXSW8Bv.cjs} +3 -13
- package/dist/src/{chat-DJIw17u0.js → chat-BfPaS15_.js} +68 -42
- package/dist/src/{chat-CgF-J-Jj.cjs → chat-CclRbxGf.cjs} +68 -42
- package/dist/src/{chat-BiKyneZl.js → chat-Dr3DUQ0D.js} +68 -42
- package/dist/src/{chat-DqxYYtWA.js → chat-I9izLm49.js} +67 -41
- package/dist/src/{chat-CzkrVDfz.js → chat-MKxMnZJZ.js} +3 -13
- package/dist/src/{chat-qmatte1u.js → chat-mW0ORo8G.js} +3 -14
- package/dist/src/{chatkit-DKyPi1Gs.cjs → chatkit-BoWoSgXl.cjs} +4 -4
- package/dist/src/{chatkit-65VXf5SR.js → chatkit-CJnHRRMM.js} +4 -4
- package/dist/src/{chatkit-Be-Q-a9F.js → chatkit-Cv6AhukM.js} +4 -4
- package/dist/src/{chatkit-BxFvW8KY.js → chatkit-zUIVoDos.js} +4 -4
- package/dist/src/{claude-agent-sdk-Apiy0iaz.js → claude-agent-sdk-BQNuLaAK.js} +41 -18
- package/dist/src/{claude-agent-sdk-D9Z5Pr9X.cjs → claude-agent-sdk-CPJo3dBQ.cjs} +45 -22
- package/dist/src/{claude-agent-sdk-D2bJee9S.js → claude-agent-sdk-Dtq_L-Sc.js} +40 -17
- package/dist/src/{claude-agent-sdk-DfCoW0E6.js → claude-agent-sdk-nfAIcxNf.js} +42 -20
- package/dist/src/{cloud-C0dlstV_.js → cloud-DQZ5sVjW.js} +25 -13
- package/dist/src/cloud-Hphvo8kr.js +3 -0
- package/dist/src/{cloudflare-ai-8TDxHR0x.js → cloudflare-ai-BIB567w6.js} +5 -14
- package/dist/src/{cloudflare-ai-g7PB6VHR.js → cloudflare-ai-DGLte7Py.js} +5 -14
- package/dist/src/{cloudflare-ai-CknbZ5LJ.cjs → cloudflare-ai-Dl3N9OVD.cjs} +6 -15
- package/dist/src/{cloudflare-ai-BxAGvfju.js → cloudflare-ai-DlKr0rY7.js} +5 -15
- package/dist/src/{cloudflare-gateway-B9HWA5wf.js → cloudflare-gateway-BDZrYydE.js} +4 -16
- package/dist/src/{cloudflare-gateway-BSnDmHYo.cjs → cloudflare-gateway-BYDp495F.cjs} +4 -15
- package/dist/src/{cloudflare-gateway-CKDb4dJ8.js → cloudflare-gateway-CiIZHU0Q.js} +5 -164
- package/dist/src/{cloudflare-gateway-CP9QEWYS.js → cloudflare-gateway-DI1HNP5F.js} +4 -15
- package/dist/src/codex-sdk-BAmYE7qy.js +3 -0
- package/dist/src/codex-sdk-C2_M2pl_.cjs +1172 -0
- package/dist/src/codex-sdk-CErXn7qh.js +1165 -0
- package/dist/src/codex-sdk-CWEnH70W.cjs +2 -0
- package/dist/src/codex-sdk-CpqiOqDO.js +1164 -0
- package/dist/src/codex-sdk-Rtky3M4I.js +1165 -0
- package/dist/src/{cometapi-BL9yvj_f.js → cometapi-BUlt_ELa.js} +8 -15
- package/dist/src/{cometapi-DFNiKmSz.js → cometapi-CtJ-mS8R.js} +8 -16
- package/dist/src/cometapi-DT-jlVCB.js +55 -0
- package/dist/src/cometapi-UVOryo4W.cjs +55 -0
- package/dist/src/{completion-CM6oK8PS.cjs → completion-BozdoXba.cjs} +7 -62
- package/dist/src/{completion-5MzrpJxT.js → completion-Dnxn7E-j.js} +8 -57
- package/dist/src/{completion-qRoZAYRB.js → completion-HUe8wDhZ.js} +8 -57
- package/dist/src/{completion-DZ083F31.js → completion-x0a_c2y1.js} +8 -57
- package/dist/src/{createHash-CTQmL3G2.js → createHash-4gFQpDDv.js} +3 -3
- package/dist/src/{createHash-CfZSc0b4.cjs → createHash-B7KvgoOD.cjs} +4 -4
- package/dist/src/{createHash-Da8fMwqB.js → createHash-ChI45QR1.js} +3 -3
- package/dist/src/{createHash-DmPQkvBh.js → createHash-CwDVU5xr.js} +3 -3
- package/dist/src/{docker-ExVyLp0S.js → docker-CQmlA2NU.js} +7 -14
- package/dist/src/{docker-Bb5dcxr8.js → docker-ClnmCf1Z.js} +6 -14
- package/dist/src/{docker-BvfL2BrW.js → docker-DCgsveLD.js} +6 -16
- package/dist/src/{docker-DcF2pRrj.cjs → docker-DS4_Osau.cjs} +7 -15
- package/dist/src/embedding-D3xTseo7.js +59 -0
- package/dist/src/embedding-DD9wa3ae.js +58 -0
- package/dist/src/embedding-I45KG3o7.cjs +63 -0
- package/dist/src/embedding-nFbumxcv.js +58 -0
- package/dist/src/entrypoint.js +69 -6
- package/dist/src/{errors-P6ll7XSJ.js → errors-Cw810C93.js} +1 -1
- package/dist/src/{esm-CaIwzWR5.js → esm-C7PnfdF8.js} +16 -7
- package/dist/src/{esm-CnNt7sI4.cjs → esm-CtEPLdAj.cjs} +15 -6
- package/dist/src/{esm-Cd1AjG1D.js → esm-Dh4dOLlt.js} +15 -6
- package/dist/src/{esm-C03C-mv3.js → esm-tVgYPY-f.js} +27 -18
- package/dist/src/eval-CzJFfFO9.js +3 -0
- package/dist/src/{eval-Dg2nG4v2.js → eval-u4UVafl6.js} +49 -20
- package/dist/src/{evalResult-BDMqrapS.js → evalResult-Bgm9ZH31.js} +7 -7
- package/dist/src/{evalResult-BBRNtX4I.js → evalResult-D3hVYFis.js} +7 -7
- package/dist/src/evalResult-D8MT9p0s.js +3 -0
- package/dist/src/evalResult-DElBuddX.js +2 -0
- package/dist/src/evalResult-Dvc-iucu.cjs +2 -0
- package/dist/src/{evalResult-fuaI8HkH.cjs → evalResult-KZqXl4XP.cjs} +7 -7
- package/dist/src/evaluator-CVessDWe.js +3 -0
- package/dist/src/{evaluator-BhoWwp5b.js → evaluator-IvuDYSvQ.js} +3080 -1254
- package/dist/src/{extractor-D25qpmGX.js → extractor-CAfTSraf.js} +6 -6
- package/dist/src/{extractor-DReVID0K.js → extractor-DNSeBVOJ.js} +6 -6
- package/dist/src/{extractor-C0EVHewb.js → extractor-Dk6bRWkv.js} +6 -6
- package/dist/src/{extractor-pYLLi3wS.cjs → extractor-WVPOrH43.cjs} +6 -6
- package/dist/src/{fetch-HaqdX7U1.js → fetch-B0Z3Oe4k.js} +218 -55
- package/dist/src/{fetch-Dxpd4_sr.js → fetch-BEWnXrrG.js} +195 -45
- package/dist/src/fetch-C7bGKDlQ.js +3 -0
- package/dist/src/{fetch-BPkYtG8K.cjs → fetch-CJU5ELPa.cjs} +223 -48
- package/dist/src/{fetch-Cwxnd8zz.js → fetch-Di00EQrc.js} +218 -55
- package/dist/src/{fileExtensions-Ds-foDzt.js → fileExtensions-AWa2ZML4.js} +1 -1
- package/dist/src/{fileExtensions-LcDYkU4v.js → fileExtensions-BArZuxsI.js} +1 -1
- package/dist/src/{formatDuration-DgBVMN65.js → formatDuration-DZzPsexs.js} +1 -1
- package/dist/src/{genaiTracer-D3fD9dNV.js → genaiTracer-COYDi-tC.js} +6 -2
- package/dist/src/{genaiTracer-C1rxGO8Q.js → genaiTracer-DWdZ28hY.js} +6 -2
- package/dist/src/{genaiTracer-70Z8BIuV.js → genaiTracer-XnrcgDCe.js} +6 -2
- package/dist/src/{genaiTracer-DN4dQywX.cjs → genaiTracer-yRuxj9-L.cjs} +7 -3
- package/dist/src/golang/wrapper.go +1 -1
- package/dist/src/{graders-DU49_J8Y.cjs → graders--zknU_uk.cjs} +5747 -3206
- package/dist/src/graders-BOAzQEUe.cjs +2 -0
- package/dist/src/graders-D4BTsZdG2.js +3 -0
- package/dist/src/graders-DOJK1XpV.js +2 -0
- package/dist/src/graders-NAv9LcBn.js +2 -0
- package/dist/src/{graders-BTeBGqjJ.js → graders-Zy3x0zqX.js} +5727 -3218
- package/dist/src/{graders-Bj_Odv7c.js → graders-eIHhRqoC.js} +5719 -3210
- package/dist/src/{graders-DP7KFFo-.js → graders-pvbReLLn.js} +5728 -3219
- package/dist/src/{image-B0h9VEMc.js → image-9302QVqR.js} +4 -4
- package/dist/src/{image-CHfWvljl.js → image-B5Mv-Z3h.js} +8 -8
- package/dist/src/{image-DS-o-0ph.js → image-DVz2RiMF.js} +8 -8
- package/dist/src/{image-C1madmKh.cjs → image-De2FBmYV.cjs} +4 -4
- package/dist/src/{image-B02ogr_b.js → image-dnoUgPrC.js} +4 -5
- package/dist/src/{image-Dpxa1Jt6.js → image-qUpPvmNZ.js} +8 -8
- package/dist/src/{image-Bb4vWQLM.js → image-u7-rKnYU.js} +4 -4
- package/dist/src/{image-BLmROtN3.cjs → image-x6KqLQl4.cjs} +8 -8
- package/dist/src/index.cjs +3728 -1482
- package/dist/src/index.d.cts +3232 -79
- package/dist/src/index.d.ts +3232 -79
- package/dist/src/index.js +3735 -1490
- package/dist/src/{interactiveCheck-BgLZUIt3.js → interactiveCheck-CLERUB0c.js} +2 -2
- package/dist/src/{knowledgeBase-DOO_BM9b.cjs → knowledgeBase-Bpoe_nLu.cjs} +6 -8
- package/dist/src/{knowledgeBase-D33Ty2l6.js → knowledgeBase-Dgc7CBWF.js} +6 -8
- package/dist/src/{knowledgeBase-B3OoKIej.js → knowledgeBase-RhFPGWDc.js} +6 -8
- package/dist/src/{knowledgeBase-CYTLHOt1.js → knowledgeBase-lm9RXSAm.js} +6 -9
- package/dist/src/{litellm-NbjknEh6.js → litellm-C2kqjxqp.js} +6 -14
- package/dist/src/{litellm-I_hbp_dc.cjs → litellm-CoyI4IAl.cjs} +6 -15
- package/dist/src/{litellm-TrljxD9G.js → litellm-DRjpcSa7.js} +5 -14
- package/dist/src/{litellm-AaeZcZQF.js → litellm-p37R1dzQ.js} +5 -16
- package/dist/src/{logger-DLcq4dWf.js → logger-B88EkIn6.js} +48 -23
- package/dist/src/{logger-Cp1GPUjj.cjs → logger-COuQb2xB.cjs} +77 -22
- package/dist/src/{logger-CT3IKMKA.js → logger-Ct2S6Yx-.js} +48 -23
- package/dist/src/{logger-KkObSCzq.js → logger-DksKw1Qc.js} +48 -23
- package/dist/src/{luma-ray-f6I2fft-.js → luma-ray-B863CmuZ.js} +6 -10
- package/dist/src/{luma-ray-DDsjcgZZ.js → luma-ray-BTTLtqQ8.js} +7 -10
- package/dist/src/{luma-ray-Due0n7di.cjs → luma-ray-BxVKaW2a.cjs} +6 -10
- package/dist/src/{luma-ray-BS2_tY8L.js → luma-ray-KgTCXrZC.js} +6 -12
- package/dist/src/main.d.ts +1 -26
- package/dist/src/main.js +1011 -548
- package/dist/src/{messages-Bs1kC7P4.cjs → messages-811uVVW5.cjs} +74 -19
- package/dist/src/{messages-BS17jdMx.js → messages-BTQz42fn.js} +74 -19
- package/dist/src/{messages-ZJk778GH.js → messages-MYTQ2TWp.js} +74 -19
- package/dist/src/{messages-D0lx5qK7.js → messages-zWbkLLHz.js} +74 -19
- package/dist/src/{meteor-D-SotUw9.js → meteor-CU5UAE-H.js} +1 -1
- package/dist/src/{meteor-DLZZ3osF.cjs → meteor-Co1VQ1u5.cjs} +1 -1
- package/dist/src/{meteor-44VjEACX.js → meteor-DHdzY1Ss.js} +1 -1
- package/dist/src/{meteor-DUiCJRC-.js → meteor-DuAFv6gF.js} +1 -1
- package/dist/src/{modelslab-Bmni6skY.js → modelslab-D0erNWKe.js} +7 -10
- package/dist/src/{modelslab-DRb74SP4.js → modelslab-DIq-6y7x.js} +7 -10
- package/dist/src/{modelslab-CoUX6Jc_.cjs → modelslab-Dk1JAtVo.cjs} +7 -10
- package/dist/src/{modelslab-Bx9IrZfS.js → modelslab-wu9yi5GE.js} +7 -11
- package/dist/src/{nova-reel-BfPq-0Yk.js → nova-reel-CCFRfeRb.js} +7 -10
- package/dist/src/{nova-reel-C_QM18Xn.cjs → nova-reel-CrLXVKQf.cjs} +6 -10
- package/dist/src/{nova-reel-bgjxilYW.js → nova-reel-DQrm74ng.js} +6 -10
- package/dist/src/{nova-reel-D_W1tjMH.js → nova-reel-gr11WG7f.js} +6 -12
- package/dist/src/{nova-sonic-DIGQNR07.js → nova-sonic-BYdp-QLs.js} +5 -7
- package/dist/src/{nova-sonic-CFb5GYhg.js → nova-sonic-B_ZXcUJB.js} +4 -7
- package/dist/src/{nova-sonic-De1HW5fD.js → nova-sonic-TDgrlTk7.js} +4 -9
- package/dist/src/{nova-sonic-zfcljeRp.cjs → nova-sonic-i5tUvXKn.cjs} +4 -7
- package/dist/src/{openai-DElQ-fPX.js → openai-DhVEmgeZ.js} +6 -3
- package/dist/src/{openai-DhbB7eWK.js → openai-Qsvz25mV.js} +6 -3
- package/dist/src/{openai-Cuif0GEt.cjs → openai-URNyItar.cjs} +6 -3
- package/dist/src/{openai-j-sE2O7r.js → openai-iYtrXzOX.js} +6 -3
- package/dist/src/openclaw-CLWrW03k.js +1200 -0
- package/dist/src/openclaw-CnQ363Wi.js +1199 -0
- package/dist/src/openclaw-CwzlQSQX.js +1199 -0
- package/dist/src/openclaw-wX9rtfke.cjs +1205 -0
- package/dist/src/{opencode-sdk-B3CWY9h_.js → opencode-sdk-BUu5Nevv.js} +12 -14
- package/dist/src/{opencode-sdk-BL764Jdi.cjs → opencode-sdk-BZ2idgYA.cjs} +16 -18
- package/dist/src/{opencode-sdk-0j6rTWNb.js → opencode-sdk-BxD8vXp_.js} +12 -15
- package/dist/src/{opencode-sdk-C2y6UkP2.js → opencode-sdk-GI2KaAXq.js} +12 -14
- package/dist/src/{otlpReceiver-C99PPb48.js → otlpReceiver-B2z58l4e.js} +154 -98
- package/dist/src/{otlpReceiver-CGq6LspY.cjs → otlpReceiver-BfcVq2Nq.cjs} +154 -98
- package/dist/src/{otlpReceiver-D89fR-rC.js → otlpReceiver-BntK801g.js} +154 -98
- package/dist/src/{otlpReceiver-CdNBdbsk.js → otlpReceiver-DmVulbhC.js} +154 -98
- package/dist/src/{providerRegistry-CD8MEar9.js → providerRegistry-Bvh8mv85.js} +2 -2
- package/dist/src/{providerRegistry-DM8rZYol.js → providerRegistry-CPQ_CmVO.js} +2 -2
- package/dist/src/{providerRegistry-Civky8Ar.cjs → providerRegistry-CQMdTmHP.cjs} +2 -2
- package/dist/src/{providerRegistry-B0RUOLI_.js → providerRegistry-CWoPjKFZ.js} +2 -2
- package/dist/src/{providers-CgKOSgTR.cjs → providers-1eKkXBKp.cjs} +1435 -930
- package/dist/src/{providers-BlqUifFg.js → providers-BV_KMZje.js} +1419 -944
- package/dist/src/providers-Bp4S-FvO.js +2 -0
- package/dist/src/providers-DV3ax9e_.cjs +3 -0
- package/dist/src/{providers-D8lF1sqW.js → providers-Domz_llv.js} +1427 -952
- package/dist/src/{providers-Dk_6ocUX.js → providers-DruaQfwu.js} +1424 -949
- package/dist/src/providers-iUt5fbAN.js +3 -0
- package/dist/src/providers-u9Enmfok.js +2 -0
- package/dist/src/python/persistent_wrapper.py +0 -5
- package/dist/src/{pythonUtils-D6fwaDSg.js → pythonUtils-C2UQ30Rz.js} +4 -4
- package/dist/src/{pythonUtils-D5nxkQ0P.js → pythonUtils-Cldx7huE.js} +4 -4
- package/dist/src/{pythonUtils-C3py6GC1.js → pythonUtils-CnndUbW-.js} +3 -3
- package/dist/src/{pythonUtils-CTU3Y3lw.cjs → pythonUtils-tAJvvpS-.cjs} +3 -3
- package/dist/src/{quiverai-CIaELU_m.js → quiverai-CtWi6x_g.js} +4 -4
- package/dist/src/{quiverai-PdShCPox.cjs → quiverai-DFotyafY.cjs} +4 -4
- package/dist/src/{quiverai-BbOUOn2L.js → quiverai-DR0SnIQV.js} +4 -4
- package/dist/src/{quiverai-uH-dcTIr.js → quiverai-aPPvXOgn.js} +4 -5
- package/dist/src/render-CH-62LbA.js +135 -0
- package/dist/src/render-CMEpfLaO.js +136 -0
- package/dist/src/{render-Drod8m7K.js → render-CgVDrJmM.js} +2 -3
- package/dist/src/render-DHIZ6_k8.js +135 -0
- package/dist/src/render-DfQSFxGE.cjs +165 -0
- package/dist/src/{responses-DIR9Ud3j.js → responses--OsX2aYW.js} +23 -14
- package/dist/src/{responses-D8SBTL64.cjs → responses-Bi9vBuW_.cjs} +24 -15
- package/dist/src/{responses-CB2jwoAr.js → responses-C-flexAY.js} +24 -15
- package/dist/src/{responses-WNGNYe3K.js → responses-DL9m8CyY.js} +24 -15
- package/dist/src/{rubyUtils-DhCAlxZr.cjs → rubyUtils-B6eljPuh.cjs} +3 -3
- package/dist/src/{rubyUtils-BcuGX77l.js → rubyUtils-CYSQEG4a.js} +3 -3
- package/dist/src/rubyUtils-D1L2d3jb.js +3 -0
- package/dist/src/rubyUtils-DUbq4tff.cjs +2 -0
- package/dist/src/{rubyUtils-BUVePouc.js → rubyUtils-DVLeA2jg.js} +3 -3
- package/dist/src/{rubyUtils-Boc4HZzX.js → rubyUtils-DsGrTx8R.js} +3 -3
- package/dist/src/{sagemaker-CNBxx5CJ.js → sagemaker-BVkaG2-l.js} +14 -18
- package/dist/src/{sagemaker-CemTFp2h.js → sagemaker-BveBvuxm.js} +14 -18
- package/dist/src/{sagemaker-YSyBXQQh.js → sagemaker-D67yzMzs.js} +14 -19
- package/dist/src/{sagemaker-Cl28mZU2.cjs → sagemaker-XnfhheQv.cjs} +14 -18
- package/dist/src/{scanner-BsBlNXNn.js → scanner-1DqWi1Ej.js} +130 -35
- package/dist/src/server/golang/wrapper.go +1 -1
- package/dist/src/server/index.js +3757 -1511
- package/dist/src/server/python/persistent_wrapper.py +0 -5
- package/dist/src/{server-CqzrVGpF.js → server-BNYztJkh.js} +128 -9
- package/dist/src/{server-CuxBbeSY.js → server-BSB45Nt9.js} +127 -8
- package/dist/src/{server-VWgWb00X.js → server-D6Il2Sob.js} +126 -7
- package/dist/src/server-DCtHUqlp.js +3 -0
- package/dist/src/server-DaA2eR26.cjs +2 -0
- package/dist/src/{server-C_7Ax-hA.cjs → server-Dx2TyCH2.cjs} +140 -6
- package/dist/src/{signal-4U3mfRvL.js → signal-CE5G3a7x.js} +3 -3
- package/dist/src/{slack-BmVAVGaK.cjs → slack-1Rhq0EoV.cjs} +2 -2
- package/dist/src/{slack-DCUPTzS2.js → slack-D5Wpy8LM.js} +2 -2
- package/dist/src/{slack-DXMKtA-f.js → slack-DDUe-5MC.js} +2 -2
- package/dist/src/{slack-DOdy_kyv.js → slack-acRb0IqQ.js} +2 -2
- package/dist/src/store-CWOSz6D_.cjs +2 -0
- package/dist/src/{store-Dim__MDd.js → store-CYEy5J2D.js} +17 -5
- package/dist/src/{store-DLlFCC4h.cjs → store-DAAyxcy6.cjs} +17 -5
- package/dist/src/store-DCDBhv7B.js +3 -0
- package/dist/src/{store-CXGFv4aR.js → store-Dn9HUkdW.js} +17 -5
- package/dist/src/{store-DXilxTl-.js → store-M0b1WfYb.js} +17 -5
- package/dist/src/{tables-gftXzE9I.js → tables-C4CH3zRr.js} +3 -3
- package/dist/src/{tables-DLJPUdUE.js → tables-CsWou1Bx.js} +3 -3
- package/dist/src/{tables-6YKwjN9-.js → tables-DQ4WU5tX.js} +3 -3
- package/dist/src/{tables-DPi7wKeM.cjs → tables-DUfh1F7Z.cjs} +3 -3
- package/dist/src/telemetry-C1IqxcdW.js +3 -0
- package/dist/src/telemetry-C4ZEa_es.cjs +2 -0
- package/dist/src/{telemetry-CMrFgtPB.js → telemetry-CQPez_Jp.js} +4 -4
- package/dist/src/{telemetry-DaX14Chu.cjs → telemetry-Dsw_faFj.cjs} +4 -4
- package/dist/src/{telemetry-Dthj_BbD.js → telemetry-Dvqxv3YC.js} +4 -4
- package/dist/src/{telemetry-Cps3mIU-.js → telemetry-dbaJ0E98.js} +4 -4
- package/dist/src/{text-CW1cyrwj.cjs → text-BVi-cLPJ.cjs} +1 -1
- package/dist/src/{text-B_UCRPp2.js → text-CZr46tp_.js} +1 -1
- package/dist/src/{text-TIv0QYnd.js → text-DHxdyQqT.js} +1 -1
- package/dist/src/{text-Db-Wt2u2.js → text-KvuD2Iko.js} +1 -1
- package/dist/src/{tokenUsageUtils-bVa1ga6f.cjs → tokenUsageUtils-Bb7DkZPz.cjs} +7 -3
- package/dist/src/{tokenUsageUtils-NYT-WKS6.js → tokenUsageUtils-C-bmyHoE.js} +7 -3
- package/dist/src/{tokenUsageUtils-DflFMjS0.js → tokenUsageUtils-CXrvO-wA.js} +7 -3
- package/dist/src/{transcription-NLVG9MT1.cjs → transcription-BvjmiYB1.cjs} +12 -16
- package/dist/src/{transcription-BNYURcXg.js → transcription-CJspiD2c.js} +11 -14
- package/dist/src/{transcription-B_OdaHp7.js → transcription-DuWDupG7.js} +10 -14
- package/dist/src/{transcription-s6A-bNrZ.js → transcription-V2HaAmy2.js} +10 -16
- package/dist/src/{transform-DECvGmzp.js → transform-Bbg6A8Jk.js} +4 -4
- package/dist/src/{transform-vNucnNr0.js → transform-CG0ehZNG.js} +11 -7
- package/dist/src/{transform-DuHvhZpj.cjs → transform-CTeuTR3S.cjs} +31 -9
- package/dist/src/{transform-CzK1Q0zl.cjs → transform-CUnzlsbn.cjs} +4 -4
- package/dist/src/{transform-aa6tmVpZ.js → transform-DYX1_Xnh.js} +5 -5
- package/dist/src/transform-DgKlRr73.cjs +2 -0
- package/dist/src/transform-M6ITAESf.js +3 -0
- package/dist/src/{transform-DilY9wbS.js → transform-UN5UGu8U.js} +5 -5
- package/dist/src/{transform-uAytVuyX.js → transform-lQrDE1BQ.js} +11 -7
- package/dist/src/{transform-D5HsjduX.js → transform-zDhMmzwX.js} +11 -7
- package/dist/src/{transformersAvailability-CEVM2GNQ.js → transformersAvailability-CcHusyhw.js} +1 -1
- package/dist/src/{transformersAvailability-CwayUSlh.cjs → transformersAvailability-Cju9mHgR.cjs} +1 -1
- package/dist/src/{transformersAvailability-D6c6ROpT.js → transformersAvailability-DLlROWhg.js} +1 -1
- package/dist/src/{types-DmyIJ-sR.js → types-BGQDAP8i.js} +357 -22
- package/dist/src/{types-CzW2QFyi.js → types-Bgh5SOn6.js} +358 -24
- package/dist/src/{types-C_7nyzr1.cjs → types-CeaeaZdP.cjs} +393 -22
- package/dist/src/{types-Cbd8uOMq.js → types-Dm9JM6Vb.js} +368 -23
- package/dist/src/{util-BHGHw5G1.js → util-BYvQUPp7.js} +138 -36
- package/dist/src/{util-B9vlHIIh.cjs → util-Bxn8emtE.cjs} +15 -168
- package/dist/src/{util-ZzmqNPlg.js → util-C8e5uydV.js} +19 -142
- package/dist/src/{util-CMy69ZgQ.js → util-C9J8ahRn.js} +18 -4
- package/dist/src/{util-BzMcevZc.cjs → util-CN3SrLT4.cjs} +18 -4
- package/dist/src/{util-BV4XUC0n.js → util-D3q0WQ-0.js} +18 -4
- package/dist/src/{util-Dnmk2mBQ.js → util-D9TisOyk.js} +18 -4
- package/dist/src/{util-B3xGByQh.js → util-DDs-7g6-.js} +138 -36
- package/dist/src/{util-Bv6uGDfH.js → util-DvU2Pw8c.js} +138 -36
- package/dist/src/{util-C1CeHl-P.js → util-DxWpWjhc.js} +13 -136
- package/dist/src/{util-BRYkYPTd.js → util-oGMLA7vc.js} +17 -140
- package/dist/src/{util-DGNOS1db.cjs → util-olYL5C6N.cjs} +143 -35
- package/dist/src/{utils-Cz9qXqII.cjs → utils-B05gLxER.cjs} +6 -4
- package/dist/src/{utils-f2-Moju7.js → utils-BLJKfv0y.js} +6 -4
- package/dist/src/{utils-dLokC-eR.js → utils-DJfvjyMj.js} +6 -4
- package/dist/src/{utils-XiOAgly5.js → utils-hXtCYanr.js} +6 -4
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +66 -57
- package/dist/src/app/assets/index-4LKxG2CG.js +0 -439
- package/dist/src/app/assets/index-C3zcsZFQ.css +0 -1
- package/dist/src/app/assets/scroll-timeline-BdJZVXlz.js +0 -1
- package/dist/src/app/assets/sync-9qqYcY-B.js +0 -4
- package/dist/src/app/assets/vendor-charts-BnDWwBlI.js +0 -36
- package/dist/src/app/assets/vendor-markdown-0tekx3KX.js +0 -29
- package/dist/src/app/assets/vendor-react-AtKqiNEf.js +0 -4
- package/dist/src/app/assets/vendor-syntax-D06x6TQF.js +0 -2
- package/dist/src/app/assets/vendor-utils-BvMHZmO7.js +0 -37
- package/dist/src/app/tsconfig.app.tsbuildinfo +0 -1
- package/dist/src/cache-BVeDlD87.js +0 -726
- package/dist/src/cache-C4Nxf52C.js +0 -756
- package/dist/src/cache-CeUpFm3M.cjs +0 -5
- package/dist/src/cache-Dh5WtQps.cjs +0 -816
- package/dist/src/cache-i1P6crbO.js +0 -756
- package/dist/src/cache-n-RCJ-hL.js +0 -6
- package/dist/src/cloud-BBh91EUK.js +0 -4
- package/dist/src/codex-sdk-C6UMlxwV.js +0 -665
- package/dist/src/codex-sdk-DUwKWezN.js +0 -665
- package/dist/src/codex-sdk-GGAw0qbD.js +0 -666
- package/dist/src/codex-sdk-fAO0c3yA.cjs +0 -669
- package/dist/src/eval-B3r2CVXr.js +0 -15
- package/dist/src/evalResult-5xwYnECe.js +0 -12
- package/dist/src/evalResult-71lY93Kj.cjs +0 -10
- package/dist/src/evalResult-Dx5P5cIv.js +0 -10
- package/dist/src/evaluator-Jx6bRZV6.js +0 -36
- package/dist/src/fetch-BxNb_Lp3.js +0 -5
- package/dist/src/graders-B_pgMLS2.js +0 -34
- package/dist/src/graders-DErokPDO.cjs +0 -32
- package/dist/src/graders-DR_uNe54.js +0 -32
- package/dist/src/graders-w3176Wz-.js +0 -32
- package/dist/src/openclaw-CSugPYAr.cjs +0 -586
- package/dist/src/openclaw-DiSz3I5L.js +0 -582
- package/dist/src/openclaw-DuvJKEW5.js +0 -580
- package/dist/src/openclaw-tiVYRtr-.js +0 -580
- package/dist/src/providers-B7V0njNs.js +0 -32
- package/dist/src/providers-BEwbhv0X.js +0 -30
- package/dist/src/providers-CH3C7zf7.js +0 -30
- package/dist/src/providers-zyB6k_38.cjs +0 -31
- package/dist/src/rubyUtils-BUHu6PhO.js +0 -5
- package/dist/src/rubyUtils-CP42kMvq.cjs +0 -4
- package/dist/src/server-DA4Cyrrq.js +0 -7
- package/dist/src/server-Dulb-4-K.cjs +0 -5
- package/dist/src/store-CXS-Q_91.js +0 -6
- package/dist/src/store-eYkaKMwq.cjs +0 -5
- package/dist/src/telemetry-BpMfhthR.cjs +0 -5
- package/dist/src/telemetry-Dw38hanS.js +0 -7
- package/dist/src/tokenUsageUtils-BDGe-iyI.js +0 -138
- package/dist/src/transform-DTGDnAzW.js +0 -6
- package/dist/src/transform-m3qNw4KP.cjs +0 -5
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { t as __exportAll } from "./chunk-DEq-mXcV.js";
|
|
2
|
-
import {
|
|
2
|
+
import { S as getEnvBool, T as getEnvString, a as logger, i as logRequestResponse, k as state, p as sanitizeUrl, w as getEnvInt, x as getConfigDirectoryPath } from "./logger-Ct2S6Yx-.js";
|
|
3
3
|
import { t as invariant } from "./invariant-Ddh24eXh.js";
|
|
4
|
-
import * as fs$
|
|
4
|
+
import * as fs$2 from "fs";
|
|
5
5
|
import * as path$1 from "path";
|
|
6
6
|
import path from "path";
|
|
7
7
|
import yaml from "js-yaml";
|
|
@@ -23,7 +23,7 @@ const HUMAN_ASSERTION_TYPE = "human";
|
|
|
23
23
|
* Application version from package.json.
|
|
24
24
|
* Injected at build time, or read from npm environment in development.
|
|
25
25
|
*/
|
|
26
|
-
const VERSION = "0.121.
|
|
26
|
+
const VERSION = "0.121.4";
|
|
27
27
|
/**
|
|
28
28
|
* PostHog analytics key.
|
|
29
29
|
* Only populated during production builds via PROMPTFOO_POSTHOG_KEY env var.
|
|
@@ -147,7 +147,7 @@ function isOpenAIToolChoice(obj) {
|
|
|
147
147
|
function openaiToolChoiceToAnthropic(choice) {
|
|
148
148
|
if (typeof choice === "string") switch (choice) {
|
|
149
149
|
case "auto": return { type: "auto" };
|
|
150
|
-
case "none": return { type: "
|
|
150
|
+
case "none": return { type: "none" };
|
|
151
151
|
case "required": return { type: "any" };
|
|
152
152
|
}
|
|
153
153
|
return {
|
|
@@ -283,6 +283,155 @@ function transformTools(tools, format) {
|
|
|
283
283
|
}
|
|
284
284
|
}
|
|
285
285
|
//#endregion
|
|
286
|
+
//#region src/scheduler/headerParser.ts
|
|
287
|
+
const OPENAI_HEADERS = {
|
|
288
|
+
remainingRequests: "x-ratelimit-remaining-requests",
|
|
289
|
+
remainingTokens: "x-ratelimit-remaining-tokens",
|
|
290
|
+
limitRequests: "x-ratelimit-limit-requests",
|
|
291
|
+
limitTokens: "x-ratelimit-limit-tokens",
|
|
292
|
+
resetRequests: "x-ratelimit-reset-requests",
|
|
293
|
+
resetTokens: "x-ratelimit-reset-tokens"
|
|
294
|
+
};
|
|
295
|
+
const ANTHROPIC_HEADERS = {
|
|
296
|
+
remainingRequests: "anthropic-ratelimit-requests-remaining",
|
|
297
|
+
remainingTokens: "anthropic-ratelimit-tokens-remaining",
|
|
298
|
+
limitRequests: "anthropic-ratelimit-requests-limit",
|
|
299
|
+
limitTokens: "anthropic-ratelimit-tokens-limit",
|
|
300
|
+
reset: "anthropic-ratelimit-requests-reset"
|
|
301
|
+
};
|
|
302
|
+
const STANDARD_HEADERS = {
|
|
303
|
+
remaining: "ratelimit-remaining",
|
|
304
|
+
limit: "ratelimit-limit",
|
|
305
|
+
reset: "ratelimit-reset",
|
|
306
|
+
remainingAlt: "x-ratelimit-remaining",
|
|
307
|
+
limitAlt: "x-ratelimit-limit",
|
|
308
|
+
resetAlt: "x-ratelimit-reset"
|
|
309
|
+
};
|
|
310
|
+
/**
|
|
311
|
+
* Parse rate limit headers from response.
|
|
312
|
+
*/
|
|
313
|
+
function parseRateLimitHeaders(headers) {
|
|
314
|
+
const result = {};
|
|
315
|
+
const h = lowercaseKeys(headers);
|
|
316
|
+
result.remainingRequests = parseFirstMatch(h, [
|
|
317
|
+
OPENAI_HEADERS.remainingRequests,
|
|
318
|
+
ANTHROPIC_HEADERS.remainingRequests,
|
|
319
|
+
STANDARD_HEADERS.remainingAlt,
|
|
320
|
+
STANDARD_HEADERS.remaining
|
|
321
|
+
]);
|
|
322
|
+
result.remainingTokens = parseFirstMatch(h, [OPENAI_HEADERS.remainingTokens, ANTHROPIC_HEADERS.remainingTokens]);
|
|
323
|
+
result.limitRequests = parseFirstMatch(h, [
|
|
324
|
+
OPENAI_HEADERS.limitRequests,
|
|
325
|
+
ANTHROPIC_HEADERS.limitRequests,
|
|
326
|
+
STANDARD_HEADERS.limitAlt,
|
|
327
|
+
STANDARD_HEADERS.limit
|
|
328
|
+
]);
|
|
329
|
+
result.limitTokens = parseFirstMatch(h, [OPENAI_HEADERS.limitTokens, ANTHROPIC_HEADERS.limitTokens]);
|
|
330
|
+
for (const name of [
|
|
331
|
+
OPENAI_HEADERS.resetRequests,
|
|
332
|
+
OPENAI_HEADERS.resetTokens,
|
|
333
|
+
ANTHROPIC_HEADERS.reset,
|
|
334
|
+
STANDARD_HEADERS.resetAlt,
|
|
335
|
+
STANDARD_HEADERS.reset
|
|
336
|
+
]) if (h[name] !== void 0) {
|
|
337
|
+
const parsed = parseResetTime(h[name]);
|
|
338
|
+
if (parsed !== null) {
|
|
339
|
+
result.resetAt = parsed;
|
|
340
|
+
break;
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
if (h["retry-after-ms"] !== void 0) {
|
|
344
|
+
const ms = parseInt(h["retry-after-ms"], 10);
|
|
345
|
+
if (!isNaN(ms) && ms >= 0) {
|
|
346
|
+
result.retryAfterMs = ms;
|
|
347
|
+
if (result.resetAt === void 0) result.resetAt = Date.now() + ms;
|
|
348
|
+
}
|
|
349
|
+
} else if (h["retry-after"] !== void 0) {
|
|
350
|
+
const parsed = parseRetryAfter(h["retry-after"]);
|
|
351
|
+
if (parsed !== null) {
|
|
352
|
+
result.retryAfterMs = parsed;
|
|
353
|
+
if (result.resetAt === void 0) result.resetAt = Date.now() + parsed;
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
return result;
|
|
357
|
+
}
|
|
358
|
+
/**
|
|
359
|
+
* Parse Retry-After header value.
|
|
360
|
+
* Returns duration in milliseconds.
|
|
361
|
+
* Exported for integration use.
|
|
362
|
+
*/
|
|
363
|
+
function parseRetryAfter(value) {
|
|
364
|
+
const seconds = parseInt(value, 10);
|
|
365
|
+
if (!isNaN(seconds) && seconds >= 0 && String(seconds) === value.trim()) return seconds * 1e3;
|
|
366
|
+
const httpDate = parseHttpDate(value);
|
|
367
|
+
if (httpDate !== null) return Math.max(0, httpDate - Date.now());
|
|
368
|
+
return null;
|
|
369
|
+
}
|
|
370
|
+
function parseFirstMatch(headers, names) {
|
|
371
|
+
for (const name of names) {
|
|
372
|
+
const value = headers[name];
|
|
373
|
+
if (value !== void 0) {
|
|
374
|
+
const num = parseInt(value, 10);
|
|
375
|
+
if (!isNaN(num) && num >= 0) return num;
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
/**
|
|
380
|
+
* Parse reset time from various formats.
|
|
381
|
+
* Returns absolute Unix timestamp in milliseconds.
|
|
382
|
+
*/
|
|
383
|
+
function parseResetTime(value) {
|
|
384
|
+
const durationMs = parseDuration(value);
|
|
385
|
+
if (durationMs !== null) return Date.now() + durationMs;
|
|
386
|
+
const num = parseFloat(value);
|
|
387
|
+
if (!isNaN(num)) if (num < 1e9) return Date.now() + num * 1e3;
|
|
388
|
+
else if (num < 1e10) return num * 1e3;
|
|
389
|
+
else return num;
|
|
390
|
+
const httpDate = parseHttpDate(value);
|
|
391
|
+
if (httpDate !== null) return httpDate;
|
|
392
|
+
return null;
|
|
393
|
+
}
|
|
394
|
+
/**
|
|
395
|
+
* Parse HTTP-date format (RFC 7231).
|
|
396
|
+
*/
|
|
397
|
+
function parseHttpDate(value) {
|
|
398
|
+
const timestamp = Date.parse(value);
|
|
399
|
+
if (!isNaN(timestamp)) {
|
|
400
|
+
const now = Date.now();
|
|
401
|
+
const oneYearMs = 365 * 24 * 60 * 60 * 1e3;
|
|
402
|
+
if (timestamp > now - oneYearMs && timestamp < now + oneYearMs) return timestamp;
|
|
403
|
+
}
|
|
404
|
+
return null;
|
|
405
|
+
}
|
|
406
|
+
/**
|
|
407
|
+
* Parse duration strings like "1s", "100ms", "1m30s", "1h30s", "2h15m30s".
|
|
408
|
+
*
|
|
409
|
+
* Supported formats:
|
|
410
|
+
* - Xms (milliseconds)
|
|
411
|
+
* - Xs or X.Xs (seconds)
|
|
412
|
+
* - Xm or XmYs (minutes with optional seconds)
|
|
413
|
+
* - Xh or XhYm or XhYs or XhYmZs (hours with optional minutes/seconds)
|
|
414
|
+
*/
|
|
415
|
+
function parseDuration(value) {
|
|
416
|
+
const match = value.match(/^(?:(\d+)h)?(?:(\d+)m(?!s))?(?:(\d+(?:\.\d+)?)(ms|s))?$/);
|
|
417
|
+
if (!match) return null;
|
|
418
|
+
const [, hours, minutes, secondsValue, secondsUnit] = match;
|
|
419
|
+
if (!hours && !minutes && !secondsValue) return null;
|
|
420
|
+
let ms = 0;
|
|
421
|
+
if (hours) ms += parseInt(hours, 10) * 36e5;
|
|
422
|
+
if (minutes) ms += parseInt(minutes, 10) * 6e4;
|
|
423
|
+
if (secondsValue) {
|
|
424
|
+
const num = parseFloat(secondsValue);
|
|
425
|
+
ms += secondsUnit === "ms" ? num : num * 1e3;
|
|
426
|
+
}
|
|
427
|
+
return ms;
|
|
428
|
+
}
|
|
429
|
+
function lowercaseKeys(obj) {
|
|
430
|
+
const result = {};
|
|
431
|
+
for (const [key, value] of Object.entries(obj)) result[key.toLowerCase()] = value;
|
|
432
|
+
return result;
|
|
433
|
+
}
|
|
434
|
+
//#endregion
|
|
286
435
|
//#region src/util/time.ts
|
|
287
436
|
function getCurrentTimestamp() {
|
|
288
437
|
return Math.floor((/* @__PURE__ */ new Date()).getTime() / 1e3);
|
|
@@ -295,14 +444,14 @@ const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
|
295
444
|
* ~/.promptfoo/promptfoo.yaml by default.
|
|
296
445
|
*/
|
|
297
446
|
function writeGlobalConfig(config) {
|
|
298
|
-
fs$
|
|
447
|
+
fs$2.writeFileSync(path$1.join(getConfigDirectoryPath(true), "promptfoo.yaml"), yaml.dump(config));
|
|
299
448
|
}
|
|
300
449
|
function readGlobalConfig() {
|
|
301
450
|
const configDir = getConfigDirectoryPath();
|
|
302
451
|
const configFilePath = path$1.join(configDir, "promptfoo.yaml");
|
|
303
452
|
let globalConfig = { id: crypto.randomUUID() };
|
|
304
|
-
if (fs$
|
|
305
|
-
globalConfig = yaml.load(fs$
|
|
453
|
+
if (fs$2.existsSync(configFilePath)) {
|
|
454
|
+
globalConfig = yaml.load(fs$2.readFileSync(configFilePath, "utf-8")) || {};
|
|
306
455
|
if (!globalConfig?.id) {
|
|
307
456
|
globalConfig = {
|
|
308
457
|
...globalConfig,
|
|
@@ -311,8 +460,8 @@ function readGlobalConfig() {
|
|
|
311
460
|
writeGlobalConfig(globalConfig);
|
|
312
461
|
}
|
|
313
462
|
} else {
|
|
314
|
-
if (!fs$
|
|
315
|
-
fs$
|
|
463
|
+
if (!fs$2.existsSync(configDir)) fs$2.mkdirSync(configDir, { recursive: true });
|
|
464
|
+
fs$2.writeFileSync(configFilePath, yaml.dump(globalConfig));
|
|
316
465
|
}
|
|
317
466
|
return globalConfig;
|
|
318
467
|
}
|
|
@@ -415,7 +564,17 @@ var CloudConfig = class {
|
|
|
415
564
|
teams: savedConfig.teams
|
|
416
565
|
};
|
|
417
566
|
}
|
|
418
|
-
|
|
567
|
+
saveValidatedApiToken(token, apiHost, user, app, hasActiveLicense) {
|
|
568
|
+
this.setApiKey(token);
|
|
569
|
+
this.setApiHost(apiHost);
|
|
570
|
+
this.setAppUrl(app.url);
|
|
571
|
+
if (typeof hasActiveLicense === "boolean") {
|
|
572
|
+
const createdAt = user?.createdAt ? new Date(user.createdAt) : null;
|
|
573
|
+
const isGrandfathered = createdAt != null && createdAt < SHARING_CUTOFF_DATE;
|
|
574
|
+
this.setSharing(hasActiveLicense || isGrandfathered);
|
|
575
|
+
}
|
|
576
|
+
}
|
|
577
|
+
async validateApiToken(token, apiHost) {
|
|
419
578
|
try {
|
|
420
579
|
const { fetchWithProxy } = await Promise.resolve().then(() => fetch_exports);
|
|
421
580
|
const response = await fetchWithProxy(`${apiHost}/api/v1/users/me`, { headers: { Authorization: `Bearer ${token}` } });
|
|
@@ -425,19 +584,11 @@ var CloudConfig = class {
|
|
|
425
584
|
throw new Error("Failed to validate API token: " + response.statusText);
|
|
426
585
|
}
|
|
427
586
|
const { user, organization, app, hasActiveLicense } = await response.json();
|
|
428
|
-
this.setApiKey(token);
|
|
429
|
-
this.setApiHost(apiHost);
|
|
430
|
-
this.setAppUrl(app.url);
|
|
431
|
-
if (typeof hasActiveLicense === "boolean") {
|
|
432
|
-
const createdAt = user?.createdAt ? new Date(user.createdAt) : null;
|
|
433
|
-
const isGrandfathered = createdAt != null && createdAt < SHARING_CUTOFF_DATE;
|
|
434
|
-
this.setSharing(hasActiveLicense || isGrandfathered);
|
|
435
|
-
}
|
|
436
587
|
return {
|
|
437
588
|
user,
|
|
438
589
|
organization,
|
|
439
590
|
app,
|
|
440
|
-
|
|
591
|
+
...typeof hasActiveLicense === "boolean" ? { hasActiveLicense } : {}
|
|
441
592
|
};
|
|
442
593
|
} catch (err) {
|
|
443
594
|
const error = err;
|
|
@@ -447,6 +598,16 @@ var CloudConfig = class {
|
|
|
447
598
|
throw error;
|
|
448
599
|
}
|
|
449
600
|
}
|
|
601
|
+
async validateAndSetApiToken(token, apiHost) {
|
|
602
|
+
const { user, organization, app, hasActiveLicense } = await this.validateApiToken(token, apiHost);
|
|
603
|
+
this.saveValidatedApiToken(token, apiHost, user, app, hasActiveLicense);
|
|
604
|
+
return {
|
|
605
|
+
user,
|
|
606
|
+
organization,
|
|
607
|
+
app,
|
|
608
|
+
hasActiveLicense: typeof hasActiveLicense === "boolean" ? hasActiveLicense : false
|
|
609
|
+
};
|
|
610
|
+
}
|
|
450
611
|
getCurrentOrganizationId() {
|
|
451
612
|
return this.config.currentOrganizationId;
|
|
452
613
|
}
|
|
@@ -561,9 +722,8 @@ var fetch_exports = /* @__PURE__ */ __exportAll({
|
|
|
561
722
|
isRateLimited: () => isRateLimited,
|
|
562
723
|
isTransientError: () => isTransientError
|
|
563
724
|
});
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
let cachedProxyAgents = /* @__PURE__ */ new Map();
|
|
725
|
+
const cachedAgents = /* @__PURE__ */ new Map();
|
|
726
|
+
const cachedProxyAgents = /* @__PURE__ */ new Map();
|
|
567
727
|
/**
|
|
568
728
|
* Get the connection pool size for HTTP agents.
|
|
569
729
|
* Priority: PROMPTFOO_FETCH_CONNECTIONS env var > CLI -j flag > DEFAULT_MAX_CONCURRENCY (4).
|
|
@@ -580,36 +740,37 @@ function getConnectionPoolSize() {
|
|
|
580
740
|
}
|
|
581
741
|
function getOrCreateAgent(tlsOptions) {
|
|
582
742
|
const concurrency = getConnectionPoolSize();
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
}
|
|
597
|
-
return cachedAgent;
|
|
743
|
+
const existing = cachedAgents.get(concurrency);
|
|
744
|
+
if (existing) return existing;
|
|
745
|
+
const agent = new Agent({
|
|
746
|
+
headersTimeout: REQUEST_TIMEOUT_MS,
|
|
747
|
+
keepAliveTimeout: 3e4,
|
|
748
|
+
keepAliveMaxTimeout: 6e4,
|
|
749
|
+
connections: concurrency,
|
|
750
|
+
connect: tlsOptions
|
|
751
|
+
});
|
|
752
|
+
cachedAgents.set(concurrency, agent);
|
|
753
|
+
return agent;
|
|
754
|
+
}
|
|
755
|
+
function getProxyAgentCacheKey(proxyUrl, concurrency) {
|
|
756
|
+
return `${proxyUrl}::${concurrency}`;
|
|
598
757
|
}
|
|
599
758
|
function getOrCreateProxyAgent(proxyUrl, tlsOptions) {
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
759
|
+
const concurrency = getConnectionPoolSize();
|
|
760
|
+
const cacheKey = getProxyAgentCacheKey(proxyUrl, concurrency);
|
|
761
|
+
const existing = cachedProxyAgents.get(cacheKey);
|
|
762
|
+
if (existing) return existing;
|
|
763
|
+
const agent = new ProxyAgent({
|
|
764
|
+
uri: proxyUrl,
|
|
765
|
+
proxyTls: tlsOptions,
|
|
766
|
+
requestTls: tlsOptions,
|
|
767
|
+
headersTimeout: REQUEST_TIMEOUT_MS,
|
|
768
|
+
keepAliveTimeout: 3e4,
|
|
769
|
+
keepAliveMaxTimeout: 6e4,
|
|
770
|
+
connections: concurrency
|
|
771
|
+
});
|
|
772
|
+
cachedProxyAgents.set(cacheKey, agent);
|
|
773
|
+
return agent;
|
|
613
774
|
}
|
|
614
775
|
async function fetchWithProxy(url, options = {}, abortSignal) {
|
|
615
776
|
let finalUrl = url;
|
|
@@ -711,12 +872,14 @@ async function handleRateLimit(response) {
|
|
|
711
872
|
const retryAfter = response.headers.get("Retry-After");
|
|
712
873
|
const openaiReset = response.headers.get("x-ratelimit-reset-requests") || response.headers.get("x-ratelimit-reset-tokens");
|
|
713
874
|
let waitTime = 6e4;
|
|
714
|
-
if (openaiReset)
|
|
715
|
-
|
|
875
|
+
if (openaiReset) {
|
|
876
|
+
const parsedHeaders = parseRateLimitHeaders(Object.fromEntries(response.headers.entries()));
|
|
877
|
+
if (parsedHeaders.resetAt !== void 0) waitTime = Math.max(parsedHeaders.resetAt - Date.now(), 0);
|
|
878
|
+
} else if (rateLimitReset) {
|
|
716
879
|
const resetTime = /* @__PURE__ */ new Date(Number.parseInt(rateLimitReset) * 1e3);
|
|
717
880
|
const now = /* @__PURE__ */ new Date();
|
|
718
881
|
waitTime = Math.max(resetTime.getTime() - now.getTime() + 1e3, 0);
|
|
719
|
-
} else if (retryAfter) waitTime =
|
|
882
|
+
} else if (retryAfter) waitTime = parseRetryAfter(retryAfter) ?? waitTime;
|
|
720
883
|
logger.debug(`Rate limited, waiting ${waitTime}ms before retry`);
|
|
721
884
|
await sleep(waitTime);
|
|
722
885
|
}
|
|
@@ -772,6 +935,6 @@ async function fetchWithRetries(url, options = {}, timeout, maxRetries) {
|
|
|
772
935
|
throw new Error(`Request failed after ${maxRetries} retries: ${lastErrorMessage}`);
|
|
773
936
|
}
|
|
774
937
|
//#endregion
|
|
775
|
-
export {
|
|
938
|
+
export { TERMINAL_MAX_WIDTH as A, toTitleCase as C, CONSENT_ENDPOINT as D, CLOUD_PROVIDER_PREFIX as E, VERSION as F, FILE_METADATA_KEY as I, HUMAN_ASSERTION_TYPE as L, getShareApiBaseUrl as M, getShareViewBaseUrl as N, EVENTS_ENDPOINT as O, POSTHOG_KEY as P, parseChatPrompt as S, transformTools as T, isOpenAIToolArray as _, CloudConfig as a, openaiToolChoiceToBedrock as b, writeGlobalConfig as c, sleep as d, parseRateLimitHeaders as f, calculateCost as g, REQUEST_TIMEOUT_MS as h, fetch_exports as i, getDefaultShareViewBaseUrl as j, R_ENDPOINT as k, writeGlobalConfigPartial as l, LONG_RUNNING_MODEL_TIMEOUT_MS as m, fetchWithRetries as n, cloudConfig as o, parseRetryAfter as p, fetchWithTimeout as r, readGlobalConfig as s, fetchWithProxy as t, getCurrentTimestamp as u, isOpenAIToolChoice as v, transformToolChoice as w, openaiToolsToBedrock as x, isPromptfooSampleTarget as y };
|
|
776
939
|
|
|
777
|
-
//# sourceMappingURL=fetch-
|
|
940
|
+
//# sourceMappingURL=fetch-Di00EQrc.js.map
|
|
@@ -83,4 +83,4 @@ function isAudioFile(filePath) {
|
|
|
83
83
|
//#endregion
|
|
84
84
|
export { isVideoFile as a, isJavascriptFile as i, isAudioFile as n, isImageFile as r, JAVASCRIPT_EXTENSIONS as t };
|
|
85
85
|
|
|
86
|
-
//# sourceMappingURL=fileExtensions-
|
|
86
|
+
//# sourceMappingURL=fileExtensions-AWa2ZML4.js.map
|
|
@@ -82,4 +82,4 @@ function isAudioFile(filePath) {
|
|
|
82
82
|
//#endregion
|
|
83
83
|
export { isVideoFile as a, isJavascriptFile as i, isAudioFile as n, isImageFile as r, JAVASCRIPT_EXTENSIONS as t };
|
|
84
84
|
|
|
85
|
-
//# sourceMappingURL=fileExtensions-
|
|
85
|
+
//# sourceMappingURL=fileExtensions-BArZuxsI.js.map
|
|
@@ -22,7 +22,9 @@ const GenAIAttributes = {
|
|
|
22
22
|
USAGE_CACHED_TOKENS: "gen_ai.usage.cached_tokens",
|
|
23
23
|
USAGE_REASONING_TOKENS: "gen_ai.usage.reasoning_tokens",
|
|
24
24
|
USAGE_ACCEPTED_PREDICTION_TOKENS: "gen_ai.usage.accepted_prediction_tokens",
|
|
25
|
-
USAGE_REJECTED_PREDICTION_TOKENS: "gen_ai.usage.rejected_prediction_tokens"
|
|
25
|
+
USAGE_REJECTED_PREDICTION_TOKENS: "gen_ai.usage.rejected_prediction_tokens",
|
|
26
|
+
USAGE_CACHE_READ_INPUT_TOKENS: "gen_ai.usage.cache_read_input_tokens",
|
|
27
|
+
USAGE_CACHE_CREATION_INPUT_TOKENS: "gen_ai.usage.cache_creation_input_tokens"
|
|
26
28
|
};
|
|
27
29
|
const PromptfooAttributes = {
|
|
28
30
|
PROVIDER_ID: "promptfoo.provider.id",
|
|
@@ -225,6 +227,8 @@ function setGenAIResponseAttributes(span, result, sanitize = true) {
|
|
|
225
227
|
if (usage.completionDetails.reasoning !== void 0) span.setAttribute(GenAIAttributes.USAGE_REASONING_TOKENS, usage.completionDetails.reasoning);
|
|
226
228
|
if (usage.completionDetails.acceptedPrediction !== void 0) span.setAttribute(GenAIAttributes.USAGE_ACCEPTED_PREDICTION_TOKENS, usage.completionDetails.acceptedPrediction);
|
|
227
229
|
if (usage.completionDetails.rejectedPrediction !== void 0) span.setAttribute(GenAIAttributes.USAGE_REJECTED_PREDICTION_TOKENS, usage.completionDetails.rejectedPrediction);
|
|
230
|
+
if (usage.completionDetails.cacheReadInputTokens !== void 0) span.setAttribute(GenAIAttributes.USAGE_CACHE_READ_INPUT_TOKENS, usage.completionDetails.cacheReadInputTokens);
|
|
231
|
+
if (usage.completionDetails.cacheCreationInputTokens !== void 0) span.setAttribute(GenAIAttributes.USAGE_CACHE_CREATION_INPUT_TOKENS, usage.completionDetails.cacheCreationInputTokens);
|
|
228
232
|
}
|
|
229
233
|
}
|
|
230
234
|
if (result.responseModel) span.setAttribute(GenAIAttributes.RESPONSE_MODEL, result.responseModel);
|
|
@@ -253,4 +257,4 @@ function getTraceparent() {
|
|
|
253
257
|
//#endregion
|
|
254
258
|
export { withGenAISpan as n, getTraceparent as t };
|
|
255
259
|
|
|
256
|
-
//# sourceMappingURL=genaiTracer-
|
|
260
|
+
//# sourceMappingURL=genaiTracer-COYDi-tC.js.map
|
|
@@ -23,7 +23,9 @@ const GenAIAttributes = {
|
|
|
23
23
|
USAGE_CACHED_TOKENS: "gen_ai.usage.cached_tokens",
|
|
24
24
|
USAGE_REASONING_TOKENS: "gen_ai.usage.reasoning_tokens",
|
|
25
25
|
USAGE_ACCEPTED_PREDICTION_TOKENS: "gen_ai.usage.accepted_prediction_tokens",
|
|
26
|
-
USAGE_REJECTED_PREDICTION_TOKENS: "gen_ai.usage.rejected_prediction_tokens"
|
|
26
|
+
USAGE_REJECTED_PREDICTION_TOKENS: "gen_ai.usage.rejected_prediction_tokens",
|
|
27
|
+
USAGE_CACHE_READ_INPUT_TOKENS: "gen_ai.usage.cache_read_input_tokens",
|
|
28
|
+
USAGE_CACHE_CREATION_INPUT_TOKENS: "gen_ai.usage.cache_creation_input_tokens"
|
|
27
29
|
};
|
|
28
30
|
const PromptfooAttributes = {
|
|
29
31
|
PROVIDER_ID: "promptfoo.provider.id",
|
|
@@ -226,6 +228,8 @@ function setGenAIResponseAttributes(span, result, sanitize = true) {
|
|
|
226
228
|
if (usage.completionDetails.reasoning !== void 0) span.setAttribute(GenAIAttributes.USAGE_REASONING_TOKENS, usage.completionDetails.reasoning);
|
|
227
229
|
if (usage.completionDetails.acceptedPrediction !== void 0) span.setAttribute(GenAIAttributes.USAGE_ACCEPTED_PREDICTION_TOKENS, usage.completionDetails.acceptedPrediction);
|
|
228
230
|
if (usage.completionDetails.rejectedPrediction !== void 0) span.setAttribute(GenAIAttributes.USAGE_REJECTED_PREDICTION_TOKENS, usage.completionDetails.rejectedPrediction);
|
|
231
|
+
if (usage.completionDetails.cacheReadInputTokens !== void 0) span.setAttribute(GenAIAttributes.USAGE_CACHE_READ_INPUT_TOKENS, usage.completionDetails.cacheReadInputTokens);
|
|
232
|
+
if (usage.completionDetails.cacheCreationInputTokens !== void 0) span.setAttribute(GenAIAttributes.USAGE_CACHE_CREATION_INPUT_TOKENS, usage.completionDetails.cacheCreationInputTokens);
|
|
229
233
|
}
|
|
230
234
|
}
|
|
231
235
|
if (result.responseModel) span.setAttribute(GenAIAttributes.RESPONSE_MODEL, result.responseModel);
|
|
@@ -254,4 +258,4 @@ function getTraceparent() {
|
|
|
254
258
|
//#endregion
|
|
255
259
|
export { withGenAISpan as n, getTraceparent as t };
|
|
256
260
|
|
|
257
|
-
//# sourceMappingURL=genaiTracer-
|
|
261
|
+
//# sourceMappingURL=genaiTracer-DWdZ28hY.js.map
|
|
@@ -22,7 +22,9 @@ const GenAIAttributes = {
|
|
|
22
22
|
USAGE_CACHED_TOKENS: "gen_ai.usage.cached_tokens",
|
|
23
23
|
USAGE_REASONING_TOKENS: "gen_ai.usage.reasoning_tokens",
|
|
24
24
|
USAGE_ACCEPTED_PREDICTION_TOKENS: "gen_ai.usage.accepted_prediction_tokens",
|
|
25
|
-
USAGE_REJECTED_PREDICTION_TOKENS: "gen_ai.usage.rejected_prediction_tokens"
|
|
25
|
+
USAGE_REJECTED_PREDICTION_TOKENS: "gen_ai.usage.rejected_prediction_tokens",
|
|
26
|
+
USAGE_CACHE_READ_INPUT_TOKENS: "gen_ai.usage.cache_read_input_tokens",
|
|
27
|
+
USAGE_CACHE_CREATION_INPUT_TOKENS: "gen_ai.usage.cache_creation_input_tokens"
|
|
26
28
|
};
|
|
27
29
|
const PromptfooAttributes = {
|
|
28
30
|
PROVIDER_ID: "promptfoo.provider.id",
|
|
@@ -225,6 +227,8 @@ function setGenAIResponseAttributes(span, result, sanitize = true) {
|
|
|
225
227
|
if (usage.completionDetails.reasoning !== void 0) span.setAttribute(GenAIAttributes.USAGE_REASONING_TOKENS, usage.completionDetails.reasoning);
|
|
226
228
|
if (usage.completionDetails.acceptedPrediction !== void 0) span.setAttribute(GenAIAttributes.USAGE_ACCEPTED_PREDICTION_TOKENS, usage.completionDetails.acceptedPrediction);
|
|
227
229
|
if (usage.completionDetails.rejectedPrediction !== void 0) span.setAttribute(GenAIAttributes.USAGE_REJECTED_PREDICTION_TOKENS, usage.completionDetails.rejectedPrediction);
|
|
230
|
+
if (usage.completionDetails.cacheReadInputTokens !== void 0) span.setAttribute(GenAIAttributes.USAGE_CACHE_READ_INPUT_TOKENS, usage.completionDetails.cacheReadInputTokens);
|
|
231
|
+
if (usage.completionDetails.cacheCreationInputTokens !== void 0) span.setAttribute(GenAIAttributes.USAGE_CACHE_CREATION_INPUT_TOKENS, usage.completionDetails.cacheCreationInputTokens);
|
|
228
232
|
}
|
|
229
233
|
}
|
|
230
234
|
if (result.responseModel) span.setAttribute(GenAIAttributes.RESPONSE_MODEL, result.responseModel);
|
|
@@ -253,4 +257,4 @@ function getTraceparent() {
|
|
|
253
257
|
//#endregion
|
|
254
258
|
export { withGenAISpan as n, getTraceparent as t };
|
|
255
259
|
|
|
256
|
-
//# sourceMappingURL=genaiTracer-
|
|
260
|
+
//# sourceMappingURL=genaiTracer-XnrcgDCe.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
require("./logger-
|
|
1
|
+
require("./logger-COuQb2xB.cjs");
|
|
2
2
|
let _opentelemetry_api = require("@opentelemetry/api");
|
|
3
3
|
//#region src/tracing/genaiTracer.ts
|
|
4
4
|
const TRACER_NAME = "promptfoo.providers";
|
|
@@ -23,7 +23,9 @@ const GenAIAttributes = {
|
|
|
23
23
|
USAGE_CACHED_TOKENS: "gen_ai.usage.cached_tokens",
|
|
24
24
|
USAGE_REASONING_TOKENS: "gen_ai.usage.reasoning_tokens",
|
|
25
25
|
USAGE_ACCEPTED_PREDICTION_TOKENS: "gen_ai.usage.accepted_prediction_tokens",
|
|
26
|
-
USAGE_REJECTED_PREDICTION_TOKENS: "gen_ai.usage.rejected_prediction_tokens"
|
|
26
|
+
USAGE_REJECTED_PREDICTION_TOKENS: "gen_ai.usage.rejected_prediction_tokens",
|
|
27
|
+
USAGE_CACHE_READ_INPUT_TOKENS: "gen_ai.usage.cache_read_input_tokens",
|
|
28
|
+
USAGE_CACHE_CREATION_INPUT_TOKENS: "gen_ai.usage.cache_creation_input_tokens"
|
|
27
29
|
};
|
|
28
30
|
const PromptfooAttributes = {
|
|
29
31
|
PROVIDER_ID: "promptfoo.provider.id",
|
|
@@ -226,6 +228,8 @@ function setGenAIResponseAttributes(span, result, sanitize = true) {
|
|
|
226
228
|
if (usage.completionDetails.reasoning !== void 0) span.setAttribute(GenAIAttributes.USAGE_REASONING_TOKENS, usage.completionDetails.reasoning);
|
|
227
229
|
if (usage.completionDetails.acceptedPrediction !== void 0) span.setAttribute(GenAIAttributes.USAGE_ACCEPTED_PREDICTION_TOKENS, usage.completionDetails.acceptedPrediction);
|
|
228
230
|
if (usage.completionDetails.rejectedPrediction !== void 0) span.setAttribute(GenAIAttributes.USAGE_REJECTED_PREDICTION_TOKENS, usage.completionDetails.rejectedPrediction);
|
|
231
|
+
if (usage.completionDetails.cacheReadInputTokens !== void 0) span.setAttribute(GenAIAttributes.USAGE_CACHE_READ_INPUT_TOKENS, usage.completionDetails.cacheReadInputTokens);
|
|
232
|
+
if (usage.completionDetails.cacheCreationInputTokens !== void 0) span.setAttribute(GenAIAttributes.USAGE_CACHE_CREATION_INPUT_TOKENS, usage.completionDetails.cacheCreationInputTokens);
|
|
229
233
|
}
|
|
230
234
|
}
|
|
231
235
|
if (result.responseModel) span.setAttribute(GenAIAttributes.RESPONSE_MODEL, result.responseModel);
|
|
@@ -265,4 +269,4 @@ Object.defineProperty(exports, "withGenAISpan", {
|
|
|
265
269
|
}
|
|
266
270
|
});
|
|
267
271
|
|
|
268
|
-
//# sourceMappingURL=genaiTracer-
|
|
272
|
+
//# sourceMappingURL=genaiTracer-yRuxj9-L.cjs.map
|