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,12 +1,12 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
2
|
+
import { D as getEnvInt, N as state, O as getEnvString, T as getEnvBool, h as sanitizeUrl, o as logRequestResponse, s as logger } from "./logger-DksKw1Qc.js";
|
|
3
3
|
import { t as invariant } from "./invariant-BtWWVVhl.js";
|
|
4
|
-
import { a as cloudConfig } from "./cloud-
|
|
5
|
-
import { Agent, ProxyAgent } from "undici";
|
|
4
|
+
import { a as cloudConfig } from "./cloud-DQZ5sVjW.js";
|
|
6
5
|
import path from "path";
|
|
7
6
|
import yaml from "js-yaml";
|
|
8
7
|
import * as fsPromises from "fs/promises";
|
|
9
8
|
import { getProxyForUrl } from "proxy-from-env";
|
|
9
|
+
import { Agent, ProxyAgent } from "undici";
|
|
10
10
|
import { promisify } from "util";
|
|
11
11
|
import { gzip } from "zlib";
|
|
12
12
|
//#region src/providers/constants.ts
|
|
@@ -22,7 +22,7 @@ const HUMAN_ASSERTION_TYPE = "human";
|
|
|
22
22
|
* Application version from package.json.
|
|
23
23
|
* Injected at build time, or read from npm environment in development.
|
|
24
24
|
*/
|
|
25
|
-
const VERSION = "0.121.
|
|
25
|
+
const VERSION = "0.121.4";
|
|
26
26
|
/**
|
|
27
27
|
* PostHog analytics key.
|
|
28
28
|
* Only populated during production builds via PROMPTFOO_POSTHOG_KEY env var.
|
|
@@ -149,7 +149,7 @@ function isOpenAIToolChoice(obj) {
|
|
|
149
149
|
function openaiToolChoiceToAnthropic(choice) {
|
|
150
150
|
if (typeof choice === "string") switch (choice) {
|
|
151
151
|
case "auto": return { type: "auto" };
|
|
152
|
-
case "none": return { type: "
|
|
152
|
+
case "none": return { type: "none" };
|
|
153
153
|
case "required": return { type: "any" };
|
|
154
154
|
}
|
|
155
155
|
return {
|
|
@@ -285,6 +285,155 @@ function transformTools(tools, format) {
|
|
|
285
285
|
}
|
|
286
286
|
}
|
|
287
287
|
//#endregion
|
|
288
|
+
//#region src/scheduler/headerParser.ts
|
|
289
|
+
const OPENAI_HEADERS = {
|
|
290
|
+
remainingRequests: "x-ratelimit-remaining-requests",
|
|
291
|
+
remainingTokens: "x-ratelimit-remaining-tokens",
|
|
292
|
+
limitRequests: "x-ratelimit-limit-requests",
|
|
293
|
+
limitTokens: "x-ratelimit-limit-tokens",
|
|
294
|
+
resetRequests: "x-ratelimit-reset-requests",
|
|
295
|
+
resetTokens: "x-ratelimit-reset-tokens"
|
|
296
|
+
};
|
|
297
|
+
const ANTHROPIC_HEADERS = {
|
|
298
|
+
remainingRequests: "anthropic-ratelimit-requests-remaining",
|
|
299
|
+
remainingTokens: "anthropic-ratelimit-tokens-remaining",
|
|
300
|
+
limitRequests: "anthropic-ratelimit-requests-limit",
|
|
301
|
+
limitTokens: "anthropic-ratelimit-tokens-limit",
|
|
302
|
+
reset: "anthropic-ratelimit-requests-reset"
|
|
303
|
+
};
|
|
304
|
+
const STANDARD_HEADERS = {
|
|
305
|
+
remaining: "ratelimit-remaining",
|
|
306
|
+
limit: "ratelimit-limit",
|
|
307
|
+
reset: "ratelimit-reset",
|
|
308
|
+
remainingAlt: "x-ratelimit-remaining",
|
|
309
|
+
limitAlt: "x-ratelimit-limit",
|
|
310
|
+
resetAlt: "x-ratelimit-reset"
|
|
311
|
+
};
|
|
312
|
+
/**
|
|
313
|
+
* Parse rate limit headers from response.
|
|
314
|
+
*/
|
|
315
|
+
function parseRateLimitHeaders(headers) {
|
|
316
|
+
const result = {};
|
|
317
|
+
const h = lowercaseKeys(headers);
|
|
318
|
+
result.remainingRequests = parseFirstMatch(h, [
|
|
319
|
+
OPENAI_HEADERS.remainingRequests,
|
|
320
|
+
ANTHROPIC_HEADERS.remainingRequests,
|
|
321
|
+
STANDARD_HEADERS.remainingAlt,
|
|
322
|
+
STANDARD_HEADERS.remaining
|
|
323
|
+
]);
|
|
324
|
+
result.remainingTokens = parseFirstMatch(h, [OPENAI_HEADERS.remainingTokens, ANTHROPIC_HEADERS.remainingTokens]);
|
|
325
|
+
result.limitRequests = parseFirstMatch(h, [
|
|
326
|
+
OPENAI_HEADERS.limitRequests,
|
|
327
|
+
ANTHROPIC_HEADERS.limitRequests,
|
|
328
|
+
STANDARD_HEADERS.limitAlt,
|
|
329
|
+
STANDARD_HEADERS.limit
|
|
330
|
+
]);
|
|
331
|
+
result.limitTokens = parseFirstMatch(h, [OPENAI_HEADERS.limitTokens, ANTHROPIC_HEADERS.limitTokens]);
|
|
332
|
+
for (const name of [
|
|
333
|
+
OPENAI_HEADERS.resetRequests,
|
|
334
|
+
OPENAI_HEADERS.resetTokens,
|
|
335
|
+
ANTHROPIC_HEADERS.reset,
|
|
336
|
+
STANDARD_HEADERS.resetAlt,
|
|
337
|
+
STANDARD_HEADERS.reset
|
|
338
|
+
]) if (h[name] !== void 0) {
|
|
339
|
+
const parsed = parseResetTime(h[name]);
|
|
340
|
+
if (parsed !== null) {
|
|
341
|
+
result.resetAt = parsed;
|
|
342
|
+
break;
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
if (h["retry-after-ms"] !== void 0) {
|
|
346
|
+
const ms = parseInt(h["retry-after-ms"], 10);
|
|
347
|
+
if (!isNaN(ms) && ms >= 0) {
|
|
348
|
+
result.retryAfterMs = ms;
|
|
349
|
+
if (result.resetAt === void 0) result.resetAt = Date.now() + ms;
|
|
350
|
+
}
|
|
351
|
+
} else if (h["retry-after"] !== void 0) {
|
|
352
|
+
const parsed = parseRetryAfter(h["retry-after"]);
|
|
353
|
+
if (parsed !== null) {
|
|
354
|
+
result.retryAfterMs = parsed;
|
|
355
|
+
if (result.resetAt === void 0) result.resetAt = Date.now() + parsed;
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
return result;
|
|
359
|
+
}
|
|
360
|
+
/**
|
|
361
|
+
* Parse Retry-After header value.
|
|
362
|
+
* Returns duration in milliseconds.
|
|
363
|
+
* Exported for integration use.
|
|
364
|
+
*/
|
|
365
|
+
function parseRetryAfter(value) {
|
|
366
|
+
const seconds = parseInt(value, 10);
|
|
367
|
+
if (!isNaN(seconds) && seconds >= 0 && String(seconds) === value.trim()) return seconds * 1e3;
|
|
368
|
+
const httpDate = parseHttpDate(value);
|
|
369
|
+
if (httpDate !== null) return Math.max(0, httpDate - Date.now());
|
|
370
|
+
return null;
|
|
371
|
+
}
|
|
372
|
+
function parseFirstMatch(headers, names) {
|
|
373
|
+
for (const name of names) {
|
|
374
|
+
const value = headers[name];
|
|
375
|
+
if (value !== void 0) {
|
|
376
|
+
const num = parseInt(value, 10);
|
|
377
|
+
if (!isNaN(num) && num >= 0) return num;
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
/**
|
|
382
|
+
* Parse reset time from various formats.
|
|
383
|
+
* Returns absolute Unix timestamp in milliseconds.
|
|
384
|
+
*/
|
|
385
|
+
function parseResetTime(value) {
|
|
386
|
+
const durationMs = parseDuration(value);
|
|
387
|
+
if (durationMs !== null) return Date.now() + durationMs;
|
|
388
|
+
const num = parseFloat(value);
|
|
389
|
+
if (!isNaN(num)) if (num < 1e9) return Date.now() + num * 1e3;
|
|
390
|
+
else if (num < 1e10) return num * 1e3;
|
|
391
|
+
else return num;
|
|
392
|
+
const httpDate = parseHttpDate(value);
|
|
393
|
+
if (httpDate !== null) return httpDate;
|
|
394
|
+
return null;
|
|
395
|
+
}
|
|
396
|
+
/**
|
|
397
|
+
* Parse HTTP-date format (RFC 7231).
|
|
398
|
+
*/
|
|
399
|
+
function parseHttpDate(value) {
|
|
400
|
+
const timestamp = Date.parse(value);
|
|
401
|
+
if (!isNaN(timestamp)) {
|
|
402
|
+
const now = Date.now();
|
|
403
|
+
const oneYearMs = 365 * 24 * 60 * 60 * 1e3;
|
|
404
|
+
if (timestamp > now - oneYearMs && timestamp < now + oneYearMs) return timestamp;
|
|
405
|
+
}
|
|
406
|
+
return null;
|
|
407
|
+
}
|
|
408
|
+
/**
|
|
409
|
+
* Parse duration strings like "1s", "100ms", "1m30s", "1h30s", "2h15m30s".
|
|
410
|
+
*
|
|
411
|
+
* Supported formats:
|
|
412
|
+
* - Xms (milliseconds)
|
|
413
|
+
* - Xs or X.Xs (seconds)
|
|
414
|
+
* - Xm or XmYs (minutes with optional seconds)
|
|
415
|
+
* - Xh or XhYm or XhYs or XhYmZs (hours with optional minutes/seconds)
|
|
416
|
+
*/
|
|
417
|
+
function parseDuration(value) {
|
|
418
|
+
const match = value.match(/^(?:(\d+)h)?(?:(\d+)m(?!s))?(?:(\d+(?:\.\d+)?)(ms|s))?$/);
|
|
419
|
+
if (!match) return null;
|
|
420
|
+
const [, hours, minutes, secondsValue, secondsUnit] = match;
|
|
421
|
+
if (!hours && !minutes && !secondsValue) return null;
|
|
422
|
+
let ms = 0;
|
|
423
|
+
if (hours) ms += parseInt(hours, 10) * 36e5;
|
|
424
|
+
if (minutes) ms += parseInt(minutes, 10) * 6e4;
|
|
425
|
+
if (secondsValue) {
|
|
426
|
+
const num = parseFloat(secondsValue);
|
|
427
|
+
ms += secondsUnit === "ms" ? num : num * 1e3;
|
|
428
|
+
}
|
|
429
|
+
return ms;
|
|
430
|
+
}
|
|
431
|
+
function lowercaseKeys(obj) {
|
|
432
|
+
const result = {};
|
|
433
|
+
for (const [key, value] of Object.entries(obj)) result[key.toLowerCase()] = value;
|
|
434
|
+
return result;
|
|
435
|
+
}
|
|
436
|
+
//#endregion
|
|
288
437
|
//#region src/util/time.ts
|
|
289
438
|
function getCurrentTimestamp() {
|
|
290
439
|
return Math.floor((/* @__PURE__ */ new Date()).getTime() / 1e3);
|
|
@@ -371,9 +520,8 @@ async function monkeyPatchFetch(url, options) {
|
|
|
371
520
|
}
|
|
372
521
|
//#endregion
|
|
373
522
|
//#region src/util/fetch/index.ts
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
let cachedProxyAgents = /* @__PURE__ */ new Map();
|
|
523
|
+
const cachedAgents = /* @__PURE__ */ new Map();
|
|
524
|
+
const cachedProxyAgents = /* @__PURE__ */ new Map();
|
|
377
525
|
/**
|
|
378
526
|
* Get the connection pool size for HTTP agents.
|
|
379
527
|
* Priority: PROMPTFOO_FETCH_CONNECTIONS env var > CLI -j flag > DEFAULT_MAX_CONCURRENCY (4).
|
|
@@ -393,44 +541,44 @@ function getConnectionPoolSize() {
|
|
|
393
541
|
* Exported for testing only.
|
|
394
542
|
*/
|
|
395
543
|
function clearAgentCache() {
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
cachedAgentConcurrency = void 0;
|
|
544
|
+
for (const agent of cachedAgents.values()) if (typeof agent.close === "function") agent.close();
|
|
545
|
+
cachedAgents.clear();
|
|
399
546
|
for (const agent of cachedProxyAgents.values()) if (typeof agent.close === "function") agent.close();
|
|
400
|
-
cachedProxyAgents
|
|
547
|
+
cachedProxyAgents.clear();
|
|
401
548
|
}
|
|
402
549
|
function getOrCreateAgent(tlsOptions) {
|
|
403
550
|
const concurrency = getConnectionPoolSize();
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
}
|
|
418
|
-
return cachedAgent;
|
|
551
|
+
const existing = cachedAgents.get(concurrency);
|
|
552
|
+
if (existing) return existing;
|
|
553
|
+
const agent = new Agent({
|
|
554
|
+
headersTimeout: REQUEST_TIMEOUT_MS,
|
|
555
|
+
keepAliveTimeout: 3e4,
|
|
556
|
+
keepAliveMaxTimeout: 6e4,
|
|
557
|
+
connections: concurrency,
|
|
558
|
+
connect: tlsOptions
|
|
559
|
+
});
|
|
560
|
+
cachedAgents.set(concurrency, agent);
|
|
561
|
+
return agent;
|
|
562
|
+
}
|
|
563
|
+
function getProxyAgentCacheKey(proxyUrl, concurrency) {
|
|
564
|
+
return `${proxyUrl}::${concurrency}`;
|
|
419
565
|
}
|
|
420
566
|
function getOrCreateProxyAgent(proxyUrl, tlsOptions) {
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
567
|
+
const concurrency = getConnectionPoolSize();
|
|
568
|
+
const cacheKey = getProxyAgentCacheKey(proxyUrl, concurrency);
|
|
569
|
+
const existing = cachedProxyAgents.get(cacheKey);
|
|
570
|
+
if (existing) return existing;
|
|
571
|
+
const agent = new ProxyAgent({
|
|
572
|
+
uri: proxyUrl,
|
|
573
|
+
proxyTls: tlsOptions,
|
|
574
|
+
requestTls: tlsOptions,
|
|
575
|
+
headersTimeout: REQUEST_TIMEOUT_MS,
|
|
576
|
+
keepAliveTimeout: 3e4,
|
|
577
|
+
keepAliveMaxTimeout: 6e4,
|
|
578
|
+
connections: concurrency
|
|
579
|
+
});
|
|
580
|
+
cachedProxyAgents.set(cacheKey, agent);
|
|
581
|
+
return agent;
|
|
434
582
|
}
|
|
435
583
|
async function fetchWithProxy(url, options = {}, abortSignal) {
|
|
436
584
|
let finalUrl = url;
|
|
@@ -532,12 +680,14 @@ async function handleRateLimit(response) {
|
|
|
532
680
|
const retryAfter = response.headers.get("Retry-After");
|
|
533
681
|
const openaiReset = response.headers.get("x-ratelimit-reset-requests") || response.headers.get("x-ratelimit-reset-tokens");
|
|
534
682
|
let waitTime = 6e4;
|
|
535
|
-
if (openaiReset)
|
|
536
|
-
|
|
683
|
+
if (openaiReset) {
|
|
684
|
+
const parsedHeaders = parseRateLimitHeaders(Object.fromEntries(response.headers.entries()));
|
|
685
|
+
if (parsedHeaders.resetAt !== void 0) waitTime = Math.max(parsedHeaders.resetAt - Date.now(), 0);
|
|
686
|
+
} else if (rateLimitReset) {
|
|
537
687
|
const resetTime = /* @__PURE__ */ new Date(Number.parseInt(rateLimitReset) * 1e3);
|
|
538
688
|
const now = /* @__PURE__ */ new Date();
|
|
539
689
|
waitTime = Math.max(resetTime.getTime() - now.getTime() + 1e3, 0);
|
|
540
|
-
} else if (retryAfter) waitTime =
|
|
690
|
+
} else if (retryAfter) waitTime = parseRetryAfter(retryAfter) ?? waitTime;
|
|
541
691
|
logger.debug(`Rate limited, waiting ${waitTime}ms before retry`);
|
|
542
692
|
await sleep(waitTime);
|
|
543
693
|
}
|
|
@@ -593,6 +743,6 @@ async function fetchWithRetries(url, options = {}, timeout, maxRetries) {
|
|
|
593
743
|
throw new Error(`Request failed after ${maxRetries} retries: ${lastErrorMessage}`);
|
|
594
744
|
}
|
|
595
745
|
//#endregion
|
|
596
|
-
export {
|
|
746
|
+
export { getDefaultPort as A, transformToolChoice as C, EVENTS_ENDPOINT as D, CONSENT_ENDPOINT as E, VERSION as F, FILE_METADATA_KEY as I, HUMAN_ASSERTION_TYPE as L, getShareApiBaseUrl as M, getShareViewBaseUrl as N, R_ENDPOINT as O, POSTHOG_KEY as P, toTitleCase as S, CLOUD_PROVIDER_PREFIX as T, isOpenAIToolChoice as _, handleRateLimit as a, openaiToolsToBedrock as b, getCurrentTimestamp as c, parseRateLimitHeaders as d, parseRetryAfter as f, isOpenAIToolArray as g, calculateCost as h, fetchWithTimeout as i, getDefaultShareViewBaseUrl as j, TERMINAL_MAX_WIDTH as k, sleep as l, REQUEST_TIMEOUT_MS as m, fetchWithProxy as n, isRateLimited as o, LONG_RUNNING_MODEL_TIMEOUT_MS as p, fetchWithRetries as r, isTransientError as s, clearAgentCache as t, sleepWithAbort as u, isPromptfooSampleTarget as v, transformTools as w, parseChatPrompt as x, openaiToolChoiceToBedrock as y };
|
|
597
747
|
|
|
598
|
-
//# sourceMappingURL=fetch-
|
|
748
|
+
//# sourceMappingURL=fetch-BEWnXrrG.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const require_logger = require("./logger-
|
|
1
|
+
const require_logger = require("./logger-COuQb2xB.cjs");
|
|
2
2
|
const require_invariant = require("./invariant-kfQ8Bu82.cjs");
|
|
3
3
|
let fs = require("fs");
|
|
4
4
|
fs = require_logger.__toESM(fs);
|
|
@@ -25,7 +25,7 @@ const HUMAN_ASSERTION_TYPE = "human";
|
|
|
25
25
|
* Application version from package.json.
|
|
26
26
|
* Injected at build time, or read from npm environment in development.
|
|
27
27
|
*/
|
|
28
|
-
const VERSION = "0.121.
|
|
28
|
+
const VERSION = "0.121.4";
|
|
29
29
|
/**
|
|
30
30
|
* PostHog analytics key.
|
|
31
31
|
* Only populated during production builds via PROMPTFOO_POSTHOG_KEY env var.
|
|
@@ -149,7 +149,7 @@ function isOpenAIToolChoice(obj) {
|
|
|
149
149
|
function openaiToolChoiceToAnthropic(choice) {
|
|
150
150
|
if (typeof choice === "string") switch (choice) {
|
|
151
151
|
case "auto": return { type: "auto" };
|
|
152
|
-
case "none": return { type: "
|
|
152
|
+
case "none": return { type: "none" };
|
|
153
153
|
case "required": return { type: "any" };
|
|
154
154
|
}
|
|
155
155
|
return {
|
|
@@ -285,6 +285,155 @@ function transformTools(tools, format) {
|
|
|
285
285
|
}
|
|
286
286
|
}
|
|
287
287
|
//#endregion
|
|
288
|
+
//#region src/scheduler/headerParser.ts
|
|
289
|
+
const OPENAI_HEADERS = {
|
|
290
|
+
remainingRequests: "x-ratelimit-remaining-requests",
|
|
291
|
+
remainingTokens: "x-ratelimit-remaining-tokens",
|
|
292
|
+
limitRequests: "x-ratelimit-limit-requests",
|
|
293
|
+
limitTokens: "x-ratelimit-limit-tokens",
|
|
294
|
+
resetRequests: "x-ratelimit-reset-requests",
|
|
295
|
+
resetTokens: "x-ratelimit-reset-tokens"
|
|
296
|
+
};
|
|
297
|
+
const ANTHROPIC_HEADERS = {
|
|
298
|
+
remainingRequests: "anthropic-ratelimit-requests-remaining",
|
|
299
|
+
remainingTokens: "anthropic-ratelimit-tokens-remaining",
|
|
300
|
+
limitRequests: "anthropic-ratelimit-requests-limit",
|
|
301
|
+
limitTokens: "anthropic-ratelimit-tokens-limit",
|
|
302
|
+
reset: "anthropic-ratelimit-requests-reset"
|
|
303
|
+
};
|
|
304
|
+
const STANDARD_HEADERS = {
|
|
305
|
+
remaining: "ratelimit-remaining",
|
|
306
|
+
limit: "ratelimit-limit",
|
|
307
|
+
reset: "ratelimit-reset",
|
|
308
|
+
remainingAlt: "x-ratelimit-remaining",
|
|
309
|
+
limitAlt: "x-ratelimit-limit",
|
|
310
|
+
resetAlt: "x-ratelimit-reset"
|
|
311
|
+
};
|
|
312
|
+
/**
|
|
313
|
+
* Parse rate limit headers from response.
|
|
314
|
+
*/
|
|
315
|
+
function parseRateLimitHeaders(headers) {
|
|
316
|
+
const result = {};
|
|
317
|
+
const h = lowercaseKeys(headers);
|
|
318
|
+
result.remainingRequests = parseFirstMatch(h, [
|
|
319
|
+
OPENAI_HEADERS.remainingRequests,
|
|
320
|
+
ANTHROPIC_HEADERS.remainingRequests,
|
|
321
|
+
STANDARD_HEADERS.remainingAlt,
|
|
322
|
+
STANDARD_HEADERS.remaining
|
|
323
|
+
]);
|
|
324
|
+
result.remainingTokens = parseFirstMatch(h, [OPENAI_HEADERS.remainingTokens, ANTHROPIC_HEADERS.remainingTokens]);
|
|
325
|
+
result.limitRequests = parseFirstMatch(h, [
|
|
326
|
+
OPENAI_HEADERS.limitRequests,
|
|
327
|
+
ANTHROPIC_HEADERS.limitRequests,
|
|
328
|
+
STANDARD_HEADERS.limitAlt,
|
|
329
|
+
STANDARD_HEADERS.limit
|
|
330
|
+
]);
|
|
331
|
+
result.limitTokens = parseFirstMatch(h, [OPENAI_HEADERS.limitTokens, ANTHROPIC_HEADERS.limitTokens]);
|
|
332
|
+
for (const name of [
|
|
333
|
+
OPENAI_HEADERS.resetRequests,
|
|
334
|
+
OPENAI_HEADERS.resetTokens,
|
|
335
|
+
ANTHROPIC_HEADERS.reset,
|
|
336
|
+
STANDARD_HEADERS.resetAlt,
|
|
337
|
+
STANDARD_HEADERS.reset
|
|
338
|
+
]) if (h[name] !== void 0) {
|
|
339
|
+
const parsed = parseResetTime(h[name]);
|
|
340
|
+
if (parsed !== null) {
|
|
341
|
+
result.resetAt = parsed;
|
|
342
|
+
break;
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
if (h["retry-after-ms"] !== void 0) {
|
|
346
|
+
const ms = parseInt(h["retry-after-ms"], 10);
|
|
347
|
+
if (!isNaN(ms) && ms >= 0) {
|
|
348
|
+
result.retryAfterMs = ms;
|
|
349
|
+
if (result.resetAt === void 0) result.resetAt = Date.now() + ms;
|
|
350
|
+
}
|
|
351
|
+
} else if (h["retry-after"] !== void 0) {
|
|
352
|
+
const parsed = parseRetryAfter(h["retry-after"]);
|
|
353
|
+
if (parsed !== null) {
|
|
354
|
+
result.retryAfterMs = parsed;
|
|
355
|
+
if (result.resetAt === void 0) result.resetAt = Date.now() + parsed;
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
return result;
|
|
359
|
+
}
|
|
360
|
+
/**
|
|
361
|
+
* Parse Retry-After header value.
|
|
362
|
+
* Returns duration in milliseconds.
|
|
363
|
+
* Exported for integration use.
|
|
364
|
+
*/
|
|
365
|
+
function parseRetryAfter(value) {
|
|
366
|
+
const seconds = parseInt(value, 10);
|
|
367
|
+
if (!isNaN(seconds) && seconds >= 0 && String(seconds) === value.trim()) return seconds * 1e3;
|
|
368
|
+
const httpDate = parseHttpDate(value);
|
|
369
|
+
if (httpDate !== null) return Math.max(0, httpDate - Date.now());
|
|
370
|
+
return null;
|
|
371
|
+
}
|
|
372
|
+
function parseFirstMatch(headers, names) {
|
|
373
|
+
for (const name of names) {
|
|
374
|
+
const value = headers[name];
|
|
375
|
+
if (value !== void 0) {
|
|
376
|
+
const num = parseInt(value, 10);
|
|
377
|
+
if (!isNaN(num) && num >= 0) return num;
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
/**
|
|
382
|
+
* Parse reset time from various formats.
|
|
383
|
+
* Returns absolute Unix timestamp in milliseconds.
|
|
384
|
+
*/
|
|
385
|
+
function parseResetTime(value) {
|
|
386
|
+
const durationMs = parseDuration(value);
|
|
387
|
+
if (durationMs !== null) return Date.now() + durationMs;
|
|
388
|
+
const num = parseFloat(value);
|
|
389
|
+
if (!isNaN(num)) if (num < 1e9) return Date.now() + num * 1e3;
|
|
390
|
+
else if (num < 1e10) return num * 1e3;
|
|
391
|
+
else return num;
|
|
392
|
+
const httpDate = parseHttpDate(value);
|
|
393
|
+
if (httpDate !== null) return httpDate;
|
|
394
|
+
return null;
|
|
395
|
+
}
|
|
396
|
+
/**
|
|
397
|
+
* Parse HTTP-date format (RFC 7231).
|
|
398
|
+
*/
|
|
399
|
+
function parseHttpDate(value) {
|
|
400
|
+
const timestamp = Date.parse(value);
|
|
401
|
+
if (!isNaN(timestamp)) {
|
|
402
|
+
const now = Date.now();
|
|
403
|
+
const oneYearMs = 365 * 24 * 60 * 60 * 1e3;
|
|
404
|
+
if (timestamp > now - oneYearMs && timestamp < now + oneYearMs) return timestamp;
|
|
405
|
+
}
|
|
406
|
+
return null;
|
|
407
|
+
}
|
|
408
|
+
/**
|
|
409
|
+
* Parse duration strings like "1s", "100ms", "1m30s", "1h30s", "2h15m30s".
|
|
410
|
+
*
|
|
411
|
+
* Supported formats:
|
|
412
|
+
* - Xms (milliseconds)
|
|
413
|
+
* - Xs or X.Xs (seconds)
|
|
414
|
+
* - Xm or XmYs (minutes with optional seconds)
|
|
415
|
+
* - Xh or XhYm or XhYs or XhYmZs (hours with optional minutes/seconds)
|
|
416
|
+
*/
|
|
417
|
+
function parseDuration(value) {
|
|
418
|
+
const match = value.match(/^(?:(\d+)h)?(?:(\d+)m(?!s))?(?:(\d+(?:\.\d+)?)(ms|s))?$/);
|
|
419
|
+
if (!match) return null;
|
|
420
|
+
const [, hours, minutes, secondsValue, secondsUnit] = match;
|
|
421
|
+
if (!hours && !minutes && !secondsValue) return null;
|
|
422
|
+
let ms = 0;
|
|
423
|
+
if (hours) ms += parseInt(hours, 10) * 36e5;
|
|
424
|
+
if (minutes) ms += parseInt(minutes, 10) * 6e4;
|
|
425
|
+
if (secondsValue) {
|
|
426
|
+
const num = parseFloat(secondsValue);
|
|
427
|
+
ms += secondsUnit === "ms" ? num : num * 1e3;
|
|
428
|
+
}
|
|
429
|
+
return ms;
|
|
430
|
+
}
|
|
431
|
+
function lowercaseKeys(obj) {
|
|
432
|
+
const result = {};
|
|
433
|
+
for (const [key, value] of Object.entries(obj)) result[key.toLowerCase()] = value;
|
|
434
|
+
return result;
|
|
435
|
+
}
|
|
436
|
+
//#endregion
|
|
288
437
|
//#region src/util/time.ts
|
|
289
438
|
function getCurrentTimestamp() {
|
|
290
439
|
return Math.floor((/* @__PURE__ */ new Date()).getTime() / 1e3);
|
|
@@ -417,7 +566,17 @@ var CloudConfig = class {
|
|
|
417
566
|
teams: savedConfig.teams
|
|
418
567
|
};
|
|
419
568
|
}
|
|
420
|
-
|
|
569
|
+
saveValidatedApiToken(token, apiHost, user, app, hasActiveLicense) {
|
|
570
|
+
this.setApiKey(token);
|
|
571
|
+
this.setApiHost(apiHost);
|
|
572
|
+
this.setAppUrl(app.url);
|
|
573
|
+
if (typeof hasActiveLicense === "boolean") {
|
|
574
|
+
const createdAt = user?.createdAt ? new Date(user.createdAt) : null;
|
|
575
|
+
const isGrandfathered = createdAt != null && createdAt < SHARING_CUTOFF_DATE;
|
|
576
|
+
this.setSharing(hasActiveLicense || isGrandfathered);
|
|
577
|
+
}
|
|
578
|
+
}
|
|
579
|
+
async validateApiToken(token, apiHost) {
|
|
421
580
|
try {
|
|
422
581
|
const { fetchWithProxy } = await Promise.resolve().then(() => fetch_exports);
|
|
423
582
|
const response = await fetchWithProxy(`${apiHost}/api/v1/users/me`, { headers: { Authorization: `Bearer ${token}` } });
|
|
@@ -427,19 +586,11 @@ var CloudConfig = class {
|
|
|
427
586
|
throw new Error("Failed to validate API token: " + response.statusText);
|
|
428
587
|
}
|
|
429
588
|
const { user, organization, app, hasActiveLicense } = await response.json();
|
|
430
|
-
this.setApiKey(token);
|
|
431
|
-
this.setApiHost(apiHost);
|
|
432
|
-
this.setAppUrl(app.url);
|
|
433
|
-
if (typeof hasActiveLicense === "boolean") {
|
|
434
|
-
const createdAt = user?.createdAt ? new Date(user.createdAt) : null;
|
|
435
|
-
const isGrandfathered = createdAt != null && createdAt < SHARING_CUTOFF_DATE;
|
|
436
|
-
this.setSharing(hasActiveLicense || isGrandfathered);
|
|
437
|
-
}
|
|
438
589
|
return {
|
|
439
590
|
user,
|
|
440
591
|
organization,
|
|
441
592
|
app,
|
|
442
|
-
|
|
593
|
+
...typeof hasActiveLicense === "boolean" ? { hasActiveLicense } : {}
|
|
443
594
|
};
|
|
444
595
|
} catch (err) {
|
|
445
596
|
const error = err;
|
|
@@ -449,6 +600,16 @@ var CloudConfig = class {
|
|
|
449
600
|
throw error;
|
|
450
601
|
}
|
|
451
602
|
}
|
|
603
|
+
async validateAndSetApiToken(token, apiHost) {
|
|
604
|
+
const { user, organization, app, hasActiveLicense } = await this.validateApiToken(token, apiHost);
|
|
605
|
+
this.saveValidatedApiToken(token, apiHost, user, app, hasActiveLicense);
|
|
606
|
+
return {
|
|
607
|
+
user,
|
|
608
|
+
organization,
|
|
609
|
+
app,
|
|
610
|
+
hasActiveLicense: typeof hasActiveLicense === "boolean" ? hasActiveLicense : false
|
|
611
|
+
};
|
|
612
|
+
}
|
|
452
613
|
getCurrentOrganizationId() {
|
|
453
614
|
return this.config.currentOrganizationId;
|
|
454
615
|
}
|
|
@@ -563,9 +724,8 @@ var fetch_exports = /* @__PURE__ */ require_logger.__exportAll({
|
|
|
563
724
|
isRateLimited: () => isRateLimited,
|
|
564
725
|
isTransientError: () => isTransientError
|
|
565
726
|
});
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
let cachedProxyAgents = /* @__PURE__ */ new Map();
|
|
727
|
+
const cachedAgents = /* @__PURE__ */ new Map();
|
|
728
|
+
const cachedProxyAgents = /* @__PURE__ */ new Map();
|
|
569
729
|
/**
|
|
570
730
|
* Get the connection pool size for HTTP agents.
|
|
571
731
|
* Priority: PROMPTFOO_FETCH_CONNECTIONS env var > CLI -j flag > DEFAULT_MAX_CONCURRENCY (4).
|
|
@@ -582,36 +742,37 @@ function getConnectionPoolSize() {
|
|
|
582
742
|
}
|
|
583
743
|
function getOrCreateAgent(tlsOptions) {
|
|
584
744
|
const concurrency = getConnectionPoolSize();
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
}
|
|
599
|
-
return cachedAgent;
|
|
745
|
+
const existing = cachedAgents.get(concurrency);
|
|
746
|
+
if (existing) return existing;
|
|
747
|
+
const agent = new undici.Agent({
|
|
748
|
+
headersTimeout: REQUEST_TIMEOUT_MS,
|
|
749
|
+
keepAliveTimeout: 3e4,
|
|
750
|
+
keepAliveMaxTimeout: 6e4,
|
|
751
|
+
connections: concurrency,
|
|
752
|
+
connect: tlsOptions
|
|
753
|
+
});
|
|
754
|
+
cachedAgents.set(concurrency, agent);
|
|
755
|
+
return agent;
|
|
756
|
+
}
|
|
757
|
+
function getProxyAgentCacheKey(proxyUrl, concurrency) {
|
|
758
|
+
return `${proxyUrl}::${concurrency}`;
|
|
600
759
|
}
|
|
601
760
|
function getOrCreateProxyAgent(proxyUrl, tlsOptions) {
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
761
|
+
const concurrency = getConnectionPoolSize();
|
|
762
|
+
const cacheKey = getProxyAgentCacheKey(proxyUrl, concurrency);
|
|
763
|
+
const existing = cachedProxyAgents.get(cacheKey);
|
|
764
|
+
if (existing) return existing;
|
|
765
|
+
const agent = new undici.ProxyAgent({
|
|
766
|
+
uri: proxyUrl,
|
|
767
|
+
proxyTls: tlsOptions,
|
|
768
|
+
requestTls: tlsOptions,
|
|
769
|
+
headersTimeout: REQUEST_TIMEOUT_MS,
|
|
770
|
+
keepAliveTimeout: 3e4,
|
|
771
|
+
keepAliveMaxTimeout: 6e4,
|
|
772
|
+
connections: concurrency
|
|
773
|
+
});
|
|
774
|
+
cachedProxyAgents.set(cacheKey, agent);
|
|
775
|
+
return agent;
|
|
615
776
|
}
|
|
616
777
|
async function fetchWithProxy(url, options = {}, abortSignal) {
|
|
617
778
|
let finalUrl = url;
|
|
@@ -713,12 +874,14 @@ async function handleRateLimit(response) {
|
|
|
713
874
|
const retryAfter = response.headers.get("Retry-After");
|
|
714
875
|
const openaiReset = response.headers.get("x-ratelimit-reset-requests") || response.headers.get("x-ratelimit-reset-tokens");
|
|
715
876
|
let waitTime = 6e4;
|
|
716
|
-
if (openaiReset)
|
|
717
|
-
|
|
877
|
+
if (openaiReset) {
|
|
878
|
+
const parsedHeaders = parseRateLimitHeaders(Object.fromEntries(response.headers.entries()));
|
|
879
|
+
if (parsedHeaders.resetAt !== void 0) waitTime = Math.max(parsedHeaders.resetAt - Date.now(), 0);
|
|
880
|
+
} else if (rateLimitReset) {
|
|
718
881
|
const resetTime = /* @__PURE__ */ new Date(Number.parseInt(rateLimitReset) * 1e3);
|
|
719
882
|
const now = /* @__PURE__ */ new Date();
|
|
720
883
|
waitTime = Math.max(resetTime.getTime() - now.getTime() + 1e3, 0);
|
|
721
|
-
} else if (retryAfter) waitTime =
|
|
884
|
+
} else if (retryAfter) waitTime = parseRetryAfter(retryAfter) ?? waitTime;
|
|
722
885
|
require_logger.logger.debug(`Rate limited, waiting ${waitTime}ms before retry`);
|
|
723
886
|
await sleep(waitTime);
|
|
724
887
|
}
|
|
@@ -942,6 +1105,18 @@ Object.defineProperty(exports, "parseChatPrompt", {
|
|
|
942
1105
|
return parseChatPrompt;
|
|
943
1106
|
}
|
|
944
1107
|
});
|
|
1108
|
+
Object.defineProperty(exports, "parseRateLimitHeaders", {
|
|
1109
|
+
enumerable: true,
|
|
1110
|
+
get: function() {
|
|
1111
|
+
return parseRateLimitHeaders;
|
|
1112
|
+
}
|
|
1113
|
+
});
|
|
1114
|
+
Object.defineProperty(exports, "parseRetryAfter", {
|
|
1115
|
+
enumerable: true,
|
|
1116
|
+
get: function() {
|
|
1117
|
+
return parseRetryAfter;
|
|
1118
|
+
}
|
|
1119
|
+
});
|
|
945
1120
|
Object.defineProperty(exports, "readGlobalConfig", {
|
|
946
1121
|
enumerable: true,
|
|
947
1122
|
get: function() {
|
|
@@ -985,4 +1160,4 @@ Object.defineProperty(exports, "writeGlobalConfigPartial", {
|
|
|
985
1160
|
}
|
|
986
1161
|
});
|
|
987
1162
|
|
|
988
|
-
//# sourceMappingURL=fetch-
|
|
1163
|
+
//# sourceMappingURL=fetch-CJU5ELPa.cjs.map
|