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
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
import { t as __exportAll } from "./chunk-DEq-mXcV.js";
|
|
2
|
+
import { S as getEnvBool, T as getEnvString, a as logger, w as getEnvInt, x as getConfigDirectoryPath } from "./logger-Ct2S6Yx-.js";
|
|
3
|
+
import { d as sleep, h as REQUEST_TIMEOUT_MS, n as fetchWithRetries } from "./fetch-Di00EQrc.js";
|
|
4
|
+
import fs from "fs";
|
|
5
|
+
import path from "path";
|
|
6
|
+
import { AsyncLocalStorage } from "node:async_hooks";
|
|
7
|
+
import { createCache } from "cache-manager";
|
|
8
|
+
import { Keyv } from "keyv";
|
|
9
|
+
import { KeyvFile } from "keyv-file";
|
|
10
|
+
//#region src/util/fetch/errors.ts
|
|
11
|
+
/**
|
|
12
|
+
* Non-transient HTTP status codes that indicate the target is unavailable or misconfigured.
|
|
13
|
+
* These errors will not resolve on retry and should abort the scan immediately.
|
|
14
|
+
*
|
|
15
|
+
* - 401: Unauthorized - authentication required or invalid credentials
|
|
16
|
+
* - 403: Forbidden - valid credentials but access denied
|
|
17
|
+
* - 404: Not Found - target endpoint doesn't exist
|
|
18
|
+
* - 501: Not Implemented - server doesn't support the request method
|
|
19
|
+
*
|
|
20
|
+
* Excluded: 500 (often transient — server crashes, DB timeouts, deployment rollouts,
|
|
21
|
+
* or input-dependent bugs where one prompt triggers it but the next doesn't),
|
|
22
|
+
* 502/503/504 (typically transient gateway issues).
|
|
23
|
+
*/
|
|
24
|
+
const NON_TRANSIENT_HTTP_STATUSES = [
|
|
25
|
+
401,
|
|
26
|
+
403,
|
|
27
|
+
404,
|
|
28
|
+
501
|
|
29
|
+
];
|
|
30
|
+
function isNonTransientHttpStatus(status) {
|
|
31
|
+
return NON_TRANSIENT_HTTP_STATUSES.includes(status);
|
|
32
|
+
}
|
|
33
|
+
function isTransientConnectionError(error) {
|
|
34
|
+
if (!error) return false;
|
|
35
|
+
const code = error.code;
|
|
36
|
+
if (code === "ECONNRESET" || code === "EPIPE") return true;
|
|
37
|
+
const message = (error.message ?? "").toLowerCase();
|
|
38
|
+
if (message.includes("eproto") && (message.includes("wrong version number") || message.includes("self signed") || message.includes("unable to verify") || message.includes("unknown ca") || message.includes("cert"))) return false;
|
|
39
|
+
return message.includes("bad record mac") || message.includes("eproto") || message.includes("econnreset") || message.includes("socket hang up");
|
|
40
|
+
}
|
|
41
|
+
//#endregion
|
|
42
|
+
//#region src/cache.ts
|
|
43
|
+
var cache_exports = /* @__PURE__ */ __exportAll({
|
|
44
|
+
clearCache: () => clearCache,
|
|
45
|
+
disableCache: () => disableCache,
|
|
46
|
+
enableCache: () => enableCache,
|
|
47
|
+
fetchWithCache: () => fetchWithCache,
|
|
48
|
+
getCache: () => getCache,
|
|
49
|
+
isCacheEnabled: () => isCacheEnabled,
|
|
50
|
+
withCacheNamespace: () => withCacheNamespace
|
|
51
|
+
});
|
|
52
|
+
let cacheInstance;
|
|
53
|
+
const namespacedCacheInstances = /* @__PURE__ */ new Map();
|
|
54
|
+
const cacheNamespaceStorage = new AsyncLocalStorage();
|
|
55
|
+
let enabled = getEnvBool("PROMPTFOO_CACHE_ENABLED", true);
|
|
56
|
+
const cacheType = getEnvString("PROMPTFOO_CACHE_TYPE") || (getEnvString("NODE_ENV") === "test" ? "memory" : "disk");
|
|
57
|
+
/** Default cache TTL: 14 days in seconds */
|
|
58
|
+
const DEFAULT_CACHE_TTL_SECONDS = 3600 * 24 * 14;
|
|
59
|
+
/**
|
|
60
|
+
* Get the cache TTL in milliseconds.
|
|
61
|
+
* Reads from PROMPTFOO_CACHE_TTL environment variable (in seconds) or uses default.
|
|
62
|
+
*/
|
|
63
|
+
function getCacheTtlMs() {
|
|
64
|
+
return getEnvInt("PROMPTFOO_CACHE_TTL", DEFAULT_CACHE_TTL_SECONDS) * 1e3;
|
|
65
|
+
}
|
|
66
|
+
function getCache() {
|
|
67
|
+
const namespace = cacheNamespaceStorage.getStore()?.namespace;
|
|
68
|
+
if (namespace) return getNamespacedCache(namespace);
|
|
69
|
+
return getCacheInstance();
|
|
70
|
+
}
|
|
71
|
+
function getCacheInstance() {
|
|
72
|
+
if (!cacheInstance) {
|
|
73
|
+
let cachePath = "";
|
|
74
|
+
const stores = [];
|
|
75
|
+
if (cacheType === "disk" && enabled) {
|
|
76
|
+
cachePath = getEnvString("PROMPTFOO_CACHE_PATH") || path.join(getConfigDirectoryPath(), "cache");
|
|
77
|
+
if (!fs.existsSync(cachePath)) {
|
|
78
|
+
logger.info(`Creating cache folder at ${cachePath}.`);
|
|
79
|
+
fs.mkdirSync(cachePath, { recursive: true });
|
|
80
|
+
}
|
|
81
|
+
const newCacheFile = path.join(cachePath, "cache.json");
|
|
82
|
+
try {
|
|
83
|
+
const keyv = new Keyv({
|
|
84
|
+
store: new KeyvFile({ filename: newCacheFile }),
|
|
85
|
+
ttl: getCacheTtlMs()
|
|
86
|
+
});
|
|
87
|
+
stores.push(keyv);
|
|
88
|
+
} catch (err) {
|
|
89
|
+
logger.warn(`[Cache] Failed to initialize disk cache: ${err.message}. Using memory cache instead.`);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
cacheInstance = createCache({
|
|
93
|
+
stores,
|
|
94
|
+
ttl: getCacheTtlMs(),
|
|
95
|
+
refreshThreshold: 0
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
return cacheInstance;
|
|
99
|
+
}
|
|
100
|
+
function getNamespacedCache(namespace) {
|
|
101
|
+
const cachedNamespaceInstance = namespacedCacheInstances.get(namespace);
|
|
102
|
+
if (cachedNamespaceInstance) return cachedNamespaceInstance;
|
|
103
|
+
const cache = getCacheInstance();
|
|
104
|
+
const namespacedCache = {
|
|
105
|
+
...cache,
|
|
106
|
+
get: (key) => cache.get(getScopedCacheKey(key, namespace)),
|
|
107
|
+
set: (key, value, ttl) => cache.set(getScopedCacheKey(key, namespace), value, ttl),
|
|
108
|
+
del: (key) => cache.del(getScopedCacheKey(key, namespace)),
|
|
109
|
+
mget: (keys) => cache.mget(keys.map((key) => getScopedCacheKey(key, namespace))),
|
|
110
|
+
mset: async (list) => {
|
|
111
|
+
const scopedList = list.map(({ key, value, ttl }) => ({
|
|
112
|
+
key: getScopedCacheKey(key, namespace),
|
|
113
|
+
value,
|
|
114
|
+
ttl
|
|
115
|
+
}));
|
|
116
|
+
return (await cache.mset(scopedList) ?? scopedList).map(({ key, value, ttl }) => ({
|
|
117
|
+
key: getUnscopedCacheKey(key, namespace),
|
|
118
|
+
value,
|
|
119
|
+
ttl
|
|
120
|
+
}));
|
|
121
|
+
},
|
|
122
|
+
mdel: (keys) => cache.mdel(keys.map((key) => getScopedCacheKey(key, namespace))),
|
|
123
|
+
ttl: (key) => cache.ttl(getScopedCacheKey(key, namespace)),
|
|
124
|
+
clear: () => clearNamespacedCache(cache, namespace),
|
|
125
|
+
wrap: (...args) => cache.wrap(getScopedCacheKey(args[0], namespace), ...args.slice(1))
|
|
126
|
+
};
|
|
127
|
+
namespacedCacheInstances.set(namespace, namespacedCache);
|
|
128
|
+
return namespacedCache;
|
|
129
|
+
}
|
|
130
|
+
function getCurrentCacheNamespace() {
|
|
131
|
+
return cacheNamespaceStorage.getStore()?.namespace;
|
|
132
|
+
}
|
|
133
|
+
function getScopedCacheKey(cacheKey, namespace = getCurrentCacheNamespace()) {
|
|
134
|
+
return namespace ? `${namespace}:${cacheKey}` : cacheKey;
|
|
135
|
+
}
|
|
136
|
+
function getUnscopedCacheKey(cacheKey, namespace) {
|
|
137
|
+
const namespacePrefix = `${namespace}:`;
|
|
138
|
+
return cacheKey.startsWith(namespacePrefix) ? cacheKey.slice(namespacePrefix.length) : cacheKey;
|
|
139
|
+
}
|
|
140
|
+
async function clearNamespacedCache(cache, namespace) {
|
|
141
|
+
const namespacePrefix = `${namespace}:`;
|
|
142
|
+
for (const store of cache.stores) {
|
|
143
|
+
if (!store.iterator) throw new Error(`[Cache] Cannot clear namespace ${namespace} because a cache store does not support key iteration.`);
|
|
144
|
+
const keysToDelete = [];
|
|
145
|
+
for await (const [key] of store.iterator(void 0)) if (typeof key === "string" && key.startsWith(namespacePrefix)) keysToDelete.push(key);
|
|
146
|
+
if (keysToDelete.length === 0) continue;
|
|
147
|
+
try {
|
|
148
|
+
if (store.deleteMany) await store.deleteMany(keysToDelete);
|
|
149
|
+
else await Promise.all(keysToDelete.map((key) => store.delete(key)));
|
|
150
|
+
} catch (err) {
|
|
151
|
+
throw new Error(`[Cache] Failed to clear ${keysToDelete.length} keys for namespace "${namespace}": ${err.message}`);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
return true;
|
|
155
|
+
}
|
|
156
|
+
function withCacheNamespace(namespace, fn) {
|
|
157
|
+
if (!namespace) return fn();
|
|
158
|
+
const parentNamespace = getCurrentCacheNamespace();
|
|
159
|
+
if (parentNamespace === namespace) return fn();
|
|
160
|
+
const scopedNamespace = parentNamespace ? `${parentNamespace}:${namespace}` : namespace;
|
|
161
|
+
return cacheNamespaceStorage.run({ namespace: scopedNamespace }, fn);
|
|
162
|
+
}
|
|
163
|
+
const inflightFetchResponses = /* @__PURE__ */ new Map();
|
|
164
|
+
function serializeFetchResponse(data, status, statusText, headers, latencyMs) {
|
|
165
|
+
return JSON.stringify({
|
|
166
|
+
data,
|
|
167
|
+
status,
|
|
168
|
+
statusText,
|
|
169
|
+
headers,
|
|
170
|
+
latencyMs
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
function deserializeFetchResponse(response, cached, cache, cacheKey) {
|
|
174
|
+
const parsedResponse = JSON.parse(response);
|
|
175
|
+
return {
|
|
176
|
+
cached,
|
|
177
|
+
data: parsedResponse.data,
|
|
178
|
+
status: parsedResponse.status,
|
|
179
|
+
statusText: parsedResponse.statusText,
|
|
180
|
+
headers: parsedResponse.headers,
|
|
181
|
+
latencyMs: parsedResponse.latencyMs,
|
|
182
|
+
deleteFromCache: async () => {
|
|
183
|
+
await cache.del(cacheKey);
|
|
184
|
+
logger.debug(`Evicted from cache: ${cacheKey}`);
|
|
185
|
+
}
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
async function fetchAndReadBody(url, options, timeout, maxRetries, isIdempotent) {
|
|
189
|
+
const maxBodyRetries = isIdempotent ? 2 : 0;
|
|
190
|
+
for (let bodyAttempt = 0; bodyAttempt <= maxBodyRetries; bodyAttempt++) {
|
|
191
|
+
const fetchStart = Date.now();
|
|
192
|
+
const resp = await fetchWithRetries(url, options, timeout, maxRetries);
|
|
193
|
+
const fetchLatencyMs = Date.now() - fetchStart;
|
|
194
|
+
try {
|
|
195
|
+
return {
|
|
196
|
+
respText: await resp.text(),
|
|
197
|
+
resp,
|
|
198
|
+
fetchLatencyMs
|
|
199
|
+
};
|
|
200
|
+
} catch (err) {
|
|
201
|
+
if (isTransientConnectionError(err) && bodyAttempt < maxBodyRetries) {
|
|
202
|
+
const backoffMs = Math.pow(2, bodyAttempt) * 1e3;
|
|
203
|
+
logger.debug("[Cache] Body stream failed with transient error, retrying", {
|
|
204
|
+
attempt: bodyAttempt + 1,
|
|
205
|
+
maxRetries: maxBodyRetries,
|
|
206
|
+
backoffMs,
|
|
207
|
+
error: err?.message?.slice(0, 200)
|
|
208
|
+
});
|
|
209
|
+
await sleep(backoffMs);
|
|
210
|
+
continue;
|
|
211
|
+
}
|
|
212
|
+
throw err;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
throw new Error("Exhausted body retries without returning or throwing");
|
|
216
|
+
}
|
|
217
|
+
async function prepareFetchResponse(url, options, timeout, maxRetries, isIdempotent, format) {
|
|
218
|
+
const result = await fetchAndReadBody(url, options, timeout, maxRetries, isIdempotent);
|
|
219
|
+
const response = result.resp;
|
|
220
|
+
const responseText = result.respText;
|
|
221
|
+
const fetchLatencyMs = result.fetchLatencyMs;
|
|
222
|
+
const headers = Object.fromEntries(response.headers.entries());
|
|
223
|
+
try {
|
|
224
|
+
const parsedData = format === "json" ? JSON.parse(responseText) : responseText;
|
|
225
|
+
const serializedResponse = serializeFetchResponse(parsedData, response.status, response.statusText, headers, fetchLatencyMs);
|
|
226
|
+
if (!response.ok) return {
|
|
227
|
+
response: responseText === "" ? serializeFetchResponse(`Empty Response: ${response.status}: ${response.statusText}`, response.status, response.statusText, headers, fetchLatencyMs) : serializedResponse,
|
|
228
|
+
cacheable: false
|
|
229
|
+
};
|
|
230
|
+
if (format === "json" && parsedData?.error) {
|
|
231
|
+
logger.debug(`Not caching ${url} because it contains an 'error' key: ${parsedData.error}`);
|
|
232
|
+
return {
|
|
233
|
+
response: serializedResponse,
|
|
234
|
+
cacheable: false
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
logger.debug(`Storing ${url} response in cache with latencyMs=${fetchLatencyMs}: ${serializedResponse}`);
|
|
238
|
+
return {
|
|
239
|
+
response: serializedResponse,
|
|
240
|
+
cacheable: true
|
|
241
|
+
};
|
|
242
|
+
} catch (err) {
|
|
243
|
+
throw new Error(`Error parsing response from ${url}: ${err.message}. Received text: ${responseText}`);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
async function fetchWithCache(url, options = {}, timeout = REQUEST_TIMEOUT_MS, format = "json", bust = false, maxRetries) {
|
|
247
|
+
const method = (options.method ?? (url instanceof Request ? url.method : "GET")).toUpperCase();
|
|
248
|
+
const isIdempotent = [
|
|
249
|
+
"GET",
|
|
250
|
+
"HEAD",
|
|
251
|
+
"OPTIONS",
|
|
252
|
+
"PUT",
|
|
253
|
+
"DELETE"
|
|
254
|
+
].includes(method);
|
|
255
|
+
if (!enabled || bust) {
|
|
256
|
+
const { respText, resp, fetchLatencyMs } = await fetchAndReadBody(url, options, timeout, maxRetries, isIdempotent);
|
|
257
|
+
try {
|
|
258
|
+
return {
|
|
259
|
+
cached: false,
|
|
260
|
+
data: format === "json" ? JSON.parse(respText) : respText,
|
|
261
|
+
status: resp.status,
|
|
262
|
+
statusText: resp.statusText,
|
|
263
|
+
headers: Object.fromEntries(resp.headers.entries()),
|
|
264
|
+
latencyMs: fetchLatencyMs,
|
|
265
|
+
deleteFromCache: async () => {}
|
|
266
|
+
};
|
|
267
|
+
} catch {
|
|
268
|
+
throw new Error(`Error parsing response as JSON: ${respText}`);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
const copy = Object.assign({}, options);
|
|
272
|
+
delete copy.headers;
|
|
273
|
+
const cacheKey = getScopedCacheKey(`fetch:v2:${url}:${JSON.stringify(copy)}`);
|
|
274
|
+
const cache = getCacheInstance();
|
|
275
|
+
const cachedResponse = await cache.get(cacheKey);
|
|
276
|
+
if (cachedResponse != null) {
|
|
277
|
+
logger.debug(`Returning cached response for ${url}: ${cachedResponse}`);
|
|
278
|
+
return deserializeFetchResponse(cachedResponse, true, cache, cacheKey);
|
|
279
|
+
}
|
|
280
|
+
let inflightResponse = inflightFetchResponses.get(cacheKey);
|
|
281
|
+
if (!inflightResponse) {
|
|
282
|
+
inflightResponse = (async () => {
|
|
283
|
+
const preparedResponse = await prepareFetchResponse(url, options, timeout, maxRetries, isIdempotent, format);
|
|
284
|
+
if (preparedResponse.cacheable) await cache.set(cacheKey, preparedResponse.response);
|
|
285
|
+
return preparedResponse.response;
|
|
286
|
+
})().finally(() => {
|
|
287
|
+
inflightFetchResponses.delete(cacheKey);
|
|
288
|
+
});
|
|
289
|
+
inflightFetchResponses.set(cacheKey, inflightResponse);
|
|
290
|
+
}
|
|
291
|
+
return deserializeFetchResponse(await inflightResponse, false, cache, cacheKey);
|
|
292
|
+
}
|
|
293
|
+
function enableCache() {
|
|
294
|
+
enabled = true;
|
|
295
|
+
}
|
|
296
|
+
function disableCache() {
|
|
297
|
+
enabled = false;
|
|
298
|
+
}
|
|
299
|
+
async function clearCache() {
|
|
300
|
+
inflightFetchResponses.clear();
|
|
301
|
+
namespacedCacheInstances.clear();
|
|
302
|
+
return getCacheInstance().clear();
|
|
303
|
+
}
|
|
304
|
+
function isCacheEnabled() {
|
|
305
|
+
return enabled;
|
|
306
|
+
}
|
|
307
|
+
//#endregion
|
|
308
|
+
export { isCacheEnabled as a, isNonTransientHttpStatus as c, getCache as i, isTransientConnectionError as l, disableCache as n, withCacheNamespace as o, fetchWithCache as r, NON_TRANSIENT_HTTP_STATUSES as s, cache_exports as t };
|
|
309
|
+
|
|
310
|
+
//# sourceMappingURL=cache-D5NZmMiT.js.map
|
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { t as __exportAll } from "./chunk-DRamLcfz.js";
|
|
3
|
+
import { C as getConfigDirectoryPath, D as getEnvInt, O as getEnvString, T as getEnvBool, s as logger } from "./logger-DksKw1Qc.js";
|
|
4
|
+
import { l as sleep, m as REQUEST_TIMEOUT_MS, r as fetchWithRetries } from "./fetch-BEWnXrrG.js";
|
|
5
|
+
import { r as isTransientConnectionError } from "./errors-Cw810C93.js";
|
|
6
|
+
import { AsyncLocalStorage } from "node:async_hooks";
|
|
7
|
+
import fs from "fs";
|
|
8
|
+
import path from "path";
|
|
9
|
+
import { createCache } from "cache-manager";
|
|
10
|
+
import { Keyv } from "keyv";
|
|
11
|
+
import { KeyvFile } from "keyv-file";
|
|
12
|
+
//#region src/cache.ts
|
|
13
|
+
var cache_exports = /* @__PURE__ */ __exportAll({
|
|
14
|
+
clearCache: () => clearCache,
|
|
15
|
+
disableCache: () => disableCache,
|
|
16
|
+
enableCache: () => enableCache,
|
|
17
|
+
fetchWithCache: () => fetchWithCache,
|
|
18
|
+
getCache: () => getCache,
|
|
19
|
+
isCacheEnabled: () => isCacheEnabled,
|
|
20
|
+
withCacheNamespace: () => withCacheNamespace
|
|
21
|
+
});
|
|
22
|
+
let cacheInstance;
|
|
23
|
+
const namespacedCacheInstances = /* @__PURE__ */ new Map();
|
|
24
|
+
const cacheNamespaceStorage = new AsyncLocalStorage();
|
|
25
|
+
let enabled = getEnvBool("PROMPTFOO_CACHE_ENABLED", true);
|
|
26
|
+
const cacheType = getEnvString("PROMPTFOO_CACHE_TYPE") || (getEnvString("NODE_ENV") === "test" ? "memory" : "disk");
|
|
27
|
+
/** Default cache TTL: 14 days in seconds */
|
|
28
|
+
const DEFAULT_CACHE_TTL_SECONDS = 3600 * 24 * 14;
|
|
29
|
+
/**
|
|
30
|
+
* Get the cache TTL in milliseconds.
|
|
31
|
+
* Reads from PROMPTFOO_CACHE_TTL environment variable (in seconds) or uses default.
|
|
32
|
+
*/
|
|
33
|
+
function getCacheTtlMs() {
|
|
34
|
+
return getEnvInt("PROMPTFOO_CACHE_TTL", DEFAULT_CACHE_TTL_SECONDS) * 1e3;
|
|
35
|
+
}
|
|
36
|
+
function getCache() {
|
|
37
|
+
const namespace = cacheNamespaceStorage.getStore()?.namespace;
|
|
38
|
+
if (namespace) return getNamespacedCache(namespace);
|
|
39
|
+
return getCacheInstance();
|
|
40
|
+
}
|
|
41
|
+
function getCacheInstance() {
|
|
42
|
+
if (!cacheInstance) {
|
|
43
|
+
let cachePath = "";
|
|
44
|
+
const stores = [];
|
|
45
|
+
if (cacheType === "disk" && enabled) {
|
|
46
|
+
cachePath = getEnvString("PROMPTFOO_CACHE_PATH") || path.join(getConfigDirectoryPath(), "cache");
|
|
47
|
+
if (!fs.existsSync(cachePath)) {
|
|
48
|
+
logger.info(`Creating cache folder at ${cachePath}.`);
|
|
49
|
+
fs.mkdirSync(cachePath, { recursive: true });
|
|
50
|
+
}
|
|
51
|
+
const newCacheFile = path.join(cachePath, "cache.json");
|
|
52
|
+
try {
|
|
53
|
+
const keyv = new Keyv({
|
|
54
|
+
store: new KeyvFile({ filename: newCacheFile }),
|
|
55
|
+
ttl: getCacheTtlMs()
|
|
56
|
+
});
|
|
57
|
+
stores.push(keyv);
|
|
58
|
+
} catch (err) {
|
|
59
|
+
logger.warn(`[Cache] Failed to initialize disk cache: ${err.message}. Using memory cache instead.`);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
cacheInstance = createCache({
|
|
63
|
+
stores,
|
|
64
|
+
ttl: getCacheTtlMs(),
|
|
65
|
+
refreshThreshold: 0
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
return cacheInstance;
|
|
69
|
+
}
|
|
70
|
+
function getNamespacedCache(namespace) {
|
|
71
|
+
const cachedNamespaceInstance = namespacedCacheInstances.get(namespace);
|
|
72
|
+
if (cachedNamespaceInstance) return cachedNamespaceInstance;
|
|
73
|
+
const cache = getCacheInstance();
|
|
74
|
+
const namespacedCache = {
|
|
75
|
+
...cache,
|
|
76
|
+
get: (key) => cache.get(getScopedCacheKey(key, namespace)),
|
|
77
|
+
set: (key, value, ttl) => cache.set(getScopedCacheKey(key, namespace), value, ttl),
|
|
78
|
+
del: (key) => cache.del(getScopedCacheKey(key, namespace)),
|
|
79
|
+
mget: (keys) => cache.mget(keys.map((key) => getScopedCacheKey(key, namespace))),
|
|
80
|
+
mset: async (list) => {
|
|
81
|
+
const scopedList = list.map(({ key, value, ttl }) => ({
|
|
82
|
+
key: getScopedCacheKey(key, namespace),
|
|
83
|
+
value,
|
|
84
|
+
ttl
|
|
85
|
+
}));
|
|
86
|
+
return (await cache.mset(scopedList) ?? scopedList).map(({ key, value, ttl }) => ({
|
|
87
|
+
key: getUnscopedCacheKey(key, namespace),
|
|
88
|
+
value,
|
|
89
|
+
ttl
|
|
90
|
+
}));
|
|
91
|
+
},
|
|
92
|
+
mdel: (keys) => cache.mdel(keys.map((key) => getScopedCacheKey(key, namespace))),
|
|
93
|
+
ttl: (key) => cache.ttl(getScopedCacheKey(key, namespace)),
|
|
94
|
+
clear: () => clearNamespacedCache(cache, namespace),
|
|
95
|
+
wrap: (...args) => cache.wrap(getScopedCacheKey(args[0], namespace), ...args.slice(1))
|
|
96
|
+
};
|
|
97
|
+
namespacedCacheInstances.set(namespace, namespacedCache);
|
|
98
|
+
return namespacedCache;
|
|
99
|
+
}
|
|
100
|
+
function getCurrentCacheNamespace() {
|
|
101
|
+
return cacheNamespaceStorage.getStore()?.namespace;
|
|
102
|
+
}
|
|
103
|
+
function getScopedCacheKey(cacheKey, namespace = getCurrentCacheNamespace()) {
|
|
104
|
+
return namespace ? `${namespace}:${cacheKey}` : cacheKey;
|
|
105
|
+
}
|
|
106
|
+
function getUnscopedCacheKey(cacheKey, namespace) {
|
|
107
|
+
const namespacePrefix = `${namespace}:`;
|
|
108
|
+
return cacheKey.startsWith(namespacePrefix) ? cacheKey.slice(namespacePrefix.length) : cacheKey;
|
|
109
|
+
}
|
|
110
|
+
async function clearNamespacedCache(cache, namespace) {
|
|
111
|
+
const namespacePrefix = `${namespace}:`;
|
|
112
|
+
for (const store of cache.stores) {
|
|
113
|
+
if (!store.iterator) throw new Error(`[Cache] Cannot clear namespace ${namespace} because a cache store does not support key iteration.`);
|
|
114
|
+
const keysToDelete = [];
|
|
115
|
+
for await (const [key] of store.iterator(void 0)) if (typeof key === "string" && key.startsWith(namespacePrefix)) keysToDelete.push(key);
|
|
116
|
+
if (keysToDelete.length === 0) continue;
|
|
117
|
+
try {
|
|
118
|
+
if (store.deleteMany) await store.deleteMany(keysToDelete);
|
|
119
|
+
else await Promise.all(keysToDelete.map((key) => store.delete(key)));
|
|
120
|
+
} catch (err) {
|
|
121
|
+
throw new Error(`[Cache] Failed to clear ${keysToDelete.length} keys for namespace "${namespace}": ${err.message}`);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return true;
|
|
125
|
+
}
|
|
126
|
+
function withCacheNamespace(namespace, fn) {
|
|
127
|
+
if (!namespace) return fn();
|
|
128
|
+
const parentNamespace = getCurrentCacheNamespace();
|
|
129
|
+
if (parentNamespace === namespace) return fn();
|
|
130
|
+
const scopedNamespace = parentNamespace ? `${parentNamespace}:${namespace}` : namespace;
|
|
131
|
+
return cacheNamespaceStorage.run({ namespace: scopedNamespace }, fn);
|
|
132
|
+
}
|
|
133
|
+
const inflightFetchResponses = /* @__PURE__ */ new Map();
|
|
134
|
+
function serializeFetchResponse(data, status, statusText, headers, latencyMs) {
|
|
135
|
+
return JSON.stringify({
|
|
136
|
+
data,
|
|
137
|
+
status,
|
|
138
|
+
statusText,
|
|
139
|
+
headers,
|
|
140
|
+
latencyMs
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
function deserializeFetchResponse(response, cached, cache, cacheKey) {
|
|
144
|
+
const parsedResponse = JSON.parse(response);
|
|
145
|
+
return {
|
|
146
|
+
cached,
|
|
147
|
+
data: parsedResponse.data,
|
|
148
|
+
status: parsedResponse.status,
|
|
149
|
+
statusText: parsedResponse.statusText,
|
|
150
|
+
headers: parsedResponse.headers,
|
|
151
|
+
latencyMs: parsedResponse.latencyMs,
|
|
152
|
+
deleteFromCache: async () => {
|
|
153
|
+
await cache.del(cacheKey);
|
|
154
|
+
logger.debug(`Evicted from cache: ${cacheKey}`);
|
|
155
|
+
}
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
async function fetchAndReadBody(url, options, timeout, maxRetries, isIdempotent) {
|
|
159
|
+
const maxBodyRetries = isIdempotent ? 2 : 0;
|
|
160
|
+
for (let bodyAttempt = 0; bodyAttempt <= maxBodyRetries; bodyAttempt++) {
|
|
161
|
+
const fetchStart = Date.now();
|
|
162
|
+
const resp = await fetchWithRetries(url, options, timeout, maxRetries);
|
|
163
|
+
const fetchLatencyMs = Date.now() - fetchStart;
|
|
164
|
+
try {
|
|
165
|
+
return {
|
|
166
|
+
respText: await resp.text(),
|
|
167
|
+
resp,
|
|
168
|
+
fetchLatencyMs
|
|
169
|
+
};
|
|
170
|
+
} catch (err) {
|
|
171
|
+
if (isTransientConnectionError(err) && bodyAttempt < maxBodyRetries) {
|
|
172
|
+
const backoffMs = Math.pow(2, bodyAttempt) * 1e3;
|
|
173
|
+
logger.debug("[Cache] Body stream failed with transient error, retrying", {
|
|
174
|
+
attempt: bodyAttempt + 1,
|
|
175
|
+
maxRetries: maxBodyRetries,
|
|
176
|
+
backoffMs,
|
|
177
|
+
error: err?.message?.slice(0, 200)
|
|
178
|
+
});
|
|
179
|
+
await sleep(backoffMs);
|
|
180
|
+
continue;
|
|
181
|
+
}
|
|
182
|
+
throw err;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
throw new Error("Exhausted body retries without returning or throwing");
|
|
186
|
+
}
|
|
187
|
+
async function prepareFetchResponse(url, options, timeout, maxRetries, isIdempotent, format) {
|
|
188
|
+
const result = await fetchAndReadBody(url, options, timeout, maxRetries, isIdempotent);
|
|
189
|
+
const response = result.resp;
|
|
190
|
+
const responseText = result.respText;
|
|
191
|
+
const fetchLatencyMs = result.fetchLatencyMs;
|
|
192
|
+
const headers = Object.fromEntries(response.headers.entries());
|
|
193
|
+
try {
|
|
194
|
+
const parsedData = format === "json" ? JSON.parse(responseText) : responseText;
|
|
195
|
+
const serializedResponse = serializeFetchResponse(parsedData, response.status, response.statusText, headers, fetchLatencyMs);
|
|
196
|
+
if (!response.ok) return {
|
|
197
|
+
response: responseText === "" ? serializeFetchResponse(`Empty Response: ${response.status}: ${response.statusText}`, response.status, response.statusText, headers, fetchLatencyMs) : serializedResponse,
|
|
198
|
+
cacheable: false
|
|
199
|
+
};
|
|
200
|
+
if (format === "json" && parsedData?.error) {
|
|
201
|
+
logger.debug(`Not caching ${url} because it contains an 'error' key: ${parsedData.error}`);
|
|
202
|
+
return {
|
|
203
|
+
response: serializedResponse,
|
|
204
|
+
cacheable: false
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
logger.debug(`Storing ${url} response in cache with latencyMs=${fetchLatencyMs}: ${serializedResponse}`);
|
|
208
|
+
return {
|
|
209
|
+
response: serializedResponse,
|
|
210
|
+
cacheable: true
|
|
211
|
+
};
|
|
212
|
+
} catch (err) {
|
|
213
|
+
throw new Error(`Error parsing response from ${url}: ${err.message}. Received text: ${responseText}`);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
async function fetchWithCache(url, options = {}, timeout = REQUEST_TIMEOUT_MS, format = "json", bust = false, maxRetries) {
|
|
217
|
+
const method = (options.method ?? (url instanceof Request ? url.method : "GET")).toUpperCase();
|
|
218
|
+
const isIdempotent = [
|
|
219
|
+
"GET",
|
|
220
|
+
"HEAD",
|
|
221
|
+
"OPTIONS",
|
|
222
|
+
"PUT",
|
|
223
|
+
"DELETE"
|
|
224
|
+
].includes(method);
|
|
225
|
+
if (!enabled || bust) {
|
|
226
|
+
const { respText, resp, fetchLatencyMs } = await fetchAndReadBody(url, options, timeout, maxRetries, isIdempotent);
|
|
227
|
+
try {
|
|
228
|
+
return {
|
|
229
|
+
cached: false,
|
|
230
|
+
data: format === "json" ? JSON.parse(respText) : respText,
|
|
231
|
+
status: resp.status,
|
|
232
|
+
statusText: resp.statusText,
|
|
233
|
+
headers: Object.fromEntries(resp.headers.entries()),
|
|
234
|
+
latencyMs: fetchLatencyMs,
|
|
235
|
+
deleteFromCache: async () => {}
|
|
236
|
+
};
|
|
237
|
+
} catch {
|
|
238
|
+
throw new Error(`Error parsing response as JSON: ${respText}`);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
const copy = Object.assign({}, options);
|
|
242
|
+
delete copy.headers;
|
|
243
|
+
const cacheKey = getScopedCacheKey(`fetch:v2:${url}:${JSON.stringify(copy)}`);
|
|
244
|
+
const cache = getCacheInstance();
|
|
245
|
+
const cachedResponse = await cache.get(cacheKey);
|
|
246
|
+
if (cachedResponse != null) {
|
|
247
|
+
logger.debug(`Returning cached response for ${url}: ${cachedResponse}`);
|
|
248
|
+
return deserializeFetchResponse(cachedResponse, true, cache, cacheKey);
|
|
249
|
+
}
|
|
250
|
+
let inflightResponse = inflightFetchResponses.get(cacheKey);
|
|
251
|
+
if (!inflightResponse) {
|
|
252
|
+
inflightResponse = (async () => {
|
|
253
|
+
const preparedResponse = await prepareFetchResponse(url, options, timeout, maxRetries, isIdempotent, format);
|
|
254
|
+
if (preparedResponse.cacheable) await cache.set(cacheKey, preparedResponse.response);
|
|
255
|
+
return preparedResponse.response;
|
|
256
|
+
})().finally(() => {
|
|
257
|
+
inflightFetchResponses.delete(cacheKey);
|
|
258
|
+
});
|
|
259
|
+
inflightFetchResponses.set(cacheKey, inflightResponse);
|
|
260
|
+
}
|
|
261
|
+
return deserializeFetchResponse(await inflightResponse, false, cache, cacheKey);
|
|
262
|
+
}
|
|
263
|
+
function enableCache() {
|
|
264
|
+
enabled = true;
|
|
265
|
+
}
|
|
266
|
+
function disableCache() {
|
|
267
|
+
enabled = false;
|
|
268
|
+
}
|
|
269
|
+
async function clearCache() {
|
|
270
|
+
inflightFetchResponses.clear();
|
|
271
|
+
namespacedCacheInstances.clear();
|
|
272
|
+
return getCacheInstance().clear();
|
|
273
|
+
}
|
|
274
|
+
function isCacheEnabled() {
|
|
275
|
+
return enabled;
|
|
276
|
+
}
|
|
277
|
+
//#endregion
|
|
278
|
+
export { fetchWithCache as a, withCacheNamespace as c, enableCache as i, clearCache as n, getCache as o, disableCache as r, isCacheEnabled as s, cache_exports as t };
|
|
279
|
+
|
|
280
|
+
//# sourceMappingURL=cache-mb7c8hbp.js.map
|
|
@@ -1,16 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import "./fetch-HaqdX7U1.js";
|
|
1
|
+
import { a as logger } from "./logger-B88EkIn6.js";
|
|
3
2
|
import { t as invariant } from "./invariant-vgHWClmd.js";
|
|
4
|
-
import "./
|
|
5
|
-
import "./types-CzW2QFyi.js";
|
|
6
|
-
import "./cache-i1P6crbO.js";
|
|
7
|
-
import "./genaiTracer-70Z8BIuV.js";
|
|
8
|
-
import "./pythonUtils-D6fwaDSg.js";
|
|
9
|
-
import "./util-ZzmqNPlg.js";
|
|
10
|
-
import { t as OpenAiChatCompletionProvider } from "./chat-DJIw17u0.js";
|
|
11
|
-
import "./transform-uAytVuyX.js";
|
|
12
|
-
import "./openai-j-sE2O7r.js";
|
|
13
|
-
import "./util-BV4XUC0n.js";
|
|
3
|
+
import { t as OpenAiChatCompletionProvider } from "./chat-BfPaS15_.js";
|
|
14
4
|
//#region src/providers/hyperbolic/chat.ts
|
|
15
5
|
const HYPERBOLIC_CHAT_MODELS = [
|
|
16
6
|
{
|
|
@@ -296,4 +286,4 @@ function createHyperbolicProvider(providerPath, options = {}) {
|
|
|
296
286
|
//#endregion
|
|
297
287
|
export { createHyperbolicProvider };
|
|
298
288
|
|
|
299
|
-
//# sourceMappingURL=chat-
|
|
289
|
+
//# sourceMappingURL=chat-0bwXjVP0.js.map
|
|
@@ -1,16 +1,6 @@
|
|
|
1
|
-
const require_logger = require("./logger-
|
|
1
|
+
const require_logger = require("./logger-COuQb2xB.cjs");
|
|
2
2
|
const require_invariant = require("./invariant-kfQ8Bu82.cjs");
|
|
3
|
-
require("./
|
|
4
|
-
require("./pythonUtils-CTU3Y3lw.cjs");
|
|
5
|
-
require("./types-C_7nyzr1.cjs");
|
|
6
|
-
require("./util-B9vlHIIh.cjs");
|
|
7
|
-
require("./fetch-BPkYtG8K.cjs");
|
|
8
|
-
require("./cache-Dh5WtQps.cjs");
|
|
9
|
-
require("./genaiTracer-DN4dQywX.cjs");
|
|
10
|
-
const require_chat = require("./chat-CgF-J-Jj.cjs");
|
|
11
|
-
require("./transform-DuHvhZpj.cjs");
|
|
12
|
-
require("./openai-Cuif0GEt.cjs");
|
|
13
|
-
require("./util-BzMcevZc.cjs");
|
|
3
|
+
const require_chat = require("./chat-CclRbxGf.cjs");
|
|
14
4
|
//#region src/providers/hyperbolic/chat.ts
|
|
15
5
|
const HYPERBOLIC_CHAT_MODELS = [
|
|
16
6
|
{
|
|
@@ -296,4 +286,4 @@ function createHyperbolicProvider(providerPath, options = {}) {
|
|
|
296
286
|
//#endregion
|
|
297
287
|
exports.createHyperbolicProvider = createHyperbolicProvider;
|
|
298
288
|
|
|
299
|
-
//# sourceMappingURL=chat-
|
|
289
|
+
//# sourceMappingURL=chat-BPXSW8Bv.cjs.map
|