promptfoo 0.120.26 → 0.121.1
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 +1 -1
- package/dist/drizzle/0023_wooden_mandrill.sql +2 -0
- package/dist/drizzle/meta/0023_snapshot.json +1496 -0
- package/dist/drizzle/meta/_journal.json +7 -0
- package/dist/src/{ListApp-D3DG0F8h.js → ListApp-Du7YVwj5.js} +2 -4
- package/dist/src/accounts-BgNJDBE6.js +206 -0
- package/dist/src/{accounts-BzEY8H3v.cjs → accounts-Bx-x3bmW.cjs} +99 -80
- package/dist/src/{accounts-DHHiXsy6.js → accounts-CMqkzrVf.js} +61 -36
- package/dist/src/{accounts-R3gfCR_g.js → accounts-xrUGFA6n.js} +60 -35
- package/dist/src/{agentic-utils-D6_gzOUF.js → agentic-utils-BKIN5PKu.js} +9 -10
- package/dist/src/{agents-CwM7re15.cjs → agents-B0f4HICh.cjs} +37 -40
- package/dist/src/{agents-Cnph5GLD.js → agents-C-dDThPK.js} +37 -37
- package/dist/src/{agents-C7BiinFI.cjs → agents-CErsqg5U.cjs} +19 -27
- package/dist/src/{agents-v4cW_ZgC.js → agents-CVIn-Utx.js} +19 -22
- package/dist/src/{agents-GiUianme.js → agents-CXknwsFX.js} +37 -40
- package/dist/src/{agents-DETIQHqF.js → agents-DeH4Gu94.js} +21 -28
- package/dist/src/{agents-DYIT-hQy.js → agents-Dy2YpZpa.js} +38 -41
- package/dist/src/{agents-Cao4i7AX.js → agents-aF4-T121.js} +19 -30
- package/dist/src/{aimlapi-DMF6v_vb.js → aimlapi-BAGZDo5G.js} +16 -18
- package/dist/src/{aimlapi-CMJpKK-B.js → aimlapi-BNfTBexL.js} +15 -17
- package/dist/src/{aimlapi-DtSf1ykJ.js → aimlapi-DHRKlBEA.js} +15 -4
- package/dist/src/{aimlapi-DoGLcQW_.cjs → aimlapi-tg0Gkcvr.cjs} +15 -16
- package/dist/src/app/assets/index-BFCZg7hQ.js +439 -0
- package/dist/src/app/assets/index-NCn4eVBv.css +1 -0
- package/dist/src/app/assets/{vendor-charts-CYyo8R8v.js → vendor-charts-CCl15Imd.js} +1 -1
- package/dist/src/app/assets/{vendor-markdown-DSmzq4Jh.js → vendor-markdown-0tekx3KX.js} +1 -1
- package/dist/src/app/index.html +4 -34
- package/dist/src/{audio-DUH4q0Xq.js → audio-BRODU0UK.js} +7 -9
- package/dist/src/{audio-BWjyvHn9.cjs → audio-BWeaWovU.cjs} +6 -7
- package/dist/src/{audio-U580w8jM.js → audio-CHQ4r-RV.js} +6 -5
- package/dist/src/{audio-BrJBFN2b.js → audio-tf_NBjlC.js} +6 -8
- package/dist/src/base-B0tcrnq_.js +193 -0
- package/dist/src/base-B4QJRyFS.js +194 -0
- package/dist/src/base-DBtwl2FR.cjs +222 -0
- package/dist/src/base-fEDN28WM.js +193 -0
- package/dist/src/{blobs-kt8v3UyH.js → blobs-BAU-dXan.js} +9 -12
- package/dist/src/{blobs-C9J2mVgo.js → blobs-Bpg5rH6i.js} +9 -12
- package/dist/src/{blobs-673H0jCl.cjs → blobs-DvS-O6be.cjs} +34 -37
- package/dist/src/blobs-qTYm-1PY.js +236 -0
- package/dist/src/{cache-BLLayYEN.js → cache-8XhNqPKW.js} +64 -67
- package/dist/src/cache-Bbn1Nyrd.cjs +5 -0
- package/dist/src/cache-BwsMSda7.js +6 -0
- package/dist/src/{cache-mIszOnuz.js → cache-CG0SlR1d.js} +64 -66
- package/dist/src/{cache-7xULbvt3.cjs → cache-COish3-W.cjs} +114 -117
- package/dist/src/cache-D3eqDYGU.js +739 -0
- package/dist/src/{chat-Fl6TZJRS.cjs → chat-2K608PeQ.cjs} +20 -21
- package/dist/src/chat-BKm79wib.js +764 -0
- package/dist/src/{chat-XPN9YHhr.js → chat-CM_kyI8B.js} +20 -9
- package/dist/src/{chat-DIywASPG.js → chat-CRWNNq73.js} +49 -49
- package/dist/src/{chat-C8Ei4f87.js → chat-CznLWr_D.js} +49 -49
- package/dist/src/{chat-CgyGj2hC.js → chat-DHMH-N64.js} +20 -22
- package/dist/src/{chat-C4zqjObh.cjs → chat-DaqekjFr.cjs} +69 -69
- package/dist/src/{chat-Cpz3O-Xl.js → chat-DxysjBvt.js} +21 -23
- package/dist/src/{chatkit-Dpxrq4eD.js → chatkit-65VXf5SR.js} +58 -58
- package/dist/src/{chatkit-DIrJX8xk.js → chatkit-Be-Q-a9F.js} +58 -60
- package/dist/src/{chatkit-DEls11hE.js → chatkit-BxFvW8KY.js} +58 -60
- package/dist/src/{chatkit-e25Ziu17.cjs → chatkit-DKyPi1Gs.cjs} +58 -60
- package/dist/src/chunk-DEq-mXcV.js +15 -0
- package/dist/src/chunk-DRamLcfz.js +16 -0
- package/dist/src/{claude-agent-sdk-6-xTaLwM.js → claude-agent-sdk-BLTu0WBO.js} +45 -31
- package/dist/src/{claude-agent-sdk-BzxF6NIJ.cjs → claude-agent-sdk-CJH22shf.cjs} +44 -29
- package/dist/src/{claude-agent-sdk-CmkTnKGH.js → claude-agent-sdk-D6_k9FKA.js} +45 -33
- package/dist/src/{claude-agent-sdk-rXCBLK_o.js → claude-agent-sdk-Dy5lT-Tx.js} +46 -21
- package/dist/src/{cloud-BMbRVJFw.js → cloud-Bc9526yV.js} +32 -12
- package/dist/src/cloud-DmE0EwsY.js +4 -0
- package/dist/src/{cloudflare-ai-CUg4BTcj.js → cloudflare-ai-C9r2sRhw.js} +16 -18
- package/dist/src/{cloudflare-ai-Z9X219gp.js → cloudflare-ai-CWWJCRim.js} +16 -4
- package/dist/src/{cloudflare-ai-BAQ0u_dg.cjs → cloudflare-ai-ClWSdor4.cjs} +16 -17
- package/dist/src/{cloudflare-ai-CobxMTR4.js → cloudflare-ai-ICsOuD-z.js} +17 -19
- package/dist/src/{cloudflare-gateway-C0sgfr_z.cjs → cloudflare-gateway-C2_-KG5o.cjs} +21 -22
- package/dist/src/{cloudflare-gateway-_itGuXry.js → cloudflare-gateway-D6O7AlYb.js} +23 -23
- package/dist/src/{cloudflare-gateway-D2_yi-Fh.js → cloudflare-gateway-D6xFc5pa.js} +21 -25
- package/dist/src/{cloudflare-gateway-Djf3F3_H.js → cloudflare-gateway-pXGHxJ47.js} +26 -14
- package/dist/src/{codex-sdk-ibXwdglL.js → codex-sdk-C6UMlxwV.js} +49 -32
- package/dist/src/{codex-sdk-BASDNkIl.js → codex-sdk-DUwKWezN.js} +49 -30
- package/dist/src/{codex-sdk-dSnGdgIp.js → codex-sdk-GGAw0qbD.js} +49 -32
- package/dist/src/{codex-sdk-wTEpMM_X.cjs → codex-sdk-fAO0c3yA.cjs} +49 -32
- package/dist/src/{cometapi-B01btbfb.js → cometapi-BasUi7-_.js} +17 -19
- package/dist/src/{cometapi-DHUAH6nK.js → cometapi-Bbjp5V4x.js} +16 -4
- package/dist/src/{cometapi-ChAaRjg5.js → cometapi-DkXrKi5z.js} +21 -24
- package/dist/src/{cometapi-JbvOJSCO.cjs → cometapi-vY6aDZgo.cjs} +21 -22
- package/dist/src/{completion-D9_MDlnd.js → completion-6Mx_iXxK.js} +11 -13
- package/dist/src/{completion-BBJ6zmG3.js → completion-C5rtR_9P.js} +11 -13
- package/dist/src/{completion-DDyL3Cb2.cjs → completion-CDOouNzq.cjs} +21 -23
- package/dist/src/completion-C_P3ypkJ.js +120 -0
- package/dist/src/createHash-CTQmL3G2.js +15 -0
- package/dist/src/createHash-CfZSc0b4.cjs +27 -0
- package/dist/src/createHash-Da8fMwqB.js +16 -0
- package/dist/src/createHash-DmPQkvBh.js +15 -0
- package/dist/src/{docker-JAAubMw3.js → docker-5KcG-_86.js} +18 -20
- package/dist/src/{docker-Ckw-j7Rr.cjs → docker-BwsKwxFs.cjs} +18 -19
- package/dist/src/{docker-vnOg96gi.js → docker-CZnqU1XV.js} +18 -7
- package/dist/src/{docker-BuButc4D.js → docker-DzxyDPIj.js} +19 -21
- package/dist/src/entrypoint.js +2 -3
- package/dist/src/{errors-DnGCbnx8.js → errors-P6ll7XSJ.js} +2 -2
- package/dist/src/{esm-CYhseqj4.js → esm-C03C-mv3.js} +17 -20
- package/dist/src/{esm-rDtG_2rg.js → esm-CaIwzWR5.js} +18 -21
- package/dist/src/esm-Cd1AjG1D.js +379 -0
- package/dist/src/{esm-BQkx5roy.cjs → esm-CnNt7sI4.cjs} +47 -49
- package/dist/src/eval-17JizQIv.js +15 -0
- package/dist/src/{eval-CYrbG57o.js → eval-DmFyWU7i.js} +49 -55
- package/dist/src/{evalResult-COsVttMA.js → evalResult-CDQiuUuf.js} +16 -12
- package/dist/src/{evalResult-6JaUIStC.js → evalResult-CTG2AHOS.js} +10 -11
- package/dist/src/evalResult-Cqj8pldJ.js +12 -0
- package/dist/src/{evalResult-DlRfu_Rq.cjs → evalResult-Dap2CekP.cjs} +20 -21
- package/dist/src/evalResult-DvcJAWJU.cjs +10 -0
- package/dist/src/evalResult-Hftn-S_i.js +10 -0
- package/dist/src/evaluator-B2CFNt-P.js +36 -0
- package/dist/src/{evaluator-3EJCMTs0.js → evaluator-DPFRbFIL.js} +210 -232
- package/dist/src/{extractor-LSYjrhK0.js → extractor-CFG6bcWJ.js} +23 -38
- package/dist/src/{extractor-DbhlYEeo.cjs → extractor-DX36oYEv.cjs} +37 -64
- package/dist/src/{extractor-Hs7la_19.js → extractor-M67RUtg6.js} +23 -38
- package/dist/src/extractor-YMU_Gvt8.js +374 -0
- package/dist/src/fetch-4M3YRaqL.js +780 -0
- package/dist/src/{fetch-18MuNu9i.js → fetch-60Gzydls.js} +60 -46
- package/dist/src/{fetch-SRsE6Ctl.js → fetch-BMv0O527.js} +41 -35
- package/dist/src/{fetch-ZMn_oemb.cjs → fetch-BxUk8odA.cjs} +268 -279
- package/dist/src/fetch-KV5kNASw.js +5 -0
- package/dist/src/{fileExtensions-ePDqouxn.js → fileExtensions-DnqA1y9x.js} +2 -2
- package/dist/src/{fileExtensions-BpuMmaFL.js → fileExtensions-Ds-foDzt.js} +2 -2
- package/dist/src/fileExtensions-LcDYkU4v.js +85 -0
- package/dist/src/{fileExtensions-DkJYkWUy.cjs → fileExtensions-bYh77CN8.cjs} +27 -28
- package/dist/src/{formatDuration-Doo0xq-z.js → formatDuration-DgBVMN65.js} +2 -2
- package/dist/src/{genaiTracer-Ce19n68P.js → genaiTracer-70Z8BIuV.js} +2 -3
- package/dist/src/{genaiTracer-CqNnnXrE.js → genaiTracer-C1rxGO8Q.js} +2 -3
- package/dist/src/genaiTracer-D3fD9dNV.js +256 -0
- package/dist/src/{genaiTracer-CQlpZkrp.cjs → genaiTracer-DN4dQywX.cjs} +13 -14
- package/dist/src/graders-Bu0H9nXi.js +32 -0
- package/dist/src/{graders-BaMCwIKp.js → graders-CHO8EPM4.js} +385 -417
- package/dist/src/graders-Cfhkvx-e.js +34 -0
- package/dist/src/{graders-QsALpIdy.js → graders-CpdqD9PI.js} +385 -417
- package/dist/src/graders-DClJVpGP.cjs +32 -0
- package/dist/src/{graders-DzUUnUjC.cjs → graders-DOXycdlG.cjs} +721 -753
- package/dist/src/graders-DcnJsrMO.js +32 -0
- package/dist/src/graders-R9rYUM0d.js +13466 -0
- package/dist/src/{image-BiEVdpdP.js → image-BmEZqVmk.js} +57 -18
- package/dist/src/{image-mhAGP07h.js → image-CBBVXWuT.js} +57 -18
- package/dist/src/{image-D10zEe1f.cjs → image-CDLQOcqT.cjs} +6 -7
- package/dist/src/{image-COCWy5dX.js → image-DJEvKveK.js} +6 -5
- package/dist/src/{image-C3BjJUAU.cjs → image-DTedmQPg.cjs} +77 -32
- package/dist/src/{image-DB4sHxdJ.js → image-gvmivTEe.js} +7 -9
- package/dist/src/image-pAX56tPG.js +257 -0
- package/dist/src/{image-BXt_7u0v.js → image-tL5hIOFh.js} +6 -8
- package/dist/src/index.cjs +696 -693
- package/dist/src/index.d.cts +113 -10
- package/dist/src/index.d.ts +113 -6
- package/dist/src/index.js +657 -658
- package/dist/src/{interactiveCheck-DU-MAhp5.js → interactiveCheck-BgLZUIt3.js} +7 -8
- package/dist/src/{invariant-DT20jrBd.js → invariant-BtWWVVhl.js} +2 -2
- package/dist/src/{invariant-1pAf2CD1.js → invariant-Ddh24eXh.js} +2 -2
- package/dist/src/{invariant-CKcJAQ6M.cjs → invariant-kfQ8Bu82.cjs} +7 -8
- package/dist/src/invariant-vgHWClmd.js +25 -0
- package/dist/src/{knowledgeBase-DotRBzUE.js → knowledgeBase-CLJybhnF.js} +19 -34
- package/dist/src/{knowledgeBase-XJQ0Qyez.js → knowledgeBase-CoU-UQBg.js} +17 -41
- package/dist/src/{knowledgeBase-CMvMlLZR.js → knowledgeBase-DjWPVqSb.js} +17 -43
- package/dist/src/{knowledgeBase-Bnb00xKs.cjs → knowledgeBase-wkxuRFhA.cjs} +17 -40
- package/dist/src/{litellm-CHrRmPAe.js → litellm-B9Hysuri.js} +16 -18
- package/dist/src/{litellm-CrLJrPIm.js → litellm-CTfa0hqi.js} +15 -17
- package/dist/src/{litellm-BrnZhMcL.cjs → litellm-NYpQ8RQu.cjs} +15 -16
- package/dist/src/{litellm-BECdjOTx.js → litellm-ePxtr9F1.js} +15 -4
- package/dist/src/{logger-w8Ozp0Td.js → logger-CT3IKMKA.js} +24 -41
- package/dist/src/{logger-BdZ-IqBc.cjs → logger-Cp1GPUjj.cjs} +166 -192
- package/dist/src/logger-DLcq4dWf.js +713 -0
- package/dist/src/{logger-BotXmWKW.js → logger-KkObSCzq.js} +27 -43
- package/dist/src/{luma-ray-C0RkI3lt.cjs → luma-ray-B0GGNRc1.cjs} +20 -21
- package/dist/src/{luma-ray-C-w6EsJm.js → luma-ray-BE2mOt6N.js} +20 -13
- package/dist/src/{luma-ray-BOeX-h0M.js → luma-ray-BW9IRGIc.js} +22 -21
- package/dist/src/{luma-ray-DgKLS0BF.js → luma-ray-Cm1KZBhs.js} +20 -23
- package/dist/src/main.js +1985 -2055
- package/dist/src/{messages-DXV3Qh8_.cjs → messages-1JrJs91T.cjs} +35 -34
- package/dist/src/{messages-D61tPFQo.js → messages-1x9atZmP.js} +25 -24
- package/dist/src/{messages-CDZYGNlS.js → messages-BLbWdsyt.js} +25 -24
- package/dist/src/messages-D8EA0oDc.js +240 -0
- package/dist/src/{meteor-P2rUE-Uz.js → meteor-44VjEACX.js} +3 -4
- package/dist/src/{meteor-SLNTgmXm.js → meteor-D-SotUw9.js} +3 -4
- package/dist/src/{meteor-odmwVbyG.cjs → meteor-DLZZ3osF.cjs} +3 -4
- package/dist/src/{meteor-Dj8cTkU_.js → meteor-DUiCJRC-.js} +3 -4
- package/dist/src/modelslab-C1OLRmVX.js +166 -0
- package/dist/src/modelslab-CqXBy3U8.js +168 -0
- package/dist/src/modelslab-DcOSFwKh.cjs +166 -0
- package/dist/src/modelslab-X5-4LroM.js +166 -0
- package/dist/src/{nova-reel-C2LFfVTf.js → nova-reel-BgS1ZWuK.js} +20 -13
- package/dist/src/{nova-reel-DtCjbD5O.js → nova-reel-D2ZkOSyr.js} +22 -21
- package/dist/src/{nova-reel-D9FXq3Mt.cjs → nova-reel-D9xfaMBs.cjs} +20 -21
- package/dist/src/{nova-reel-Bk5npr2q.js → nova-reel-DihqLeol.js} +20 -23
- package/dist/src/{nova-sonic-BoRSY_U6.cjs → nova-sonic-DVu3mMIy.cjs} +30 -31
- package/dist/src/{nova-sonic-D_qERM-K.js → nova-sonic-DezhVUYT.js} +30 -26
- package/dist/src/{nova-sonic-CgaWLDM1.js → nova-sonic-P-CdUMlV.js} +30 -31
- package/dist/src/{nova-sonic-BXRfQyF-.js → nova-sonic-Q3BOJeig.js} +31 -32
- package/dist/src/{openai-Bigwjgo1.cjs → openai-Cuif0GEt.cjs} +8 -9
- package/dist/src/{openai-Dz3surb_.js → openai-DElQ-fPX.js} +3 -4
- package/dist/src/{openai-CT5fwbve.js → openai-DhbB7eWK.js} +3 -4
- package/dist/src/openai-j-sE2O7r.js +44 -0
- package/dist/src/{openclaw-dHLcXUWZ.js → openclaw-BiSZPL7J.js} +20 -14
- package/dist/src/{openclaw-CpPrXwf6.js → openclaw-Bv1DINsX.js} +20 -27
- package/dist/src/{openclaw-B6XY2kUf.js → openclaw-D1D_ej1z.js} +21 -28
- package/dist/src/{openclaw-DDSfq5fp.cjs → openclaw-DAfWQn-o.cjs} +33 -39
- package/dist/src/opencode-sdk-C7m-wRfI.js +560 -0
- package/dist/src/opencode-sdk-CfaLN8PY.cjs +564 -0
- package/dist/src/opencode-sdk-D95s6SnR.js +562 -0
- package/dist/src/opencode-sdk-DxUPkLT7.js +560 -0
- package/dist/src/{otlpReceiver-DmRb0NBj.js → otlpReceiver--AIRW_S4.js} +53 -51
- package/dist/src/{otlpReceiver-Dg817agV.js → otlpReceiver-Bn5wGB1v.js} +53 -55
- package/dist/src/{otlpReceiver-B6Xo4KZM.cjs → otlpReceiver-Diec4cln.cjs} +53 -55
- package/dist/src/{otlpReceiver-BO0rbDzh.js → otlpReceiver-g3ByGaXs.js} +53 -55
- package/dist/src/{providerRegistry-Xf0qdqGQ.js → providerRegistry-B0RUOLI_.js} +7 -8
- package/dist/src/{providerRegistry-wCWd7sKQ.js → providerRegistry-CD8MEar9.js} +7 -8
- package/dist/src/{providerRegistry-lc7a7utN.cjs → providerRegistry-Civky8Ar.cjs} +12 -13
- package/dist/src/providerRegistry-DM8rZYol.js +45 -0
- package/dist/src/providers-B3HvufyI.js +33246 -0
- package/dist/src/{providers-BiNq_Iyc.js → providers-BKRJTjBz.js} +1743 -1795
- package/dist/src/providers-C1rOSHiR.js +32 -0
- package/dist/src/{providers-BlEhY5mi.js → providers-CFLy1_ji.js} +1750 -1802
- package/dist/src/{providers-BNKVY53V.cjs → providers-CFu-TZl-.cjs} +2111 -2163
- package/dist/src/providers-CxmDwEFf.cjs +31 -0
- package/dist/src/providers-Dodakqr0.js +30 -0
- package/dist/src/providers-GIQ2TcsA.js +30 -0
- package/dist/src/{pythonUtils-r1uBuA0n.js → pythonUtils-C3py6GC1.js} +18 -19
- package/dist/src/{pythonUtils-DZ6EbdY4.cjs → pythonUtils-CTU3Y3lw.cjs} +42 -43
- package/dist/src/{pythonUtils-vMlk9Qp5.js → pythonUtils-D5nxkQ0P.js} +18 -19
- package/dist/src/pythonUtils-D6fwaDSg.js +249 -0
- package/dist/src/quiverai-C2jVwbH1.js +213 -0
- package/dist/src/quiverai-CI6gYJVI.js +213 -0
- package/dist/src/quiverai-CLkWkyZc.cjs +213 -0
- package/dist/src/quiverai-MHSxbmmZ.js +215 -0
- package/dist/src/{render-CAZvKKkB.js → render-Drod8m7K.js} +4 -5
- package/dist/src/{responses-DLLjADw5.js → responses-BKqJmhhc.js} +34 -27
- package/dist/src/{responses-TsdODUpm.js → responses-CGw0DCzh.js} +34 -27
- package/dist/src/responses-jxdehPkC.js +660 -0
- package/dist/src/{responses-zOtKtnY_.cjs → responses-tD4Bd4dc.cjs} +49 -42
- package/dist/src/rubyUtils-BUHu6PhO.js +5 -0
- package/dist/src/{rubyUtils-Cs35SDYa.js → rubyUtils-BUVePouc.js} +27 -20
- package/dist/src/rubyUtils-BcuGX77l.js +222 -0
- package/dist/src/{rubyUtils-BtjlqyXt.js → rubyUtils-Boc4HZzX.js} +18 -19
- package/dist/src/rubyUtils-CP42kMvq.cjs +4 -0
- package/dist/src/{rubyUtils-DCVaJ3mc.cjs → rubyUtils-DhCAlxZr.cjs} +48 -50
- package/dist/src/{sagemaker-Du4LIR97.js → sagemaker-BK4Zb993.js} +75 -70
- package/dist/src/{sagemaker-CLdUAv5z.js → sagemaker-BfiWTmvn.js} +77 -77
- package/dist/src/{sagemaker-DwNnEVYt.cjs → sagemaker-CcQHM1jV.cjs} +75 -76
- package/dist/src/{sagemaker-BcgLu0U4.js → sagemaker-D2Q1c-sD.js} +75 -79
- package/dist/src/{scanner-Dyw21Wg_.js → scanner-J8CA3LsV.js} +149 -122
- package/dist/src/server/index.js +5620 -67302
- package/dist/src/{server-CgUQ25qW.cjs → server-B0PPuDw-.cjs} +57 -67
- package/dist/src/server-B1vi21hA.js +7 -0
- package/dist/src/{server-CbMTRQkg.js → server-BC7XJFgr.js} +19 -24
- package/dist/src/server-Cm9Kai_h.cjs +5 -0
- package/dist/src/{server-DWmZLfCy.js → server-DbFphssR.js} +26 -29
- package/dist/src/server-OAs3nBRT.js +229 -0
- package/dist/src/{signal-Bl32q42d.js → signal-BOTbd53Z.js} +9 -11
- package/dist/src/{slack-BtMkB6xP.cjs → slack-BmVAVGaK.cjs} +7 -8
- package/dist/src/{slack-OZYxoVON.js → slack-DCUPTzS2.js} +8 -8
- package/dist/src/{slack-DPqj42Ts.js → slack-DOdy_kyv.js} +7 -8
- package/dist/src/{slack-BfdBx2tO.js → slack-DXMKtA-f.js} +7 -9
- package/dist/src/store-BNmZ1KAz.cjs +5 -0
- package/dist/src/{store-BqwfFEyF.cjs → store-BSc-TF2w.cjs} +44 -45
- package/dist/src/store-BltJg2cd.js +6 -0
- package/dist/src/{store-D4gdn9ih.js → store-D1tv90v3.js} +34 -35
- package/dist/src/{store-2ocbYY9D.js → store-DQLEjuEO.js} +40 -36
- package/dist/src/store-Ub2vaGJ1.js +228 -0
- package/dist/src/{tables-D-NSwNIb.js → tables-5EvT_Bwn.js} +23 -23
- package/dist/src/{tables-B9E1kRp-.cjs → tables-C7K-XKWp.cjs} +93 -93
- package/dist/src/{tables-C7TT2XVn.js → tables-D36WTqKX.js} +25 -25
- package/dist/src/tables-xKANLRBD.js +288 -0
- package/dist/src/telemetry-5BCRNBbe.cjs +5 -0
- package/dist/src/{telemetry-DZ_7PaVq.js → telemetry-C15ziL8u.js} +17 -14
- package/dist/src/{telemetry-BXyVqyAg.js → telemetry-C2YDkUQH.js} +11 -13
- package/dist/src/{telemetry-D0_yFdtU.cjs → telemetry-CbrnxHp_.cjs} +21 -24
- package/dist/src/telemetry-D4W5hboe.js +7 -0
- package/dist/src/telemetry-DMb2Mpfm.js +171 -0
- package/dist/src/{text-Dm78AVGG.js → text-B_UCRPp2.js} +2 -2
- package/dist/src/{text-DF2hMKdg.cjs → text-CW1cyrwj.cjs} +12 -13
- package/dist/src/{text-DgMr_tiM.js → text-Db-Wt2u2.js} +2 -2
- package/dist/src/text-TIv0QYnd.js +22 -0
- package/dist/src/{tokenUsageUtils-FZd5O_4A.js → tokenUsageUtils-BDGe-iyI.js} +2 -2
- package/dist/src/{tokenUsageUtils-DmZSD2eU.js → tokenUsageUtils-DflFMjS0.js} +2 -2
- package/dist/src/tokenUsageUtils-NYT-WKS6.js +138 -0
- package/dist/src/{tokenUsageUtils-CXhxVj72.cjs → tokenUsageUtils-bVa1ga6f.cjs} +32 -33
- package/dist/src/{transcription-FNIz3YOe.cjs → transcription-CL78qbOU.cjs} +14 -15
- package/dist/src/{transcription-C-M81iDA.js → transcription-DAtxHhAM.js} +14 -7
- package/dist/src/{transcription-CYuY5sFO.js → transcription-LNZTNUUL.js} +14 -16
- package/dist/src/{transcription-Ch7S-LWw.js → transcription-QHh3AH6Z.js} +15 -17
- package/dist/src/{transform-CoP2bJ7P.js → transform-Cgi24fJ7.js} +94 -66
- package/dist/src/{transform-Kd6u-oNm.cjs → transform-CzK1Q0zl.cjs} +24 -26
- package/dist/src/{transform-D8dILpfZ.js → transform-DECvGmzp.js} +15 -13
- package/dist/src/{transform-DMaxQwDx.js → transform-DGLazrMm.js} +94 -66
- package/dist/src/transform-DGxXocjk.js +1506 -0
- package/dist/src/{transform-ivxEY4f7.cjs → transform-DOcQeLld.cjs} +234 -206
- package/dist/src/transform-DTGDnAzW.js +6 -0
- package/dist/src/{transform-CqTFr7KR.js → transform-DilY9wbS.js} +10 -12
- package/dist/src/transform-aa6tmVpZ.js +216 -0
- package/dist/src/transform-m3qNw4KP.cjs +5 -0
- package/dist/src/{transformersAvailability-DEU2naS1.js → transformersAvailability-CEVM2GNQ.js} +2 -2
- package/dist/src/{transformersAvailability-Bkep3ka7.cjs → transformersAvailability-CwayUSlh.cjs} +2 -3
- package/dist/src/{transformersAvailability-DwmezkVe.js → transformersAvailability-D6c6ROpT.js} +2 -2
- package/dist/src/{types-t52w-XsS.js → types-CH3Ge2sE.js} +103 -92
- package/dist/src/{types-DMVjYLpx.js → types-CLKiCBW3.js} +98 -91
- package/dist/src/types-CN_TZ2GJ.js +3260 -0
- package/dist/src/{types-BIfttHrT.cjs → types-LJ0r3wbR.cjs} +573 -566
- package/dist/src/util-5cB-L7U3.js +1430 -0
- package/dist/src/util-6-GqIvzS.js +599 -0
- package/dist/src/{util-vjscpUzy.js → util-B7T3SiBS.js} +5 -6
- package/dist/src/{util-Cl0zfT3V.js → util-Betm42rL.js} +44 -17
- package/dist/src/{util-CUEt0Vum.js → util-C-PPYSMq.js} +44 -17
- package/dist/src/{util-DkFTvieG.cjs → util-CchiqXh_.cjs} +35 -36
- package/dist/src/{util-mJ58qbbw.js → util-DaWTWKBK.js} +5 -6
- package/dist/src/{util-C08Kns6-.cjs → util-Db0a0AFH.cjs} +89 -62
- package/dist/src/{util-DiCePfDu.js → util-Dlz_Wvgm.js} +102 -53
- package/dist/src/{util-BSh4a_Q8.js → util-YT5HPZaS.js} +102 -53
- package/dist/src/{util-DUYOvxAy.cjs → util-Yz-1aEhW.cjs} +274 -219
- package/dist/src/util-ZZH-3QZz.js +293 -0
- package/dist/src/{utils-DFaZa6Rf.cjs → utils-Cz9qXqII.cjs} +32 -35
- package/dist/src/{utils-CVzb4YiI.js → utils-XiOAgly5.js} +4 -7
- package/dist/src/utils-dLokC-eR.js +94 -0
- package/dist/src/{utils-JaY9veb5.js → utils-f2-Moju7.js} +4 -7
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +59 -53
- package/dist/src/app/assets/index-BOgkICuY.css +0 -1
- package/dist/src/app/assets/index-CSgqn_Vd.js +0 -428
- package/dist/src/app/tsconfig.app.tsbuildinfo +0 -1
- package/dist/src/base-BaXmtXYp.js +0 -107
- package/dist/src/base-Dtp8b4_N.js +0 -106
- package/dist/src/base-f71xxWai.cjs +0 -111
- package/dist/src/cache-BUPcq0Ad.js +0 -6
- package/dist/src/cache-CVfRb-HD.cjs +0 -6
- package/dist/src/cache-O4EuX2JV.js +0 -8
- package/dist/src/chunk-DHDDz29n.js +0 -22
- package/dist/src/chunk-FhC4c-0y.js +0 -21
- package/dist/src/cloud-CZ4hytdm.js +0 -5
- package/dist/src/eval-CKHWqG9f.js +0 -16
- package/dist/src/evalResult-CxTP-LMm.cjs +0 -11
- package/dist/src/evalResult-CzLURDcP.js +0 -13
- package/dist/src/evalResult-DyttNQ_G.js +0 -11
- package/dist/src/evaluator-0PvfeBYh.js +0 -38
- package/dist/src/fetch-Bi0o-fdp.js +0 -4
- package/dist/src/fetch-CMptBDVg.cjs +0 -4
- package/dist/src/fetch-DAZkv3gV.js +0 -6
- package/dist/src/graders-BCytzXrb.js +0 -34
- package/dist/src/graders-CGZQShfJ.cjs +0 -33
- package/dist/src/graders-spkuVC-E.js +0 -36
- package/dist/src/opencode-sdk-CImWVqy9.js +0 -382
- package/dist/src/opencode-sdk-CuCztr4P.js +0 -380
- package/dist/src/opencode-sdk-DhcfRbBH.js +0 -376
- package/dist/src/opencode-sdk-mqF-Oj3f.cjs +0 -383
- package/dist/src/providers-BMZZmPBJ.cjs +0 -32
- package/dist/src/providers-CQQrNaJk.js +0 -32
- package/dist/src/providers-Ck8HyrC-.js +0 -34
- package/dist/src/quiverai-BNfIwKCO.cjs +0 -54
- package/dist/src/quiverai-BQigKdIH.js +0 -57
- package/dist/src/quiverai-Bfy2WnE2.js +0 -55
- package/dist/src/quiverai-CedIP0PJ.js +0 -43
- package/dist/src/rubyUtils-D7--T12C.js +0 -6
- package/dist/src/rubyUtils-DRRiMFV2.js +0 -5
- package/dist/src/rubyUtils-vb8OYFC-.cjs +0 -5
- package/dist/src/server-BUbS0Qfh.js +0 -6
- package/dist/src/server-XpGXFHkS.cjs +0 -6
- package/dist/src/server-gfOx5Zrk.js +0 -8
- package/dist/src/store-5u2yriTV.js +0 -7
- package/dist/src/store-D_lq_8oQ.js +0 -6
- package/dist/src/store-m5KT6Ly7.cjs +0 -6
- package/dist/src/telemetry-5RHFoCJh.js +0 -6
- package/dist/src/telemetry-Do8wMnA-.js +0 -8
- package/dist/src/telemetry-LojxPoFq.cjs +0 -6
- package/dist/src/transform-8eGmaH-7.js +0 -7
- package/dist/src/transform-BRVvWaG4.cjs +0 -6
- package/dist/src/transform-GybT0X0u.js +0 -8
- package/dist/src/transformersAvailability-DkAWaK5B.js +0 -35
|
@@ -1,22 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { b as getEnvBool, o as
|
|
3
|
-
import { c as isLoggedIntoCloud } from "./accounts-
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import { createHash } from "crypto";
|
|
7
|
-
|
|
8
|
-
//#region src/util/createHash.ts
|
|
9
|
-
function sha256(str) {
|
|
10
|
-
return createHash("sha256").update(str).digest("hex");
|
|
11
|
-
}
|
|
12
|
-
function randomSequence(length = 3) {
|
|
13
|
-
const characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
|
|
14
|
-
let result = "";
|
|
15
|
-
for (let i = 0; i < length; i++) result += characters.charAt(Math.floor(Math.random() * 62));
|
|
16
|
-
return result;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
//#endregion
|
|
2
|
+
import { b as getEnvBool, o as logger } from "./logger-KkObSCzq.js";
|
|
3
|
+
import { c as isLoggedIntoCloud } from "./accounts-CMqkzrVf.js";
|
|
4
|
+
import { a as cloudConfig } from "./cloud-Bc9526yV.js";
|
|
5
|
+
import { i as storeBlob, r as recordBlobReference } from "./blobs-BAU-dXan.js";
|
|
20
6
|
//#region src/blobs/remoteUpload.ts
|
|
21
7
|
function buildRemoteUrl() {
|
|
22
8
|
const baseUrl = cloudConfig.getApiHost();
|
|
@@ -25,7 +11,7 @@ function buildRemoteUrl() {
|
|
|
25
11
|
try {
|
|
26
12
|
return new URL("/api/blobs", baseUrl).toString();
|
|
27
13
|
} catch (error) {
|
|
28
|
-
|
|
14
|
+
logger.debug("[RemoteBlob] Invalid remote blob URL", {
|
|
29
15
|
error: error instanceof Error ? error.message : String(error),
|
|
30
16
|
baseUrl
|
|
31
17
|
});
|
|
@@ -40,7 +26,7 @@ async function uploadBlobRemote(buffer, mimeType, context) {
|
|
|
40
26
|
const apiKey = cloudConfig.getApiKey();
|
|
41
27
|
if (!url || !apiKey) return null;
|
|
42
28
|
try {
|
|
43
|
-
const { fetchWithProxy } = await import("./fetch-
|
|
29
|
+
const { fetchWithProxy } = await import("./fetch-KV5kNASw.js");
|
|
44
30
|
const response = await fetchWithProxy(url, {
|
|
45
31
|
method: "POST",
|
|
46
32
|
headers: {
|
|
@@ -54,12 +40,12 @@ async function uploadBlobRemote(buffer, mimeType, context) {
|
|
|
54
40
|
})
|
|
55
41
|
});
|
|
56
42
|
if (response.status === 404 || response.status === 400) {
|
|
57
|
-
|
|
43
|
+
logger.debug("[RemoteBlob] Remote blob upload unavailable", { status: response.status });
|
|
58
44
|
return null;
|
|
59
45
|
}
|
|
60
46
|
if (!response.ok) {
|
|
61
47
|
const text = await response.text();
|
|
62
|
-
|
|
48
|
+
logger.debug("[RemoteBlob] Failed to upload blob", {
|
|
63
49
|
status: response.status,
|
|
64
50
|
statusText: response.statusText,
|
|
65
51
|
body: text
|
|
@@ -68,16 +54,15 @@ async function uploadBlobRemote(buffer, mimeType, context) {
|
|
|
68
54
|
}
|
|
69
55
|
const data = await response.json();
|
|
70
56
|
if (!data?.ref?.hash) {
|
|
71
|
-
|
|
57
|
+
logger.debug("[RemoteBlob] Remote upload returned malformed response");
|
|
72
58
|
return null;
|
|
73
59
|
}
|
|
74
60
|
return data;
|
|
75
61
|
} catch (error) {
|
|
76
|
-
|
|
62
|
+
logger.debug("[RemoteBlob] Error uploading blob", { error: error instanceof Error ? error.message : String(error) });
|
|
77
63
|
return null;
|
|
78
64
|
}
|
|
79
65
|
}
|
|
80
|
-
|
|
81
66
|
//#endregion
|
|
82
67
|
//#region src/blobs/extractor.ts
|
|
83
68
|
const BLOB_URI_REGEX = /^promptfoo:\/\/blob\/([a-f0-9]{64})$/i;
|
|
@@ -95,13 +80,13 @@ function extractBase64(value) {
|
|
|
95
80
|
mimeType
|
|
96
81
|
};
|
|
97
82
|
} catch (error) {
|
|
98
|
-
|
|
83
|
+
logger.warn("[BlobExtractor] Failed to parse base64 data URL", { error });
|
|
99
84
|
return null;
|
|
100
85
|
}
|
|
101
86
|
}
|
|
102
87
|
function shouldExternalize(buffer) {
|
|
103
88
|
const size = buffer.length;
|
|
104
|
-
return size >=
|
|
89
|
+
return size >= 1024 && size <= 52428800;
|
|
105
90
|
}
|
|
106
91
|
function getKindFromMimeType(mimeType) {
|
|
107
92
|
return mimeType.startsWith("audio/") ? "audio" : "image";
|
|
@@ -127,7 +112,7 @@ function normalizeAudioMimeType(format) {
|
|
|
127
112
|
};
|
|
128
113
|
if (mimeMap[formatLower]) return mimeMap[formatLower];
|
|
129
114
|
if (!/^[a-z0-9_-]+$/i.test(formatLower)) {
|
|
130
|
-
|
|
115
|
+
logger.warn("[BlobExtractor] Invalid audio format, using default", { format });
|
|
131
116
|
return "audio/wav";
|
|
132
117
|
}
|
|
133
118
|
return `audio/${formatLower}`;
|
|
@@ -144,7 +129,7 @@ function parseBinary(base64OrDataUrl, defaultMimeType) {
|
|
|
144
129
|
mimeType: defaultMimeType
|
|
145
130
|
};
|
|
146
131
|
} catch (error) {
|
|
147
|
-
|
|
132
|
+
logger.warn("[BlobExtractor] Failed to parse base64 data", { error });
|
|
148
133
|
return null;
|
|
149
134
|
}
|
|
150
135
|
}
|
|
@@ -165,7 +150,7 @@ async function maybeStore(base64OrDataUrl, defaultMimeType, context, location, k
|
|
|
165
150
|
location,
|
|
166
151
|
kind
|
|
167
152
|
}).catch((error) => {
|
|
168
|
-
|
|
153
|
+
logger.debug("[BlobExtractor] Cloud upload failed (non-fatal)", {
|
|
169
154
|
error: error instanceof Error ? error.message : String(error),
|
|
170
155
|
hash: ref.hash
|
|
171
156
|
});
|
|
@@ -249,7 +234,7 @@ async function extractAndStoreBinaryData(response, context) {
|
|
|
249
234
|
blobRef: stored
|
|
250
235
|
};
|
|
251
236
|
mutated = true;
|
|
252
|
-
|
|
237
|
+
logger.debug("[BlobExtractor] Stored audio blob", {
|
|
253
238
|
...context,
|
|
254
239
|
hash: stored.hash
|
|
255
240
|
});
|
|
@@ -260,7 +245,7 @@ async function extractAndStoreBinaryData(response, context) {
|
|
|
260
245
|
const stored = await maybeStore(img.data, img.mimeType || "image/png", blobContext, `response.images[${idx}].data`, "image");
|
|
261
246
|
if (stored) {
|
|
262
247
|
mutated = true;
|
|
263
|
-
|
|
248
|
+
logger.debug("[BlobExtractor] Stored image blob", {
|
|
264
249
|
...context,
|
|
265
250
|
hash: stored.hash
|
|
266
251
|
});
|
|
@@ -297,7 +282,7 @@ async function extractAndStoreBinaryData(response, context) {
|
|
|
297
282
|
if (stored) {
|
|
298
283
|
next.output = stored.uri;
|
|
299
284
|
mutated = true;
|
|
300
|
-
|
|
285
|
+
logger.debug("[BlobExtractor] Stored output blob", {
|
|
301
286
|
...context,
|
|
302
287
|
hash: stored.hash
|
|
303
288
|
});
|
|
@@ -316,7 +301,7 @@ async function extractAndStoreBinaryData(response, context) {
|
|
|
316
301
|
storedUris.push(stored.uri);
|
|
317
302
|
jsonMutated = true;
|
|
318
303
|
mutated = true;
|
|
319
|
-
|
|
304
|
+
logger.debug("[BlobExtractor] Stored image blob from b64_json", {
|
|
320
305
|
...context,
|
|
321
306
|
hash: stored.hash
|
|
322
307
|
});
|
|
@@ -334,7 +319,7 @@ async function extractAndStoreBinaryData(response, context) {
|
|
|
334
319
|
}
|
|
335
320
|
}
|
|
336
321
|
} catch (err) {
|
|
337
|
-
|
|
322
|
+
logger.debug("[BlobExtractor] Failed to parse base64 JSON output", {
|
|
338
323
|
error: err instanceof Error ? err.message : String(err),
|
|
339
324
|
location: "response.output"
|
|
340
325
|
});
|
|
@@ -384,7 +369,7 @@ async function recordExistingBlobReferences(value, context, location) {
|
|
|
384
369
|
}
|
|
385
370
|
if (value && typeof value === "object") for (const [key, child] of Object.entries(value)) await recordExistingBlobReferences(child, context, location ? `${location}.${key}` : key);
|
|
386
371
|
}
|
|
387
|
-
|
|
388
372
|
//#endregion
|
|
389
|
-
export {
|
|
390
|
-
|
|
373
|
+
export { isBlobStorageEnabled as n, shouldAttemptRemoteBlobUpload as r, extractAndStoreBinaryData as t };
|
|
374
|
+
|
|
375
|
+
//# sourceMappingURL=extractor-CFG6bcWJ.js.map
|
|
@@ -1,21 +1,7 @@
|
|
|
1
|
-
const require_logger = require(
|
|
2
|
-
const require_fetch = require(
|
|
3
|
-
const require_accounts = require(
|
|
4
|
-
const require_blobs = require(
|
|
5
|
-
let crypto = require("crypto");
|
|
6
|
-
|
|
7
|
-
//#region src/util/createHash.ts
|
|
8
|
-
function sha256(str) {
|
|
9
|
-
return (0, crypto.createHash)("sha256").update(str).digest("hex");
|
|
10
|
-
}
|
|
11
|
-
function randomSequence(length = 3) {
|
|
12
|
-
const characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
|
|
13
|
-
let result = "";
|
|
14
|
-
for (let i = 0; i < length; i++) result += characters.charAt(Math.floor(Math.random() * 62));
|
|
15
|
-
return result;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
//#endregion
|
|
1
|
+
const require_logger = require("./logger-Cp1GPUjj.cjs");
|
|
2
|
+
const require_fetch = require("./fetch-BxUk8odA.cjs");
|
|
3
|
+
const require_accounts = require("./accounts-Bx-x3bmW.cjs");
|
|
4
|
+
const require_blobs = require("./blobs-DvS-O6be.cjs");
|
|
19
5
|
//#region src/blobs/remoteUpload.ts
|
|
20
6
|
function buildRemoteUrl() {
|
|
21
7
|
const baseUrl = require_fetch.cloudConfig.getApiHost();
|
|
@@ -24,7 +10,7 @@ function buildRemoteUrl() {
|
|
|
24
10
|
try {
|
|
25
11
|
return new URL("/api/blobs", baseUrl).toString();
|
|
26
12
|
} catch (error) {
|
|
27
|
-
require_logger.
|
|
13
|
+
require_logger.logger.debug("[RemoteBlob] Invalid remote blob URL", {
|
|
28
14
|
error: error instanceof Error ? error.message : String(error),
|
|
29
15
|
baseUrl
|
|
30
16
|
});
|
|
@@ -39,7 +25,7 @@ async function uploadBlobRemote(buffer, mimeType, context) {
|
|
|
39
25
|
const apiKey = require_fetch.cloudConfig.getApiKey();
|
|
40
26
|
if (!url || !apiKey) return null;
|
|
41
27
|
try {
|
|
42
|
-
const { fetchWithProxy } = await Promise.resolve().then(() => require("./fetch-
|
|
28
|
+
const { fetchWithProxy } = await Promise.resolve().then(() => require("./fetch-BxUk8odA.cjs")).then((n) => n.fetch_exports);
|
|
43
29
|
const response = await fetchWithProxy(url, {
|
|
44
30
|
method: "POST",
|
|
45
31
|
headers: {
|
|
@@ -53,12 +39,12 @@ async function uploadBlobRemote(buffer, mimeType, context) {
|
|
|
53
39
|
})
|
|
54
40
|
});
|
|
55
41
|
if (response.status === 404 || response.status === 400) {
|
|
56
|
-
require_logger.
|
|
42
|
+
require_logger.logger.debug("[RemoteBlob] Remote blob upload unavailable", { status: response.status });
|
|
57
43
|
return null;
|
|
58
44
|
}
|
|
59
45
|
if (!response.ok) {
|
|
60
46
|
const text = await response.text();
|
|
61
|
-
require_logger.
|
|
47
|
+
require_logger.logger.debug("[RemoteBlob] Failed to upload blob", {
|
|
62
48
|
status: response.status,
|
|
63
49
|
statusText: response.statusText,
|
|
64
50
|
body: text
|
|
@@ -67,16 +53,15 @@ async function uploadBlobRemote(buffer, mimeType, context) {
|
|
|
67
53
|
}
|
|
68
54
|
const data = await response.json();
|
|
69
55
|
if (!data?.ref?.hash) {
|
|
70
|
-
require_logger.
|
|
56
|
+
require_logger.logger.debug("[RemoteBlob] Remote upload returned malformed response");
|
|
71
57
|
return null;
|
|
72
58
|
}
|
|
73
59
|
return data;
|
|
74
60
|
} catch (error) {
|
|
75
|
-
require_logger.
|
|
61
|
+
require_logger.logger.debug("[RemoteBlob] Error uploading blob", { error: error instanceof Error ? error.message : String(error) });
|
|
76
62
|
return null;
|
|
77
63
|
}
|
|
78
64
|
}
|
|
79
|
-
|
|
80
65
|
//#endregion
|
|
81
66
|
//#region src/blobs/extractor.ts
|
|
82
67
|
const BLOB_URI_REGEX = /^promptfoo:\/\/blob\/([a-f0-9]{64})$/i;
|
|
@@ -94,13 +79,13 @@ function extractBase64(value) {
|
|
|
94
79
|
mimeType
|
|
95
80
|
};
|
|
96
81
|
} catch (error) {
|
|
97
|
-
require_logger.
|
|
82
|
+
require_logger.logger.warn("[BlobExtractor] Failed to parse base64 data URL", { error });
|
|
98
83
|
return null;
|
|
99
84
|
}
|
|
100
85
|
}
|
|
101
86
|
function shouldExternalize(buffer) {
|
|
102
87
|
const size = buffer.length;
|
|
103
|
-
return size >=
|
|
88
|
+
return size >= 1024 && size <= 52428800;
|
|
104
89
|
}
|
|
105
90
|
function getKindFromMimeType(mimeType) {
|
|
106
91
|
return mimeType.startsWith("audio/") ? "audio" : "image";
|
|
@@ -126,7 +111,7 @@ function normalizeAudioMimeType(format) {
|
|
|
126
111
|
};
|
|
127
112
|
if (mimeMap[formatLower]) return mimeMap[formatLower];
|
|
128
113
|
if (!/^[a-z0-9_-]+$/i.test(formatLower)) {
|
|
129
|
-
require_logger.
|
|
114
|
+
require_logger.logger.warn("[BlobExtractor] Invalid audio format, using default", { format });
|
|
130
115
|
return "audio/wav";
|
|
131
116
|
}
|
|
132
117
|
return `audio/${formatLower}`;
|
|
@@ -143,7 +128,7 @@ function parseBinary(base64OrDataUrl, defaultMimeType) {
|
|
|
143
128
|
mimeType: defaultMimeType
|
|
144
129
|
};
|
|
145
130
|
} catch (error) {
|
|
146
|
-
require_logger.
|
|
131
|
+
require_logger.logger.warn("[BlobExtractor] Failed to parse base64 data", { error });
|
|
147
132
|
return null;
|
|
148
133
|
}
|
|
149
134
|
}
|
|
@@ -164,7 +149,7 @@ async function maybeStore(base64OrDataUrl, defaultMimeType, context, location, k
|
|
|
164
149
|
location,
|
|
165
150
|
kind
|
|
166
151
|
}).catch((error) => {
|
|
167
|
-
require_logger.
|
|
152
|
+
require_logger.logger.debug("[BlobExtractor] Cloud upload failed (non-fatal)", {
|
|
168
153
|
error: error instanceof Error ? error.message : String(error),
|
|
169
154
|
hash: ref.hash
|
|
170
155
|
});
|
|
@@ -248,7 +233,7 @@ async function extractAndStoreBinaryData(response, context) {
|
|
|
248
233
|
blobRef: stored
|
|
249
234
|
};
|
|
250
235
|
mutated = true;
|
|
251
|
-
require_logger.
|
|
236
|
+
require_logger.logger.debug("[BlobExtractor] Stored audio blob", {
|
|
252
237
|
...context,
|
|
253
238
|
hash: stored.hash
|
|
254
239
|
});
|
|
@@ -259,7 +244,7 @@ async function extractAndStoreBinaryData(response, context) {
|
|
|
259
244
|
const stored = await maybeStore(img.data, img.mimeType || "image/png", blobContext, `response.images[${idx}].data`, "image");
|
|
260
245
|
if (stored) {
|
|
261
246
|
mutated = true;
|
|
262
|
-
require_logger.
|
|
247
|
+
require_logger.logger.debug("[BlobExtractor] Stored image blob", {
|
|
263
248
|
...context,
|
|
264
249
|
hash: stored.hash
|
|
265
250
|
});
|
|
@@ -296,7 +281,7 @@ async function extractAndStoreBinaryData(response, context) {
|
|
|
296
281
|
if (stored) {
|
|
297
282
|
next.output = stored.uri;
|
|
298
283
|
mutated = true;
|
|
299
|
-
require_logger.
|
|
284
|
+
require_logger.logger.debug("[BlobExtractor] Stored output blob", {
|
|
300
285
|
...context,
|
|
301
286
|
hash: stored.hash
|
|
302
287
|
});
|
|
@@ -315,7 +300,7 @@ async function extractAndStoreBinaryData(response, context) {
|
|
|
315
300
|
storedUris.push(stored.uri);
|
|
316
301
|
jsonMutated = true;
|
|
317
302
|
mutated = true;
|
|
318
|
-
require_logger.
|
|
303
|
+
require_logger.logger.debug("[BlobExtractor] Stored image blob from b64_json", {
|
|
319
304
|
...context,
|
|
320
305
|
hash: stored.hash
|
|
321
306
|
});
|
|
@@ -333,7 +318,7 @@ async function extractAndStoreBinaryData(response, context) {
|
|
|
333
318
|
}
|
|
334
319
|
}
|
|
335
320
|
} catch (err) {
|
|
336
|
-
require_logger.
|
|
321
|
+
require_logger.logger.debug("[BlobExtractor] Failed to parse base64 JSON output", {
|
|
337
322
|
error: err instanceof Error ? err.message : String(err),
|
|
338
323
|
location: "response.output"
|
|
339
324
|
});
|
|
@@ -383,36 +368,24 @@ async function recordExistingBlobReferences(value, context, location) {
|
|
|
383
368
|
}
|
|
384
369
|
if (value && typeof value === "object") for (const [key, child] of Object.entries(value)) await recordExistingBlobReferences(child, context, location ? `${location}.${key}` : key);
|
|
385
370
|
}
|
|
386
|
-
|
|
387
371
|
//#endregion
|
|
388
|
-
Object.defineProperty(exports,
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
});
|
|
394
|
-
Object.defineProperty(exports, 'isBlobStorageEnabled', {
|
|
395
|
-
enumerable: true,
|
|
396
|
-
get: function () {
|
|
397
|
-
return isBlobStorageEnabled;
|
|
398
|
-
}
|
|
399
|
-
});
|
|
400
|
-
Object.defineProperty(exports, 'randomSequence', {
|
|
401
|
-
enumerable: true,
|
|
402
|
-
get: function () {
|
|
403
|
-
return randomSequence;
|
|
404
|
-
}
|
|
372
|
+
Object.defineProperty(exports, "extractAndStoreBinaryData", {
|
|
373
|
+
enumerable: true,
|
|
374
|
+
get: function() {
|
|
375
|
+
return extractAndStoreBinaryData;
|
|
376
|
+
}
|
|
405
377
|
});
|
|
406
|
-
Object.defineProperty(exports,
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
378
|
+
Object.defineProperty(exports, "isBlobStorageEnabled", {
|
|
379
|
+
enumerable: true,
|
|
380
|
+
get: function() {
|
|
381
|
+
return isBlobStorageEnabled;
|
|
382
|
+
}
|
|
411
383
|
});
|
|
412
|
-
Object.defineProperty(exports,
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
384
|
+
Object.defineProperty(exports, "shouldAttemptRemoteBlobUpload", {
|
|
385
|
+
enumerable: true,
|
|
386
|
+
get: function() {
|
|
387
|
+
return shouldAttemptRemoteBlobUpload;
|
|
388
|
+
}
|
|
417
389
|
});
|
|
418
|
-
|
|
390
|
+
|
|
391
|
+
//# sourceMappingURL=extractor-DX36oYEv.cjs.map
|
|
@@ -1,21 +1,7 @@
|
|
|
1
|
-
import { _ as getEnvBool, i as
|
|
2
|
-
import {
|
|
3
|
-
import { o as isLoggedIntoCloud } from "./accounts-
|
|
4
|
-
import {
|
|
5
|
-
import { createHash } from "crypto";
|
|
6
|
-
|
|
7
|
-
//#region src/util/createHash.ts
|
|
8
|
-
function sha256(str) {
|
|
9
|
-
return createHash("sha256").update(str).digest("hex");
|
|
10
|
-
}
|
|
11
|
-
function randomSequence(length = 3) {
|
|
12
|
-
const characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
|
|
13
|
-
let result = "";
|
|
14
|
-
for (let i = 0; i < length; i++) result += characters.charAt(Math.floor(Math.random() * 62));
|
|
15
|
-
return result;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
//#endregion
|
|
1
|
+
import { _ as getEnvBool, i as logger } from "./logger-CT3IKMKA.js";
|
|
2
|
+
import { o as cloudConfig } from "./fetch-60Gzydls.js";
|
|
3
|
+
import { o as isLoggedIntoCloud } from "./accounts-xrUGFA6n.js";
|
|
4
|
+
import { n as recordBlobReference, r as storeBlob } from "./blobs-Bpg5rH6i.js";
|
|
19
5
|
//#region src/blobs/remoteUpload.ts
|
|
20
6
|
function buildRemoteUrl() {
|
|
21
7
|
const baseUrl = cloudConfig.getApiHost();
|
|
@@ -24,7 +10,7 @@ function buildRemoteUrl() {
|
|
|
24
10
|
try {
|
|
25
11
|
return new URL("/api/blobs", baseUrl).toString();
|
|
26
12
|
} catch (error) {
|
|
27
|
-
|
|
13
|
+
logger.debug("[RemoteBlob] Invalid remote blob URL", {
|
|
28
14
|
error: error instanceof Error ? error.message : String(error),
|
|
29
15
|
baseUrl
|
|
30
16
|
});
|
|
@@ -39,7 +25,7 @@ async function uploadBlobRemote(buffer, mimeType, context) {
|
|
|
39
25
|
const apiKey = cloudConfig.getApiKey();
|
|
40
26
|
if (!url || !apiKey) return null;
|
|
41
27
|
try {
|
|
42
|
-
const { fetchWithProxy } = await import("./fetch-
|
|
28
|
+
const { fetchWithProxy } = await import("./fetch-60Gzydls.js").then((n) => n.i);
|
|
43
29
|
const response = await fetchWithProxy(url, {
|
|
44
30
|
method: "POST",
|
|
45
31
|
headers: {
|
|
@@ -53,12 +39,12 @@ async function uploadBlobRemote(buffer, mimeType, context) {
|
|
|
53
39
|
})
|
|
54
40
|
});
|
|
55
41
|
if (response.status === 404 || response.status === 400) {
|
|
56
|
-
|
|
42
|
+
logger.debug("[RemoteBlob] Remote blob upload unavailable", { status: response.status });
|
|
57
43
|
return null;
|
|
58
44
|
}
|
|
59
45
|
if (!response.ok) {
|
|
60
46
|
const text = await response.text();
|
|
61
|
-
|
|
47
|
+
logger.debug("[RemoteBlob] Failed to upload blob", {
|
|
62
48
|
status: response.status,
|
|
63
49
|
statusText: response.statusText,
|
|
64
50
|
body: text
|
|
@@ -67,16 +53,15 @@ async function uploadBlobRemote(buffer, mimeType, context) {
|
|
|
67
53
|
}
|
|
68
54
|
const data = await response.json();
|
|
69
55
|
if (!data?.ref?.hash) {
|
|
70
|
-
|
|
56
|
+
logger.debug("[RemoteBlob] Remote upload returned malformed response");
|
|
71
57
|
return null;
|
|
72
58
|
}
|
|
73
59
|
return data;
|
|
74
60
|
} catch (error) {
|
|
75
|
-
|
|
61
|
+
logger.debug("[RemoteBlob] Error uploading blob", { error: error instanceof Error ? error.message : String(error) });
|
|
76
62
|
return null;
|
|
77
63
|
}
|
|
78
64
|
}
|
|
79
|
-
|
|
80
65
|
//#endregion
|
|
81
66
|
//#region src/blobs/extractor.ts
|
|
82
67
|
const BLOB_URI_REGEX = /^promptfoo:\/\/blob\/([a-f0-9]{64})$/i;
|
|
@@ -94,13 +79,13 @@ function extractBase64(value) {
|
|
|
94
79
|
mimeType
|
|
95
80
|
};
|
|
96
81
|
} catch (error) {
|
|
97
|
-
|
|
82
|
+
logger.warn("[BlobExtractor] Failed to parse base64 data URL", { error });
|
|
98
83
|
return null;
|
|
99
84
|
}
|
|
100
85
|
}
|
|
101
86
|
function shouldExternalize(buffer) {
|
|
102
87
|
const size = buffer.length;
|
|
103
|
-
return size >=
|
|
88
|
+
return size >= 1024 && size <= 52428800;
|
|
104
89
|
}
|
|
105
90
|
function getKindFromMimeType(mimeType) {
|
|
106
91
|
return mimeType.startsWith("audio/") ? "audio" : "image";
|
|
@@ -126,7 +111,7 @@ function normalizeAudioMimeType(format) {
|
|
|
126
111
|
};
|
|
127
112
|
if (mimeMap[formatLower]) return mimeMap[formatLower];
|
|
128
113
|
if (!/^[a-z0-9_-]+$/i.test(formatLower)) {
|
|
129
|
-
|
|
114
|
+
logger.warn("[BlobExtractor] Invalid audio format, using default", { format });
|
|
130
115
|
return "audio/wav";
|
|
131
116
|
}
|
|
132
117
|
return `audio/${formatLower}`;
|
|
@@ -143,7 +128,7 @@ function parseBinary(base64OrDataUrl, defaultMimeType) {
|
|
|
143
128
|
mimeType: defaultMimeType
|
|
144
129
|
};
|
|
145
130
|
} catch (error) {
|
|
146
|
-
|
|
131
|
+
logger.warn("[BlobExtractor] Failed to parse base64 data", { error });
|
|
147
132
|
return null;
|
|
148
133
|
}
|
|
149
134
|
}
|
|
@@ -164,7 +149,7 @@ async function maybeStore(base64OrDataUrl, defaultMimeType, context, location, k
|
|
|
164
149
|
location,
|
|
165
150
|
kind
|
|
166
151
|
}).catch((error) => {
|
|
167
|
-
|
|
152
|
+
logger.debug("[BlobExtractor] Cloud upload failed (non-fatal)", {
|
|
168
153
|
error: error instanceof Error ? error.message : String(error),
|
|
169
154
|
hash: ref.hash
|
|
170
155
|
});
|
|
@@ -248,7 +233,7 @@ async function extractAndStoreBinaryData(response, context) {
|
|
|
248
233
|
blobRef: stored
|
|
249
234
|
};
|
|
250
235
|
mutated = true;
|
|
251
|
-
|
|
236
|
+
logger.debug("[BlobExtractor] Stored audio blob", {
|
|
252
237
|
...context,
|
|
253
238
|
hash: stored.hash
|
|
254
239
|
});
|
|
@@ -259,7 +244,7 @@ async function extractAndStoreBinaryData(response, context) {
|
|
|
259
244
|
const stored = await maybeStore(img.data, img.mimeType || "image/png", blobContext, `response.images[${idx}].data`, "image");
|
|
260
245
|
if (stored) {
|
|
261
246
|
mutated = true;
|
|
262
|
-
|
|
247
|
+
logger.debug("[BlobExtractor] Stored image blob", {
|
|
263
248
|
...context,
|
|
264
249
|
hash: stored.hash
|
|
265
250
|
});
|
|
@@ -296,7 +281,7 @@ async function extractAndStoreBinaryData(response, context) {
|
|
|
296
281
|
if (stored) {
|
|
297
282
|
next.output = stored.uri;
|
|
298
283
|
mutated = true;
|
|
299
|
-
|
|
284
|
+
logger.debug("[BlobExtractor] Stored output blob", {
|
|
300
285
|
...context,
|
|
301
286
|
hash: stored.hash
|
|
302
287
|
});
|
|
@@ -315,7 +300,7 @@ async function extractAndStoreBinaryData(response, context) {
|
|
|
315
300
|
storedUris.push(stored.uri);
|
|
316
301
|
jsonMutated = true;
|
|
317
302
|
mutated = true;
|
|
318
|
-
|
|
303
|
+
logger.debug("[BlobExtractor] Stored image blob from b64_json", {
|
|
319
304
|
...context,
|
|
320
305
|
hash: stored.hash
|
|
321
306
|
});
|
|
@@ -333,7 +318,7 @@ async function extractAndStoreBinaryData(response, context) {
|
|
|
333
318
|
}
|
|
334
319
|
}
|
|
335
320
|
} catch (err) {
|
|
336
|
-
|
|
321
|
+
logger.debug("[BlobExtractor] Failed to parse base64 JSON output", {
|
|
337
322
|
error: err instanceof Error ? err.message : String(err),
|
|
338
323
|
location: "response.output"
|
|
339
324
|
});
|
|
@@ -383,7 +368,7 @@ async function recordExistingBlobReferences(value, context, location) {
|
|
|
383
368
|
}
|
|
384
369
|
if (value && typeof value === "object") for (const [key, child] of Object.entries(value)) await recordExistingBlobReferences(child, context, location ? `${location}.${key}` : key);
|
|
385
370
|
}
|
|
386
|
-
|
|
387
371
|
//#endregion
|
|
388
|
-
export {
|
|
389
|
-
|
|
372
|
+
export { isBlobStorageEnabled as n, shouldAttemptRemoteBlobUpload as r, extractAndStoreBinaryData as t };
|
|
373
|
+
|
|
374
|
+
//# sourceMappingURL=extractor-M67RUtg6.js.map
|