promptfoo 0.33.1 → 0.33.2
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 +3 -2
- package/dist/package.json +1 -1
- package/dist/src/assertions.d.ts.map +1 -1
- package/dist/src/assertions.js +67 -15
- package/dist/src/assertions.js.map +1 -1
- package/dist/src/providers/openai.d.ts +8 -1
- package/dist/src/providers/openai.d.ts.map +1 -1
- package/dist/src/providers/openai.js +3 -1
- package/dist/src/providers/openai.js.map +1 -1
- package/dist/src/providers/openaiUtil.d.ts +4 -0
- package/dist/src/providers/openaiUtil.d.ts.map +1 -1
- package/dist/src/providers/openaiUtil.js.map +1 -1
- package/dist/src/table.d.ts.map +1 -1
- package/dist/src/table.js +9 -10
- package/dist/src/table.js.map +1 -1
- package/dist/src/types.d.ts +1 -1
- package/dist/src/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/src/web/nextui/404/index.html +0 -1
- package/dist/src/web/nextui/404.html +0 -1
- package/dist/src/web/nextui/_next/static/-LL1eIF6a-GyAntT7tzmp/_buildManifest.js +0 -1
- package/dist/src/web/nextui/_next/static/-LL1eIF6a-GyAntT7tzmp/_ssgManifest.js +0 -1
- package/dist/src/web/nextui/_next/static/chunks/21-8a2c661f5df627d6.js +0 -1
- package/dist/src/web/nextui/_next/static/chunks/293-f7537306415679fd.js +0 -89
- package/dist/src/web/nextui/_next/static/chunks/339-501c32916b785ef1.js +0 -1
- package/dist/src/web/nextui/_next/static/chunks/396-ddebcf106bb56e13.js +0 -1
- package/dist/src/web/nextui/_next/static/chunks/420-2e5cd10f16aeaa4f.js +0 -2
- package/dist/src/web/nextui/_next/static/chunks/548-46c7c1d35ca1bc02.js +0 -1
- package/dist/src/web/nextui/_next/static/chunks/596-297f7ff4a0436e87.js +0 -25
- package/dist/src/web/nextui/_next/static/chunks/753-f62bfa32dbd9ff14.js +0 -8
- package/dist/src/web/nextui/_next/static/chunks/756-1adee6171fcb68fb.js +0 -1
- package/dist/src/web/nextui/_next/static/chunks/808-90426be34a5d9784.js +0 -1
- package/dist/src/web/nextui/_next/static/chunks/82-ca0360e473d81167.js +0 -7
- package/dist/src/web/nextui/_next/static/chunks/860-af67976c17d7f0d3.js +0 -1
- package/dist/src/web/nextui/_next/static/chunks/886-0c6a1912422ba9af.js +0 -37
- package/dist/src/web/nextui/_next/static/chunks/919-d71c386cf4a86911.js +0 -44
- package/dist/src/web/nextui/_next/static/chunks/975-380318b3b26ba688.js +0 -1
- package/dist/src/web/nextui/_next/static/chunks/app/auth/login/page-0c87ef00a5707e79.js +0 -1
- package/dist/src/web/nextui/_next/static/chunks/app/auth/signup/page-d9f9ec167e1619d3.js +0 -1
- package/dist/src/web/nextui/_next/static/chunks/app/datasets/page-8e6de69fb0c49d64.js +0 -1
- package/dist/src/web/nextui/_next/static/chunks/app/eval/[id]/not-found-366629541fd598e9.js +0 -1
- package/dist/src/web/nextui/_next/static/chunks/app/eval/[id]/page-8acbea67f7657585.js +0 -1
- package/dist/src/web/nextui/_next/static/chunks/app/eval/page-7ba5274606a00cb2.js +0 -1
- package/dist/src/web/nextui/_next/static/chunks/app/layout-13f47c15bd8e5db9.js +0 -1
- package/dist/src/web/nextui/_next/static/chunks/app/page-1ae60660130041b2.js +0 -1
- package/dist/src/web/nextui/_next/static/chunks/app/prompts/page-d00bb3e4da795d59.js +0 -1
- package/dist/src/web/nextui/_next/static/chunks/app/setup/page-a09e091ef71a0a45.js +0 -1
- package/dist/src/web/nextui/_next/static/chunks/ca377847-26b462611379a4f7.js +0 -6
- package/dist/src/web/nextui/_next/static/chunks/fd9d1056-fba4b53a2f01213b.js +0 -9
- package/dist/src/web/nextui/_next/static/chunks/framework-8883d1e9be70c3da.js +0 -25
- package/dist/src/web/nextui/_next/static/chunks/main-app-581ccf0003955b21.js +0 -1
- package/dist/src/web/nextui/_next/static/chunks/main-b81070c77c77982d.js +0 -1
- package/dist/src/web/nextui/_next/static/chunks/pages/_app-52924524f99094ab.js +0 -1
- package/dist/src/web/nextui/_next/static/chunks/pages/_error-c92d5c4bb2b49926.js +0 -1
- package/dist/src/web/nextui/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js +0 -1
- package/dist/src/web/nextui/_next/static/chunks/webpack-e0942e16d7068577.js +0 -1
- package/dist/src/web/nextui/_next/static/css/16c1dd82fc87c9d7.css +0 -1
- package/dist/src/web/nextui/_next/static/css/47ee2c14c17ee975.css +0 -1
- package/dist/src/web/nextui/_next/static/css/48d388184a2f4ce3.css +0 -1
- package/dist/src/web/nextui/_next/static/css/6de4b83ebb0d35d6.css +0 -1
- package/dist/src/web/nextui/_next/static/css/8119d8bd13a8adab.css +0 -1
- package/dist/src/web/nextui/_next/static/css/d214f868fd093747.css +0 -1
- package/dist/src/web/nextui/_next/static/media/0e4fe491bf84089c-s.p.woff2 +0 -0
- package/dist/src/web/nextui/_next/static/media/1c57ca6f5208a29b-s.woff2 +0 -0
- package/dist/src/web/nextui/_next/static/media/3dbd163d3bb09d47-s.woff2 +0 -0
- package/dist/src/web/nextui/_next/static/media/42d52f46a26971a3-s.woff2 +0 -0
- package/dist/src/web/nextui/_next/static/media/5647e4c23315a2d2-s.woff2 +0 -0
- package/dist/src/web/nextui/_next/static/media/627622453ef56b0d-s.p.woff2 +0 -0
- package/dist/src/web/nextui/_next/static/media/7be645d133f3ee22-s.woff2 +0 -0
- package/dist/src/web/nextui/_next/static/media/7c53f7419436e04b-s.woff2 +0 -0
- package/dist/src/web/nextui/_next/static/media/8fb72f69fba4e3d2-s.woff2 +0 -0
- package/dist/src/web/nextui/_next/static/media/912a9cfe43c928d9-s.woff2 +0 -0
- package/dist/src/web/nextui/_next/static/media/934c4b7cb736f2a3-s.p.woff2 +0 -0
- package/dist/src/web/nextui/_next/static/media/a5b77b63ef20339c-s.woff2 +0 -0
- package/dist/src/web/nextui/_next/static/media/a6d330d7873e7320-s.woff2 +0 -0
- package/dist/src/web/nextui/_next/static/media/baf12dd90520ae41-s.woff2 +0 -0
- package/dist/src/web/nextui/_next/static/media/bbdb6f0234009aba-s.woff2 +0 -0
- package/dist/src/web/nextui/_next/static/media/cff529cd86cc0276-s.woff2 +0 -0
- package/dist/src/web/nextui/_next/static/media/d117eea74e01de14-s.woff2 +0 -0
- package/dist/src/web/nextui/_next/static/media/dfa8b99978df7bbc-s.woff2 +0 -0
- package/dist/src/web/nextui/_next/static/media/e25729ca87cc7df9-s.woff2 +0 -0
- package/dist/src/web/nextui/_next/static/media/eb52b768f62eeeb4-s.woff2 +0 -0
- package/dist/src/web/nextui/_next/static/media/f06116e890b3dadb-s.woff2 +0 -0
- package/dist/src/web/nextui/api/config +0 -1
- package/dist/src/web/nextui/auth/callback +0 -1
- package/dist/src/web/nextui/auth/login/index.html +0 -1
- package/dist/src/web/nextui/auth/login/index.txt +0 -12
- package/dist/src/web/nextui/auth/signup/index.html +0 -1
- package/dist/src/web/nextui/auth/signup/index.txt +0 -12
- package/dist/src/web/nextui/datasets/index.html +0 -1
- package/dist/src/web/nextui/datasets/index.txt +0 -12
- package/dist/src/web/nextui/eval/index.html +0 -1
- package/dist/src/web/nextui/eval/index.txt +0 -14
- package/dist/src/web/nextui/favicon.ico +0 -0
- package/dist/src/web/nextui/index.html +0 -1
- package/dist/src/web/nextui/index.txt +0 -13
- package/dist/src/web/nextui/logo.svg +0 -30
- package/dist/src/web/nextui/prompts/index.html +0 -1
- package/dist/src/web/nextui/prompts/index.txt +0 -12
- package/dist/src/web/nextui/setup/index.html +0 -27
- package/dist/src/web/nextui/setup/index.txt +0 -14
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[860],{2810:function(e,t,s){"use strict";let n;async function l(){if(!n){let e=await fetch("/api/config"),t=await e.json();n=t.apiBaseUrl}return n}s.d(t,{b:function(){return l}})},1860:function(e,t,s){"use strict";s.r(t),s.d(t,{default:function(){return eN}});var n=s(7437),l=s(2265),r=s(2130),a=s(6882),i=s(3388),o=s(4033),c=s(3082),d=s(5551),u=s(6507),p=s(7760),h=s(4081),m=s(182),x=s(819),j=s(8212),f=s(5507),g=s(923),v=s(654),y=s(33),b=s(3457),Z=s(8276),w=s(3226),C=s(2467),S=s(9605),k=s(3391),R=s(9190),N=s(6704),P=s(9394),E=s(1797),F=s(6337),L=s(1101),D=s(9872),V=s(2653),I=s(3533),M=s(4740),O=s(4660);let W=(0,O.Ue)(e=>({table:null,setTable:t=>e(()=>({table:t})),config:null,setConfig:t=>e(()=>({config:t}))})),T=["#fd7f6f","#7eb0d5","#b2e061","#bd7ebe","#ffb55a","#ffee65","#beb9db","#fdcce5","#8bd3c7"];function U(e){let{table:t}=e,s=(0,l.useRef)(null),r=(0,l.useRef)(null);return(0,l.useEffect)(()=>{if(!s.current)return;r.current&&r.current.destroy();let e=t.body.flatMap(e=>e.outputs.map(e=>e.score)),n=Math.min(...e),l=(Math.ceil(Math.max(...e))-Math.floor(n))/10,a=Array.from({length:11},(e,t)=>parseFloat((Math.floor(n)+t*l).toFixed(2))),i=t.head.prompts.map((e,s)=>{let n=t.body.flatMap(e=>e.outputs[s].score),r=a.map(e=>n.filter(t=>t>=e&&t<e+l).length);return{label:"Prompt ".concat(s+1),data:r,backgroundColor:T[s%T.length]}});r.current=new N.kL(s.current,{type:"bar",data:{labels:a,datasets:i},options:{animation:!1,plugins:{title:{display:!0,text:"Score Distribution"},legend:{display:!1},tooltip:{callbacks:{title:function(e){let t=e[0].datasetIndex;return"Prompt ".concat(t+1)},label:function(e){let t=e.dataIndex,s=a[t],n=a[t+1];return n?"".concat(s," <= score < ").concat(n):"".concat(s," <= score")}}}}}})},[t]),(0,n.jsx)("canvas",{ref:s,style:{maxHeight:"300px"}})}function A(e){let{table:t}=e,s=(0,l.useRef)(null),r=(0,l.useRef)(null);return(0,l.useEffect)(()=>{if(!s.current)return;r.current&&r.current.destroy();let e=t.head.prompts.map((e,s)=>{let n=t.body.flatMap(e=>e.outputs[s]),l=n.filter(e=>e.pass).length,r=l/n.length*100;return{label:"Prompt ".concat(s+1),data:[r],backgroundColor:T[s%T.length]}});r.current=new N.kL(s.current,{type:"bar",data:{labels:["Pass Rate (%)"],datasets:e},options:{animation:!1,plugins:{title:{display:!0,text:"Pass rate"},legend:{display:!0}}}})},[t]),(0,n.jsx)("canvas",{ref:s,style:{maxHeight:"300px"}})}function z(e){let{table:t}=e,s=(0,l.useRef)(null),r=(0,l.useRef)(null),[a,i]=(0,l.useState)(0),[o,c]=(0,l.useState)(1),[d,u]=(0,l.useState)(!1);return(0,l.useEffect)(()=>{if(!s.current)return;r.current&&r.current.destroy();let e=t.body.flatMap(e=>e.outputs.map(e=>e.score)),n=Math.min(...e),l=Math.max(...e),i=t.body.map(e=>{let t=e.outputs[a].score,s=e.outputs[o].score;return{x:t,y:s,backgroundColor:s>t?"green":s<t?"red":"gray"}});r.current=new N.kL(s.current,{type:"scatter",data:{datasets:[{data:i,backgroundColor:i.map(e=>e.backgroundColor)},{type:"line",data:[{x:n,y:n},{x:l,y:l}],borderColor:"gray",borderWidth:1,borderDash:[5,5],pointRadius:0}]},options:{animation:!1,plugins:{legend:{display:!1},tooltip:{callbacks:{label:function(e){let s=t.body[e.dataIndex],n=s.outputs[0].text,l=s.outputs[1].text;return n.length>30&&(n=n.substring(0,30)+"..."),l.length>30&&(l=l.substring(0,30)+"..."),"Output 1: ".concat(n,"\nOutput 2: ").concat(l)}}}},scales:{x:{title:{display:!0,text:"Prompt ".concat(a+1," Score")}},y:{title:{display:!0,text:"Prompt ".concat(o+1," Score")}}}}})},[t,a,o]),(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(P.Z,{open:d,onClose:()=>u(!1),children:[(0,n.jsx)(E.Z,{children:"Compare prompt outputs"}),(0,n.jsxs)(F.Z,{children:[(0,n.jsx)(h.Z,{sx:{m:1,minWidth:120},children:(0,n.jsx)(v.Z,{value:a,onChange:e=>i(Number(e.target.value)),children:t.head.prompts.map((e,t)=>(0,n.jsxs)(f.Z,{value:t,children:["Prompt ",t+1]},t))})}),(0,n.jsx)(h.Z,{sx:{m:1,minWidth:120},children:(0,n.jsx)(v.Z,{value:o,onChange:e=>c(Number(e.target.value)),children:t.head.prompts.map((e,t)=>(0,n.jsxs)(f.Z,{value:t,children:["Prompt ",t+1]},t))})})]})]}),(0,n.jsx)("canvas",{ref:s,style:{maxHeight:"300px",cursor:"pointer"},onClick:()=>u(!0)})]})}function _(e){let{columnVisibility:t}=e,s=(0,L.Z)();N.kL.defaults.color="dark"===s.palette.mode?"#aaa":"#666";let[r,a]=(0,l.useState)(!0),{table:i}=W();if(!i||!r||i.head.prompts.length<2)return null;let o=i.body.flatMap(e=>e.outputs.map(e=>e.score));return 1===new Set(o).size?null:(0,n.jsx)(M.SV,{fallback:null,children:(0,n.jsxs)(D.Z,{style:{position:"relative",padding:s.spacing(3)},children:[(0,n.jsx)(V.Z,{style:{position:"absolute",right:0,top:0},onClick:()=>a(!1),children:(0,n.jsx)(I.Z,{})}),(0,n.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",width:"100%"},children:[(0,n.jsx)("div",{style:{width:"33%"},children:(0,n.jsx)(A,{table:i})}),(0,n.jsx)("div",{style:{width:"33%"},children:(0,n.jsx)(U,{table:i})}),(0,n.jsx)("div",{style:{width:"33%"},children:(0,n.jsx)(z,{table:i})})]})]})})}N.kL.register(N.vn,N.ST,N.ho,N.uw,N.f$,N.ZL,N.jn,N.od,N.u,N.wL);var H=s(9116);s(5777);var B=s(7660),J=s(3216),G=s(5391),q=s(1396),Y=s.n(q);s(8715);var X=e=>{let{lookup:t}=e;return t&&Object.keys(t).length?(0,n.jsx)("div",{className:"custom-metric-container",children:Object.entries(t).map(e=>{let[t,s]=e;return t&&s?(0,n.jsxs)("span",{children:[t,": ",s.toFixed(2)]},t):null})}):null},$=s(2834),K=s(5446),Q=s(9329),ee=s(4719),et=s(3701),es=s(9279),en=s(666),el=s(5795),er=s(6988),ea=s(4147);function ei(e){let{gradingResults:t}=e;return t?(0,n.jsxs)(u.Z,{mt:2,children:[(0,n.jsx)(w.Z,{variant:"subtitle1",children:"Assertions"}),(0,n.jsx)(el.Z,{children:(0,n.jsxs)(et.Z,{children:[(0,n.jsx)(er.Z,{children:(0,n.jsxs)(ea.Z,{children:[(0,n.jsx)(en.Z,{style:{fontWeight:"bold"},children:"Pass"}),(0,n.jsx)(en.Z,{style:{fontWeight:"bold"},children:"Score"}),(0,n.jsx)(en.Z,{style:{fontWeight:"bold"},children:"Type"}),(0,n.jsx)(en.Z,{style:{fontWeight:"bold"},children:"Value"}),(0,n.jsx)(en.Z,{style:{fontWeight:"bold"},children:"Reason"})]})}),(0,n.jsx)(es.Z,{children:t.map((e,t)=>{var s,l;return(0,n.jsxs)(ea.Z,{children:[(0,n.jsx)(en.Z,{children:e.pass?"✅":"❌"}),(0,n.jsx)(en.Z,{children:e.score.toFixed(2)}),(0,n.jsx)(en.Z,{children:(null===(s=e.assertion)||void 0===s?void 0:s.type)||""}),(0,n.jsx)(en.Z,{style:{whiteSpace:"pre-wrap"},children:(null===(l=e.assertion)||void 0===l?void 0:l.value)?String(e.assertion.value):"-"}),(0,n.jsx)(en.Z,{style:{whiteSpace:"pre-wrap"},children:e.reason})]},t)})})]})})]}):null}function eo(e){let{open:t,onClose:s,prompt:r,provider:a,output:i,gradingResults:o}=e,[c,p]=(0,l.useState)(!1);(0,l.useEffect)(()=>{p(!1)},[r]);let h=async e=>{await navigator.clipboard.writeText(e),p(!0)};return(0,n.jsxs)(P.Z,{open:t,onClose:s,fullWidth:!0,maxWidth:"lg",children:[(0,n.jsxs)(E.Z,{children:["Details",a&&": ".concat(a)]}),(0,n.jsxs)(F.Z,{children:[(0,n.jsxs)(u.Z,{mb:2,children:[(0,n.jsx)(w.Z,{variant:"subtitle1",style:{marginBottom:"1rem"},children:"Prompt"}),(0,n.jsx)(K.u,{readOnly:!0,value:r,style:{width:"100%",padding:"0.75rem"},maxRows:20}),(0,n.jsx)(V.Z,{onClick:()=>h(r),style:{position:"absolute",right:"10px",top:"10px"},children:c?(0,n.jsx)(ee.Z,{}):(0,n.jsx)(Q.Z,{})})]}),i&&(0,n.jsxs)(u.Z,{my:2,children:[(0,n.jsx)(w.Z,{variant:"subtitle1",style:{marginBottom:"1rem",marginTop:"1rem"},children:"Output"}),(0,n.jsx)(K.u,{readOnly:!0,maxRows:20,value:i,style:{width:"100%",padding:"0.75rem"}})]}),(0,n.jsx)(ei,{gradingResults:o})]}),(0,n.jsx)($.Z,{children:(0,n.jsx)(d.Z,{onClick:s,children:"Close"})})]})}function ec(e){return null===e||0===e||1===e?"":"(".concat(e.toFixed(2),")")}function ed(e){return"string"==typeof e||"number"==typeof e?e.toString().length:Array.isArray(e)?e.reduce((e,t)=>e+ed(t),0):l.isValidElement(e)&&e.props.children?l.Children.toArray(e.props.children).reduce((e,t)=>e+ed(t),0):0}function eu(e){let t,{text:s,maxLength:r}=e,[a,i]=l.useState(!0),o=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if("string"==typeof e||"number"==typeof e){let s=e.toString();return s.slice(0,r-t)}if(Array.isArray(e)){let s=[],n=t;for(let t of e){let e=ed(t);if(n+e>r){s.push(o(t,n));break}s.push(t),n+=e}return s}if(l.isValidElement(e)&&e.props.children){let s=ed(e.props.children);if(s>r-t)return l.cloneElement(e,{...e.props,children:o(e.props.children,t)})}return e};t=l.isValidElement(s)||"string"==typeof s?s:JSON.stringify(s);let c=a?o(t):t,d=ed(t)>r;return(0,n.jsxs)("div",{style:{cursor:d?"pointer":"normal"},onClick:()=>{i(!a)},children:[c,a&&ed(t)>r&&(0,n.jsx)("span",{children:"..."})]})}function ep(e){var t,s,r;let a,i,{output:o,maxTextLength:c,rowIndex:d,promptIndex:u,onRating:p,firstOutput:h,filterMode:m}=e,[x,j]=l.useState(!1),f="string"==typeof o.text?o.text:JSON.stringify(o.text),g=[];if(!o.pass&&f.includes("---")?f=(g=f.split("---")).slice(1).join("---"):g=[f],"different"===m&&h){let e,t="string"==typeof h.text?h.text:JSON.stringify(h.text);t.includes("---")&&(t=t.split("---").slice(1).join("---"));try{JSON.parse(t),JSON.parse(f),e=(0,H.CT)(t,f)}catch(s){e=t.includes(". ")&&f.includes(". ")?(0,H.SY)(t,f):(0,H.NV)(t,f)}a=(0,n.jsx)(n.Fragment,{children:e.map((e,t)=>e.added?(0,n.jsx)("ins",{children:e.value},t):e.removed?(0,n.jsx)("del",{children:e.value},t):(0,n.jsx)("span",{children:e.value},t))})}let v=e=>{p(d,u,e)},y=(0,n.jsxs)("span",{children:[o.latencyMs," ms"]});(null===(t=o.tokenUsage)||void 0===t?void 0:t.cached)?i=(0,n.jsxs)("span",{children:[o.tokenUsage.cached," tokens (cached)"]}):(null===(s=o.tokenUsage)||void 0===s?void 0:s.total)&&(i=(0,n.jsxs)("span",{children:[o.tokenUsage.total," tokens"]}));let b=(0,n.jsxs)("span",{className:"cell-detail",children:[i,i&&y?" | ":"",y]}),w=(0,n.jsxs)("div",{className:"cell-actions",children:[o.prompt&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("span",{className:"action",onClick:()=>{j(!0)},children:(0,n.jsx)(Z.Z,{title:"View ouput and test details",children:(0,n.jsx)("span",{children:"\uD83D\uDD0E"})})}),(0,n.jsx)(eo,{open:x,onClose:()=>{j(!1)},prompt:o.prompt,provider:o.provider,gradingResults:null===(r=o.gradingResult)||void 0===r?void 0:r.componentResults,output:f})]}),(0,n.jsx)("span",{className:"action",onClick:()=>v(!0),children:(0,n.jsx)(Z.Z,{title:"Mark test passed (score 1.0)",children:(0,n.jsx)("span",{children:"\uD83D\uDC4D"})})}),(0,n.jsx)("span",{className:"action",onClick:()=>v(!1),children:(0,n.jsx)(Z.Z,{title:"Mark test failed (score 0.0)",children:(0,n.jsx)("span",{children:"\uD83D\uDC4E"})})}),(0,n.jsx)("span",{className:"action",onClick:()=>{let e=prompt("Set test score (0.0 - 1.0):");if(null!==e){let t=parseFloat(e);!isNaN(t)&&t>=0&&t<=1?p(d,u,!0,t):alert("Invalid score. Please enter a value between 0.0 and 1.0.")}},children:(0,n.jsx)(Z.Z,{title:"Set test score",children:(0,n.jsx)("span",{children:"✏️"})})})]});return(0,n.jsxs)("div",{className:"cell",children:[o.pass&&(0,n.jsxs)("div",{className:"status pass",children:[(0,n.jsxs)("span",{className:"pill",children:["PASS",(0,n.jsx)("span",{className:"score",children:ec(o.score)})]}),(0,n.jsx)(X,{lookup:o.namedScores})," ",b]}),!o.pass&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("div",{className:"status fail",children:[(0,n.jsxs)("span",{className:"pill",children:["FAIL",o.score>0?" ":"",(0,n.jsx)("span",{className:"score",children:ec(o.score)})]}),(0,n.jsx)(X,{lookup:o.namedScores})," ",b]}),(0,n.jsx)("div",{className:"fail-reason",children:g[0].trim().split("\n").map((e,t)=>(0,n.jsxs)(l.Fragment,{children:[e,(0,n.jsx)("br",{})]},t))})]}),(0,n.jsx)(eu,{text:a||f,maxLength:c}),w]})}function eh(e){let{text:t,maxLength:s,expandedText:r,resourceId:a,className:i}=e,[o,c]=l.useState(!1);return(0,n.jsxs)("div",{className:"".concat(i||""),children:[(0,n.jsx)(eu,{text:t,maxLength:s}),r&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(Z.Z,{title:"View prompt",children:(0,n.jsx)("span",{className:"action",onClick:()=>{c(!0)},children:"\uD83D\uDD0E"})}),(0,n.jsx)(eo,{open:o,onClose:()=>{c(!1)},prompt:r}),a&&(0,n.jsx)(Z.Z,{title:"View other evals and datasets for this prompt",children:(0,n.jsx)("span",{className:"action",children:(0,n.jsx)(Y(),{href:"/prompts/?id=".concat(a),target:"_blank",children:(0,n.jsx)(G.Z,{fontSize:"small"})})})})]})]})}function em(e){let{maxTextLength:t,columnVisibility:s,wordBreak:a,filterMode:i,failureFilter:o,onFailureFilterToggle:c}=e,{table:d,setTable:u}=W();(0,r.Z)(d,"Table should be defined");let{head:h,body:x}=d,j=h.prompts.map((e,t)=>x.reduce((e,s)=>e+(s.outputs[t].pass?1:0),0)),f=h.prompts.map((e,t)=>x.reduce((e,s)=>{var n,l;return e+((null===(l=s.outputs[t].gradingResult)||void 0===l?void 0:null===(n=l.componentResults)||void 0===n?void 0:n.length)||0)},0)),g=h.prompts.map((e,t)=>x.reduce((e,s)=>{var n;let l=null===(n=s.outputs[t].gradingResult)||void 0===n?void 0:n.componentResults;return e+(l?l.filter(e=>e.pass).length:0)},0)),v=(e,t,s,n)=>{let l=[...x],r={...l[e]},a=[...r.outputs];a[t].pass=s,a[t].score=void 0===n?s?1:0:n||0,r.outputs=a,l[e]=r,u({head:h,body:l})},y=j.reduce((e,t,s,n)=>t>n[e]?s:e,0),b=j[y],Z=(0,B.Cl)(),w=[];h.vars.length>0&&w.push(Z.group({id:"vars",header:()=>(0,n.jsx)("span",{children:"Variables"}),columns:h.vars.map((e,s)=>Z.accessor(e=>e.vars[s],{id:"Variable ".concat(s+1),header:()=>(0,n.jsx)(eh,{text:e,maxLength:t}),cell:e=>(0,n.jsx)(eu,{text:e.getValue(),maxLength:t}),size:50}))})),w.push(Z.group({id:"prompts",header:()=>(0,n.jsx)("span",{children:"Outputs"}),columns:h.prompts.map((e,s)=>Z.accessor(e=>(function(e){if("string"==typeof e){let t=e.startsWith("[PASS]"),s=e;return e.startsWith("[PASS]")?s=s.slice(6):e.startsWith("[FAIL]")&&(s=s.slice(6)),{text:s,pass:t,score:t?1:0}}return e})(e.outputs[s]),{id:"Prompt ".concat(s+1),header:()=>{var l,r,a,d,u,h,v;let y=j[s]&&x.length?(j[s]/x.length*100).toFixed(2):"0.00",Z=j[s]===b&&0!==b,w="Prompt ".concat(s+1),C=o[w]||!1;return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(eh,{className:"prompt-container",text:"string"==typeof e?e:e.display,expandedText:"string"==typeof e?void 0:e.raw,maxLength:t,resourceId:"string"==typeof e?void 0:e.id}),(0,n.jsxs)("div",{className:"summary",children:[(0,n.jsxs)("span",{className:"highlight ".concat(Z?"success":""),children:["Pass rate: ",(0,n.jsxs)("strong",{children:[y,"%"]})," (",j[s],"/",x.length," cases",f[s]?(0,n.jsxs)("span",{children:[", ",g[s],"/",f[s]," asserts"]}):null,")"]}),((null===(l=e.metrics)||void 0===l?void 0:l.totalLatencyMs)||(null===(a=e.metrics)||void 0===a?void 0:null===(r=a.tokenUsage)||void 0===r?void 0:r.total))&&(0,n.jsx)("span",{children:" avg"}),(null===(d=e.metrics)||void 0===d?void 0:d.totalLatencyMs)?(0,n.jsxs)("span",{children:[" ",Intl.NumberFormat(void 0,{maximumFractionDigits:0}).format(e.metrics.totalLatencyMs/x.length),"ms"]}):null,(null===(h=e.metrics)||void 0===h?void 0:null===(u=h.tokenUsage)||void 0===u?void 0:u.total)?(0,n.jsxs)("span",{children:[" ",Intl.NumberFormat(void 0,{maximumFractionDigits:0}).format(e.metrics.tokenUsage.total/x.length)," ","tokens"]}):null]}),(null===(v=e.metrics)||void 0===v?void 0:v.namedScores)&&Object.keys(e.metrics.namedScores).length>0?(0,n.jsx)("div",{style:{marginTop:"0.5rem"},children:(0,n.jsx)(X,{lookup:e.metrics.namedScores})}):null,"failures"===i&&(0,n.jsx)(m.Z,{sx:{"& .MuiFormControlLabel-label":{fontSize:"0.75rem"}},control:(0,n.jsx)(p.Z,{checked:C,onChange:e=>c(w,e.target.checked)}),label:"Show failures"})]})},cell:e=>(0,n.jsx)(ep,{output:e.getValue(),maxTextLength:t,rowIndex:e.row.index,promptIndex:s,onRating:v,firstOutput:S[e.row.index].outputs[0],filterMode:i})}))}));let C=x.some(e=>e.description);C&&w.splice(0,0,{accessorFn:e=>e.description||"",id:"description",header:()=>(0,n.jsx)("span",{children:"Description"}),cell:e=>(0,n.jsx)(eu,{text:String(e.getValue()),maxLength:t}),size:50});let S=l.useMemo(()=>"failures"===i?Object.values(o).every(e=>!e)?x:x.filter(e=>e.outputs.some((e,t)=>{let s=!e.pass;return o["Prompt ".concat(t+1)]&&s})):"different"===i?x.filter(e=>!e.outputs.every(t=>t.text===e.outputs[0].text)):x,[x,o,i]),k=(0,J.b7)({data:S,columns:w,columnResizeMode:"onChange",getCoreRowModel:(0,B.sC)(),state:{columnVisibility:s}});return(0,n.jsxs)("table",{className:"results-table ".concat(t<=25?"compact":""),style:{wordBreak:a},children:[(0,n.jsx)("thead",{children:k.getHeaderGroups().map(e=>(0,n.jsx)("tr",{className:"header",children:e.headers.map(e=>(0,n.jsxs)("th",{colSpan:e.colSpan,style:{width:e.getSize()},children:[e.isPlaceholder?null:(0,J.ie)(e.column.columnDef.header,e.getContext()),(0,n.jsx)("div",{onMouseDown:e.getResizeHandler(),onTouchStart:e.getResizeHandler(),className:"resizer ".concat(e.column.getIsResizing()?"isResizing":"")})]},e.id))},e.id))}),(0,n.jsx)("tbody",{children:k.getRowModel().rows.map((e,t)=>{let s=!1;return(0,n.jsx)("tr",{children:e.getVisibleCells().map(e=>{let l=e.column.id.startsWith("Variable")||"description"===e.column.id,r=!l&&!s;return r&&(s=!0),(0,n.jsx)("td",{style:{width:e.column.getSize()},className:"".concat(l?"variable":""," ").concat(0!==t||l?"":"first-prompt-row"," ").concat(r?"first-prompt-col":""),children:(0,J.ie)(e.column.columnDef.cell,e.getContext())},e.id)})},e.id)})})]})}s(2604);var ex=s(2481),ej=s(7175);function ef(e){let{open:t,onClose:r}=e,{config:a}=W(),i=l.useRef(null),[o,c]=l.useState(!1),[p,h]=l.useState("");l.useEffect(()=>{t&&(async()=>{let{default:e}=await s.e(339).then(s.bind(s,8339));h(e.dump(a))})()},[t,a]);let m=()=>{c(!1),r()};return(0,n.jsxs)(P.Z,{open:t,onClose:m,"aria-labelledby":"config-dialog-title",maxWidth:"md",fullWidth:!0,children:[(0,n.jsx)(E.Z,{id:"config-dialog-title",children:(0,n.jsxs)(u.Z,{display:"flex",justifyContent:"space-between",alignItems:"center",children:[(0,n.jsx)(w.Z,{variant:"h6",style:{flexGrow:1},children:"Config"}),(0,n.jsxs)(u.Z,{children:[(0,n.jsx)(Z.Z,{title:"Copy to clipboard",children:(0,n.jsx)(V.Z,{onClick:()=>{i.current&&(i.current.select(),document.execCommand("copy"),c(!0))},children:o?(0,n.jsx)(ee.Z,{}):(0,n.jsx)(ej.Z,{})})}),(0,n.jsx)(Z.Z,{title:"Download .yaml",children:(0,n.jsx)(V.Z,{onClick:()=>{let e=new Blob([p],{type:"text/yaml;charset=utf-8"}),t=URL.createObjectURL(e),s=document.createElement("a");s.href=t,s.download="config.yaml",document.body.appendChild(s),s.click(),document.body.removeChild(s),URL.revokeObjectURL(t)},children:(0,n.jsx)(ex.Z,{})})})]})]})}),(0,n.jsx)(F.Z,{children:(0,n.jsx)(w.Z,{variant:"body1",component:"div",children:(0,n.jsx)("textarea",{ref:i,readOnly:!0,value:p,style:{width:"100%",minHeight:"400px",fontFamily:"monospace",border:"1px solid #ccc"}})})}),(0,n.jsx)($.Z,{children:(0,n.jsx)(d.Z,{onClick:m,color:"primary",children:"Close"})})]})}var eg=s(4173),ev=s(1975),ey=e=>{let{open:t,onClose:s,shareUrl:r}=e,a=(0,l.useRef)(null),[i,o]=(0,l.useState)(!1),c=()=>{s(),o(!1)};return(0,n.jsxs)(P.Z,{open:t,onClose:c,PaperProps:{style:{minWidth:"min(660px, 100%)"}},children:[(0,n.jsx)(E.Z,{children:"Your eval is ready to share"}),(0,n.jsxs)(F.Z,{children:[(0,n.jsx)(ev.Z,{inputRef:a,value:r,fullWidth:!0,InputProps:{readOnly:!0,endAdornment:(0,n.jsx)(V.Z,{onClick:()=>{a.current&&(a.current.select(),document.execCommand("copy"),o(!0))},children:i?(0,n.jsx)(ee.Z,{}):(0,n.jsx)(ej.Z,{})})}}),(0,n.jsx)(eg.Z,{sx:{fontSize:"0.75rem"},children:"Shared URLs are deleted after 1 week."})]}),(0,n.jsx)($.Z,{children:(0,n.jsx)(d.Z,{onClick:c,color:"primary",children:"Close"})})]})},eb=s(1938);let eZ=(0,R.Z)(b.Z)(e=>{let{theme:t}=e;return{maxWidth:"100%",flexWrap:"wrap",[t.breakpoints.down("sm")]:{flexDirection:"column"}}});function ew(e){let{recentEvals:t,onRecentEvalSelected:s,defaultEvalId:i}=e,c=(0,o.useRouter)(),{table:b,config:R}=W(),{setStateFromConfig:N}=(0,eb.o)(),[P,E]=l.useState(250),[F,L]=l.useState({}),[D,V]=l.useState([]),[I,M]=l.useState({}),[O,T]=l.useState("all"),[U,A]=l.useState("break-word"),[z,H]=l.useState(!1),[B,J]=l.useState(""),[G,q]=l.useState(!1),Y=async()=>{q(!0);try{let e=await fetch("https://api.promptfoo.dev/eval",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({data:{version:2,createdAt:new Date().toISOString(),results:{table:b},config:R}})}),{id:t}=await e.json(),s="https://app.promptfoo.dev/eval/".concat(t);J(s),H(!0)}catch(e){alert("Sorry, something went wrong.")}finally{q(!1)}},[X,$]=l.useState(!1);(0,r.Z)(b,"Table data must be loaded before rendering ResultsView");let{head:K}=b,Q=[...K.vars.map((e,t)=>({value:"Variable ".concat(t+1),label:"Var ".concat(t+1,": ").concat(K.vars[t].length>100?K.vars[t].slice(0,97)+"...":K.vars[t]),group:"Variables"})),...K.prompts.map((e,t)=>({value:"Prompt ".concat(t+1),label:"Prompt ".concat(t+1,": ").concat(K.prompts[t].display.length>100?K.prompts[t].display.slice(0,97)+"...":K.prompts[t].display),group:"Prompts"}))];return l.useEffect(()=>{V(Q.map(e=>e.value))},[K]),(0,n.jsxs)("div",{style:{marginLeft:"1rem",marginRight:"1rem"},children:[(0,n.jsx)(u.Z,{py:"md",children:(0,n.jsxs)(eZ,{direction:"row",spacing:4,alignItems:"center",children:[(0,n.jsx)(u.Z,{children:t&&t.length>0&&(0,n.jsxs)(h.Z,{sx:{m:1,minWidth:200},size:"small",children:[(0,n.jsx)(x.Z,{children:"View run"}),(0,n.jsx)(v.Z,{className:"recent-files",label:"Previous runs",defaultValue:i,onChange:e=>s(e.target.value),children:t.map(e=>(0,n.jsx)(f.Z,{value:e.id,children:e.label},e.id))},t.map(e=>e.id).join(","))]})}),(0,n.jsx)(u.Z,{children:(0,n.jsxs)(h.Z,{sx:{m:1,minWidth:200},size:"small",children:[(0,n.jsx)(x.Z,{id:"visible-columns-label",children:"Show columns"}),(0,n.jsx)(v.Z,{labelId:"visible-columns-label",id:"visible-columns",multiple:!0,value:D,onChange:e=>{let{target:{value:t}}=e;V("string"==typeof t?t.split(","):t);let s=[...K.vars.map((e,t)=>"Variable ".concat(t+1)),...K.prompts.map((e,t)=>"Prompt ".concat(t+1))],n={};s.forEach(e=>{n[e]=("string"==typeof t?t.split(","):t).includes(e)}),L(n)},input:(0,n.jsx)(g.Z,{label:"Visible columns"}),renderValue:e=>e.join(", "),children:Q.map(e=>(0,n.jsxs)(f.Z,{dense:!0,value:e.value,children:[(0,n.jsx)(p.Z,{checked:D.indexOf(e.value)>-1}),(0,n.jsx)(j.Z,{primary:e.label})]},e.value))})]})}),(0,n.jsx)(u.Z,{children:(0,n.jsxs)(h.Z,{sx:{minWidth:180},size:"small",children:[(0,n.jsx)(x.Z,{id:"failure-filter-mode-label",children:"Filter"}),(0,n.jsxs)(v.Z,{labelId:"filter-mode-label",id:"filter-mode",value:O,onChange:e=>{let t=e.target.value;T(t);let s={};K.prompts.forEach((e,n)=>{s["Prompt ".concat(n+1)]="failures"===t}),M(s)},label:"Filter",children:[(0,n.jsx)(f.Z,{value:"all",children:"Show all results"}),(0,n.jsx)(f.Z,{value:"failures",children:"Show failures only"}),(0,n.jsx)(f.Z,{value:"different",children:"Show different only"})]})]})}),(0,n.jsxs)(u.Z,{children:[(0,n.jsxs)(w.Z,{mt:2,children:["Max text length: ",P]}),(0,n.jsx)(y.ZP,{min:25,max:1e3,value:P,onChange:(e,t)=>E(t)})]}),(0,n.jsx)(u.Z,{children:(0,n.jsx)(Z.Z,{title:"Forcing line breaks makes it easier to adjust column widths to your liking",children:(0,n.jsx)(m.Z,{control:(0,n.jsx)(p.Z,{checked:"break-all"===U,onChange:e=>{A(e.target.checked?"break-all":"break-word")}}),label:"Force line breaks"})})}),(0,n.jsx)(u.Z,{flexGrow:1}),(0,n.jsx)(u.Z,{display:"flex",justifyContent:"flex-end",children:(0,n.jsxs)(eZ,{direction:"row",spacing:2,children:[R&&(0,n.jsx)(Z.Z,{title:"View config",children:(0,n.jsx)(d.Z,{color:"primary",onClick:()=>$(!0),startIcon:(0,n.jsx)(S.Z,{}),children:"View Config"})}),R&&(0,n.jsx)(Z.Z,{title:"Edit eval",children:(0,n.jsx)(d.Z,{color:"primary",onClick:()=>{N(R),c.push("/setup/")},startIcon:(0,n.jsx)(k.Z,{}),children:"Edit Eval"})}),(null==R?void 0:R.sharing)&&(0,n.jsx)(Z.Z,{title:"Generate a unique URL that others can access",children:(0,n.jsx)(d.Z,{color:"primary",onClick:Y,disabled:G,startIcon:G?(0,n.jsx)(a.Z,{size:16}):(0,n.jsx)(C.Z,{}),children:"Share"})})]})})]})}),(0,n.jsx)(_,{columnVisibility:F}),(0,n.jsx)(em,{maxTextLength:P,columnVisibility:F,wordBreak:U,filterMode:O,failureFilter:I,onFailureFilterToggle:(e,t)=>{M(s=>({...s,[e]:t}))}}),(0,n.jsx)(ef,{open:X,onClose:()=>$(!1)}),(0,n.jsx)(ey,{open:z,onClose:()=>H(!1),shareUrl:B})]})}var eC=s(2810),eS=s(279);async function ek(){let e=(0,c.createClientComponentClient)(),{data:{user:t}}=await e.auth.getUser();(0,r.Z)(t,"User not logged in");let{data:s,error:n}=await e.from("EvaluationResult").select("id, createdAt").eq("user_id",t.id).order("createdAt",{ascending:!1}).limit(100);return s||[]}async function eR(e){let t=(0,c.createClientComponentClient)(),{data:s,error:n}=await t.from("EvaluationResult").select("*").eq("id",e).single();return s}function eN(e){var t;let{fetchId:s,preloadedData:c,recentEvals:d,defaultEvalId:u}=e,p=(0,o.useRouter)(),{table:h,setTable:m,setConfig:x}=W(),[j,f]=l.useState(!1),[g,v]=l.useState(!1),[y,b]=l.useState(d||[]),Z=async()=>{(0,r.Z)(eS.T,"Cannot fetch recent files when not running locally");let e=await fetch("".concat(await (0,eC.b)(),"/results"),{cache:"no-store"}),t=await e.json();return b(t.data),t.data},w=async e=>{let t=await fetch("".concat(await (0,eC.b)(),"/results/").concat(e),{cache:"no-store"}),s=await t.json();m(s.data.results.table),x(s.data.config)},C=async e=>{eS.T?w(e):(f(!1),p.push("/eval/remote:".concat(encodeURIComponent(e))))},[S,k]=l.useState(u||(null===(t=y[0])||void 0===t?void 0:t.id)),R=(0,o.useSearchParams)(),N=R?R.get("file"):null;return(l.useEffect(()=>{if(N){let e=async()=>{await w(N),f(!0)};e()}else if(c){var e;m(null===(e=c.data.results)||void 0===e?void 0:e.table),x(c.data.config),f(!0)}else if(s){let e=async()=>{var e;let t=await fetch("https://api.promptfoo.dev/eval/".concat(s));if(!t.ok){v(!0);return}let n=await t.json();m(null===(e=n.data.results)||void 0===e?void 0:e.table),x(n.data.config),f(!0)};e()}else eS.T?(0,eC.b)().then(e=>{let t=(0,i.io)(e);return t.on("init",e=>{console.log("Initialized socket connection",e),f(!0),m(e.results.table),x(e.config),Z().then(e=>{var t;k(null===(t=e[0])||void 0===t?void 0:t.id)})}),t.on("update",e=>{console.log("Received data update",e),m(e.results.table),x(e.config),Z().then(e=>{var t;k(null===(t=e[0])||void 0===t?void 0:t.id)})}),()=>{t.disconnect()}}):ek().then(e=>{b(e.map(e=>({id:e.id,label:e.createdAt}))),e.length>0&&eR(e[0].id).then(t=>{(0,r.Z)(t,"Eval not found");let s=t.results,n=t.config;k(e[0].id),m(s.table),x(n),f(!0)})})},[s,m,x,c,k,N]),g)?(0,n.jsx)("div",{className:"loading",children:"404 Eval not found"}):j&&h?(0,n.jsx)(ew,{defaultEvalId:S,recentEvals:y,onRecentEvalSelected:C}):(0,n.jsxs)("div",{className:"loading",children:[(0,n.jsx)("div",{children:(0,n.jsx)(a.Z,{size:22})}),(0,n.jsx)("div",{children:"Loading eval data"})]})}s(5038)},279:function(e,t,s){"use strict";s.d(t,{T:function(){return l},e:function(){return r}});var n=s(2601);let l=!n.env.NEXT_PUBLIC_PROMPTFOO_BUILD_STANDALONE_SERVER,r=""},1938:function(e,t,s){"use strict";s.d(t,{o:function(){return r}});var n=s(4660),l=s(4810);let r=(0,n.Ue)()((0,l.tJ)((e,t)=>({env:{},testCases:[],description:"",providers:[],prompts:[],setEnv:t=>e({env:t}),setTestCases:t=>e({testCases:t}),setDescription:t=>e({description:t}),setProviders:t=>e({providers:t}),setPrompts:t=>e({prompts:t}),setStateFromConfig:t=>{let s={};t.description&&(s.description=t.description||""),t.tests&&(s.testCases=t.tests),t.providers&&(s.providers=t.providers),t.prompts&&("string"==typeof t.prompts?s.prompts=[t.prompts]:Array.isArray(t.prompts)?s.prompts=t.prompts.filter(e=>!e.endsWith(".txt")&&!e.endsWith(".json")&&!e.endsWith(".yaml")):console.warn("Invalid prompts config",t.prompts)),e(s)},getTestSuite:()=>{let{description:e,testCases:s,providers:n,prompts:l,env:r}=t();return{env:r,description:e,providers:n,prompts:l,tests:s}}}),{name:"promptfoo",skipHydration:!0}))},8715:function(){},5038:function(){},2604:function(){},5777:function(){}}]);
|