promptfoo 0.121.3 → 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/README.md +1 -1
- package/dist/src/{ListApp-Du7YVwj5.js → ListApp-BRUsT43Y.js} +1 -1
- package/dist/src/{accounts-BPyfpSeU.cjs → accounts-BIFntVWB.cjs} +5 -5
- package/dist/src/{accounts-CFLK3mnD.js → accounts-CLJHCDDb.js} +6 -6
- package/dist/src/{accounts-B2XmGjty.js → accounts-CaLNYnf7.js} +5 -5
- package/dist/src/{accounts-Xatc0RYb.js → accounts-bnyHT7Ju.js} +5 -5
- package/dist/src/{agentic-utils-36epdqwB.js → agentic-utils-B5krlibj.js} +3 -3
- package/dist/src/{agentic-utils-DIYAAYE7.js → agentic-utils-Ba67xmgs.js} +3 -3
- package/dist/src/{agentic-utils-D8yXo5Lm.js → agentic-utils-BclbiXiq.js} +4 -4
- package/dist/src/{agentic-utils-DAVsChuB.cjs → agentic-utils-D2x0wGhB.cjs} +3 -3
- package/dist/src/{agents-CLQ-P15P.js → agents-BGqaTDnr.js} +5 -7
- package/dist/src/{agents-wg3ohknq.js → agents-BV9yFpXX.js} +6 -7
- package/dist/src/{agents-CgBniSlI.js → agents-BYdMl1UE.js} +5 -9
- package/dist/src/{agents-Bqgfdokm.js → agents-DhxWMCtH.js} +35 -14
- package/dist/src/{agents-BBWxKSM0.cjs → agents-DiWmQYH9.cjs} +5 -7
- package/dist/src/{agents-CAYbM7qD.cjs → agents-WULPVjbH.cjs} +34 -12
- package/dist/src/{agents-DSSTV4bv.js → agents-emVcx3yh.js} +35 -13
- package/dist/src/{agents-BBVJCIYr.js → agents-n6vPqV3i.js} +35 -13
- package/dist/src/{aimlapi-BwGC1TtS.js → aimlapi-BxqK9HF_.js} +8 -14
- package/dist/src/{aimlapi-Bv8Fmc-b.cjs → aimlapi-BzLjZI_m.cjs} +8 -15
- package/dist/src/{aimlapi-MgSLdvy7.js → aimlapi-DR4pgeiC.js} +7 -14
- package/dist/src/{aimlapi-DaC3qZ-o.js → aimlapi-uPGp0Zdo.js} +7 -16
- package/dist/src/app/app/tsconfig.app.tsbuildinfo +1 -0
- 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-Cli2yAXv.css +1 -0
- package/dist/src/app/assets/rolldown-runtime-COnpUsM8.js +1 -0
- package/dist/src/app/assets/scroll-timeline-D9IT_e8Z.js +1 -0
- package/dist/src/app/assets/sync-IjzpWrOE.js +4 -0
- package/dist/src/app/assets/vendor-charts-BNdH8TCw.js +36 -0
- package/dist/src/app/assets/vendor-markdown-Ch00wnNI.js +29 -0
- package/dist/src/app/assets/vendor-react-CVvmk1UB.js +9 -0
- package/dist/src/app/assets/vendor-utils-BnEYbx2Q.js +37 -0
- package/dist/src/app/index.html +32 -7
- package/dist/src/{audio-Bn44pQxv.js → audio-BvpTOArF.js} +4 -4
- package/dist/src/{audio-DVFjQ67_.cjs → audio-C0vDeS0j.cjs} +4 -4
- package/dist/src/{audio-DjU9GswO.js → audio-CScmnmEB.js} +4 -5
- package/dist/src/{audio-DDA5WHdx.js → audio-Da8U9IS5.js} +4 -4
- package/dist/src/{base-CKjwebIH.js → base-BOMaNEes.js} +3 -3
- package/dist/src/{base-CqzQ4K8j.js → base-BTux96b1.js} +3 -3
- package/dist/src/{base-BboXIF_0.cjs → base-Tw6uhH8K.cjs} +3 -3
- package/dist/src/{base-Cz2ZC_iA.js → base-dYsl2hmL.js} +3 -3
- package/dist/src/{blobs-C6j0bvFz.cjs → blobs-B95F_7vE.cjs} +3 -3
- package/dist/src/{blobs-DXTl6J3H.js → blobs-BW4U31ue.js} +3 -3
- package/dist/src/{blobs-BUWmKWzo.js → blobs-D_gg8nbm.js} +4 -4
- package/dist/src/{blobs-B1JriOyi.js → blobs-DjLby-uP.js} +4 -4
- package/dist/src/cache-BI5BY7ey.js +280 -0
- package/dist/src/cache-BRkhlH3k.cjs +3 -0
- package/dist/src/cache-BlC6aeJ0.js +3 -0
- package/dist/src/cache-Bzttsk0X.js +310 -0
- package/dist/src/cache-Cr-qWIbP.js +310 -0
- package/dist/src/cache-DGg-yTZG.cjs +376 -0
- package/dist/src/{chat-BEwdgGEg.js → chat-BLOdH60v.js} +63 -37
- package/dist/src/{chat-B0iaWhoh.js → chat-Cx_LkwvZ.js} +63 -37
- package/dist/src/{chat-DK1U-eZ-.js → chat-D9nudO9b.js} +5 -14
- package/dist/src/{chat-pxmiVpWe.js → chat-DChSH_Es.js} +63 -37
- package/dist/src/{chat-B-52XYI1.js → chat-DG2LkwLq.js} +3 -13
- package/dist/src/{chat-BtIKkLKx.cjs → chat-DH97tVV9.cjs} +3 -13
- package/dist/src/{chat-BE0qTA8e.js → chat-aMQZw6R7.js} +4 -16
- package/dist/src/{chat-CM8qWR3_.cjs → chat-vYqqv1gP.cjs} +64 -38
- package/dist/src/{chatkit-_8eJqKcD.js → chatkit-B8X34dQc.js} +4 -4
- package/dist/src/{chatkit-BYGQlHlV.js → chatkit-BXu42Qwt.js} +4 -4
- package/dist/src/{chatkit-a2D6mY6s.js → chatkit-CbMRoeYw.js} +4 -4
- package/dist/src/{chatkit-Cx174XI3.cjs → chatkit-D44VyUyB.cjs} +4 -4
- package/dist/src/{claude-agent-sdk-8ddRp1L2.cjs → claude-agent-sdk-BRq0bbIK.cjs} +23 -18
- package/dist/src/{claude-agent-sdk-CMjh4LFH.js → claude-agent-sdk-BjriSVRZ.js} +20 -15
- package/dist/src/{claude-agent-sdk-HgbFioFw.js → claude-agent-sdk-BzNZeZ0N.js} +20 -15
- package/dist/src/{claude-agent-sdk-Bq5EArsX.js → claude-agent-sdk-DYv_AJ8u.js} +21 -17
- package/dist/src/cloud-CoD5OacT.js +3 -0
- package/dist/src/{cloud-z8KZpUoa.js → cloud-Da0bofJd.js} +25 -13
- package/dist/src/{cloudflare-ai-Bbp26N0L.js → cloudflare-ai-CXC4b1EU.js} +5 -14
- package/dist/src/{cloudflare-ai-BGyXlpXJ.js → cloudflare-ai-CyBoIs1Q.js} +7 -15
- package/dist/src/{cloudflare-ai-DdKP9TKT.js → cloudflare-ai-DGOwgexC.js} +6 -17
- package/dist/src/{cloudflare-ai-C62x6MQG.cjs → cloudflare-ai-DJv5qnyb.cjs} +6 -15
- package/dist/src/{cloudflare-gateway-DXhtXDRb.js → cloudflare-gateway-1sAoOyft.js} +6 -16
- package/dist/src/{cloudflare-gateway-D-e9i1Sn.js → cloudflare-gateway-D-dnkzCF.js} +5 -18
- package/dist/src/{cloudflare-gateway-Dx36ftqF.cjs → cloudflare-gateway-DKVjkDav.cjs} +4 -15
- package/dist/src/{cloudflare-gateway-BwAaUgeW.js → cloudflare-gateway-TJkVrZlB.js} +4 -15
- 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-Bd8UbO9q.cjs +1172 -0
- package/dist/src/codex-sdk-BgEFQ70r.js +1164 -0
- package/dist/src/codex-sdk-Bzb_TqX9.js +1165 -0
- package/dist/src/codex-sdk-Danroptg.cjs +2 -0
- package/dist/src/codex-sdk-DfvDTN33.js +1165 -0
- package/dist/src/{cometapi-BDyV-NNm.js → cometapi-B5ImDlSm.js} +9 -15
- package/dist/src/{cometapi-C3hOlM7-.cjs → cometapi-BgAkuYCw.cjs} +9 -16
- package/dist/src/{cometapi-hhL4TAh3.js → cometapi-CC7hWxmX.js} +8 -15
- package/dist/src/{cometapi-sp7sJpBD.js → cometapi-CCbpHkuF.js} +8 -17
- package/dist/src/{completion-DoYy49ti.js → completion-2iuYVxwi.js} +8 -57
- package/dist/src/{completion-BCimtq-h.js → completion-CrD6MQ93.js} +8 -57
- package/dist/src/{completion-DlXUhj5c.cjs → completion-DtQ72Bm3.cjs} +7 -62
- package/dist/src/{completion-DCjv7RZ3.js → completion-Vq_ad618.js} +8 -57
- package/dist/src/{createHash-CTQmL3G2.js → createHash-4gFQpDDv.js} +3 -3
- package/dist/src/{createHash-Da8fMwqB.js → createHash-DPpsZgFF.js} +3 -3
- package/dist/src/{createHash-DmPQkvBh.js → createHash-Un4Q_huE.js} +3 -3
- package/dist/src/{createHash-BYwImsYv.cjs → createHash-VvBIc-AW.cjs} +4 -4
- package/dist/src/{docker-CxCkwMzc.js → docker--3qzPa-6.js} +6 -14
- package/dist/src/{docker-Cqj2-QVi.cjs → docker-D3AY-5F5.cjs} +7 -15
- package/dist/src/{docker-FeBni2dw.js → docker-DCsCDvwM.js} +7 -14
- package/dist/src/{docker-DpguQj-w.js → docker-Dorv4_Dg.js} +6 -16
- package/dist/src/embedding-BXhN5lCH.cjs +63 -0
- package/dist/src/embedding-ChS1ivFS.js +58 -0
- package/dist/src/embedding-DNRvZwRN.js +59 -0
- package/dist/src/embedding-D_bI4NDq.js +58 -0
- package/dist/src/entrypoint.js +69 -6
- package/dist/src/{errors-P6ll7XSJ.js → errors-DFHe4L-n.js} +1 -1
- package/dist/src/{esm-SUNIX1x3.js → esm-B6whoAcf.js} +15 -6
- package/dist/src/{esm-CKWP3u_P.js → esm-BRkfNsYs.js} +16 -7
- package/dist/src/{esm-7UIl0pPM.js → esm-BX8fwlAO.js} +27 -18
- package/dist/src/{esm-CipptfDu.cjs → esm-B_rGuPTo.cjs} +15 -6
- package/dist/src/eval-BQPLBJbw.js +3 -0
- package/dist/src/{eval-BTqTn7lb.js → eval-DJ_4A-tr.js} +50 -21
- package/dist/src/evalResult-BBJAHAtw.cjs +2 -0
- package/dist/src/evalResult-BBK58h2B.js +3 -0
- package/dist/src/{evalResult-DpARzUCb.cjs → evalResult-Cx-8OWkb.cjs} +29 -11
- package/dist/src/{evalResult-DUDShQrm.js → evalResult-D6P5I5il.js} +29 -11
- package/dist/src/{evalResult-BkIhRdTe.js → evalResult-pSvGWFMo.js} +29 -11
- package/dist/src/evalResult-spPqh1G_.js +2 -0
- package/dist/src/{evaluator-BcvOGaam.js → evaluator-D-UIbbYq.js} +3975 -2152
- package/dist/src/evaluator-DgLKaZk8.js +3 -0
- package/dist/src/{extractor-D_wd8jxt.js → extractor-BM3jRERL.js} +6 -6
- package/dist/src/{extractor-DG3sSfXE.cjs → extractor-Dxr2J_wK.cjs} +6 -6
- package/dist/src/{extractor-CAZ2G3Kh.js → extractor-DxyiFhPk.js} +6 -6
- package/dist/src/{extractor-C8XwivI9.js → extractor-YlZbUMsL.js} +6 -6
- package/dist/src/fetch-8viavNv8.js +3 -0
- package/dist/src/{fetch-DoVRJZhJ.js → fetch-B6ch2nU2.js} +199 -60
- package/dist/src/{fetch-CVAtKnI3.js → fetch-D9xxyC1p.js} +404 -252
- package/dist/src/{fetch-BnR9wSnm.cjs → fetch-NuqXW1Xb.cjs} +415 -263
- package/dist/src/{fetch-BiYv2BZc.js → fetch-Y5qX_kST.js} +222 -70
- package/dist/src/{fileExtensions-LcDYkU4v.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-Ds-foDzt.js → fileExtensions-DysCsxNG.js} +1 -1
- package/dist/src/{formatDuration-DgBVMN65.js → formatDuration-Ch4A7G3o.js} +1 -1
- package/dist/src/{genaiTracer-BfxrvSUb.cjs → genaiTracer-BokHC-MW.cjs} +7 -3
- package/dist/src/{genaiTracer-C1rxGO8Q.js → genaiTracer-C3ZPQU60.js} +6 -2
- package/dist/src/{genaiTracer-70Z8BIuV.js → genaiTracer-CFny3gOy.js} +6 -2
- package/dist/src/{genaiTracer-D3fD9dNV.js → genaiTracer-DxODqT9e.js} +6 -2
- package/dist/src/golang/wrapper.go +1 -1
- package/dist/src/{graders-DG7mhg-b.js → graders-BoUqsCEm.js} +7402 -5699
- package/dist/src/{graders-BElhu9ZY.cjs → graders-Bw1wk_21.cjs} +5220 -3437
- 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-RjHF8VfG.js → graders-CgPn32yp.js} +7400 -5697
- package/dist/src/{graders-BXAJ0sbS.js → graders-CwrbifOo.js} +6136 -4433
- package/dist/src/graders-DS42d3ZG.js +2 -0
- package/dist/src/{image-6WQXK8m8.js → image-BeWaInPF.js} +4 -4
- package/dist/src/{image-PoF6DN3x.js → image-BmilRNqO.js} +8 -8
- package/dist/src/{image--F58eEIn.cjs → image-CxJoa3aW.cjs} +8 -8
- package/dist/src/{image-fza3zuKs.cjs → image-D10dNAav.cjs} +4 -4
- package/dist/src/{image-DO0RYnjH.js → image-Dr_3I3nK.js} +4 -5
- package/dist/src/{image-B8b6f36E.js → image-DsGRlkh7.js} +8 -8
- package/dist/src/{image-CoxZp9PZ.js → image-a_SGUobh.js} +8 -8
- package/dist/src/{image-xNbw5ph2.js → image-qjO6FWPs.js} +4 -4
- package/dist/src/index.cjs +4835 -2582
- package/dist/src/index.d.cts +2782 -31
- package/dist/src/index.d.ts +2783 -32
- package/dist/src/index.js +4817 -2564
- package/dist/src/{interactiveCheck-BnMYOjMu.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-Bi7CmDbx.js → knowledgeBase-BBETc5-S.js} +6 -8
- package/dist/src/{knowledgeBase-DqrLX8fy.cjs → knowledgeBase-C8qOo26M.cjs} +6 -8
- package/dist/src/{knowledgeBase-DFRXPZl_.js → knowledgeBase-CzAi2rUI.js} +7 -8
- package/dist/src/{knowledgeBase-Ce3ofVan.js → knowledgeBase-Dr3Kib7F.js} +6 -10
- package/dist/src/{litellm-CKiAxnoM.js → litellm-BLSiANhk.js} +6 -14
- package/dist/src/{litellm-CnHI69aj.cjs → litellm-CaUmV7Mk.cjs} +6 -15
- package/dist/src/{litellm-Tc294Jhj.js → litellm-DQGo_juI.js} +5 -14
- package/dist/src/{litellm-Bo2gQXpo.js → litellm-DRc4qWfc.js} +5 -16
- package/dist/src/{logger-BcJBzSSA.js → logger-BbY6ypFL.js} +41 -12
- package/dist/src/{logger-D5iKBpu_.cjs → logger-COuQb2xB.cjs} +51 -10
- package/dist/src/{logger-DO8_zM18.js → logger-Ct2S6Yx-.js} +40 -11
- package/dist/src/{logger-BnkjG2jt.js → logger-KD8JjCRJ.js} +41 -12
- package/dist/src/{luma-ray-C9q8rdQe.js → luma-ray-B-tNZzqW.js} +6 -10
- package/dist/src/{luma-ray-DP0QA9qn.js → luma-ray-CtS3OlGq.js} +6 -10
- package/dist/src/{luma-ray-0ehMPt5N.js → luma-ray-PJJgUjOc.js} +6 -11
- package/dist/src/{luma-ray-m9Ku2meV.cjs → luma-ray-if-Ml4R9.cjs} +6 -10
- package/dist/src/main.d.ts +1 -26
- package/dist/src/main.js +1188 -679
- package/dist/src/messages-B9dSjrNf.js +544 -0
- package/dist/src/messages-BnsVHUnm.cjs +558 -0
- package/dist/src/messages-CI69Lasb.js +543 -0
- package/dist/src/messages-CewuNcNS.js +543 -0
- package/dist/src/{meteor-DLZZ3osF.cjs → meteor-BBGcGeCa.cjs} +1 -1
- package/dist/src/{meteor-DUiCJRC-.js → meteor-BKTM-7KS.js} +1 -1
- package/dist/src/{meteor-44VjEACX.js → meteor-CeGo0Lu2.js} +2 -2
- package/dist/src/{meteor-D-SotUw9.js → meteor-Wc_aUVvu.js} +2 -2
- package/dist/src/{modelslab-B5J-ZM5c.js → modelslab-BCLOtfek.js} +8 -10
- package/dist/src/{modelslab-IQbNg-r7.cjs → modelslab-BkapYJhh.cjs} +7 -10
- package/dist/src/{modelslab-BTOT8FUO.js → modelslab-D73OnKSx.js} +7 -10
- package/dist/src/{modelslab-BI458moT.js → modelslab-zpz9JcK0.js} +7 -12
- package/dist/src/{nova-reel-BZ9y-Y5s.js → nova-reel-B8F_TK5w.js} +7 -10
- package/dist/src/{nova-reel-Xw1SXLpg.js → nova-reel-Bx0NFV2f.js} +6 -10
- package/dist/src/{nova-reel-DEeQlnOJ.js → nova-reel-CNGJTLtG.js} +6 -12
- package/dist/src/{nova-reel-CE5etkv9.cjs → nova-reel-DkT7tnoB.cjs} +6 -10
- package/dist/src/{nova-sonic-Ogqf-csn.js → nova-sonic-BaXRN1cr.js} +5 -7
- package/dist/src/{nova-sonic-DXTLpi-r.js → nova-sonic-BeTRaFOh.js} +4 -7
- package/dist/src/{nova-sonic-DWswpN1E.js → nova-sonic-CL7Zqv0G.js} +4 -9
- package/dist/src/{nova-sonic-N0yCm0vb.cjs → nova-sonic-YT426juD.cjs} +4 -7
- package/dist/src/{openai-BcB5KlTk.js → openai-BMHD2Huo.js} +6 -3
- package/dist/src/{openai-BMcwgD5C.js → openai-BT-JvDse.js} +6 -3
- package/dist/src/{openai-CoxGAQwn.cjs → openai-Cy1XLs0c.cjs} +6 -3
- package/dist/src/{openai-D6wITiVn.js → openai-D4fxGvRx.js} +6 -3
- package/dist/src/openclaw-Bq7RVR3k.js +1200 -0
- package/dist/src/openclaw-DA8U4DsD.js +1201 -0
- package/dist/src/openclaw-DObVgpjC.js +1200 -0
- package/dist/src/openclaw-DUBZP3GL.cjs +1206 -0
- package/dist/src/{opencode-sdk-CHCs7dEb.js → opencode-sdk-BB40Wir1.js} +6 -8
- package/dist/src/{opencode-sdk-DDxj4QqH.js → opencode-sdk-BM1UAIv1.js} +6 -8
- package/dist/src/{opencode-sdk-WWJhnbKr.cjs → opencode-sdk-CeqiOcOU.cjs} +7 -9
- package/dist/src/{opencode-sdk-C71Z0ehR.js → opencode-sdk-ChdK7F7z.js} +6 -9
- package/dist/src/{otlpReceiver-CZL48YfC.js → otlpReceiver-C6thJRXi.js} +154 -98
- package/dist/src/{otlpReceiver-C9KlUtxh.js → otlpReceiver-CcdIikOu.js} +154 -98
- package/dist/src/{otlpReceiver-DHKqJlsz.cjs → otlpReceiver-DNSQj6bf.cjs} +154 -98
- package/dist/src/{otlpReceiver-CavGAA6k.js → otlpReceiver-UYMQx3sy.js} +154 -98
- package/dist/src/{providerRegistry-BkzVH5Ba.js → providerRegistry-1gB5vtzQ.js} +2 -2
- package/dist/src/{providerRegistry-BTDgfV5h.cjs → providerRegistry-BESeALrr.cjs} +2 -2
- package/dist/src/{providerRegistry-CUWki5mQ.js → providerRegistry-DoACwqhD.js} +2 -2
- package/dist/src/{providerRegistry-B9lh-_tx.js → providerRegistry-PMsleEzs.js} +2 -2
- package/dist/src/providers-BuyzKt7C.js +2 -0
- package/dist/src/providers-C7lNVBjX.cjs +3 -0
- package/dist/src/providers-CCE2COJi2.js +2 -0
- package/dist/src/{providers-Cn73d5sr.js → providers-CJh7iriU.js} +17180 -16823
- package/dist/src/providers-Ctcc592x.js +3 -0
- package/dist/src/{providers-DvddrgxL.js → providers-DRrerKra.js} +1052 -695
- package/dist/src/{providers-Ch6Mr0gn.js → providers-DT-GtF2t.js} +16716 -16359
- package/dist/src/{providers-CScd1wN6.cjs → providers-eDShy16E.cjs} +19893 -19506
- package/dist/src/python/persistent_wrapper.py +0 -5
- package/dist/src/{pythonUtils-Cpo0Ez1p.js → pythonUtils-C4tltmIn.js} +4 -4
- package/dist/src/{pythonUtils-dAVigVK-.cjs → pythonUtils-CoLaCwNY.cjs} +4 -4
- package/dist/src/{pythonUtils-Bzwbgpbg.js → pythonUtils-DMO68Jg7.js} +3 -3
- package/dist/src/{pythonUtils-wIqk7zAf.js → pythonUtils-DNqbnRdx.js} +3 -3
- package/dist/src/{quiverai-BeofbLVc.js → quiverai-BSS9a7wV.js} +4 -4
- package/dist/src/{quiverai-DVSEqJiq.js → quiverai-Bk1KrvL6.js} +4 -4
- package/dist/src/{quiverai-CcUhPIBg.cjs → quiverai-Bpx6MZ7T.cjs} +4 -4
- package/dist/src/{quiverai-CCQn73lq.js → quiverai-CPKhWgaT.js} +4 -5
- package/dist/src/render-7uNJ2V14.js +135 -0
- package/dist/src/render-DlscvAUJ.js +135 -0
- package/dist/src/render-eui5p5mL.js +136 -0
- package/dist/src/{render-BHl6QVq9.js → render-nj-UaPdn.js} +2 -3
- package/dist/src/render-tG6ir9_g.cjs +165 -0
- package/dist/src/{responses-CgNyTPsY.js → responses-1ztiVYsx.js} +56 -17
- package/dist/src/{responses-BKP_WYis.js → responses-B8haB-mD.js} +56 -17
- package/dist/src/{responses-CQb1Tj69.js → responses-BiaBguAu.js} +56 -17
- package/dist/src/{responses-mo0KQDbu.cjs → responses-CF-ayauu.cjs} +56 -17
- package/dist/src/rubyUtils-4hjGxvju.js +3 -0
- package/dist/src/{rubyUtils-DECSbsfY.js → rubyUtils-BI0p46eZ.js} +3 -3
- package/dist/src/{rubyUtils-CiVfln3g.js → rubyUtils-CIQFnVz4.js} +3 -3
- package/dist/src/rubyUtils-CO-tuszQ.cjs +2 -0
- package/dist/src/{rubyUtils-PgU-gHmx.js → rubyUtils-DGnoCYL2.js} +4 -4
- package/dist/src/{rubyUtils-CGeUtCfW.cjs → rubyUtils-DoifqkiA.cjs} +5 -4
- package/dist/src/{sagemaker-CqeASYE5.js → sagemaker-BDLeW29y.js} +14 -18
- package/dist/src/{sagemaker-MUbD5V3v.js → sagemaker-C5T60MKf.js} +14 -19
- package/dist/src/{sagemaker-CVv8W7so.js → sagemaker-ClS_NB07.js} +14 -18
- package/dist/src/{sagemaker-jiw1wQa-.cjs → sagemaker-ljtY12VM.cjs} +14 -18
- package/dist/src/{scanner-DVDeUz1r.js → scanner-nOCWNIXa.js} +130 -35
- package/dist/src/server/golang/wrapper.go +1 -1
- package/dist/src/server/index.js +4829 -2529
- package/dist/src/server/python/persistent_wrapper.py +0 -5
- package/dist/src/{server-BtoCXeXI.cjs → server-BEECpeGG.cjs} +140 -6
- package/dist/src/{server-DZ9MtCn0.js → server-ByiF3qlg.js} +129 -9
- package/dist/src/{server-Cns05F1j.js → server-ByxbqAcQ.js} +128 -8
- package/dist/src/server-C0XKRNB_.cjs +2 -0
- package/dist/src/server-C_15p79-.js +3 -0
- package/dist/src/{server-CP9qKM40.js → server-gyd6d4Hc.js} +126 -7
- package/dist/src/{signal-C3ZTsUgi.js → signal-DTtUuU3l.js} +3 -3
- package/dist/src/{slack-DCEV-vWP.js → slack-4zZX1OKP.js} +2 -2
- package/dist/src/{slack-94iG3T0s.cjs → slack-BLlsDpfG.cjs} +2 -2
- package/dist/src/{slack-BR0HtO3K.js → slack-BPYLQLgb.js} +2 -2
- package/dist/src/{slack-2sdpGzbt.js → slack-Bamy_7te.js} +2 -2
- package/dist/src/{store-CLyU7AtI.cjs → store-2K0kDi80.cjs} +3 -3
- package/dist/src/{store-VB0GP46K.js → store-2OXm_eBY.js} +3 -3
- package/dist/src/store-BELqNwvz.js +3 -0
- package/dist/src/{store-Cj258DgL.js → store-BPkzEyFM.js} +3 -3
- package/dist/src/{store-P8OKm19S.js → store-CPh25336.js} +3 -3
- package/dist/src/store-uQZ4AjPe.cjs +2 -0
- package/dist/src/{tables-BEIFz2tM.js → tables-BMSOS2Gg.js} +3 -3
- package/dist/src/{tables-BdZQEpRz.cjs → tables-CXbaZ9y1.cjs} +3 -3
- package/dist/src/{tables-DmzvLbeZ.js → tables-NlvH23ky.js} +3 -3
- package/dist/src/{tables-kC7R5kiK.js → tables-WgdUZ8Ck.js} +3 -3
- package/dist/src/{telemetry-DPXLd7UE.js → telemetry--iqaGyaS.js} +5 -4
- package/dist/src/{telemetry-re627Lre.cjs → telemetry-CEQxGnMZ.cjs} +8 -7
- package/dist/src/{telemetry-BugWqKiu.js → telemetry-CgdVGV8N.js} +5 -4
- package/dist/src/{telemetry-BnH5VJAU.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-CW1cyrwj.cjs → text-BiNME7QG.cjs} +1 -1
- package/dist/src/{text-Db-Wt2u2.js → text-D4lz-Jg_.js} +1 -1
- package/dist/src/{text-TIv0QYnd.js → text-DDQP0tuQ.js} +1 -1
- package/dist/src/{text-B_UCRPp2.js → text-NWvfMfkF.js} +1 -1
- package/dist/src/{tokenUsageUtils-DflFMjS0.js → tokenUsageUtils-2wIvAhB3.js} +7 -3
- package/dist/src/{tokenUsageUtils-BDGe-iyI.js → tokenUsageUtils-4c780gFd.js} +7 -3
- package/dist/src/{tokenUsageUtils-NYT-WKS6.js → tokenUsageUtils-BjVkdk18.js} +7 -3
- package/dist/src/{tokenUsageUtils-bVa1ga6f.cjs → tokenUsageUtils-C9odhsbW.cjs} +7 -3
- package/dist/src/{transcription-CaMivnjG.js → transcription-84t4ALo2.js} +7 -11
- package/dist/src/{transcription-Hb3VnC4M.js → transcription-Bm2emLmJ.js} +8 -11
- package/dist/src/{transcription-BvtsrzRG.cjs → transcription-CZ4LG5hQ.cjs} +9 -13
- package/dist/src/{transcription-DOMMTu01.js → transcription-D7Q0vJsh.js} +7 -13
- package/dist/src/{transform-DrleutM3.js → transform-B-b6Cq-q.js} +8 -6
- package/dist/src/transform-BQt0BeAW.js +3 -0
- package/dist/src/transform-Bq5oqC0s.cjs +2 -0
- package/dist/src/{transform-ZrG2dvlo.cjs → transform-C9izGX54.cjs} +5 -5
- package/dist/src/{transform-BzK09Q_9.js → transform-CwbAZ84V.js} +5 -5
- package/dist/src/{transform-0BwoBsvO.cjs → transform-Dg4LcO1Y.cjs} +18 -10
- package/dist/src/{transform-B2-jIv68.js → transform-DtooZqYY.js} +8 -6
- package/dist/src/{transform-ljLYHEPh.js → transform-DzCF-wqV.js} +5 -5
- package/dist/src/{transform-DyDAwEpE.js → transform-_DpNB4qp.js} +9 -7
- package/dist/src/{transform-BqPkNPYm.js → transform-eGiUAv86.js} +5 -5
- package/dist/src/{transformersAvailability-DKoRtQLy.cjs → transformersAvailability-B22swDxr.cjs} +1 -1
- package/dist/src/{transformersAvailability-BGkzavwb.js → transformersAvailability-lvCCvuPT.js} +1 -1
- package/dist/src/{transformersAvailability-D6c6ROpT.js → transformersAvailability-rJGPccjr.js} +1 -1
- package/dist/src/{types-Cd3ygw8W.js → types-BDjGOq4E.js} +354 -24
- package/dist/src/{types-CIhFeUC4.js → types-BVH9hjgW.js} +364 -23
- package/dist/src/{types-D8cGDZbL.cjs → types-CgG2rKiW.cjs} +534 -167
- package/dist/src/{types-q8GXGF65.js → types-DNRZVOue.js} +498 -167
- package/dist/src/{util-BLvy9qfE.js → util-3pBZZb_H.js} +151 -149
- package/dist/src/{util-CFj4YKIn.cjs → util-A5_ZsQUn.cjs} +66 -44
- package/dist/src/{util-BtoGs5Cb.js → util-B9CNhyac.js} +66 -44
- package/dist/src/{util-Bm3E9jpK.js → util-BQOCAHQC.js} +692 -690
- package/dist/src/{util-vNmDL5DT.js → util-BVXcTwXu.js} +138 -36
- package/dist/src/{util-CgDCK4KI.js → util-BlFVL0UF.js} +66 -44
- package/dist/src/{util-DM2rTn_6.js → util-C-kmRosx.js} +66 -44
- package/dist/src/{util-DbVG-yZU.js → util-DFPeFkiV.js} +138 -36
- package/dist/src/{util-DMFeUvLz.js → util-DN0-b81k.js} +138 -36
- package/dist/src/{util--9u9UVCt.cjs → util-Dpmm_dAI.cjs} +143 -35
- package/dist/src/{util-CMMkIxfU.js → util-Dub0f_ej.js} +693 -691
- package/dist/src/{util-CuLo2pMR.cjs → util-DvpHnLt0.cjs} +714 -719
- package/dist/src/{utils-DOjD4dTC.js → utils-BUMN8orw.js} +6 -4
- package/dist/src/{utils-DKw8mrgr.cjs → utils-DkVeShIB.cjs} +6 -4
- package/dist/src/{utils-DEuL4VNB.js → utils-kt7lv30R.js} +6 -4
- package/dist/src/{utils-CFxO9KGo.js → utils-o8S5huU2.js} +6 -4
- 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 +57 -46
- package/dist/src/app/assets/index-B6l9CVVb.js +0 -439
- package/dist/src/app/assets/index-DyZ0Ep37.css +0 -1
- package/dist/src/app/assets/scroll-timeline-BdJZVXlz.js +0 -1
- package/dist/src/app/assets/sync-CStkzc6u.js +0 -4
- package/dist/src/app/assets/vendor-charts-BnDWwBlI.js +0 -36
- package/dist/src/app/assets/vendor-markdown-Bz7N-ca6.js +0 -29
- package/dist/src/app/assets/vendor-react-AtKqiNEf.js +0 -4
- package/dist/src/app/assets/vendor-syntax-D06x6TQF.js +0 -2
- package/dist/src/app/assets/vendor-utils-BvMHZmO7.js +0 -37
- package/dist/src/cache-C5yFZ4gC.cjs +0 -816
- package/dist/src/cache-CaT5tPgo.js +0 -756
- package/dist/src/cache-CyCanoMu.js +0 -6
- package/dist/src/cache-DSqR6ezl.js +0 -726
- package/dist/src/cache-Df_QFDNu.cjs +0 -5
- package/dist/src/cache-HP0NP4k3.js +0 -756
- package/dist/src/cloud-DE3t1-ZI.js +0 -4
- package/dist/src/codex-sdk-BQEw16R_.js +0 -834
- package/dist/src/codex-sdk-C_07GuVS.js +0 -834
- package/dist/src/codex-sdk-DE5G18dx.js +0 -835
- package/dist/src/codex-sdk-ZLKfDjqP.cjs +0 -838
- package/dist/src/eval-7aEqoMs3.js +0 -15
- package/dist/src/evalResult-CYNHkk5A.js +0 -12
- package/dist/src/evalResult-CuvJeNiM.js +0 -10
- package/dist/src/evalResult-tGdilrWt.cjs +0 -10
- package/dist/src/evaluator-BBUqRhz1.js +0 -36
- package/dist/src/fetch-UWU706qb.js +0 -5
- package/dist/src/graders-BxfEguVY.js +0 -32
- package/dist/src/graders-CzVMbEnv.js +0 -34
- package/dist/src/graders-DjCXfj0l.cjs +0 -32
- package/dist/src/graders-kHzIWOKu.js +0 -32
- package/dist/src/messages-DJNo37Ko.js +0 -246
- package/dist/src/messages-Dy9QecMs.js +0 -245
- package/dist/src/messages-HJsyEh4o.cjs +0 -257
- package/dist/src/messages-biC_ex-p.js +0 -245
- package/dist/src/openclaw-0Sv7AK3O.js +0 -580
- package/dist/src/openclaw-CXxbKgDH.cjs +0 -586
- package/dist/src/openclaw-D1FSCps-.js +0 -580
- package/dist/src/openclaw-D2ENvu7a.js +0 -582
- package/dist/src/providers-BSLEaIQG.js +0 -32
- package/dist/src/providers-D-FnDg8k.cjs +0 -31
- package/dist/src/providers-DEYiFVAo.js +0 -30
- package/dist/src/providers-sS2WI8YD.js +0 -30
- package/dist/src/rubyUtils-B1HXG4ej.cjs +0 -4
- package/dist/src/rubyUtils-Rt6pKA96.js +0 -5
- package/dist/src/server-B0Xh1Gx-.js +0 -7
- package/dist/src/server-DJTKu9IR.cjs +0 -5
- package/dist/src/store-C5u6MgC8.js +0 -6
- package/dist/src/store-CNHk-De4.cjs +0 -5
- package/dist/src/telemetry-Yig0Tino.js +0 -7
- package/dist/src/telemetry-p8Pwqm1i.cjs +0 -5
- package/dist/src/transform-ChNIpHz7.js +0 -6
- package/dist/src/transform-PtQ6rAE3.cjs +0 -5
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
import { a as logger } from "./logger-
|
|
2
|
-
import "./
|
|
3
|
-
import { t as
|
|
4
|
-
import "./types-Cd3ygw8W.js";
|
|
5
|
-
import { t as getTraceStore } from "./store-VB0GP46K.js";
|
|
1
|
+
import { a as logger } from "./logger-Ct2S6Yx-.js";
|
|
2
|
+
import { t as getDirectory } from "./esm-BRkfNsYs.js";
|
|
3
|
+
import { t as getTraceStore } from "./store-BPkzEyFM.js";
|
|
6
4
|
import path from "path";
|
|
7
5
|
import express from "express";
|
|
8
6
|
import protobuf from "protobufjs";
|
|
@@ -92,28 +90,57 @@ const SPAN_KIND_MAP = {
|
|
|
92
90
|
4: "producer",
|
|
93
91
|
5: "consumer"
|
|
94
92
|
};
|
|
93
|
+
const DEFAULT_ACCEPT_FORMATS = ["json", "protobuf"];
|
|
94
|
+
const OTLP_CONTENT_TYPES = {
|
|
95
|
+
json: "application/json",
|
|
96
|
+
protobuf: "application/x-protobuf"
|
|
97
|
+
};
|
|
98
|
+
function normalizeAcceptFormats(acceptFormats) {
|
|
99
|
+
const normalized = [...new Set(acceptFormats ?? DEFAULT_ACCEPT_FORMATS)];
|
|
100
|
+
return normalized.length > 0 ? normalized : [...DEFAULT_ACCEPT_FORMATS];
|
|
101
|
+
}
|
|
102
|
+
function getRequestFormat(contentType) {
|
|
103
|
+
const mimeType = (Array.isArray(contentType) ? contentType[0] : contentType)?.split(";", 1)[0]?.trim().toLowerCase();
|
|
104
|
+
if (mimeType === OTLP_CONTENT_TYPES.json) return "json";
|
|
105
|
+
if (mimeType === OTLP_CONTENT_TYPES.protobuf) return "protobuf";
|
|
106
|
+
return null;
|
|
107
|
+
}
|
|
95
108
|
var OTLPReceiver = class {
|
|
96
109
|
app;
|
|
110
|
+
acceptFormats;
|
|
97
111
|
traceStore;
|
|
98
112
|
port;
|
|
99
113
|
server;
|
|
100
|
-
constructor() {
|
|
114
|
+
constructor(options = {}) {
|
|
101
115
|
this.app = express();
|
|
116
|
+
this.acceptFormats = normalizeAcceptFormats(options.acceptFormats);
|
|
102
117
|
this.traceStore = getTraceStore();
|
|
103
118
|
logger.debug("[OtlpReceiver] Initializing OTLP receiver");
|
|
104
119
|
this.setupMiddleware();
|
|
105
120
|
this.setupRoutes();
|
|
106
121
|
}
|
|
107
122
|
setupMiddleware() {
|
|
108
|
-
this.app.use(
|
|
123
|
+
this.app.use("/v1/traces", (req, res, next) => {
|
|
124
|
+
if (req.method !== "POST") {
|
|
125
|
+
next();
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
const format = getRequestFormat(req.headers["content-type"]);
|
|
129
|
+
if (!format || !this.acceptFormats.includes(format)) {
|
|
130
|
+
res.status(415).json({ error: "Unsupported content type" });
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
next();
|
|
134
|
+
});
|
|
135
|
+
this.app.use("/v1/traces", express.json({
|
|
109
136
|
limit: "10mb",
|
|
110
|
-
type: "
|
|
137
|
+
type: (req) => this.acceptFormats.includes("json") && getRequestFormat(req.headers["content-type"]) === "json"
|
|
111
138
|
}));
|
|
112
|
-
this.app.use(express.raw({
|
|
113
|
-
|
|
114
|
-
|
|
139
|
+
this.app.use("/v1/traces", express.raw({
|
|
140
|
+
limit: "10mb",
|
|
141
|
+
type: (req) => this.acceptFormats.includes("protobuf") && getRequestFormat(req.headers["content-type"]) === "protobuf"
|
|
115
142
|
}));
|
|
116
|
-
logger.debug("[OtlpReceiver] Middleware configured for
|
|
143
|
+
logger.debug("[OtlpReceiver] Middleware configured for accepted OTLP formats");
|
|
117
144
|
}
|
|
118
145
|
setupRoutes() {
|
|
119
146
|
this.app.post("/v1/traces", async (req, res) => {
|
|
@@ -121,64 +148,19 @@ var OTLPReceiver = class {
|
|
|
121
148
|
const bodySize = req.body ? JSON.stringify(req.body).length : 0;
|
|
122
149
|
logger.debug(`[OtlpReceiver] Received trace request: ${req.headers["content-type"]} with ${bodySize} bytes`);
|
|
123
150
|
logger.debug("[OtlpReceiver] Starting to process traces");
|
|
124
|
-
const
|
|
125
|
-
|
|
126
|
-
if (!isJson && !isProtobuf) {
|
|
151
|
+
const format = getRequestFormat(contentType);
|
|
152
|
+
if (!format || !this.acceptFormats.includes(format)) {
|
|
127
153
|
res.status(415).json({ error: "Unsupported content type" });
|
|
128
154
|
return;
|
|
129
155
|
}
|
|
130
156
|
try {
|
|
131
|
-
|
|
132
|
-
if (isJson) {
|
|
133
|
-
logger.debug("[OtlpReceiver] Parsing OTLP JSON request");
|
|
134
|
-
logger.debug(`[OtlpReceiver] Request body: ${JSON.stringify(req.body).substring(0, 500)}...`);
|
|
135
|
-
traces = this.parseOTLPJSONRequest(req.body);
|
|
136
|
-
} else if (isProtobuf) {
|
|
137
|
-
logger.debug("[OtlpReceiver] Parsing OTLP protobuf request");
|
|
138
|
-
logger.debug(`[OtlpReceiver] Request body size: ${req.body?.length || 0} bytes`);
|
|
139
|
-
traces = await this.parseOTLPProtobufRequest(req.body);
|
|
140
|
-
}
|
|
157
|
+
const traces = await this.parseIncomingRequest(format, req.body);
|
|
141
158
|
logger.debug(`[OtlpReceiver] Parsed ${traces.length} traces from request`);
|
|
142
|
-
|
|
143
|
-
const traceInfoById = /* @__PURE__ */ new Map();
|
|
144
|
-
for (const trace of traces) {
|
|
145
|
-
if (!spansByTrace.has(trace.traceId)) {
|
|
146
|
-
spansByTrace.set(trace.traceId, []);
|
|
147
|
-
const evaluationId = trace.span.attributes?.["evaluation.id"];
|
|
148
|
-
const testCaseId = trace.span.attributes?.["test.case.id"];
|
|
149
|
-
const info = traceInfoById.get(trace.traceId) ?? {};
|
|
150
|
-
if (evaluationId) info.evaluationId = evaluationId;
|
|
151
|
-
if (testCaseId) info.testCaseId = testCaseId;
|
|
152
|
-
traceInfoById.set(trace.traceId, info);
|
|
153
|
-
}
|
|
154
|
-
spansByTrace.get(trace.traceId).push(trace.span);
|
|
155
|
-
}
|
|
156
|
-
logger.debug(`[OtlpReceiver] Grouped spans into ${spansByTrace.size} traces`);
|
|
157
|
-
for (const [traceId, info] of traceInfoById) try {
|
|
158
|
-
logger.debug(`[OtlpReceiver] Creating trace record for ${traceId}`);
|
|
159
|
-
await this.traceStore.createTrace({
|
|
160
|
-
traceId,
|
|
161
|
-
evaluationId: info.evaluationId || "",
|
|
162
|
-
testCaseId: info.testCaseId || ""
|
|
163
|
-
});
|
|
164
|
-
} catch (error) {
|
|
165
|
-
logger.debug(`[OtlpReceiver] Trace ${traceId} may already exist: ${error}`);
|
|
166
|
-
}
|
|
167
|
-
for (const [traceId, spans] of spansByTrace) {
|
|
168
|
-
logger.debug(`[OtlpReceiver] Storing ${spans.length} spans for trace ${traceId}`);
|
|
169
|
-
await this.traceStore.addSpans(traceId, spans, { skipTraceCheck: true });
|
|
170
|
-
}
|
|
159
|
+
await this.persistTraces(this.groupTraces(traces));
|
|
171
160
|
res.status(200).json({ partialSuccess: {} });
|
|
172
161
|
logger.debug("[OtlpReceiver] Successfully processed traces");
|
|
173
162
|
} catch (error) {
|
|
174
|
-
|
|
175
|
-
logger.error(`[OtlpReceiver] Error stack: ${error instanceof Error ? error.stack : "No stack"}`);
|
|
176
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
177
|
-
if (errorMessage.toLowerCase().includes("invalid protobuf")) {
|
|
178
|
-
res.status(400).json({ error: errorMessage });
|
|
179
|
-
return;
|
|
180
|
-
}
|
|
181
|
-
res.status(500).json({ error: "Internal server error" });
|
|
163
|
+
this.handleProcessingError(error, res);
|
|
182
164
|
}
|
|
183
165
|
});
|
|
184
166
|
this.app.get("/health", (_req, res) => {
|
|
@@ -189,7 +171,7 @@ var OTLPReceiver = class {
|
|
|
189
171
|
res.status(200).json({
|
|
190
172
|
service: "promptfoo-otlp-receiver",
|
|
191
173
|
version: "1.0.0",
|
|
192
|
-
supported_formats:
|
|
174
|
+
supported_formats: this.acceptFormats
|
|
193
175
|
});
|
|
194
176
|
});
|
|
195
177
|
this.app.get("/debug/status", async (_req, res) => {
|
|
@@ -210,6 +192,71 @@ var OTLPReceiver = class {
|
|
|
210
192
|
res.status(500).json({ error: "Internal server error" });
|
|
211
193
|
});
|
|
212
194
|
}
|
|
195
|
+
async parseIncomingRequest(format, body) {
|
|
196
|
+
if (format === "json") {
|
|
197
|
+
logger.debug("[OtlpReceiver] Parsing OTLP JSON request");
|
|
198
|
+
logger.debug(`[OtlpReceiver] Request body: ${JSON.stringify(body).substring(0, 500)}...`);
|
|
199
|
+
return this.parseOTLPJSONRequest(body);
|
|
200
|
+
}
|
|
201
|
+
logger.debug("[OtlpReceiver] Parsing OTLP protobuf request");
|
|
202
|
+
logger.debug(`[OtlpReceiver] Request body size: ${body?.length || 0} bytes`);
|
|
203
|
+
return this.parseOTLPProtobufRequest(body);
|
|
204
|
+
}
|
|
205
|
+
groupTraces(traces) {
|
|
206
|
+
const spansByTrace = /* @__PURE__ */ new Map();
|
|
207
|
+
const traceInfoById = /* @__PURE__ */ new Map();
|
|
208
|
+
for (const trace of traces) {
|
|
209
|
+
const spans = spansByTrace.get(trace.traceId) ?? [];
|
|
210
|
+
spans.push(trace.span);
|
|
211
|
+
spansByTrace.set(trace.traceId, spans);
|
|
212
|
+
this.recordTraceInfo(traceInfoById, trace);
|
|
213
|
+
}
|
|
214
|
+
logger.debug(`[OtlpReceiver] Grouped spans into ${spansByTrace.size} traces`);
|
|
215
|
+
return {
|
|
216
|
+
spansByTrace,
|
|
217
|
+
traceInfoById
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
recordTraceInfo(traceInfoById, trace) {
|
|
221
|
+
const evaluationId = trace.span.attributes?.["evaluation.id"];
|
|
222
|
+
const testCaseId = trace.span.attributes?.["test.case.id"];
|
|
223
|
+
const info = traceInfoById.get(trace.traceId) ?? {};
|
|
224
|
+
if (evaluationId) info.evaluationId = evaluationId;
|
|
225
|
+
if (testCaseId) info.testCaseId = testCaseId;
|
|
226
|
+
traceInfoById.set(trace.traceId, info);
|
|
227
|
+
}
|
|
228
|
+
async persistTraces({ spansByTrace, traceInfoById }) {
|
|
229
|
+
await this.createTraceRecords(traceInfoById);
|
|
230
|
+
await this.storeSpans(spansByTrace);
|
|
231
|
+
}
|
|
232
|
+
async createTraceRecords(traceInfoById) {
|
|
233
|
+
for (const [traceId, info] of traceInfoById) try {
|
|
234
|
+
logger.debug(`[OtlpReceiver] Creating trace record for ${traceId}`);
|
|
235
|
+
await this.traceStore.createTrace({
|
|
236
|
+
traceId,
|
|
237
|
+
evaluationId: info.evaluationId || "",
|
|
238
|
+
testCaseId: info.testCaseId || ""
|
|
239
|
+
});
|
|
240
|
+
} catch (error) {
|
|
241
|
+
logger.debug(`[OtlpReceiver] Trace ${traceId} may already exist: ${error}`);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
async storeSpans(spansByTrace) {
|
|
245
|
+
for (const [traceId, spans] of spansByTrace) {
|
|
246
|
+
logger.debug(`[OtlpReceiver] Storing ${spans.length} spans for trace ${traceId}`);
|
|
247
|
+
await this.traceStore.addSpans(traceId, spans, { skipTraceCheck: true });
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
handleProcessingError(error, res) {
|
|
251
|
+
logger.error(`[OtlpReceiver] Failed to process OTLP traces: ${error}`);
|
|
252
|
+
logger.error(`[OtlpReceiver] Error stack: ${error instanceof Error ? error.stack : "No stack"}`);
|
|
253
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
254
|
+
if (errorMessage.toLowerCase().includes("invalid protobuf")) {
|
|
255
|
+
res.status(400).json({ error: errorMessage });
|
|
256
|
+
return;
|
|
257
|
+
}
|
|
258
|
+
res.status(500).json({ error: "Internal server error" });
|
|
259
|
+
}
|
|
213
260
|
parseOTLPJSONRequest(body) {
|
|
214
261
|
const traces = [];
|
|
215
262
|
logger.debug(`[OtlpReceiver] Parsing request with ${body.resourceSpans?.length || 0} resource spans`);
|
|
@@ -248,44 +295,42 @@ var OTLPReceiver = class {
|
|
|
248
295
|
return traces;
|
|
249
296
|
}
|
|
250
297
|
async parseOTLPProtobufRequest(body) {
|
|
251
|
-
const traces = [];
|
|
252
298
|
const decoded = await decodeExportTraceServiceRequest(body);
|
|
253
299
|
logger.debug(`[OtlpReceiver] Parsing protobuf request with ${decoded.resourceSpans?.length || 0} resource spans`);
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
300
|
+
return (decoded.resourceSpans || []).flatMap((resourceSpan) => this.parseDecodedResourceSpan(resourceSpan));
|
|
301
|
+
}
|
|
302
|
+
parseDecodedResourceSpan(resourceSpan) {
|
|
303
|
+
const resourceAttributes = this.parseDecodedAttributes(resourceSpan.resource?.attributes);
|
|
304
|
+
logger.debug(`[OtlpReceiver] Parsed ${Object.keys(resourceAttributes).length} resource attributes from protobuf`);
|
|
305
|
+
return (resourceSpan.scopeSpans || []).flatMap((scopeSpan) => (scopeSpan.spans || []).map((span) => this.createDecodedParsedTrace(resourceAttributes, scopeSpan, span)));
|
|
306
|
+
}
|
|
307
|
+
createDecodedParsedTrace(resourceAttributes, scopeSpan, span) {
|
|
308
|
+
const traceId = bytesToHex(span.traceId, 32);
|
|
309
|
+
const spanId = bytesToHex(span.spanId, 16);
|
|
310
|
+
const parentSpanId = span.parentSpanId?.length ? bytesToHex(span.parentSpanId, 16) : void 0;
|
|
311
|
+
logger.debug(`[OtlpReceiver] Processing protobuf span: ${span.name} (${spanId}) in trace ${traceId}`);
|
|
312
|
+
const spanKindCode = span.kind ?? 0;
|
|
313
|
+
const spanKindName = SPAN_KIND_MAP[spanKindCode] ?? "unspecified";
|
|
314
|
+
return {
|
|
315
|
+
traceId,
|
|
316
|
+
span: {
|
|
317
|
+
spanId,
|
|
318
|
+
parentSpanId,
|
|
319
|
+
name: span.name,
|
|
320
|
+
startTime: this.toMilliseconds(span.startTimeUnixNano) ?? 0,
|
|
321
|
+
endTime: this.toMilliseconds(span.endTimeUnixNano),
|
|
322
|
+
attributes: {
|
|
264
323
|
...resourceAttributes,
|
|
265
324
|
...this.parseDecodedAttributes(span.attributes),
|
|
266
325
|
"otel.scope.name": scopeSpan.scope?.name,
|
|
267
326
|
"otel.scope.version": scopeSpan.scope?.version,
|
|
268
327
|
"otel.span.kind": spanKindName,
|
|
269
|
-
"otel.span.kind_code":
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
traces.push({
|
|
274
|
-
traceId,
|
|
275
|
-
span: {
|
|
276
|
-
spanId,
|
|
277
|
-
parentSpanId,
|
|
278
|
-
name: span.name,
|
|
279
|
-
startTime: startTimeNano / 1e6,
|
|
280
|
-
endTime: endTimeNano ? endTimeNano / 1e6 : void 0,
|
|
281
|
-
attributes,
|
|
282
|
-
statusCode: span.status?.code,
|
|
283
|
-
statusMessage: span.status?.message
|
|
284
|
-
}
|
|
285
|
-
});
|
|
328
|
+
"otel.span.kind_code": spanKindCode
|
|
329
|
+
},
|
|
330
|
+
statusCode: span.status?.code,
|
|
331
|
+
statusMessage: span.status?.message
|
|
286
332
|
}
|
|
287
|
-
}
|
|
288
|
-
return traces;
|
|
333
|
+
};
|
|
289
334
|
}
|
|
290
335
|
parseDecodedAttributes(attributes) {
|
|
291
336
|
if (!attributes) return {};
|
|
@@ -386,15 +431,26 @@ var OTLPReceiver = class {
|
|
|
386
431
|
getApp() {
|
|
387
432
|
return this.app;
|
|
388
433
|
}
|
|
434
|
+
setAcceptFormats(acceptFormats) {
|
|
435
|
+
this.acceptFormats = normalizeAcceptFormats(acceptFormats);
|
|
436
|
+
}
|
|
437
|
+
toMilliseconds(value) {
|
|
438
|
+
if (value === void 0) return;
|
|
439
|
+
return Number(value) / 1e6;
|
|
440
|
+
}
|
|
389
441
|
};
|
|
390
442
|
let otlpReceiver = null;
|
|
391
|
-
function getOTLPReceiver() {
|
|
392
|
-
if (
|
|
443
|
+
function getOTLPReceiver(options) {
|
|
444
|
+
if (otlpReceiver) {
|
|
445
|
+
otlpReceiver.setAcceptFormats(options?.acceptFormats);
|
|
446
|
+
return otlpReceiver;
|
|
447
|
+
}
|
|
448
|
+
otlpReceiver = new OTLPReceiver(options);
|
|
393
449
|
return otlpReceiver;
|
|
394
450
|
}
|
|
395
|
-
async function startOTLPReceiver(port, host) {
|
|
451
|
+
async function startOTLPReceiver(port, host, acceptFormats) {
|
|
396
452
|
logger.debug("[OtlpReceiver] Starting receiver through startOTLPReceiver function");
|
|
397
|
-
await getOTLPReceiver().listen(port, host);
|
|
453
|
+
await getOTLPReceiver({ acceptFormats }).listen(port, host);
|
|
398
454
|
}
|
|
399
455
|
async function stopOTLPReceiver() {
|
|
400
456
|
logger.debug("[OtlpReceiver] Stopping receiver through stopOTLPReceiver function");
|
|
@@ -406,4 +462,4 @@ async function stopOTLPReceiver() {
|
|
|
406
462
|
//#endregion
|
|
407
463
|
export { startOTLPReceiver, stopOTLPReceiver };
|
|
408
464
|
|
|
409
|
-
//# sourceMappingURL=otlpReceiver-
|
|
465
|
+
//# sourceMappingURL=otlpReceiver-CcdIikOu.js.map
|
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
const require_logger = require("./logger-
|
|
2
|
-
const require_esm = require("./esm-
|
|
3
|
-
require("./
|
|
4
|
-
require("./tables-BdZQEpRz.cjs");
|
|
5
|
-
const require_store = require("./store-CLyU7AtI.cjs");
|
|
1
|
+
const require_logger = require("./logger-COuQb2xB.cjs");
|
|
2
|
+
const require_esm = require("./esm-B_rGuPTo.cjs");
|
|
3
|
+
const require_store = require("./store-2K0kDi80.cjs");
|
|
6
4
|
let path = require("path");
|
|
7
5
|
path = require_logger.__toESM(path);
|
|
8
6
|
let express = require("express");
|
|
@@ -95,28 +93,57 @@ const SPAN_KIND_MAP = {
|
|
|
95
93
|
4: "producer",
|
|
96
94
|
5: "consumer"
|
|
97
95
|
};
|
|
96
|
+
const DEFAULT_ACCEPT_FORMATS = ["json", "protobuf"];
|
|
97
|
+
const OTLP_CONTENT_TYPES = {
|
|
98
|
+
json: "application/json",
|
|
99
|
+
protobuf: "application/x-protobuf"
|
|
100
|
+
};
|
|
101
|
+
function normalizeAcceptFormats(acceptFormats) {
|
|
102
|
+
const normalized = [...new Set(acceptFormats ?? DEFAULT_ACCEPT_FORMATS)];
|
|
103
|
+
return normalized.length > 0 ? normalized : [...DEFAULT_ACCEPT_FORMATS];
|
|
104
|
+
}
|
|
105
|
+
function getRequestFormat(contentType) {
|
|
106
|
+
const mimeType = (Array.isArray(contentType) ? contentType[0] : contentType)?.split(";", 1)[0]?.trim().toLowerCase();
|
|
107
|
+
if (mimeType === OTLP_CONTENT_TYPES.json) return "json";
|
|
108
|
+
if (mimeType === OTLP_CONTENT_TYPES.protobuf) return "protobuf";
|
|
109
|
+
return null;
|
|
110
|
+
}
|
|
98
111
|
var OTLPReceiver = class {
|
|
99
112
|
app;
|
|
113
|
+
acceptFormats;
|
|
100
114
|
traceStore;
|
|
101
115
|
port;
|
|
102
116
|
server;
|
|
103
|
-
constructor() {
|
|
117
|
+
constructor(options = {}) {
|
|
104
118
|
this.app = (0, express.default)();
|
|
119
|
+
this.acceptFormats = normalizeAcceptFormats(options.acceptFormats);
|
|
105
120
|
this.traceStore = require_store.getTraceStore();
|
|
106
121
|
require_logger.logger.debug("[OtlpReceiver] Initializing OTLP receiver");
|
|
107
122
|
this.setupMiddleware();
|
|
108
123
|
this.setupRoutes();
|
|
109
124
|
}
|
|
110
125
|
setupMiddleware() {
|
|
111
|
-
this.app.use(
|
|
126
|
+
this.app.use("/v1/traces", (req, res, next) => {
|
|
127
|
+
if (req.method !== "POST") {
|
|
128
|
+
next();
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
const format = getRequestFormat(req.headers["content-type"]);
|
|
132
|
+
if (!format || !this.acceptFormats.includes(format)) {
|
|
133
|
+
res.status(415).json({ error: "Unsupported content type" });
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
next();
|
|
137
|
+
});
|
|
138
|
+
this.app.use("/v1/traces", express.default.json({
|
|
112
139
|
limit: "10mb",
|
|
113
|
-
type: "
|
|
140
|
+
type: (req) => this.acceptFormats.includes("json") && getRequestFormat(req.headers["content-type"]) === "json"
|
|
114
141
|
}));
|
|
115
|
-
this.app.use(express.default.raw({
|
|
116
|
-
|
|
117
|
-
|
|
142
|
+
this.app.use("/v1/traces", express.default.raw({
|
|
143
|
+
limit: "10mb",
|
|
144
|
+
type: (req) => this.acceptFormats.includes("protobuf") && getRequestFormat(req.headers["content-type"]) === "protobuf"
|
|
118
145
|
}));
|
|
119
|
-
require_logger.logger.debug("[OtlpReceiver] Middleware configured for
|
|
146
|
+
require_logger.logger.debug("[OtlpReceiver] Middleware configured for accepted OTLP formats");
|
|
120
147
|
}
|
|
121
148
|
setupRoutes() {
|
|
122
149
|
this.app.post("/v1/traces", async (req, res) => {
|
|
@@ -124,64 +151,19 @@ var OTLPReceiver = class {
|
|
|
124
151
|
const bodySize = req.body ? JSON.stringify(req.body).length : 0;
|
|
125
152
|
require_logger.logger.debug(`[OtlpReceiver] Received trace request: ${req.headers["content-type"]} with ${bodySize} bytes`);
|
|
126
153
|
require_logger.logger.debug("[OtlpReceiver] Starting to process traces");
|
|
127
|
-
const
|
|
128
|
-
|
|
129
|
-
if (!isJson && !isProtobuf) {
|
|
154
|
+
const format = getRequestFormat(contentType);
|
|
155
|
+
if (!format || !this.acceptFormats.includes(format)) {
|
|
130
156
|
res.status(415).json({ error: "Unsupported content type" });
|
|
131
157
|
return;
|
|
132
158
|
}
|
|
133
159
|
try {
|
|
134
|
-
|
|
135
|
-
if (isJson) {
|
|
136
|
-
require_logger.logger.debug("[OtlpReceiver] Parsing OTLP JSON request");
|
|
137
|
-
require_logger.logger.debug(`[OtlpReceiver] Request body: ${JSON.stringify(req.body).substring(0, 500)}...`);
|
|
138
|
-
traces = this.parseOTLPJSONRequest(req.body);
|
|
139
|
-
} else if (isProtobuf) {
|
|
140
|
-
require_logger.logger.debug("[OtlpReceiver] Parsing OTLP protobuf request");
|
|
141
|
-
require_logger.logger.debug(`[OtlpReceiver] Request body size: ${req.body?.length || 0} bytes`);
|
|
142
|
-
traces = await this.parseOTLPProtobufRequest(req.body);
|
|
143
|
-
}
|
|
160
|
+
const traces = await this.parseIncomingRequest(format, req.body);
|
|
144
161
|
require_logger.logger.debug(`[OtlpReceiver] Parsed ${traces.length} traces from request`);
|
|
145
|
-
|
|
146
|
-
const traceInfoById = /* @__PURE__ */ new Map();
|
|
147
|
-
for (const trace of traces) {
|
|
148
|
-
if (!spansByTrace.has(trace.traceId)) {
|
|
149
|
-
spansByTrace.set(trace.traceId, []);
|
|
150
|
-
const evaluationId = trace.span.attributes?.["evaluation.id"];
|
|
151
|
-
const testCaseId = trace.span.attributes?.["test.case.id"];
|
|
152
|
-
const info = traceInfoById.get(trace.traceId) ?? {};
|
|
153
|
-
if (evaluationId) info.evaluationId = evaluationId;
|
|
154
|
-
if (testCaseId) info.testCaseId = testCaseId;
|
|
155
|
-
traceInfoById.set(trace.traceId, info);
|
|
156
|
-
}
|
|
157
|
-
spansByTrace.get(trace.traceId).push(trace.span);
|
|
158
|
-
}
|
|
159
|
-
require_logger.logger.debug(`[OtlpReceiver] Grouped spans into ${spansByTrace.size} traces`);
|
|
160
|
-
for (const [traceId, info] of traceInfoById) try {
|
|
161
|
-
require_logger.logger.debug(`[OtlpReceiver] Creating trace record for ${traceId}`);
|
|
162
|
-
await this.traceStore.createTrace({
|
|
163
|
-
traceId,
|
|
164
|
-
evaluationId: info.evaluationId || "",
|
|
165
|
-
testCaseId: info.testCaseId || ""
|
|
166
|
-
});
|
|
167
|
-
} catch (error) {
|
|
168
|
-
require_logger.logger.debug(`[OtlpReceiver] Trace ${traceId} may already exist: ${error}`);
|
|
169
|
-
}
|
|
170
|
-
for (const [traceId, spans] of spansByTrace) {
|
|
171
|
-
require_logger.logger.debug(`[OtlpReceiver] Storing ${spans.length} spans for trace ${traceId}`);
|
|
172
|
-
await this.traceStore.addSpans(traceId, spans, { skipTraceCheck: true });
|
|
173
|
-
}
|
|
162
|
+
await this.persistTraces(this.groupTraces(traces));
|
|
174
163
|
res.status(200).json({ partialSuccess: {} });
|
|
175
164
|
require_logger.logger.debug("[OtlpReceiver] Successfully processed traces");
|
|
176
165
|
} catch (error) {
|
|
177
|
-
|
|
178
|
-
require_logger.logger.error(`[OtlpReceiver] Error stack: ${error instanceof Error ? error.stack : "No stack"}`);
|
|
179
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
180
|
-
if (errorMessage.toLowerCase().includes("invalid protobuf")) {
|
|
181
|
-
res.status(400).json({ error: errorMessage });
|
|
182
|
-
return;
|
|
183
|
-
}
|
|
184
|
-
res.status(500).json({ error: "Internal server error" });
|
|
166
|
+
this.handleProcessingError(error, res);
|
|
185
167
|
}
|
|
186
168
|
});
|
|
187
169
|
this.app.get("/health", (_req, res) => {
|
|
@@ -192,7 +174,7 @@ var OTLPReceiver = class {
|
|
|
192
174
|
res.status(200).json({
|
|
193
175
|
service: "promptfoo-otlp-receiver",
|
|
194
176
|
version: "1.0.0",
|
|
195
|
-
supported_formats:
|
|
177
|
+
supported_formats: this.acceptFormats
|
|
196
178
|
});
|
|
197
179
|
});
|
|
198
180
|
this.app.get("/debug/status", async (_req, res) => {
|
|
@@ -213,6 +195,71 @@ var OTLPReceiver = class {
|
|
|
213
195
|
res.status(500).json({ error: "Internal server error" });
|
|
214
196
|
});
|
|
215
197
|
}
|
|
198
|
+
async parseIncomingRequest(format, body) {
|
|
199
|
+
if (format === "json") {
|
|
200
|
+
require_logger.logger.debug("[OtlpReceiver] Parsing OTLP JSON request");
|
|
201
|
+
require_logger.logger.debug(`[OtlpReceiver] Request body: ${JSON.stringify(body).substring(0, 500)}...`);
|
|
202
|
+
return this.parseOTLPJSONRequest(body);
|
|
203
|
+
}
|
|
204
|
+
require_logger.logger.debug("[OtlpReceiver] Parsing OTLP protobuf request");
|
|
205
|
+
require_logger.logger.debug(`[OtlpReceiver] Request body size: ${body?.length || 0} bytes`);
|
|
206
|
+
return this.parseOTLPProtobufRequest(body);
|
|
207
|
+
}
|
|
208
|
+
groupTraces(traces) {
|
|
209
|
+
const spansByTrace = /* @__PURE__ */ new Map();
|
|
210
|
+
const traceInfoById = /* @__PURE__ */ new Map();
|
|
211
|
+
for (const trace of traces) {
|
|
212
|
+
const spans = spansByTrace.get(trace.traceId) ?? [];
|
|
213
|
+
spans.push(trace.span);
|
|
214
|
+
spansByTrace.set(trace.traceId, spans);
|
|
215
|
+
this.recordTraceInfo(traceInfoById, trace);
|
|
216
|
+
}
|
|
217
|
+
require_logger.logger.debug(`[OtlpReceiver] Grouped spans into ${spansByTrace.size} traces`);
|
|
218
|
+
return {
|
|
219
|
+
spansByTrace,
|
|
220
|
+
traceInfoById
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
recordTraceInfo(traceInfoById, trace) {
|
|
224
|
+
const evaluationId = trace.span.attributes?.["evaluation.id"];
|
|
225
|
+
const testCaseId = trace.span.attributes?.["test.case.id"];
|
|
226
|
+
const info = traceInfoById.get(trace.traceId) ?? {};
|
|
227
|
+
if (evaluationId) info.evaluationId = evaluationId;
|
|
228
|
+
if (testCaseId) info.testCaseId = testCaseId;
|
|
229
|
+
traceInfoById.set(trace.traceId, info);
|
|
230
|
+
}
|
|
231
|
+
async persistTraces({ spansByTrace, traceInfoById }) {
|
|
232
|
+
await this.createTraceRecords(traceInfoById);
|
|
233
|
+
await this.storeSpans(spansByTrace);
|
|
234
|
+
}
|
|
235
|
+
async createTraceRecords(traceInfoById) {
|
|
236
|
+
for (const [traceId, info] of traceInfoById) try {
|
|
237
|
+
require_logger.logger.debug(`[OtlpReceiver] Creating trace record for ${traceId}`);
|
|
238
|
+
await this.traceStore.createTrace({
|
|
239
|
+
traceId,
|
|
240
|
+
evaluationId: info.evaluationId || "",
|
|
241
|
+
testCaseId: info.testCaseId || ""
|
|
242
|
+
});
|
|
243
|
+
} catch (error) {
|
|
244
|
+
require_logger.logger.debug(`[OtlpReceiver] Trace ${traceId} may already exist: ${error}`);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
async storeSpans(spansByTrace) {
|
|
248
|
+
for (const [traceId, spans] of spansByTrace) {
|
|
249
|
+
require_logger.logger.debug(`[OtlpReceiver] Storing ${spans.length} spans for trace ${traceId}`);
|
|
250
|
+
await this.traceStore.addSpans(traceId, spans, { skipTraceCheck: true });
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
handleProcessingError(error, res) {
|
|
254
|
+
require_logger.logger.error(`[OtlpReceiver] Failed to process OTLP traces: ${error}`);
|
|
255
|
+
require_logger.logger.error(`[OtlpReceiver] Error stack: ${error instanceof Error ? error.stack : "No stack"}`);
|
|
256
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
257
|
+
if (errorMessage.toLowerCase().includes("invalid protobuf")) {
|
|
258
|
+
res.status(400).json({ error: errorMessage });
|
|
259
|
+
return;
|
|
260
|
+
}
|
|
261
|
+
res.status(500).json({ error: "Internal server error" });
|
|
262
|
+
}
|
|
216
263
|
parseOTLPJSONRequest(body) {
|
|
217
264
|
const traces = [];
|
|
218
265
|
require_logger.logger.debug(`[OtlpReceiver] Parsing request with ${body.resourceSpans?.length || 0} resource spans`);
|
|
@@ -251,44 +298,42 @@ var OTLPReceiver = class {
|
|
|
251
298
|
return traces;
|
|
252
299
|
}
|
|
253
300
|
async parseOTLPProtobufRequest(body) {
|
|
254
|
-
const traces = [];
|
|
255
301
|
const decoded = await decodeExportTraceServiceRequest(body);
|
|
256
302
|
require_logger.logger.debug(`[OtlpReceiver] Parsing protobuf request with ${decoded.resourceSpans?.length || 0} resource spans`);
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
303
|
+
return (decoded.resourceSpans || []).flatMap((resourceSpan) => this.parseDecodedResourceSpan(resourceSpan));
|
|
304
|
+
}
|
|
305
|
+
parseDecodedResourceSpan(resourceSpan) {
|
|
306
|
+
const resourceAttributes = this.parseDecodedAttributes(resourceSpan.resource?.attributes);
|
|
307
|
+
require_logger.logger.debug(`[OtlpReceiver] Parsed ${Object.keys(resourceAttributes).length} resource attributes from protobuf`);
|
|
308
|
+
return (resourceSpan.scopeSpans || []).flatMap((scopeSpan) => (scopeSpan.spans || []).map((span) => this.createDecodedParsedTrace(resourceAttributes, scopeSpan, span)));
|
|
309
|
+
}
|
|
310
|
+
createDecodedParsedTrace(resourceAttributes, scopeSpan, span) {
|
|
311
|
+
const traceId = bytesToHex(span.traceId, 32);
|
|
312
|
+
const spanId = bytesToHex(span.spanId, 16);
|
|
313
|
+
const parentSpanId = span.parentSpanId?.length ? bytesToHex(span.parentSpanId, 16) : void 0;
|
|
314
|
+
require_logger.logger.debug(`[OtlpReceiver] Processing protobuf span: ${span.name} (${spanId}) in trace ${traceId}`);
|
|
315
|
+
const spanKindCode = span.kind ?? 0;
|
|
316
|
+
const spanKindName = SPAN_KIND_MAP[spanKindCode] ?? "unspecified";
|
|
317
|
+
return {
|
|
318
|
+
traceId,
|
|
319
|
+
span: {
|
|
320
|
+
spanId,
|
|
321
|
+
parentSpanId,
|
|
322
|
+
name: span.name,
|
|
323
|
+
startTime: this.toMilliseconds(span.startTimeUnixNano) ?? 0,
|
|
324
|
+
endTime: this.toMilliseconds(span.endTimeUnixNano),
|
|
325
|
+
attributes: {
|
|
267
326
|
...resourceAttributes,
|
|
268
327
|
...this.parseDecodedAttributes(span.attributes),
|
|
269
328
|
"otel.scope.name": scopeSpan.scope?.name,
|
|
270
329
|
"otel.scope.version": scopeSpan.scope?.version,
|
|
271
330
|
"otel.span.kind": spanKindName,
|
|
272
|
-
"otel.span.kind_code":
|
|
273
|
-
}
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
traces.push({
|
|
277
|
-
traceId,
|
|
278
|
-
span: {
|
|
279
|
-
spanId,
|
|
280
|
-
parentSpanId,
|
|
281
|
-
name: span.name,
|
|
282
|
-
startTime: startTimeNano / 1e6,
|
|
283
|
-
endTime: endTimeNano ? endTimeNano / 1e6 : void 0,
|
|
284
|
-
attributes,
|
|
285
|
-
statusCode: span.status?.code,
|
|
286
|
-
statusMessage: span.status?.message
|
|
287
|
-
}
|
|
288
|
-
});
|
|
331
|
+
"otel.span.kind_code": spanKindCode
|
|
332
|
+
},
|
|
333
|
+
statusCode: span.status?.code,
|
|
334
|
+
statusMessage: span.status?.message
|
|
289
335
|
}
|
|
290
|
-
}
|
|
291
|
-
return traces;
|
|
336
|
+
};
|
|
292
337
|
}
|
|
293
338
|
parseDecodedAttributes(attributes) {
|
|
294
339
|
if (!attributes) return {};
|
|
@@ -389,15 +434,26 @@ var OTLPReceiver = class {
|
|
|
389
434
|
getApp() {
|
|
390
435
|
return this.app;
|
|
391
436
|
}
|
|
437
|
+
setAcceptFormats(acceptFormats) {
|
|
438
|
+
this.acceptFormats = normalizeAcceptFormats(acceptFormats);
|
|
439
|
+
}
|
|
440
|
+
toMilliseconds(value) {
|
|
441
|
+
if (value === void 0) return;
|
|
442
|
+
return Number(value) / 1e6;
|
|
443
|
+
}
|
|
392
444
|
};
|
|
393
445
|
let otlpReceiver = null;
|
|
394
|
-
function getOTLPReceiver() {
|
|
395
|
-
if (
|
|
446
|
+
function getOTLPReceiver(options) {
|
|
447
|
+
if (otlpReceiver) {
|
|
448
|
+
otlpReceiver.setAcceptFormats(options?.acceptFormats);
|
|
449
|
+
return otlpReceiver;
|
|
450
|
+
}
|
|
451
|
+
otlpReceiver = new OTLPReceiver(options);
|
|
396
452
|
return otlpReceiver;
|
|
397
453
|
}
|
|
398
|
-
async function startOTLPReceiver(port, host) {
|
|
454
|
+
async function startOTLPReceiver(port, host, acceptFormats) {
|
|
399
455
|
require_logger.logger.debug("[OtlpReceiver] Starting receiver through startOTLPReceiver function");
|
|
400
|
-
await getOTLPReceiver().listen(port, host);
|
|
456
|
+
await getOTLPReceiver({ acceptFormats }).listen(port, host);
|
|
401
457
|
}
|
|
402
458
|
async function stopOTLPReceiver() {
|
|
403
459
|
require_logger.logger.debug("[OtlpReceiver] Stopping receiver through stopOTLPReceiver function");
|
|
@@ -410,4 +466,4 @@ async function stopOTLPReceiver() {
|
|
|
410
466
|
exports.startOTLPReceiver = startOTLPReceiver;
|
|
411
467
|
exports.stopOTLPReceiver = stopOTLPReceiver;
|
|
412
468
|
|
|
413
|
-
//# sourceMappingURL=otlpReceiver-
|
|
469
|
+
//# sourceMappingURL=otlpReceiver-DNSQj6bf.cjs.map
|