promptfoo 0.121.4 → 0.121.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/{ListApp-DQkFNqE9.js → ListApp-BRUsT43Y.js} +1 -1
- package/dist/src/{accounts-Dy17bs4D.cjs → accounts-BIFntVWB.cjs} +4 -4
- package/dist/src/{accounts-F9d_5sMC.js → accounts-CLJHCDDb.js} +6 -6
- package/dist/src/{accounts-DhMYUUbu.js → accounts-CaLNYnf7.js} +4 -4
- package/dist/src/{accounts-DdJ2pHMI.js → accounts-bnyHT7Ju.js} +5 -5
- package/dist/src/{agentic-utils-w68v6_Dz.js → agentic-utils-B5krlibj.js} +3 -3
- package/dist/src/{agentic-utils-P172hM8B.js → agentic-utils-Ba67xmgs.js} +2 -2
- package/dist/src/{agentic-utils-qFlm6zes.js → agentic-utils-BclbiXiq.js} +3 -3
- package/dist/src/{agentic-utils-BpX5b23w.cjs → agentic-utils-D2x0wGhB.cjs} +2 -2
- package/dist/src/{agents-CgaMXvLM.js → agents-BGqaTDnr.js} +5 -5
- package/dist/src/{agents-8FDnTriG.js → agents-BV9yFpXX.js} +5 -5
- package/dist/src/{agents-aYPQLf8W.js → agents-BYdMl1UE.js} +4 -4
- package/dist/src/{agents-pQeBEXMm.js → agents-DhxWMCtH.js} +5 -5
- package/dist/src/{agents-D7-HGxUj.cjs → agents-DiWmQYH9.cjs} +4 -4
- package/dist/src/{agents-BahDpe5G.cjs → agents-WULPVjbH.cjs} +4 -4
- package/dist/src/{agents-DJ35I3Nt.js → agents-emVcx3yh.js} +5 -5
- package/dist/src/{agents-C-R_jfzI.js → agents-n6vPqV3i.js} +4 -4
- package/dist/src/{aimlapi-BCq3MHeL.js → aimlapi-BxqK9HF_.js} +7 -7
- package/dist/src/{aimlapi-qcK4OT55.cjs → aimlapi-BzLjZI_m.cjs} +6 -6
- package/dist/src/{aimlapi-BD6J9oKt.js → aimlapi-DR4pgeiC.js} +6 -6
- package/dist/src/{aimlapi-sgYnkE54.js → aimlapi-uPGp0Zdo.js} +7 -7
- package/dist/src/app/app/tsconfig.app.tsbuildinfo +1 -1
- package/dist/src/app/assets/Report-vjzrbgce.js +1 -0
- package/dist/src/app/assets/index-B3NQ8HTd.js +385 -0
- package/dist/src/app/assets/{index-BXGkeMwh.css → index-Cli2yAXv.css} +1 -1
- package/dist/src/app/index.html +27 -2
- package/dist/src/{audio-DcVKoInv.js → audio-BvpTOArF.js} +4 -4
- package/dist/src/{audio-BQtNuYBj.cjs → audio-C0vDeS0j.cjs} +3 -3
- package/dist/src/{audio-B7izf48x.js → audio-CScmnmEB.js} +4 -4
- package/dist/src/{audio-COrn8rM6.js → audio-Da8U9IS5.js} +3 -3
- package/dist/src/{base-fZ9wgg50.js → base-BOMaNEes.js} +3 -3
- package/dist/src/{base-PYJvBE1i.js → base-BTux96b1.js} +2 -2
- package/dist/src/{base-D-670DX8.cjs → base-Tw6uhH8K.cjs} +2 -2
- package/dist/src/{base-yrI1Yal4.js → base-dYsl2hmL.js} +3 -3
- package/dist/src/{blobs-D2FAd1Q5.cjs → blobs-B95F_7vE.cjs} +2 -2
- package/dist/src/{blobs-C-F78Kfn.js → blobs-BW4U31ue.js} +2 -2
- package/dist/src/{blobs-BCZavS8s.js → blobs-D_gg8nbm.js} +3 -3
- package/dist/src/{blobs-BQWqnnvL.js → blobs-DjLby-uP.js} +3 -3
- package/dist/src/{cache-mb7c8hbp.js → cache-BI5BY7ey.js} +4 -4
- package/dist/src/{cache-DbLsVWB2.cjs → cache-BRkhlH3k.cjs} +1 -1
- package/dist/src/cache-BlC6aeJ0.js +3 -0
- package/dist/src/{cache-D5NZmMiT.js → cache-Bzttsk0X.js} +2 -2
- package/dist/src/{cache-C4Xb-hNb.js → cache-Cr-qWIbP.js} +3 -3
- package/dist/src/{cache-BIyPcp5v.cjs → cache-DGg-yTZG.cjs} +2 -2
- package/dist/src/{chat-Dr3DUQ0D.js → chat-BLOdH60v.js} +12 -12
- package/dist/src/{chat-BfPaS15_.js → chat-Cx_LkwvZ.js} +12 -12
- package/dist/src/{chat-mW0ORo8G.js → chat-D9nudO9b.js} +4 -4
- package/dist/src/{chat-I9izLm49.js → chat-DChSH_Es.js} +12 -12
- package/dist/src/{chat-MKxMnZJZ.js → chat-DG2LkwLq.js} +2 -2
- package/dist/src/{chat-BPXSW8Bv.cjs → chat-DH97tVV9.cjs} +2 -2
- package/dist/src/{chat-0bwXjVP0.js → chat-aMQZw6R7.js} +4 -4
- package/dist/src/{chat-CclRbxGf.cjs → chat-vYqqv1gP.cjs} +11 -11
- package/dist/src/{chatkit-zUIVoDos.js → chatkit-B8X34dQc.js} +4 -4
- package/dist/src/{chatkit-Cv6AhukM.js → chatkit-BXu42Qwt.js} +3 -3
- package/dist/src/{chatkit-CJnHRRMM.js → chatkit-CbMRoeYw.js} +4 -4
- package/dist/src/{chatkit-BoWoSgXl.cjs → chatkit-D44VyUyB.cjs} +3 -3
- package/dist/src/{claude-agent-sdk-CPJo3dBQ.cjs → claude-agent-sdk-BRq0bbIK.cjs} +8 -8
- package/dist/src/{claude-agent-sdk-BQNuLaAK.js → claude-agent-sdk-BjriSVRZ.js} +7 -7
- package/dist/src/{claude-agent-sdk-Dtq_L-Sc.js → claude-agent-sdk-BzNZeZ0N.js} +7 -7
- package/dist/src/{claude-agent-sdk-nfAIcxNf.js → claude-agent-sdk-DYv_AJ8u.js} +7 -7
- package/dist/src/cloud-CoD5OacT.js +3 -0
- package/dist/src/{cloud-DQZ5sVjW.js → cloud-Da0bofJd.js} +3 -3
- package/dist/src/{cloudflare-ai-BIB567w6.js → cloudflare-ai-CXC4b1EU.js} +4 -4
- package/dist/src/{cloudflare-ai-DlKr0rY7.js → cloudflare-ai-CyBoIs1Q.js} +6 -6
- package/dist/src/{cloudflare-ai-DGLte7Py.js → cloudflare-ai-DGOwgexC.js} +6 -6
- package/dist/src/{cloudflare-ai-Dl3N9OVD.cjs → cloudflare-ai-DJv5qnyb.cjs} +4 -4
- package/dist/src/{cloudflare-gateway-BDZrYydE.js → cloudflare-gateway-1sAoOyft.js} +5 -5
- package/dist/src/{cloudflare-gateway-CiIZHU0Q.js → cloudflare-gateway-D-dnkzCF.js} +5 -5
- package/dist/src/{cloudflare-gateway-BYDp495F.cjs → cloudflare-gateway-DKVjkDav.cjs} +3 -3
- package/dist/src/{cloudflare-gateway-DI1HNP5F.js → cloudflare-gateway-TJkVrZlB.js} +3 -3
- package/dist/src/codex-app-server-CCLjqCh9.js +1915 -0
- package/dist/src/codex-app-server-CCe0TiDc.js +1915 -0
- package/dist/src/codex-app-server-CPW1LFwh.js +1916 -0
- package/dist/src/codex-app-server-VMRnjZ68.cjs +1920 -0
- package/dist/src/codex-sdk-1jm_qPHf.js +3 -0
- package/dist/src/{codex-sdk-C2_M2pl_.cjs → codex-sdk-Bd8UbO9q.cjs} +5 -5
- package/dist/src/{codex-sdk-CpqiOqDO.js → codex-sdk-BgEFQ70r.js} +6 -6
- package/dist/src/{codex-sdk-Rtky3M4I.js → codex-sdk-Bzb_TqX9.js} +6 -6
- package/dist/src/{codex-sdk-CWEnH70W.cjs → codex-sdk-Danroptg.cjs} +1 -1
- package/dist/src/{codex-sdk-CErXn7qh.js → codex-sdk-DfvDTN33.js} +5 -5
- package/dist/src/{cometapi-CtJ-mS8R.js → cometapi-B5ImDlSm.js} +8 -8
- package/dist/src/{cometapi-UVOryo4W.cjs → cometapi-BgAkuYCw.cjs} +7 -7
- package/dist/src/{cometapi-BUlt_ELa.js → cometapi-CC7hWxmX.js} +8 -8
- package/dist/src/{cometapi-DT-jlVCB.js → cometapi-CCbpHkuF.js} +7 -7
- package/dist/src/{completion-x0a_c2y1.js → completion-2iuYVxwi.js} +6 -6
- package/dist/src/{completion-Dnxn7E-j.js → completion-CrD6MQ93.js} +5 -5
- package/dist/src/{completion-BozdoXba.cjs → completion-DtQ72Bm3.cjs} +5 -5
- package/dist/src/{completion-HUe8wDhZ.js → completion-Vq_ad618.js} +6 -6
- package/dist/src/{createHash-ChI45QR1.js → createHash-DPpsZgFF.js} +1 -1
- package/dist/src/{createHash-CwDVU5xr.js → createHash-Un4Q_huE.js} +1 -1
- package/dist/src/{createHash-B7KvgoOD.cjs → createHash-VvBIc-AW.cjs} +1 -1
- package/dist/src/{docker-DCgsveLD.js → docker--3qzPa-6.js} +6 -6
- package/dist/src/{docker-DS4_Osau.cjs → docker-D3AY-5F5.cjs} +5 -5
- package/dist/src/{docker-CQmlA2NU.js → docker-DCsCDvwM.js} +6 -6
- package/dist/src/{docker-ClnmCf1Z.js → docker-Dorv4_Dg.js} +5 -5
- package/dist/src/{embedding-I45KG3o7.cjs → embedding-BXhN5lCH.cjs} +5 -5
- package/dist/src/{embedding-nFbumxcv.js → embedding-ChS1ivFS.js} +5 -5
- package/dist/src/{embedding-D3xTseo7.js → embedding-DNRvZwRN.js} +6 -6
- package/dist/src/{embedding-DD9wa3ae.js → embedding-D_bI4NDq.js} +6 -6
- package/dist/src/{errors-Cw810C93.js → errors-DFHe4L-n.js} +1 -1
- package/dist/src/{esm-Dh4dOLlt.js → esm-B6whoAcf.js} +2 -2
- package/dist/src/{esm-C7PnfdF8.js → esm-BRkfNsYs.js} +1 -1
- package/dist/src/{esm-tVgYPY-f.js → esm-BX8fwlAO.js} +2 -2
- package/dist/src/{esm-CtEPLdAj.cjs → esm-B_rGuPTo.cjs} +1 -1
- package/dist/src/{eval-CzJFfFO9.js → eval-BQPLBJbw.js} +1 -1
- package/dist/src/{eval-u4UVafl6.js → eval-DJ_4A-tr.js} +14 -14
- package/dist/src/evalResult-BBJAHAtw.cjs +2 -0
- package/dist/src/evalResult-BBK58h2B.js +3 -0
- package/dist/src/{evalResult-KZqXl4XP.cjs → evalResult-Cx-8OWkb.cjs} +28 -10
- package/dist/src/{evalResult-D3hVYFis.js → evalResult-D6P5I5il.js} +29 -11
- package/dist/src/{evalResult-Bgm9ZH31.js → evalResult-pSvGWFMo.js} +29 -11
- package/dist/src/{evaluator-IvuDYSvQ.js → evaluator-D-UIbbYq.js} +845 -98
- package/dist/src/evaluator-DgLKaZk8.js +3 -0
- package/dist/src/{extractor-Dk6bRWkv.js → extractor-BM3jRERL.js} +5 -5
- package/dist/src/{extractor-WVPOrH43.cjs → extractor-Dxr2J_wK.cjs} +5 -5
- package/dist/src/{extractor-DNSeBVOJ.js → extractor-DxyiFhPk.js} +6 -6
- package/dist/src/{extractor-CAfTSraf.js → extractor-YlZbUMsL.js} +6 -6
- package/dist/src/fetch-8viavNv8.js +3 -0
- package/dist/src/{fetch-BEWnXrrG.js → fetch-B6ch2nU2.js} +9 -20
- package/dist/src/{fetch-Di00EQrc.js → fetch-D9xxyC1p.js} +221 -232
- package/dist/src/{fetch-CJU5ELPa.cjs → fetch-NuqXW1Xb.cjs} +221 -244
- package/dist/src/{fetch-B0Z3Oe4k.js → fetch-Y5qX_kST.js} +8 -19
- package/dist/src/{fileExtensions-BArZuxsI.js → fileExtensions-8CjoL7vB.js} +1 -1
- package/dist/src/{fileExtensions-DnqA1y9x.js → fileExtensions-BGh-W-HT.js} +1 -1
- package/dist/src/{fileExtensions-bYh77CN8.cjs → fileExtensions-D9h-8Wxg.cjs} +1 -1
- package/dist/src/{fileExtensions-AWa2ZML4.js → fileExtensions-DysCsxNG.js} +1 -1
- package/dist/src/{formatDuration-DZzPsexs.js → formatDuration-Ch4A7G3o.js} +1 -1
- package/dist/src/{genaiTracer-yRuxj9-L.cjs → genaiTracer-BokHC-MW.cjs} +1 -1
- package/dist/src/{genaiTracer-DWdZ28hY.js → genaiTracer-C3ZPQU60.js} +1 -1
- package/dist/src/{genaiTracer-XnrcgDCe.js → genaiTracer-CFny3gOy.js} +1 -1
- package/dist/src/{genaiTracer-COYDi-tC.js → genaiTracer-DxODqT9e.js} +1 -1
- package/dist/src/{graders-Zy3x0zqX.js → graders-BoUqsCEm.js} +1303 -2044
- package/dist/src/{graders--zknU_uk.cjs → graders-Bw1wk_21.cjs} +1553 -2240
- package/dist/src/graders-C84JI-m5.js +2 -0
- package/dist/src/graders-CBbd0K0Q.cjs +2 -0
- package/dist/src/graders-CbQqpHSN.js +3 -0
- package/dist/src/{graders-eIHhRqoC.js → graders-CgPn32yp.js} +1300 -2041
- package/dist/src/{graders-pvbReLLn.js → graders-CwrbifOo.js} +747 -1488
- package/dist/src/graders-DS42d3ZG.js +2 -0
- package/dist/src/{image-9302QVqR.js → image-BeWaInPF.js} +3 -3
- package/dist/src/{image-DVz2RiMF.js → image-BmilRNqO.js} +7 -7
- package/dist/src/{image-x6KqLQl4.cjs → image-CxJoa3aW.cjs} +6 -6
- package/dist/src/{image-De2FBmYV.cjs → image-D10dNAav.cjs} +3 -3
- package/dist/src/{image-dnoUgPrC.js → image-Dr_3I3nK.js} +4 -4
- package/dist/src/{image-B5Mv-Z3h.js → image-DsGRlkh7.js} +7 -7
- package/dist/src/{image-qUpPvmNZ.js → image-a_SGUobh.js} +6 -6
- package/dist/src/{image-u7-rKnYU.js → image-qjO6FWPs.js} +4 -4
- package/dist/src/index.cjs +1052 -296
- package/dist/src/index.d.cts +124 -13
- package/dist/src/index.d.ts +125 -14
- package/dist/src/index.js +1018 -262
- package/dist/src/{interactiveCheck-CLERUB0c.js → interactiveCheck-CCICw2cy.js} +2 -2
- package/dist/src/{invariant-BtWWVVhl.js → invariant-B2Rf6avk.js} +1 -1
- package/dist/src/{invariant-vgHWClmd.js → invariant-DIYf9sP1.js} +1 -1
- package/dist/src/{knowledgeBase-RhFPGWDc.js → knowledgeBase-BBETc5-S.js} +6 -6
- package/dist/src/{knowledgeBase-Bpoe_nLu.cjs → knowledgeBase-C8qOo26M.cjs} +5 -5
- package/dist/src/{knowledgeBase-lm9RXSAm.js → knowledgeBase-CzAi2rUI.js} +6 -6
- package/dist/src/{knowledgeBase-Dgc7CBWF.js → knowledgeBase-Dr3Kib7F.js} +5 -5
- package/dist/src/{litellm-C2kqjxqp.js → litellm-BLSiANhk.js} +5 -5
- package/dist/src/{litellm-CoyI4IAl.cjs → litellm-CaUmV7Mk.cjs} +4 -4
- package/dist/src/{litellm-p37R1dzQ.js → litellm-DQGo_juI.js} +4 -4
- package/dist/src/{litellm-DRjpcSa7.js → litellm-DRc4qWfc.js} +5 -5
- package/dist/src/{logger-DksKw1Qc.js → logger-BbY6ypFL.js} +2 -2
- package/dist/src/{logger-B88EkIn6.js → logger-KD8JjCRJ.js} +2 -2
- package/dist/src/{luma-ray-KgTCXrZC.js → luma-ray-B-tNZzqW.js} +6 -6
- package/dist/src/{luma-ray-B863CmuZ.js → luma-ray-CtS3OlGq.js} +5 -5
- package/dist/src/{luma-ray-BTTLtqQ8.js → luma-ray-PJJgUjOc.js} +6 -6
- package/dist/src/{luma-ray-BxVKaW2a.cjs → luma-ray-if-Ml4R9.cjs} +5 -5
- package/dist/src/main.js +242 -198
- package/dist/src/{messages-zWbkLLHz.js → messages-B9dSjrNf.js} +264 -16
- package/dist/src/{messages-811uVVW5.cjs → messages-BnsVHUnm.cjs} +266 -15
- package/dist/src/{messages-MYTQ2TWp.js → messages-CI69Lasb.js} +264 -16
- package/dist/src/{messages-BTQz42fn.js → messages-CewuNcNS.js} +264 -16
- package/dist/src/{meteor-Co1VQ1u5.cjs → meteor-BBGcGeCa.cjs} +1 -1
- package/dist/src/{meteor-DuAFv6gF.js → meteor-BKTM-7KS.js} +1 -1
- package/dist/src/{meteor-DHdzY1Ss.js → meteor-CeGo0Lu2.js} +2 -2
- package/dist/src/{meteor-CU5UAE-H.js → meteor-Wc_aUVvu.js} +2 -2
- package/dist/src/{modelslab-wu9yi5GE.js → modelslab-BCLOtfek.js} +7 -7
- package/dist/src/{modelslab-Dk1JAtVo.cjs → modelslab-BkapYJhh.cjs} +6 -6
- package/dist/src/{modelslab-DIq-6y7x.js → modelslab-D73OnKSx.js} +6 -6
- package/dist/src/{modelslab-D0erNWKe.js → modelslab-zpz9JcK0.js} +7 -7
- package/dist/src/{nova-reel-CCFRfeRb.js → nova-reel-B8F_TK5w.js} +6 -6
- package/dist/src/{nova-reel-DQrm74ng.js → nova-reel-Bx0NFV2f.js} +5 -5
- package/dist/src/{nova-reel-gr11WG7f.js → nova-reel-CNGJTLtG.js} +6 -6
- package/dist/src/{nova-reel-CrLXVKQf.cjs → nova-reel-DkT7tnoB.cjs} +5 -5
- package/dist/src/{nova-sonic-BYdp-QLs.js → nova-sonic-BaXRN1cr.js} +4 -4
- package/dist/src/{nova-sonic-TDgrlTk7.js → nova-sonic-BeTRaFOh.js} +4 -4
- package/dist/src/{nova-sonic-B_ZXcUJB.js → nova-sonic-CL7Zqv0G.js} +3 -3
- package/dist/src/{nova-sonic-i5tUvXKn.cjs → nova-sonic-YT426juD.cjs} +3 -3
- package/dist/src/{openai-DhVEmgeZ.js → openai-BMHD2Huo.js} +2 -2
- package/dist/src/{openai-Qsvz25mV.js → openai-BT-JvDse.js} +2 -2
- package/dist/src/{openai-URNyItar.cjs → openai-Cy1XLs0c.cjs} +1 -1
- package/dist/src/{openai-iYtrXzOX.js → openai-D4fxGvRx.js} +1 -1
- package/dist/src/{openclaw-CwzlQSQX.js → openclaw-Bq7RVR3k.js} +7 -6
- package/dist/src/{openclaw-CLWrW03k.js → openclaw-DA8U4DsD.js} +8 -7
- package/dist/src/{openclaw-CnQ363Wi.js → openclaw-DObVgpjC.js} +8 -7
- package/dist/src/{openclaw-wX9rtfke.cjs → openclaw-DUBZP3GL.cjs} +8 -7
- package/dist/src/{opencode-sdk-BUu5Nevv.js → opencode-sdk-BB40Wir1.js} +4 -4
- package/dist/src/{opencode-sdk-GI2KaAXq.js → opencode-sdk-BM1UAIv1.js} +3 -3
- package/dist/src/{opencode-sdk-BZ2idgYA.cjs → opencode-sdk-CeqiOcOU.cjs} +4 -4
- package/dist/src/{opencode-sdk-BxD8vXp_.js → opencode-sdk-ChdK7F7z.js} +4 -4
- package/dist/src/{otlpReceiver-DmVulbhC.js → otlpReceiver-C6thJRXi.js} +4 -4
- package/dist/src/{otlpReceiver-B2z58l4e.js → otlpReceiver-CcdIikOu.js} +3 -3
- package/dist/src/{otlpReceiver-BfcVq2Nq.cjs → otlpReceiver-DNSQj6bf.cjs} +3 -3
- package/dist/src/{otlpReceiver-BntK801g.js → otlpReceiver-UYMQx3sy.js} +4 -4
- package/dist/src/{providerRegistry-CPQ_CmVO.js → providerRegistry-1gB5vtzQ.js} +2 -2
- package/dist/src/{providerRegistry-CQMdTmHP.cjs → providerRegistry-BESeALrr.cjs} +1 -1
- package/dist/src/{providerRegistry-Bvh8mv85.js → providerRegistry-DoACwqhD.js} +1 -1
- package/dist/src/{providerRegistry-CWoPjKFZ.js → providerRegistry-PMsleEzs.js} +2 -2
- package/dist/src/{providers-Bp4S-FvO.js → providers-BuyzKt7C.js} +1 -1
- package/dist/src/{providers-DV3ax9e_.cjs → providers-C7lNVBjX.cjs} +1 -1
- package/dist/src/{providers-u9Enmfok.js → providers-CCE2COJi2.js} +1 -1
- package/dist/src/{providers-DruaQfwu.js → providers-CJh7iriU.js} +18103 -17952
- package/dist/src/{providers-iUt5fbAN.js → providers-Ctcc592x.js} +1 -1
- package/dist/src/{providers-Domz_llv.js → providers-DRrerKra.js} +432 -281
- package/dist/src/{providers-BV_KMZje.js → providers-DT-GtF2t.js} +19094 -18943
- package/dist/src/{providers-1eKkXBKp.cjs → providers-eDShy16E.cjs} +17946 -17795
- package/dist/src/{pythonUtils-Cldx7huE.js → pythonUtils-C4tltmIn.js} +3 -3
- package/dist/src/{pythonUtils-tAJvvpS-.cjs → pythonUtils-CoLaCwNY.cjs} +3 -3
- package/dist/src/{pythonUtils-C2UQ30Rz.js → pythonUtils-DMO68Jg7.js} +3 -3
- package/dist/src/{pythonUtils-CnndUbW-.js → pythonUtils-DNqbnRdx.js} +3 -3
- package/dist/src/{quiverai-DR0SnIQV.js → quiverai-BSS9a7wV.js} +3 -3
- package/dist/src/{quiverai-CtWi6x_g.js → quiverai-Bk1KrvL6.js} +4 -4
- package/dist/src/{quiverai-DFotyafY.cjs → quiverai-Bpx6MZ7T.cjs} +3 -3
- package/dist/src/{quiverai-aPPvXOgn.js → quiverai-CPKhWgaT.js} +4 -4
- package/dist/src/{render-DHIZ6_k8.js → render-7uNJ2V14.js} +2 -2
- package/dist/src/{render-CH-62LbA.js → render-DlscvAUJ.js} +1 -1
- package/dist/src/{render-CMEpfLaO.js → render-eui5p5mL.js} +2 -2
- package/dist/src/{render-CgVDrJmM.js → render-nj-UaPdn.js} +2 -2
- package/dist/src/{render-DfQSFxGE.cjs → render-tG6ir9_g.cjs} +1 -1
- package/dist/src/{responses--OsX2aYW.js → responses-1ztiVYsx.js} +49 -15
- package/dist/src/{responses-DL9m8CyY.js → responses-B8haB-mD.js} +49 -15
- package/dist/src/{responses-C-flexAY.js → responses-BiaBguAu.js} +49 -15
- package/dist/src/{responses-Bi9vBuW_.cjs → responses-CF-ayauu.cjs} +48 -14
- package/dist/src/rubyUtils-4hjGxvju.js +3 -0
- package/dist/src/{rubyUtils-DVLeA2jg.js → rubyUtils-BI0p46eZ.js} +3 -3
- package/dist/src/{rubyUtils-DsGrTx8R.js → rubyUtils-CIQFnVz4.js} +3 -3
- package/dist/src/rubyUtils-CO-tuszQ.cjs +2 -0
- package/dist/src/{rubyUtils-CYSQEG4a.js → rubyUtils-DGnoCYL2.js} +3 -3
- package/dist/src/{rubyUtils-B6eljPuh.cjs → rubyUtils-DoifqkiA.cjs} +4 -3
- package/dist/src/{sagemaker-BveBvuxm.js → sagemaker-BDLeW29y.js} +12 -12
- package/dist/src/{sagemaker-D67yzMzs.js → sagemaker-C5T60MKf.js} +13 -13
- package/dist/src/{sagemaker-BVkaG2-l.js → sagemaker-ClS_NB07.js} +13 -13
- package/dist/src/{sagemaker-XnfhheQv.cjs → sagemaker-ljtY12VM.cjs} +12 -12
- package/dist/src/{scanner-1DqWi1Ej.js → scanner-nOCWNIXa.js} +7 -7
- package/dist/src/server/index.js +1067 -265
- package/dist/src/{server-Dx2TyCH2.cjs → server-BEECpeGG.cjs} +5 -5
- package/dist/src/{server-BNYztJkh.js → server-ByiF3qlg.js} +9 -8
- package/dist/src/{server-BSB45Nt9.js → server-ByxbqAcQ.js} +8 -7
- package/dist/src/{server-DaA2eR26.cjs → server-C0XKRNB_.cjs} +1 -1
- package/dist/src/server-C_15p79-.js +3 -0
- package/dist/src/{server-D6Il2Sob.js → server-gyd6d4Hc.js} +5 -5
- package/dist/src/{signal-CE5G3a7x.js → signal-DTtUuU3l.js} +3 -3
- package/dist/src/{slack-acRb0IqQ.js → slack-4zZX1OKP.js} +1 -1
- package/dist/src/{slack-1Rhq0EoV.cjs → slack-BLlsDpfG.cjs} +1 -1
- package/dist/src/{slack-D5Wpy8LM.js → slack-BPYLQLgb.js} +2 -2
- package/dist/src/{slack-DDUe-5MC.js → slack-Bamy_7te.js} +2 -2
- package/dist/src/{store-DAAyxcy6.cjs → store-2K0kDi80.cjs} +2 -2
- package/dist/src/{store-Dn9HUkdW.js → store-2OXm_eBY.js} +3 -3
- package/dist/src/store-BELqNwvz.js +3 -0
- package/dist/src/{store-M0b1WfYb.js → store-BPkzEyFM.js} +2 -2
- package/dist/src/{store-CYEy5J2D.js → store-CPh25336.js} +3 -3
- package/dist/src/store-uQZ4AjPe.cjs +2 -0
- package/dist/src/{tables-CsWou1Bx.js → tables-BMSOS2Gg.js} +3 -3
- package/dist/src/{tables-DUfh1F7Z.cjs → tables-CXbaZ9y1.cjs} +2 -2
- package/dist/src/{tables-C4CH3zRr.js → tables-NlvH23ky.js} +3 -3
- package/dist/src/{tables-DQ4WU5tX.js → tables-WgdUZ8Ck.js} +2 -2
- package/dist/src/{telemetry-dbaJ0E98.js → telemetry--iqaGyaS.js} +5 -4
- package/dist/src/{telemetry-Dsw_faFj.cjs → telemetry-CEQxGnMZ.cjs} +7 -6
- package/dist/src/{telemetry-Dvqxv3YC.js → telemetry-CgdVGV8N.js} +4 -3
- package/dist/src/{telemetry-CQPez_Jp.js → telemetry-DWdGHvEf.js} +5 -4
- package/dist/src/telemetry-DjNoC_n3.cjs +2 -0
- package/dist/src/telemetry-ZdPZc0fm.js +3 -0
- package/dist/src/{text-BVi-cLPJ.cjs → text-BiNME7QG.cjs} +1 -1
- package/dist/src/{text-KvuD2Iko.js → text-D4lz-Jg_.js} +1 -1
- package/dist/src/{text-DHxdyQqT.js → text-DDQP0tuQ.js} +1 -1
- package/dist/src/{text-CZr46tp_.js → text-NWvfMfkF.js} +1 -1
- package/dist/src/{tokenUsageUtils-CXrvO-wA.js → tokenUsageUtils-2wIvAhB3.js} +1 -1
- package/dist/src/{tokenUsageUtils-C-bmyHoE.js → tokenUsageUtils-4c780gFd.js} +1 -1
- package/dist/src/tokenUsageUtils-BjVkdk18.js +142 -0
- package/dist/src/{tokenUsageUtils-Bb7DkZPz.cjs → tokenUsageUtils-C9odhsbW.cjs} +1 -1
- package/dist/src/{transcription-DuWDupG7.js → transcription-84t4ALo2.js} +5 -5
- package/dist/src/{transcription-CJspiD2c.js → transcription-Bm2emLmJ.js} +6 -6
- package/dist/src/{transcription-BvjmiYB1.cjs → transcription-CZ4LG5hQ.cjs} +5 -5
- package/dist/src/{transcription-V2HaAmy2.js → transcription-D7Q0vJsh.js} +6 -6
- package/dist/src/{transform-zDhMmzwX.js → transform-B-b6Cq-q.js} +5 -5
- package/dist/src/transform-BQt0BeAW.js +3 -0
- package/dist/src/{transform-DgKlRr73.cjs → transform-Bq5oqC0s.cjs} +1 -1
- package/dist/src/{transform-CUnzlsbn.cjs → transform-C9izGX54.cjs} +4 -4
- package/dist/src/{transform-DYX1_Xnh.js → transform-CwbAZ84V.js} +5 -5
- package/dist/src/{transform-CTeuTR3S.cjs → transform-Dg4LcO1Y.cjs} +6 -6
- package/dist/src/{transform-CG0ehZNG.js → transform-DtooZqYY.js} +6 -6
- package/dist/src/{transform-UN5UGu8U.js → transform-DzCF-wqV.js} +5 -5
- package/dist/src/{transform-lQrDE1BQ.js → transform-_DpNB4qp.js} +5 -5
- package/dist/src/{transform-Bbg6A8Jk.js → transform-eGiUAv86.js} +4 -4
- package/dist/src/{transformersAvailability-Cju9mHgR.cjs → transformersAvailability-B22swDxr.cjs} +1 -1
- package/dist/src/{transformersAvailability-CcHusyhw.js → transformersAvailability-lvCCvuPT.js} +1 -1
- package/dist/src/{transformersAvailability-DLlROWhg.js → transformersAvailability-rJGPccjr.js} +1 -1
- package/dist/src/{types-Bgh5SOn6.js → types-BDjGOq4E.js} +4 -2
- package/dist/src/{types-Dm9JM6Vb.js → types-BVH9hjgW.js} +4 -2
- package/dist/src/{types-CeaeaZdP.cjs → types-CgG2rKiW.cjs} +151 -149
- package/dist/src/{types-BGQDAP8i.js → types-DNRZVOue.js} +152 -150
- package/dist/src/{util-C8e5uydV.js → util-3pBZZb_H.js} +142 -17
- package/dist/src/{util-CN3SrLT4.cjs → util-A5_ZsQUn.cjs} +65 -43
- package/dist/src/{util-D3q0WQ-0.js → util-B9CNhyac.js} +66 -44
- package/dist/src/{util-DxWpWjhc.js → util-BQOCAHQC.js} +700 -575
- package/dist/src/{util-BYvQUPp7.js → util-BVXcTwXu.js} +3 -3
- package/dist/src/{util-D9TisOyk.js → util-BlFVL0UF.js} +65 -43
- package/dist/src/{util-C9J8ahRn.js → util-C-kmRosx.js} +66 -44
- package/dist/src/{util-DvU2Pw8c.js → util-DFPeFkiV.js} +3 -3
- package/dist/src/{util-DDs-7g6-.js → util-DN0-b81k.js} +3 -3
- package/dist/src/{util-olYL5C6N.cjs → util-Dpmm_dAI.cjs} +3 -3
- package/dist/src/{util-oGMLA7vc.js → util-Dub0f_ej.js} +700 -575
- package/dist/src/{util-Bxn8emtE.cjs → util-DvpHnLt0.cjs} +718 -570
- package/dist/src/{utils-DJfvjyMj.js → utils-BUMN8orw.js} +3 -3
- package/dist/src/{utils-B05gLxER.cjs → utils-DkVeShIB.cjs} +2 -2
- package/dist/src/{utils-BLJKfv0y.js → utils-kt7lv30R.js} +3 -3
- package/dist/src/{utils-hXtCYanr.js → utils-o8S5huU2.js} +2 -2
- package/dist/src/version-0frU0UTr.js +16 -0
- package/dist/src/version-CbpiUINz.js +17 -0
- package/dist/src/version-CbuBKu2U.js +16 -0
- package/dist/src/version-D9zu9FWB.cjs +27 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +22 -20
- package/dist/src/app/assets/Report-CQYFezYu.js +0 -1
- package/dist/src/app/assets/index-BzJt18Jz.js +0 -385
- package/dist/src/cache-Cr9oLMUa.js +0 -3
- package/dist/src/cloud-Hphvo8kr.js +0 -3
- package/dist/src/codex-sdk-BAmYE7qy.js +0 -3
- package/dist/src/evalResult-D8MT9p0s.js +0 -3
- package/dist/src/evalResult-Dvc-iucu.cjs +0 -2
- package/dist/src/evaluator-CVessDWe.js +0 -3
- package/dist/src/fetch-C7bGKDlQ.js +0 -3
- package/dist/src/graders-BOAzQEUe.cjs +0 -2
- package/dist/src/graders-D4BTsZdG2.js +0 -3
- package/dist/src/graders-DOJK1XpV.js +0 -2
- package/dist/src/graders-NAv9LcBn.js +0 -2
- package/dist/src/rubyUtils-D1L2d3jb.js +0 -3
- package/dist/src/rubyUtils-DUbq4tff.cjs +0 -2
- package/dist/src/server-DCtHUqlp.js +0 -3
- package/dist/src/store-CWOSz6D_.cjs +0 -2
- package/dist/src/store-DCDBhv7B.js +0 -3
- package/dist/src/telemetry-C1IqxcdW.js +0 -3
- package/dist/src/telemetry-C4ZEa_es.cjs +0 -2
- package/dist/src/transform-M6ITAESf.js +0 -3
- /package/dist/src/{evalResult-DElBuddX.js → evalResult-spPqh1G_.js} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { S as getEnvBool, a as logger } from "./logger-Ct2S6Yx-.js";
|
|
2
|
-
import {
|
|
3
|
-
import { o as isLoggedIntoCloud } from "./accounts-
|
|
4
|
-
import { n as recordBlobReference, r as storeBlob } from "./blobs-
|
|
2
|
+
import { S as cloudConfig } from "./fetch-D9xxyC1p.js";
|
|
3
|
+
import { o as isLoggedIntoCloud } from "./accounts-CaLNYnf7.js";
|
|
4
|
+
import { n as recordBlobReference, r as storeBlob } from "./blobs-BW4U31ue.js";
|
|
5
5
|
//#region src/blobs/remoteUpload.ts
|
|
6
6
|
function buildRemoteUrl() {
|
|
7
7
|
const baseUrl = cloudConfig.getApiHost();
|
|
@@ -25,7 +25,7 @@ async function uploadBlobRemote(buffer, mimeType, context) {
|
|
|
25
25
|
const apiKey = cloudConfig.getApiKey();
|
|
26
26
|
if (!url || !apiKey) return null;
|
|
27
27
|
try {
|
|
28
|
-
const { fetchWithProxy } = await import("./fetch-
|
|
28
|
+
const { fetchWithProxy } = await import("./fetch-D9xxyC1p.js").then((n) => n.i);
|
|
29
29
|
const response = await fetchWithProxy(url, {
|
|
30
30
|
method: "POST",
|
|
31
31
|
headers: {
|
|
@@ -371,4 +371,4 @@ async function recordExistingBlobReferences(value, context, location) {
|
|
|
371
371
|
//#endregion
|
|
372
372
|
export { isBlobStorageEnabled as n, shouldAttemptRemoteBlobUpload as r, extractAndStoreBinaryData as t };
|
|
373
373
|
|
|
374
|
-
//# sourceMappingURL=extractor-
|
|
374
|
+
//# sourceMappingURL=extractor-BM3jRERL.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
const require_logger = require("./logger-COuQb2xB.cjs");
|
|
2
|
-
const require_fetch = require("./fetch-
|
|
3
|
-
const require_accounts = require("./accounts-
|
|
4
|
-
const require_blobs = require("./blobs-
|
|
2
|
+
const require_fetch = require("./fetch-NuqXW1Xb.cjs");
|
|
3
|
+
const require_accounts = require("./accounts-BIFntVWB.cjs");
|
|
4
|
+
const require_blobs = require("./blobs-B95F_7vE.cjs");
|
|
5
5
|
//#region src/blobs/remoteUpload.ts
|
|
6
6
|
function buildRemoteUrl() {
|
|
7
7
|
const baseUrl = require_fetch.cloudConfig.getApiHost();
|
|
@@ -25,7 +25,7 @@ async function uploadBlobRemote(buffer, mimeType, context) {
|
|
|
25
25
|
const apiKey = require_fetch.cloudConfig.getApiKey();
|
|
26
26
|
if (!url || !apiKey) return null;
|
|
27
27
|
try {
|
|
28
|
-
const { fetchWithProxy } = await Promise.resolve().then(() => require("./fetch-
|
|
28
|
+
const { fetchWithProxy } = await Promise.resolve().then(() => require("./fetch-NuqXW1Xb.cjs")).then((n) => n.fetch_exports);
|
|
29
29
|
const response = await fetchWithProxy(url, {
|
|
30
30
|
method: "POST",
|
|
31
31
|
headers: {
|
|
@@ -388,4 +388,4 @@ Object.defineProperty(exports, "shouldAttemptRemoteBlobUpload", {
|
|
|
388
388
|
}
|
|
389
389
|
});
|
|
390
390
|
|
|
391
|
-
//# sourceMappingURL=extractor-
|
|
391
|
+
//# sourceMappingURL=extractor-Dxr2J_wK.cjs.map
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { T as getEnvBool, s as logger } from "./logger-
|
|
3
|
-
import { c as isLoggedIntoCloud } from "./accounts-
|
|
4
|
-
import { a as cloudConfig } from "./cloud-
|
|
5
|
-
import { i as storeBlob, r as recordBlobReference } from "./blobs-
|
|
2
|
+
import { T as getEnvBool, s as logger } from "./logger-BbY6ypFL.js";
|
|
3
|
+
import { c as isLoggedIntoCloud } from "./accounts-CLJHCDDb.js";
|
|
4
|
+
import { a as cloudConfig } from "./cloud-Da0bofJd.js";
|
|
5
|
+
import { i as storeBlob, r as recordBlobReference } from "./blobs-DjLby-uP.js";
|
|
6
6
|
//#region src/blobs/remoteUpload.ts
|
|
7
7
|
function buildRemoteUrl() {
|
|
8
8
|
const baseUrl = cloudConfig.getApiHost();
|
|
@@ -26,7 +26,7 @@ async function uploadBlobRemote(buffer, mimeType, context) {
|
|
|
26
26
|
const apiKey = cloudConfig.getApiKey();
|
|
27
27
|
if (!url || !apiKey) return null;
|
|
28
28
|
try {
|
|
29
|
-
const { fetchWithProxy } = await import("./fetch-
|
|
29
|
+
const { fetchWithProxy } = await import("./fetch-8viavNv8.js");
|
|
30
30
|
const response = await fetchWithProxy(url, {
|
|
31
31
|
method: "POST",
|
|
32
32
|
headers: {
|
|
@@ -372,4 +372,4 @@ async function recordExistingBlobReferences(value, context, location) {
|
|
|
372
372
|
//#endregion
|
|
373
373
|
export { isBlobStorageEnabled as n, shouldAttemptRemoteBlobUpload as r, extractAndStoreBinaryData as t };
|
|
374
374
|
|
|
375
|
-
//# sourceMappingURL=extractor-
|
|
375
|
+
//# sourceMappingURL=extractor-DxyiFhPk.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { S as getEnvBool, a as logger } from "./logger-
|
|
2
|
-
import { o as cloudConfig } from "./fetch-
|
|
3
|
-
import { c as isLoggedIntoCloud } from "./accounts-
|
|
4
|
-
import { i as storeBlob, r as recordBlobReference } from "./blobs-
|
|
1
|
+
import { S as getEnvBool, a as logger } from "./logger-KD8JjCRJ.js";
|
|
2
|
+
import { o as cloudConfig } from "./fetch-Y5qX_kST.js";
|
|
3
|
+
import { c as isLoggedIntoCloud } from "./accounts-bnyHT7Ju.js";
|
|
4
|
+
import { i as storeBlob, r as recordBlobReference } from "./blobs-D_gg8nbm.js";
|
|
5
5
|
//#region src/blobs/remoteUpload.ts
|
|
6
6
|
function buildRemoteUrl() {
|
|
7
7
|
const baseUrl = cloudConfig.getApiHost();
|
|
@@ -25,7 +25,7 @@ async function uploadBlobRemote(buffer, mimeType, context) {
|
|
|
25
25
|
const apiKey = cloudConfig.getApiKey();
|
|
26
26
|
if (!url || !apiKey) return null;
|
|
27
27
|
try {
|
|
28
|
-
const { fetchWithProxy } = await import("./fetch-
|
|
28
|
+
const { fetchWithProxy } = await import("./fetch-Y5qX_kST.js").then((n) => n.i);
|
|
29
29
|
const response = await fetchWithProxy(url, {
|
|
30
30
|
method: "POST",
|
|
31
31
|
headers: {
|
|
@@ -371,4 +371,4 @@ async function recordExistingBlobReferences(value, context, location) {
|
|
|
371
371
|
//#endregion
|
|
372
372
|
export { isBlobStorageEnabled as n, shouldAttemptRemoteBlobUpload as r, extractAndStoreBinaryData as t };
|
|
373
373
|
|
|
374
|
-
//# sourceMappingURL=extractor-
|
|
374
|
+
//# sourceMappingURL=extractor-YlZbUMsL.js.map
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { D as getEnvInt, N as state, O as getEnvString, T as getEnvBool, h as sanitizeUrl, o as logRequestResponse, s as logger } from "./logger-
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
2
|
+
import { D as getEnvInt, N as state, O as getEnvString, T as getEnvBool, h as sanitizeUrl, o as logRequestResponse, s as logger } from "./logger-BbY6ypFL.js";
|
|
3
|
+
import { n as VERSION } from "./version-CbpiUINz.js";
|
|
4
|
+
import { t as invariant } from "./invariant-B2Rf6avk.js";
|
|
5
|
+
import { a as cloudConfig } from "./cloud-Da0bofJd.js";
|
|
5
6
|
import path from "path";
|
|
6
7
|
import yaml from "js-yaml";
|
|
7
8
|
import * as fsPromises from "fs/promises";
|
|
@@ -16,19 +17,6 @@ const FILE_METADATA_KEY = "_promptfooFileMetadata";
|
|
|
16
17
|
* Used to distinguish human ratings from automated assertions.
|
|
17
18
|
*/
|
|
18
19
|
const HUMAN_ASSERTION_TYPE = "human";
|
|
19
|
-
//#endregion
|
|
20
|
-
//#region src/version.ts
|
|
21
|
-
/**
|
|
22
|
-
* Application version from package.json.
|
|
23
|
-
* Injected at build time, or read from npm environment in development.
|
|
24
|
-
*/
|
|
25
|
-
const VERSION = "0.121.4";
|
|
26
|
-
/**
|
|
27
|
-
* PostHog analytics key.
|
|
28
|
-
* Only populated during production builds via PROMPTFOO_POSTHOG_KEY env var.
|
|
29
|
-
* Empty string in development/test.
|
|
30
|
-
*/
|
|
31
|
-
const POSTHOG_KEY = "phc_E5n5uHnDo2eREJL1uqX1cIlbkoRby4yFWt3V94HqRRg";
|
|
32
20
|
function getShareApiBaseUrl() {
|
|
33
21
|
return getEnvString("PROMPTFOO_REMOTE_API_BASE_URL") || "https://api.promptfoo.app";
|
|
34
22
|
}
|
|
@@ -71,8 +59,9 @@ function calculateCost(modelName, config, promptTokens, completionTokens, models
|
|
|
71
59
|
if (!Number.isFinite(promptTokens) || !Number.isFinite(completionTokens) || typeof promptTokens === "undefined" || typeof completionTokens === "undefined") return;
|
|
72
60
|
const model = models.find((m) => m.id === modelName);
|
|
73
61
|
if (!model || !model.cost) return;
|
|
74
|
-
const
|
|
75
|
-
const
|
|
62
|
+
const longContextCost = model.cost.longContext && promptTokens > model.cost.longContext.threshold ? model.cost.longContext : void 0;
|
|
63
|
+
const inputCost = config.cost ?? longContextCost?.input ?? model.cost.input;
|
|
64
|
+
const outputCost = config.cost ?? longContextCost?.output ?? model.cost.output;
|
|
76
65
|
return inputCost * promptTokens + outputCost * completionTokens;
|
|
77
66
|
}
|
|
78
67
|
/**
|
|
@@ -743,6 +732,6 @@ async function fetchWithRetries(url, options = {}, timeout, maxRetries) {
|
|
|
743
732
|
throw new Error(`Request failed after ${maxRetries} retries: ${lastErrorMessage}`);
|
|
744
733
|
}
|
|
745
734
|
//#endregion
|
|
746
|
-
export { getDefaultPort as A, transformToolChoice as C, EVENTS_ENDPOINT as D, CONSENT_ENDPOINT as E,
|
|
735
|
+
export { getDefaultPort as A, transformToolChoice as C, EVENTS_ENDPOINT as D, CONSENT_ENDPOINT as E, HUMAN_ASSERTION_TYPE as F, getShareApiBaseUrl as M, getShareViewBaseUrl as N, R_ENDPOINT as O, FILE_METADATA_KEY as P, toTitleCase as S, CLOUD_PROVIDER_PREFIX as T, isOpenAIToolChoice as _, handleRateLimit as a, openaiToolsToBedrock as b, getCurrentTimestamp as c, parseRateLimitHeaders as d, parseRetryAfter as f, isOpenAIToolArray as g, calculateCost as h, fetchWithTimeout as i, getDefaultShareViewBaseUrl as j, TERMINAL_MAX_WIDTH as k, sleep as l, REQUEST_TIMEOUT_MS as m, fetchWithProxy as n, isRateLimited as o, LONG_RUNNING_MODEL_TIMEOUT_MS as p, fetchWithRetries as r, isTransientError as s, clearAgentCache as t, sleepWithAbort as u, isPromptfooSampleTarget as v, transformTools as w, parseChatPrompt as x, openaiToolChoiceToBedrock as y };
|
|
747
736
|
|
|
748
|
-
//# sourceMappingURL=fetch-
|
|
737
|
+
//# sourceMappingURL=fetch-B6ch2nU2.js.map
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
import { t as __exportAll } from "./chunk-DEq-mXcV.js";
|
|
2
2
|
import { S as getEnvBool, T as getEnvString, a as logger, i as logRequestResponse, k as state, p as sanitizeUrl, w as getEnvInt, x as getConfigDirectoryPath } from "./logger-Ct2S6Yx-.js";
|
|
3
3
|
import { t as invariant } from "./invariant-Ddh24eXh.js";
|
|
4
|
+
import { n as VERSION } from "./version-CbuBKu2U.js";
|
|
4
5
|
import * as fs$2 from "fs";
|
|
5
6
|
import * as path$1 from "path";
|
|
6
7
|
import path from "path";
|
|
7
8
|
import yaml from "js-yaml";
|
|
8
|
-
import { promisify } from "util";
|
|
9
9
|
import * as fsPromises from "fs/promises";
|
|
10
10
|
import { getProxyForUrl } from "proxy-from-env";
|
|
11
11
|
import { Agent, ProxyAgent } from "undici";
|
|
12
|
+
import { promisify } from "util";
|
|
12
13
|
import { gzip } from "zlib";
|
|
13
14
|
//#region src/providers/constants.ts
|
|
14
15
|
const FILE_METADATA_KEY = "_promptfooFileMetadata";
|
|
@@ -17,19 +18,6 @@ const FILE_METADATA_KEY = "_promptfooFileMetadata";
|
|
|
17
18
|
* Used to distinguish human ratings from automated assertions.
|
|
18
19
|
*/
|
|
19
20
|
const HUMAN_ASSERTION_TYPE = "human";
|
|
20
|
-
//#endregion
|
|
21
|
-
//#region src/version.ts
|
|
22
|
-
/**
|
|
23
|
-
* Application version from package.json.
|
|
24
|
-
* Injected at build time, or read from npm environment in development.
|
|
25
|
-
*/
|
|
26
|
-
const VERSION = "0.121.4";
|
|
27
|
-
/**
|
|
28
|
-
* PostHog analytics key.
|
|
29
|
-
* Only populated during production builds via PROMPTFOO_POSTHOG_KEY env var.
|
|
30
|
-
* Empty string in development/test.
|
|
31
|
-
*/
|
|
32
|
-
const POSTHOG_KEY = "phc_E5n5uHnDo2eREJL1uqX1cIlbkoRby4yFWt3V94HqRRg";
|
|
33
21
|
function getShareApiBaseUrl() {
|
|
34
22
|
return getEnvString("PROMPTFOO_REMOTE_API_BASE_URL") || "https://api.promptfoo.app";
|
|
35
23
|
}
|
|
@@ -45,6 +33,220 @@ const CONSENT_ENDPOINT = "https://api.promptfoo.dev/consent";
|
|
|
45
33
|
const EVENTS_ENDPOINT = "https://a.promptfoo.app";
|
|
46
34
|
const R_ENDPOINT = "https://r.promptfoo.app/";
|
|
47
35
|
//#endregion
|
|
36
|
+
//#region src/globalConfig/globalConfig.ts
|
|
37
|
+
/**
|
|
38
|
+
* Functions for manipulating the global configuration file, which lives at
|
|
39
|
+
* ~/.promptfoo/promptfoo.yaml by default.
|
|
40
|
+
*/
|
|
41
|
+
function writeGlobalConfig(config) {
|
|
42
|
+
fs$2.writeFileSync(path$1.join(getConfigDirectoryPath(true), "promptfoo.yaml"), yaml.dump(config));
|
|
43
|
+
}
|
|
44
|
+
function readGlobalConfig() {
|
|
45
|
+
const configDir = getConfigDirectoryPath();
|
|
46
|
+
const configFilePath = path$1.join(configDir, "promptfoo.yaml");
|
|
47
|
+
let globalConfig = { id: crypto.randomUUID() };
|
|
48
|
+
if (fs$2.existsSync(configFilePath)) {
|
|
49
|
+
globalConfig = yaml.load(fs$2.readFileSync(configFilePath, "utf-8")) || {};
|
|
50
|
+
if (!globalConfig?.id) {
|
|
51
|
+
globalConfig = {
|
|
52
|
+
...globalConfig,
|
|
53
|
+
id: crypto.randomUUID()
|
|
54
|
+
};
|
|
55
|
+
writeGlobalConfig(globalConfig);
|
|
56
|
+
}
|
|
57
|
+
} else {
|
|
58
|
+
if (!fs$2.existsSync(configDir)) fs$2.mkdirSync(configDir, { recursive: true });
|
|
59
|
+
fs$2.writeFileSync(configFilePath, yaml.dump(globalConfig));
|
|
60
|
+
}
|
|
61
|
+
return globalConfig;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Merges the top-level keys into existing config.
|
|
65
|
+
* @param partialConfig New keys to merge into the existing config.
|
|
66
|
+
*/
|
|
67
|
+
function writeGlobalConfigPartial(partialConfig) {
|
|
68
|
+
const updatedConfig = { ...readGlobalConfig() };
|
|
69
|
+
Object.entries(partialConfig).forEach(([key, value]) => {
|
|
70
|
+
if (value !== void 0 && value !== null) updatedConfig[key] = value;
|
|
71
|
+
else delete updatedConfig[key];
|
|
72
|
+
});
|
|
73
|
+
writeGlobalConfig(updatedConfig);
|
|
74
|
+
}
|
|
75
|
+
const API_HOST = getEnvString("API_HOST", "https://api.promptfoo.app");
|
|
76
|
+
const SHARING_CUTOFF_DATE = /* @__PURE__ */ new Date("2026-03-09T00:00:00Z");
|
|
77
|
+
var CloudConfig = class {
|
|
78
|
+
config;
|
|
79
|
+
constructor() {
|
|
80
|
+
const savedConfig = readGlobalConfig()?.cloud || {};
|
|
81
|
+
this.config = {
|
|
82
|
+
appUrl: savedConfig.appUrl || "https://www.promptfoo.app",
|
|
83
|
+
apiHost: savedConfig.apiHost,
|
|
84
|
+
apiKey: savedConfig.apiKey,
|
|
85
|
+
sharing: savedConfig.sharing,
|
|
86
|
+
currentOrganizationId: savedConfig.currentOrganizationId,
|
|
87
|
+
currentTeamId: savedConfig.currentTeamId,
|
|
88
|
+
teams: savedConfig.teams
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Returns the API key from config file or PROMPTFOO_API_KEY environment variable.
|
|
93
|
+
* Config file takes precedence over environment variable.
|
|
94
|
+
*/
|
|
95
|
+
resolveApiKey() {
|
|
96
|
+
return this.config.apiKey || process.env.PROMPTFOO_API_KEY;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Returns the API host from config file, PROMPTFOO_CLOUD_API_URL environment variable,
|
|
100
|
+
* or defaults to the standard cloud API host.
|
|
101
|
+
* Config file takes precedence over environment variable.
|
|
102
|
+
*/
|
|
103
|
+
resolveApiHost() {
|
|
104
|
+
return this.config.apiHost || process.env.PROMPTFOO_CLOUD_API_URL || API_HOST;
|
|
105
|
+
}
|
|
106
|
+
isEnabled() {
|
|
107
|
+
return !!this.resolveApiKey();
|
|
108
|
+
}
|
|
109
|
+
setApiHost(apiHost) {
|
|
110
|
+
this.config.apiHost = apiHost;
|
|
111
|
+
this.saveConfig();
|
|
112
|
+
}
|
|
113
|
+
setApiKey(apiKey) {
|
|
114
|
+
this.config.apiKey = apiKey;
|
|
115
|
+
this.saveConfig();
|
|
116
|
+
}
|
|
117
|
+
getApiKey() {
|
|
118
|
+
return this.resolveApiKey();
|
|
119
|
+
}
|
|
120
|
+
getApiHost() {
|
|
121
|
+
return this.resolveApiHost();
|
|
122
|
+
}
|
|
123
|
+
setAppUrl(appUrl) {
|
|
124
|
+
this.config.appUrl = appUrl;
|
|
125
|
+
this.saveConfig();
|
|
126
|
+
}
|
|
127
|
+
getAppUrl() {
|
|
128
|
+
return this.config.appUrl;
|
|
129
|
+
}
|
|
130
|
+
getSharing() {
|
|
131
|
+
return this.config.sharing;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Sets the sharing preference. Note: this value is only updated at authentication time
|
|
135
|
+
* (via `validateAndSetApiToken`) and may become stale if the user's license status
|
|
136
|
+
* changes between re-authentications.
|
|
137
|
+
*/
|
|
138
|
+
setSharing(sharing) {
|
|
139
|
+
this.config.sharing = sharing;
|
|
140
|
+
this.saveConfig();
|
|
141
|
+
}
|
|
142
|
+
delete() {
|
|
143
|
+
writeGlobalConfigPartial({ cloud: {} });
|
|
144
|
+
this.reload();
|
|
145
|
+
}
|
|
146
|
+
saveConfig() {
|
|
147
|
+
writeGlobalConfigPartial({ cloud: this.config });
|
|
148
|
+
this.reload();
|
|
149
|
+
}
|
|
150
|
+
reload() {
|
|
151
|
+
const savedConfig = readGlobalConfig()?.cloud || {};
|
|
152
|
+
this.config = {
|
|
153
|
+
appUrl: savedConfig.appUrl || "https://www.promptfoo.app",
|
|
154
|
+
apiHost: savedConfig.apiHost,
|
|
155
|
+
apiKey: savedConfig.apiKey,
|
|
156
|
+
sharing: savedConfig.sharing,
|
|
157
|
+
currentOrganizationId: savedConfig.currentOrganizationId,
|
|
158
|
+
currentTeamId: savedConfig.currentTeamId,
|
|
159
|
+
teams: savedConfig.teams
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
saveValidatedApiToken(token, apiHost, user, app, hasActiveLicense) {
|
|
163
|
+
this.setApiKey(token);
|
|
164
|
+
this.setApiHost(apiHost);
|
|
165
|
+
this.setAppUrl(app.url);
|
|
166
|
+
if (typeof hasActiveLicense === "boolean") {
|
|
167
|
+
const createdAt = user?.createdAt ? new Date(user.createdAt) : null;
|
|
168
|
+
const isGrandfathered = createdAt != null && createdAt < SHARING_CUTOFF_DATE;
|
|
169
|
+
this.setSharing(hasActiveLicense || isGrandfathered);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
async validateApiToken(token, apiHost) {
|
|
173
|
+
try {
|
|
174
|
+
const { fetchWithProxy } = await Promise.resolve().then(() => fetch_exports);
|
|
175
|
+
const response = await fetchWithProxy(`${apiHost}/api/v1/users/me`, { headers: { Authorization: `Bearer ${token}` } });
|
|
176
|
+
if (!response.ok) {
|
|
177
|
+
const errorMessage = await response.text();
|
|
178
|
+
logger.error(`[Cloud] Failed to validate API token: ${errorMessage}. HTTP Status: ${response.status} - ${response.statusText}.`);
|
|
179
|
+
throw new Error("Failed to validate API token: " + response.statusText);
|
|
180
|
+
}
|
|
181
|
+
const { user, organization, app, hasActiveLicense } = await response.json();
|
|
182
|
+
return {
|
|
183
|
+
user,
|
|
184
|
+
organization,
|
|
185
|
+
app,
|
|
186
|
+
...typeof hasActiveLicense === "boolean" ? { hasActiveLicense } : {}
|
|
187
|
+
};
|
|
188
|
+
} catch (err) {
|
|
189
|
+
const error = err;
|
|
190
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
191
|
+
logger.error(`[Cloud] Failed to validate API token with host ${apiHost}: ${errorMessage}`);
|
|
192
|
+
if (error.cause) logger.error(`Cause: ${error.cause}`);
|
|
193
|
+
throw error;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
async validateAndSetApiToken(token, apiHost) {
|
|
197
|
+
const { user, organization, app, hasActiveLicense } = await this.validateApiToken(token, apiHost);
|
|
198
|
+
this.saveValidatedApiToken(token, apiHost, user, app, hasActiveLicense);
|
|
199
|
+
return {
|
|
200
|
+
user,
|
|
201
|
+
organization,
|
|
202
|
+
app,
|
|
203
|
+
hasActiveLicense: typeof hasActiveLicense === "boolean" ? hasActiveLicense : false
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
getCurrentOrganizationId() {
|
|
207
|
+
return this.config.currentOrganizationId;
|
|
208
|
+
}
|
|
209
|
+
setCurrentOrganization(organizationId) {
|
|
210
|
+
this.config.currentOrganizationId = organizationId;
|
|
211
|
+
this.saveConfig();
|
|
212
|
+
}
|
|
213
|
+
getCurrentTeamId(organizationId) {
|
|
214
|
+
if (organizationId) return this.config.teams?.[organizationId]?.currentTeamId;
|
|
215
|
+
return this.config.currentTeamId;
|
|
216
|
+
}
|
|
217
|
+
setCurrentTeamId(teamId, organizationId) {
|
|
218
|
+
if (organizationId) {
|
|
219
|
+
if (!this.config.teams) this.config.teams = {};
|
|
220
|
+
if (!this.config.teams[organizationId]) this.config.teams[organizationId] = {};
|
|
221
|
+
this.config.teams[organizationId].currentTeamId = teamId;
|
|
222
|
+
} else this.config.currentTeamId = teamId;
|
|
223
|
+
this.saveConfig();
|
|
224
|
+
}
|
|
225
|
+
clearCurrentTeamId(organizationId) {
|
|
226
|
+
if (organizationId) {
|
|
227
|
+
if (this.config.teams?.[organizationId]) delete this.config.teams[organizationId].currentTeamId;
|
|
228
|
+
} else delete this.config.currentTeamId;
|
|
229
|
+
this.saveConfig();
|
|
230
|
+
}
|
|
231
|
+
cacheTeams(teams, organizationId) {
|
|
232
|
+
if (organizationId) {
|
|
233
|
+
if (!this.config.teams) this.config.teams = {};
|
|
234
|
+
if (!this.config.teams[organizationId]) this.config.teams[organizationId] = {};
|
|
235
|
+
this.config.teams[organizationId].cache = teams.map((t) => ({
|
|
236
|
+
id: t.id,
|
|
237
|
+
name: t.name,
|
|
238
|
+
slug: t.slug,
|
|
239
|
+
lastFetched: (/* @__PURE__ */ new Date()).toISOString()
|
|
240
|
+
}));
|
|
241
|
+
}
|
|
242
|
+
this.saveConfig();
|
|
243
|
+
}
|
|
244
|
+
getCachedTeams(organizationId) {
|
|
245
|
+
if (organizationId) return this.config.teams?.[organizationId]?.cache;
|
|
246
|
+
}
|
|
247
|
+
};
|
|
248
|
+
const cloudConfig = new CloudConfig();
|
|
249
|
+
//#endregion
|
|
48
250
|
//#region src/providers/shared.ts
|
|
49
251
|
/**
|
|
50
252
|
* The default timeout for API requests in milliseconds.
|
|
@@ -69,8 +271,9 @@ function calculateCost(modelName, config, promptTokens, completionTokens, models
|
|
|
69
271
|
if (!Number.isFinite(promptTokens) || !Number.isFinite(completionTokens) || typeof promptTokens === "undefined" || typeof completionTokens === "undefined") return;
|
|
70
272
|
const model = models.find((m) => m.id === modelName);
|
|
71
273
|
if (!model || !model.cost) return;
|
|
72
|
-
const
|
|
73
|
-
const
|
|
274
|
+
const longContextCost = model.cost.longContext && promptTokens > model.cost.longContext.threshold ? model.cost.longContext : void 0;
|
|
275
|
+
const inputCost = config.cost ?? longContextCost?.input ?? model.cost.input;
|
|
276
|
+
const outputCost = config.cost ?? longContextCost?.output ?? model.cost.output;
|
|
74
277
|
return inputCost * promptTokens + outputCost * completionTokens;
|
|
75
278
|
}
|
|
76
279
|
/**
|
|
@@ -438,220 +641,6 @@ function getCurrentTimestamp() {
|
|
|
438
641
|
}
|
|
439
642
|
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
440
643
|
//#endregion
|
|
441
|
-
//#region src/globalConfig/globalConfig.ts
|
|
442
|
-
/**
|
|
443
|
-
* Functions for manipulating the global configuration file, which lives at
|
|
444
|
-
* ~/.promptfoo/promptfoo.yaml by default.
|
|
445
|
-
*/
|
|
446
|
-
function writeGlobalConfig(config) {
|
|
447
|
-
fs$2.writeFileSync(path$1.join(getConfigDirectoryPath(true), "promptfoo.yaml"), yaml.dump(config));
|
|
448
|
-
}
|
|
449
|
-
function readGlobalConfig() {
|
|
450
|
-
const configDir = getConfigDirectoryPath();
|
|
451
|
-
const configFilePath = path$1.join(configDir, "promptfoo.yaml");
|
|
452
|
-
let globalConfig = { id: crypto.randomUUID() };
|
|
453
|
-
if (fs$2.existsSync(configFilePath)) {
|
|
454
|
-
globalConfig = yaml.load(fs$2.readFileSync(configFilePath, "utf-8")) || {};
|
|
455
|
-
if (!globalConfig?.id) {
|
|
456
|
-
globalConfig = {
|
|
457
|
-
...globalConfig,
|
|
458
|
-
id: crypto.randomUUID()
|
|
459
|
-
};
|
|
460
|
-
writeGlobalConfig(globalConfig);
|
|
461
|
-
}
|
|
462
|
-
} else {
|
|
463
|
-
if (!fs$2.existsSync(configDir)) fs$2.mkdirSync(configDir, { recursive: true });
|
|
464
|
-
fs$2.writeFileSync(configFilePath, yaml.dump(globalConfig));
|
|
465
|
-
}
|
|
466
|
-
return globalConfig;
|
|
467
|
-
}
|
|
468
|
-
/**
|
|
469
|
-
* Merges the top-level keys into existing config.
|
|
470
|
-
* @param partialConfig New keys to merge into the existing config.
|
|
471
|
-
*/
|
|
472
|
-
function writeGlobalConfigPartial(partialConfig) {
|
|
473
|
-
const updatedConfig = { ...readGlobalConfig() };
|
|
474
|
-
Object.entries(partialConfig).forEach(([key, value]) => {
|
|
475
|
-
if (value !== void 0 && value !== null) updatedConfig[key] = value;
|
|
476
|
-
else delete updatedConfig[key];
|
|
477
|
-
});
|
|
478
|
-
writeGlobalConfig(updatedConfig);
|
|
479
|
-
}
|
|
480
|
-
const API_HOST = getEnvString("API_HOST", "https://api.promptfoo.app");
|
|
481
|
-
const SHARING_CUTOFF_DATE = /* @__PURE__ */ new Date("2026-03-09T00:00:00Z");
|
|
482
|
-
var CloudConfig = class {
|
|
483
|
-
config;
|
|
484
|
-
constructor() {
|
|
485
|
-
const savedConfig = readGlobalConfig()?.cloud || {};
|
|
486
|
-
this.config = {
|
|
487
|
-
appUrl: savedConfig.appUrl || "https://www.promptfoo.app",
|
|
488
|
-
apiHost: savedConfig.apiHost,
|
|
489
|
-
apiKey: savedConfig.apiKey,
|
|
490
|
-
sharing: savedConfig.sharing,
|
|
491
|
-
currentOrganizationId: savedConfig.currentOrganizationId,
|
|
492
|
-
currentTeamId: savedConfig.currentTeamId,
|
|
493
|
-
teams: savedConfig.teams
|
|
494
|
-
};
|
|
495
|
-
}
|
|
496
|
-
/**
|
|
497
|
-
* Returns the API key from config file or PROMPTFOO_API_KEY environment variable.
|
|
498
|
-
* Config file takes precedence over environment variable.
|
|
499
|
-
*/
|
|
500
|
-
resolveApiKey() {
|
|
501
|
-
return this.config.apiKey || process.env.PROMPTFOO_API_KEY;
|
|
502
|
-
}
|
|
503
|
-
/**
|
|
504
|
-
* Returns the API host from config file, PROMPTFOO_CLOUD_API_URL environment variable,
|
|
505
|
-
* or defaults to the standard cloud API host.
|
|
506
|
-
* Config file takes precedence over environment variable.
|
|
507
|
-
*/
|
|
508
|
-
resolveApiHost() {
|
|
509
|
-
return this.config.apiHost || process.env.PROMPTFOO_CLOUD_API_URL || API_HOST;
|
|
510
|
-
}
|
|
511
|
-
isEnabled() {
|
|
512
|
-
return !!this.resolveApiKey();
|
|
513
|
-
}
|
|
514
|
-
setApiHost(apiHost) {
|
|
515
|
-
this.config.apiHost = apiHost;
|
|
516
|
-
this.saveConfig();
|
|
517
|
-
}
|
|
518
|
-
setApiKey(apiKey) {
|
|
519
|
-
this.config.apiKey = apiKey;
|
|
520
|
-
this.saveConfig();
|
|
521
|
-
}
|
|
522
|
-
getApiKey() {
|
|
523
|
-
return this.resolveApiKey();
|
|
524
|
-
}
|
|
525
|
-
getApiHost() {
|
|
526
|
-
return this.resolveApiHost();
|
|
527
|
-
}
|
|
528
|
-
setAppUrl(appUrl) {
|
|
529
|
-
this.config.appUrl = appUrl;
|
|
530
|
-
this.saveConfig();
|
|
531
|
-
}
|
|
532
|
-
getAppUrl() {
|
|
533
|
-
return this.config.appUrl;
|
|
534
|
-
}
|
|
535
|
-
getSharing() {
|
|
536
|
-
return this.config.sharing;
|
|
537
|
-
}
|
|
538
|
-
/**
|
|
539
|
-
* Sets the sharing preference. Note: this value is only updated at authentication time
|
|
540
|
-
* (via `validateAndSetApiToken`) and may become stale if the user's license status
|
|
541
|
-
* changes between re-authentications.
|
|
542
|
-
*/
|
|
543
|
-
setSharing(sharing) {
|
|
544
|
-
this.config.sharing = sharing;
|
|
545
|
-
this.saveConfig();
|
|
546
|
-
}
|
|
547
|
-
delete() {
|
|
548
|
-
writeGlobalConfigPartial({ cloud: {} });
|
|
549
|
-
this.reload();
|
|
550
|
-
}
|
|
551
|
-
saveConfig() {
|
|
552
|
-
writeGlobalConfigPartial({ cloud: this.config });
|
|
553
|
-
this.reload();
|
|
554
|
-
}
|
|
555
|
-
reload() {
|
|
556
|
-
const savedConfig = readGlobalConfig()?.cloud || {};
|
|
557
|
-
this.config = {
|
|
558
|
-
appUrl: savedConfig.appUrl || "https://www.promptfoo.app",
|
|
559
|
-
apiHost: savedConfig.apiHost,
|
|
560
|
-
apiKey: savedConfig.apiKey,
|
|
561
|
-
sharing: savedConfig.sharing,
|
|
562
|
-
currentOrganizationId: savedConfig.currentOrganizationId,
|
|
563
|
-
currentTeamId: savedConfig.currentTeamId,
|
|
564
|
-
teams: savedConfig.teams
|
|
565
|
-
};
|
|
566
|
-
}
|
|
567
|
-
saveValidatedApiToken(token, apiHost, user, app, hasActiveLicense) {
|
|
568
|
-
this.setApiKey(token);
|
|
569
|
-
this.setApiHost(apiHost);
|
|
570
|
-
this.setAppUrl(app.url);
|
|
571
|
-
if (typeof hasActiveLicense === "boolean") {
|
|
572
|
-
const createdAt = user?.createdAt ? new Date(user.createdAt) : null;
|
|
573
|
-
const isGrandfathered = createdAt != null && createdAt < SHARING_CUTOFF_DATE;
|
|
574
|
-
this.setSharing(hasActiveLicense || isGrandfathered);
|
|
575
|
-
}
|
|
576
|
-
}
|
|
577
|
-
async validateApiToken(token, apiHost) {
|
|
578
|
-
try {
|
|
579
|
-
const { fetchWithProxy } = await Promise.resolve().then(() => fetch_exports);
|
|
580
|
-
const response = await fetchWithProxy(`${apiHost}/api/v1/users/me`, { headers: { Authorization: `Bearer ${token}` } });
|
|
581
|
-
if (!response.ok) {
|
|
582
|
-
const errorMessage = await response.text();
|
|
583
|
-
logger.error(`[Cloud] Failed to validate API token: ${errorMessage}. HTTP Status: ${response.status} - ${response.statusText}.`);
|
|
584
|
-
throw new Error("Failed to validate API token: " + response.statusText);
|
|
585
|
-
}
|
|
586
|
-
const { user, organization, app, hasActiveLicense } = await response.json();
|
|
587
|
-
return {
|
|
588
|
-
user,
|
|
589
|
-
organization,
|
|
590
|
-
app,
|
|
591
|
-
...typeof hasActiveLicense === "boolean" ? { hasActiveLicense } : {}
|
|
592
|
-
};
|
|
593
|
-
} catch (err) {
|
|
594
|
-
const error = err;
|
|
595
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
596
|
-
logger.error(`[Cloud] Failed to validate API token with host ${apiHost}: ${errorMessage}`);
|
|
597
|
-
if (error.cause) logger.error(`Cause: ${error.cause}`);
|
|
598
|
-
throw error;
|
|
599
|
-
}
|
|
600
|
-
}
|
|
601
|
-
async validateAndSetApiToken(token, apiHost) {
|
|
602
|
-
const { user, organization, app, hasActiveLicense } = await this.validateApiToken(token, apiHost);
|
|
603
|
-
this.saveValidatedApiToken(token, apiHost, user, app, hasActiveLicense);
|
|
604
|
-
return {
|
|
605
|
-
user,
|
|
606
|
-
organization,
|
|
607
|
-
app,
|
|
608
|
-
hasActiveLicense: typeof hasActiveLicense === "boolean" ? hasActiveLicense : false
|
|
609
|
-
};
|
|
610
|
-
}
|
|
611
|
-
getCurrentOrganizationId() {
|
|
612
|
-
return this.config.currentOrganizationId;
|
|
613
|
-
}
|
|
614
|
-
setCurrentOrganization(organizationId) {
|
|
615
|
-
this.config.currentOrganizationId = organizationId;
|
|
616
|
-
this.saveConfig();
|
|
617
|
-
}
|
|
618
|
-
getCurrentTeamId(organizationId) {
|
|
619
|
-
if (organizationId) return this.config.teams?.[organizationId]?.currentTeamId;
|
|
620
|
-
return this.config.currentTeamId;
|
|
621
|
-
}
|
|
622
|
-
setCurrentTeamId(teamId, organizationId) {
|
|
623
|
-
if (organizationId) {
|
|
624
|
-
if (!this.config.teams) this.config.teams = {};
|
|
625
|
-
if (!this.config.teams[organizationId]) this.config.teams[organizationId] = {};
|
|
626
|
-
this.config.teams[organizationId].currentTeamId = teamId;
|
|
627
|
-
} else this.config.currentTeamId = teamId;
|
|
628
|
-
this.saveConfig();
|
|
629
|
-
}
|
|
630
|
-
clearCurrentTeamId(organizationId) {
|
|
631
|
-
if (organizationId) {
|
|
632
|
-
if (this.config.teams?.[organizationId]) delete this.config.teams[organizationId].currentTeamId;
|
|
633
|
-
} else delete this.config.currentTeamId;
|
|
634
|
-
this.saveConfig();
|
|
635
|
-
}
|
|
636
|
-
cacheTeams(teams, organizationId) {
|
|
637
|
-
if (organizationId) {
|
|
638
|
-
if (!this.config.teams) this.config.teams = {};
|
|
639
|
-
if (!this.config.teams[organizationId]) this.config.teams[organizationId] = {};
|
|
640
|
-
this.config.teams[organizationId].cache = teams.map((t) => ({
|
|
641
|
-
id: t.id,
|
|
642
|
-
name: t.name,
|
|
643
|
-
slug: t.slug,
|
|
644
|
-
lastFetched: (/* @__PURE__ */ new Date()).toISOString()
|
|
645
|
-
}));
|
|
646
|
-
}
|
|
647
|
-
this.saveConfig();
|
|
648
|
-
}
|
|
649
|
-
getCachedTeams(organizationId) {
|
|
650
|
-
if (organizationId) return this.config.teams?.[organizationId]?.cache;
|
|
651
|
-
}
|
|
652
|
-
};
|
|
653
|
-
const cloudConfig = new CloudConfig();
|
|
654
|
-
//#endregion
|
|
655
644
|
//#region src/util/fetch/monkeyPatchFetch.ts
|
|
656
645
|
const gzipAsync = promisify(gzip);
|
|
657
646
|
function isConnectionError(error) {
|
|
@@ -935,6 +924,6 @@ async function fetchWithRetries(url, options = {}, timeout, maxRetries) {
|
|
|
935
924
|
throw new Error(`Request failed after ${maxRetries} retries: ${lastErrorMessage}`);
|
|
936
925
|
}
|
|
937
926
|
//#endregion
|
|
938
|
-
export { TERMINAL_MAX_WIDTH as A,
|
|
927
|
+
export { TERMINAL_MAX_WIDTH as A, readGlobalConfig as C, CONSENT_ENDPOINT as D, CLOUD_PROVIDER_PREFIX as E, HUMAN_ASSERTION_TYPE as F, getShareApiBaseUrl as M, getShareViewBaseUrl as N, EVENTS_ENDPOINT as O, FILE_METADATA_KEY as P, cloudConfig as S, writeGlobalConfigPartial as T, parseChatPrompt as _, getCurrentTimestamp as a, transformTools as b, parseRetryAfter as c, calculateCost as d, isOpenAIToolArray as f, openaiToolsToBedrock as g, openaiToolChoiceToBedrock as h, fetch_exports as i, getDefaultShareViewBaseUrl as j, R_ENDPOINT as k, LONG_RUNNING_MODEL_TIMEOUT_MS as l, isPromptfooSampleTarget as m, fetchWithRetries as n, sleep as o, isOpenAIToolChoice as p, fetchWithTimeout as r, parseRateLimitHeaders as s, fetchWithProxy as t, REQUEST_TIMEOUT_MS as u, toTitleCase as v, writeGlobalConfig as w, CloudConfig as x, transformToolChoice as y };
|
|
939
928
|
|
|
940
|
-
//# sourceMappingURL=fetch-
|
|
929
|
+
//# sourceMappingURL=fetch-D9xxyC1p.js.map
|