@anvia/studio 0.7.25 → 0.7.26

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.
Files changed (27) hide show
  1. package/dist/ui/assets/{evals-page-BmDCHSPk.js → evals-page-DYejWQfp.js} +2 -2
  2. package/dist/ui/assets/{evals-page-BmDCHSPk.js.map → evals-page-DYejWQfp.js.map} +1 -1
  3. package/dist/ui/assets/{index-BA0GymcR.js → index-DxSIQUax.js} +5 -5
  4. package/dist/ui/assets/index-DxSIQUax.js.map +1 -0
  5. package/dist/ui/assets/{knowledge-page-DZ8JVRTM.js → knowledge-page-CpQCK-1A.js} +2 -2
  6. package/dist/ui/assets/{knowledge-page-DZ8JVRTM.js.map → knowledge-page-CpQCK-1A.js.map} +1 -1
  7. package/dist/ui/assets/{mcps-page-DLoK8pDp.js → mcps-page-DwZAv13N.js} +2 -2
  8. package/dist/ui/assets/{mcps-page-DLoK8pDp.js.map → mcps-page-DwZAv13N.js.map} +1 -1
  9. package/dist/ui/assets/{memory-page-CYTlO9u_.js → memory-page-Cn-wzJHp.js} +2 -2
  10. package/dist/ui/assets/{memory-page-CYTlO9u_.js.map → memory-page-Cn-wzJHp.js.map} +1 -1
  11. package/dist/ui/assets/{pipelines-page-BKuuYE74.js → pipelines-page-BA9WCR9D.js} +2 -2
  12. package/dist/ui/assets/{pipelines-page-BKuuYE74.js.map → pipelines-page-BA9WCR9D.js.map} +1 -1
  13. package/dist/ui/assets/{sessions-page-e_n4UI_v.js → sessions-page-BuNnb20D.js} +2 -2
  14. package/dist/ui/assets/{sessions-page-e_n4UI_v.js.map → sessions-page-BuNnb20D.js.map} +1 -1
  15. package/dist/ui/assets/{status-page-Bso5CKbL.js → status-page-B8-sSeYx.js} +2 -2
  16. package/dist/ui/assets/{status-page-Bso5CKbL.js.map → status-page-B8-sSeYx.js.map} +1 -1
  17. package/dist/ui/assets/{tool-runner-CSdWatvc.js → tool-runner-5JJHI3LO.js} +2 -2
  18. package/dist/ui/assets/{tool-runner-CSdWatvc.js.map → tool-runner-5JJHI3LO.js.map} +1 -1
  19. package/dist/ui/assets/{tools-page-lKH3Qwic.js → tools-page-kXLllnlT.js} +2 -2
  20. package/dist/ui/assets/{tools-page-lKH3Qwic.js.map → tools-page-kXLllnlT.js.map} +1 -1
  21. package/dist/ui/assets/{trace-browser-DVjeRRhn.js → trace-browser-C0vy4e41.js} +2 -2
  22. package/dist/ui/assets/{trace-browser-DVjeRRhn.js.map → trace-browser-C0vy4e41.js.map} +1 -1
  23. package/dist/ui/assets/{transcript-item-DHdArePI.js → transcript-item-cUscZoNb.js} +2 -2
  24. package/dist/ui/assets/{transcript-item-DHdArePI.js.map → transcript-item-cUscZoNb.js.map} +1 -1
  25. package/dist/ui/index.html +1 -1
  26. package/package.json +4 -4
  27. package/dist/ui/assets/index-BA0GymcR.js.map +0 -1
@@ -1,2 +1,2 @@
1
- import{r as e}from"./utils-BN2yP0LH.js";import{t}from"./PlayIcon-Culan3xL.js";import{F as n,I as r,a as i,c as a,d as o,f as s,i as c,l,n as u,o as d,r as f,u as p}from"./index-BA0GymcR.js";var m=e();function h(e){let t=e.evals.find(t=>t.id===e.selectedEvalId)??e.evals[0];return(0,m.jsx)(c,{children:(0,m.jsx)(`div`,{className:`grid min-h-0 min-w-0 pb-6 pr-6`,children:(0,m.jsxs)(d,{className:`grid content-start gap-5 overflow-auto p-6`,children:[(0,m.jsxs)(`header`,{className:`flex min-w-0 items-start justify-between gap-4 border-b border-border/80 pb-5`,children:[(0,m.jsxs)(`div`,{className:`min-w-0`,children:[(0,m.jsx)(`p`,{className:`m-0 text-xs font-semibold uppercase tracking-[0.16em] text-muted-foreground`,children:`Evals`}),(0,m.jsx)(`h1`,{className:`m-0 mt-2 text-2xl font-semibold tracking-tight text-foreground`,children:t?.name??`Eval suite`}),(0,m.jsx)(`p`,{className:`m-0 mt-2 max-w-2xl text-sm leading-6 text-muted-foreground`,children:t?.description??`Inspect eval datasets, metrics, run configuration, and per-case outcomes.`})]}),(0,m.jsx)(g,{disabled:!e.enabled||t===void 0||e.runState===`running`,label:e.runState===`running`?`Running`:`Run`,onRun:e.onRun})]}),(0,m.jsxs)(`div`,{className:`grid gap-5 lg:grid-cols-[340px_minmax(0,1fr)]`,children:[(0,m.jsxs)(`aside`,{className:`grid content-start gap-4 border-r border-border/80 pr-5 max-lg:border-b max-lg:border-r-0 max-lg:pb-5 max-lg:pr-0`,children:[(0,m.jsxs)(`label`,{className:`grid gap-2`,htmlFor:`eval-suite-select`,children:[(0,m.jsx)(`span`,{className:` text-xs font-semibold uppercase tracking-[0.14em] text-muted-foreground`,children:`Suite`}),(0,m.jsxs)(a,{value:t?.id??``,onValueChange:e.onSelectEval,children:[(0,m.jsx)(o,{id:`eval-suite-select`,className:`h-9 w-full rounded-lg border-border/80 bg-background text-xs hover:border-muted-foreground/60 focus:border-muted-foreground/70 focus:ring-muted-foreground/20`,children:(0,m.jsx)(s,{placeholder:`Select eval`})}),(0,m.jsx)(l,{children:e.evals.map(e=>(0,m.jsx)(p,{value:e.id,children:e.name},e.id))})]})]}),t===void 0?null:(0,m.jsx)(_,{suite:t,enabled:e.enabled})]}),(0,m.jsx)(`main`,{className:`min-w-0`,children:t===void 0?(0,m.jsx)(u,{className:`min-h-0`,title:`No eval suites`,text:`0 eval suite records are available in this Studio runtime.`}):e.result===void 0?(0,m.jsx)(v,{suite:t,enabled:e.enabled,runState:e.runState}):(0,m.jsx)(w,{result:e.result,suite:t})})]})]})})})}function g(e){return(0,m.jsxs)(r,{className:`h-9 shrink-0 gap-1.5 rounded-lg border border-white bg-white px-3 text-sm font-semibold text-black shadow-none hover:border-white hover:bg-white/90 hover:text-black disabled:border-border disabled:bg-muted disabled:text-muted-foreground [&_svg]:!size-3`,disabled:e.disabled,onClick:e.onRun,variant:`ghost`,children:[(0,m.jsx)(n,{icon:t,"aria-hidden":`true`}),e.label]})}function _(e){let t=z(e.suite.metadata),n=e.suite.casePreviewCount??e.suite.casePreviews?.length??0;return(0,m.jsxs)(`div`,{className:`grid gap-4`,children:[(0,m.jsxs)(`div`,{className:`grid grid-cols-2 gap-2`,children:[(0,m.jsx)(f,{label:`Cases`,value:String(e.suite.caseCount)}),(0,m.jsx)(f,{label:`Metrics`,value:String(e.suite.metricNames.length)}),(0,m.jsx)(f,{label:`Concurrency`,value:String(e.suite.concurrency??1)}),(0,m.jsx)(f,{label:`Previewed`,value:`${n}/${e.suite.caseCount}`})]}),(0,m.jsxs)(`section`,{className:`grid gap-3 rounded-xl border border-border/70 bg-background/45 p-4`,children:[(0,m.jsxs)(`div`,{children:[(0,m.jsx)(`h2`,{className:`m-0 text-sm font-semibold text-foreground`,children:`Run readiness`}),(0,m.jsx)(`p`,{className:`m-0 mt-1 text-xs leading-5 text-muted-foreground`,children:e.enabled?`This suite is available in the current Studio runtime.`:`Eval routes are not available in the current Studio runtime.`})]}),(0,m.jsxs)(`div`,{className:`grid gap-2 text-xs text-muted-foreground`,children:[(0,m.jsx)(A,{label:`Suite id`,value:e.suite.id}),(0,m.jsx)(A,{label:`Metadata keys`,value:t.length>0?t.join(`, `):`None`})]})]})]})}function v(e){return(0,m.jsxs)(`div`,{className:`grid gap-4`,children:[(0,m.jsxs)(`section`,{className:`grid gap-4 rounded-xl border border-border/80 bg-background/45 p-5`,children:[(0,m.jsxs)(`div`,{className:`grid gap-1`,children:[(0,m.jsx)(M,{children:`What this eval tests`}),(0,m.jsx)(`p`,{className:`m-0 max-w-3xl text-sm leading-6 text-foreground`,children:e.suite.description??`This suite has no description. Use the dataset and metric definitions below to inspect coverage before running it.`})]}),(0,m.jsx)(O,{metadata:e.suite.metadata})]}),(0,m.jsxs)(`div`,{className:`grid gap-4 xl:grid-cols-[minmax(0,1.35fr)_minmax(320px,0.65fr)]`,children:[(0,m.jsx)(y,{suite:e.suite}),(0,m.jsxs)(`div`,{className:`grid content-start gap-4`,children:[(0,m.jsx)(x,{metrics:e.suite.metricSummaries,metricNames:e.suite.metricNames}),(0,m.jsx)(C,{suite:e.suite,enabled:e.enabled,runState:e.runState})]})]})]})}function y(e){let t=e.suite.casePreviews??[];return(0,m.jsxs)(`section`,{className:`grid gap-3 rounded-xl border border-border/80 bg-background/45 p-5`,children:[(0,m.jsxs)(`div`,{className:`flex items-start justify-between gap-3`,children:[(0,m.jsxs)(`div`,{children:[(0,m.jsx)(M,{children:`Dataset preview`}),(0,m.jsxs)(`p`,{className:`m-0 mt-1 text-xs leading-5 text-muted-foreground`,children:[`Showing `,t.length,` of `,e.suite.caseCount,` cases.`]})]}),(0,m.jsxs)(`span`,{className:`rounded-lg border border-border/80 bg-card/60 px-2.5 py-1 text-xs font-semibold text-muted-foreground`,children:[e.suite.caseCount,` cases`]})]}),t.length===0?(0,m.jsx)(j,{children:`No dataset preview is available for this suite.`}):(0,m.jsx)(`div`,{className:`grid gap-3`,children:t.map(e=>(0,m.jsx)(b,{testCase:e},e.id))})]})}function b(e){return(0,m.jsxs)(`article`,{className:`grid gap-3 rounded-xl border border-border/70 bg-card/35 p-4`,children:[(0,m.jsxs)(`div`,{className:`flex min-w-0 items-center justify-between gap-3`,children:[(0,m.jsx)(`h3`,{className:`m-0 truncate text-sm font-semibold text-foreground`,children:e.testCase.id}),e.testCase.metadataKeys===void 0?null:(0,m.jsxs)(`span`,{className:`shrink-0 text-xs font-semibold uppercase tracking-[0.12em] text-muted-foreground`,children:[e.testCase.metadataKeys.length,` metadata`]})]}),(0,m.jsxs)(`div`,{className:`grid gap-3 md:grid-cols-2`,children:[(0,m.jsx)(k,{label:`Input`,value:e.testCase.input,emptyText:`No input preview`}),(0,m.jsx)(k,{label:`Expected`,value:e.testCase.expected,emptyText:`No expected value`})]})]})}function x(e){let t=e.metrics??e.metricNames.map(e=>({name:e}));return(0,m.jsxs)(`section`,{className:`grid gap-3 rounded-xl border border-border/80 bg-background/45 p-5`,children:[(0,m.jsxs)(`div`,{children:[(0,m.jsx)(M,{children:`Metrics`}),(0,m.jsx)(`p`,{className:`m-0 mt-1 text-xs leading-5 text-muted-foreground`,children:`Scoring functions that evaluate every case output.`})]}),t.length===0?(0,m.jsx)(j,{children:`No metrics are configured for this suite.`}):(0,m.jsx)(`div`,{className:`grid gap-2`,children:t.map(e=>(0,m.jsx)(S,{metric:e},e.name))})]})}function S(e){let t=[e.metric.dataType,e.metric.configId===void 0?void 0:`config ${e.metric.configId}`,e.metric.scoreConfigId===void 0?void 0:`score ${e.metric.scoreConfigId}`,e.metric.metadataKeys===void 0?void 0:`${e.metric.metadataKeys.length} metadata`].filter(Boolean);return(0,m.jsxs)(`div`,{className:`rounded-lg border border-border/70 bg-card/35 px-3 py-3`,children:[(0,m.jsx)(`div`,{className:` text-sm font-semibold text-foreground`,children:e.metric.name}),(0,m.jsx)(`div`,{className:`mt-1 text-xs leading-5 text-muted-foreground`,children:t.length>0?t.join(` / `):`No metric metadata`})]})}function C(e){return(0,m.jsxs)(`section`,{className:`grid gap-3 rounded-xl border border-border/80 bg-background/45 p-5`,children:[(0,m.jsxs)(`div`,{children:[(0,m.jsx)(M,{children:`Run configuration`}),(0,m.jsxs)(`p`,{className:`m-0 mt-1 text-xs leading-5 text-muted-foreground`,children:[`This run will execute `,e.suite.caseCount,` cases across`,` `,e.suite.metricNames.length,` metrics.`]})]}),(0,m.jsxs)(`div`,{className:`grid gap-2 text-xs text-muted-foreground`,children:[(0,m.jsx)(A,{label:`Concurrency`,value:String(e.suite.concurrency??1)}),(0,m.jsx)(A,{label:`Status`,value:e.enabled?e.runState:`Unavailable`})]})]})}function w(e){let t=P(e.result.result),n=Array.isArray(t.results)?t.results:[];return(0,m.jsxs)(`article`,{className:`grid gap-4`,children:[(0,m.jsxs)(`section`,{className:`grid gap-3 rounded-xl border border-border/80 bg-background/45 p-5`,children:[(0,m.jsxs)(`div`,{className:`flex min-w-0 flex-wrap items-start justify-between gap-3`,children:[(0,m.jsxs)(`div`,{children:[(0,m.jsx)(M,{children:`Run summary`}),(0,m.jsxs)(`p`,{className:`m-0 mt-1 text-xs leading-5 text-muted-foreground`,children:[e.result.runId,` / `,new Date(e.result.startedAt).toLocaleTimeString()]})]}),(0,m.jsx)(`span`,{className:`rounded-lg border border-border/80 bg-card/60 px-2.5 py-1 text-xs font-semibold uppercase tracking-[0.12em] text-muted-foreground`,children:e.suite.name})]}),(0,m.jsxs)(`div`,{className:`grid gap-2 sm:grid-cols-4`,children:[(0,m.jsx)(f,{label:`Passed`,value:String(t.passed??0)}),(0,m.jsx)(f,{label:`Failed`,value:String(t.failed??0)}),(0,m.jsx)(f,{label:`Invalid`,value:String(t.invalid??0)}),(0,m.jsx)(f,{label:`Duration`,value:`${t.durationMs??e.result.durationMs}ms`})]})]}),(0,m.jsxs)(`section`,{className:`grid gap-3 rounded-xl border border-border/80 bg-background/45 p-5`,children:[(0,m.jsxs)(`div`,{className:`flex min-w-0 flex-wrap items-start justify-between gap-3`,children:[(0,m.jsxs)(`div`,{children:[(0,m.jsx)(M,{children:`Case results`}),(0,m.jsx)(`p`,{className:`m-0 mt-1 text-xs leading-5 text-muted-foreground`,children:`Each case shows the prompt, expected answer, model output, then metric judgments.`})]}),(0,m.jsxs)(`span`,{className:`rounded-lg border border-border/80 bg-card/60 px-2.5 py-1 text-xs font-semibold text-muted-foreground`,children:[n.length,` cases`]})]}),n.length===0?(0,m.jsx)(j,{children:`No per-case results were returned by this eval run.`}):(0,m.jsx)(`div`,{className:`grid gap-4`,children:n.map((e,t)=>(0,m.jsx)(T,{index:t,result:e},F(e,t)))})]}),(0,m.jsx)(N,{title:`Raw result`,value:e.result.result})]})}function T(e){let t=V(e.result.case)?e.result.case:{},n=Array.isArray(e.result.metrics)?e.result.metrics:[],r=typeof t.id==`string`?t.id:`case-${e.index+1}`,i=I(n),a=L(i);return(0,m.jsxs)(`article`,{className:`overflow-hidden rounded-xl border border-border/70 bg-card/35`,children:[(0,m.jsxs)(`div`,{className:`flex min-w-0 flex-wrap items-start justify-between gap-4 border-b border-border/70 bg-background/35 px-4 py-4`,children:[(0,m.jsxs)(`div`,{className:`flex min-w-0 items-start gap-3`,children:[(0,m.jsx)(`span`,{className:`flex h-7 min-w-7 items-center justify-center rounded-lg border border-border/80 bg-card/70 text-xs font-semibold text-muted-foreground`,children:e.index+1}),(0,m.jsxs)(`div`,{className:`min-w-0`,children:[(0,m.jsx)(`h3`,{className:`m-0 truncate text-base font-semibold text-foreground`,children:r}),(0,m.jsxs)(`p`,{className:`m-0 mt-1 text-xs leading-5 text-muted-foreground`,children:[n.length,` metric outcomes / `,i.passed,` pass / `,i.failed,` fail /`,` `,i.invalid,` invalid`]})]})]}),(0,m.jsx)(D,{children:a})]}),(0,m.jsxs)(`div`,{className:`grid gap-4 p-4`,children:[(0,m.jsxs)(`section`,{className:`grid gap-3`,children:[(0,m.jsx)(M,{children:`Test case`}),(0,m.jsxs)(`div`,{className:`grid gap-3 xl:grid-cols-[minmax(0,1.15fr)_minmax(0,0.85fr)]`,children:[(0,m.jsx)(k,{label:`Input`,value:t.input,emptyText:`No input`}),(0,m.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2 xl:grid-cols-1`,children:[(0,m.jsx)(k,{label:`Expected`,value:t.expected,emptyText:`No expected value`}),(0,m.jsx)(k,{label:`Output`,value:e.result.output,emptyText:`No output`})]})]})]}),e.result.targetError===void 0?null:(0,m.jsx)(k,{label:`Target error`,value:e.result.targetError,emptyText:`No target error`}),(0,m.jsxs)(`section`,{className:`grid gap-3`,children:[(0,m.jsx)(M,{children:`Metric judgments`}),n.length===0?(0,m.jsx)(j,{children:`No metric results were returned for this case.`}):(0,m.jsxs)(`div`,{className:`overflow-hidden rounded-lg border border-border/70 bg-background/45`,children:[(0,m.jsxs)(`div`,{className:`grid grid-cols-[minmax(0,1fr)_96px_96px] gap-3 border-b border-border/70 px-3 py-2 text-xs font-semibold uppercase tracking-[0.14em] text-muted-foreground`,children:[(0,m.jsx)(`span`,{children:`Metric`}),(0,m.jsx)(`span`,{children:`Score`}),(0,m.jsx)(`span`,{className:`text-right`,children:`Status`})]}),(0,m.jsx)(`div`,{className:`grid`,children:n.map((e,t)=>(0,m.jsx)(E,{index:t,metric:e},R(e)))})]})]})]})]})}function E(e){let t=V(e.metric.outcome)?e.metric.outcome:{},n=typeof t.outcome==`string`?t.outcome:`unknown`,r=Array.isArray(e.metric.reporterErrors)?e.metric.reporterErrors:[];return(0,m.jsxs)(`div`,{className:`grid grid-cols-[minmax(0,1fr)_96px_96px] gap-3 border-b border-border/60 px-3 py-3 last:border-b-0`,children:[(0,m.jsxs)(`div`,{className:`min-w-0`,children:[(0,m.jsx)(`div`,{className:`truncate text-sm font-semibold text-foreground`,children:e.metric.metricName??`metric-${e.index+1}`}),(0,m.jsx)(`div`,{className:`mt-1 text-xs leading-5 text-muted-foreground`,children:typeof t.comment==`string`?t.comment:typeof t.reason==`string`?t.reason:`No comment`}),r.length>0?(0,m.jsx)(`pre`,{className:`m-0 mt-2 whitespace-pre-wrap break-words rounded-md border border-border/70 bg-card/45 p-2 text-xs leading-5 text-muted-foreground`,children:B(r)}):null]}),(0,m.jsx)(`div`,{className:` text-xs leading-6 text-foreground`,children:`score`in t?B(t.score):`n/a`}),(0,m.jsx)(`div`,{className:`flex justify-end`,children:(0,m.jsx)(D,{children:n})})]})}function D(e){return(0,m.jsx)(i,{className:`h-7 rounded-md bg-card/70 text-foreground`,children:e.children})}function O(e){let t=V(e.metadata)?Object.entries(e.metadata):[];return t.length===0?(0,m.jsx)(j,{children:`No suite metadata was provided.`}):(0,m.jsxs)(`div`,{className:`grid gap-2 rounded-xl border border-border/70 bg-card/35 p-4`,children:[(0,m.jsx)(M,{children:`Suite metadata`}),(0,m.jsx)(`div`,{className:`grid gap-2 text-xs text-muted-foreground`,children:t.map(([e,t])=>(0,m.jsx)(A,{label:e,value:B(t)},e))})]})}function k(e){let t=e.value!==void 0;return(0,m.jsxs)(`div`,{className:`min-w-0 rounded-lg border border-border/70 bg-background/45 p-3`,children:[(0,m.jsx)(`div`,{className:` text-xs font-semibold uppercase tracking-[0.14em] text-muted-foreground`,children:e.label}),(0,m.jsx)(`pre`,{className:`m-0 mt-2 whitespace-pre-wrap break-words text-xs leading-5 text-foreground`,children:t?B(e.value):e.emptyText})]})}function A(e){return(0,m.jsxs)(`div`,{className:`flex min-w-0 items-start justify-between gap-3`,children:[(0,m.jsx)(`span`,{className:`shrink-0 text-xs font-semibold uppercase tracking-[0.12em] text-muted-foreground`,children:e.label}),(0,m.jsx)(`span`,{className:`min-w-0 break-words text-right text-xs text-foreground`,children:e.value})]})}function j(e){return(0,m.jsx)(`div`,{className:`rounded-lg border border-border/70 bg-card/35 p-3 text-sm leading-6 text-muted-foreground`,children:e.children})}function M(e){return(0,m.jsx)(`h2`,{className:`m-0 text-xs font-semibold uppercase tracking-[0.16em] text-muted-foreground`,children:e.children})}function N(e){return(0,m.jsxs)(`details`,{className:`rounded-xl border border-border/80 bg-background/45 p-5`,children:[(0,m.jsx)(`summary`,{className:`cursor-pointer text-xs font-semibold uppercase tracking-[0.16em] text-muted-foreground`,children:e.title}),(0,m.jsx)(`pre`,{className:`mt-3 max-h-[45vh] overflow-auto whitespace-pre-wrap break-words rounded-lg border border-border/70 bg-card/35 p-3 text-xs leading-5 text-foreground`,children:B(e.value)})]})}function P(e){return V(e)?e:{}}function F(e,t){let n=V(e.case)?e.case:{};return typeof n.id==`string`?n.id:`case-${t+1}`}function I(e){return e.reduce((e,t)=>{let n=V(t.outcome)?t.outcome.outcome:void 0;return n===`pass`&&(e.passed+=1),n===`fail`&&(e.failed+=1),n===`invalid`&&(e.invalid+=1),e},{passed:0,failed:0,invalid:0})}function L(e){return e.failed>0?`fail`:e.invalid>0?`invalid`:e.passed>0?`pass`:`unknown`}function R(e){return typeof e.metricName==`string`&&e.metricName.length>0?e.metricName:B(e)}function z(e){return V(e)?Object.keys(e).filter(t=>e[t]!==void 0):[]}function B(e){if(typeof e==`string`)return e;try{return JSON.stringify(e,null,2)}catch{return String(e)}}function V(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}export{h as EvalsPage};
2
- //# sourceMappingURL=evals-page-BmDCHSPk.js.map
1
+ import{r as e}from"./utils-BN2yP0LH.js";import{t}from"./PlayIcon-Culan3xL.js";import{F as n,I as r,a as i,c as a,d as o,f as s,i as c,l,n as u,o as d,r as f,u as p}from"./index-DxSIQUax.js";var m=e();function h(e){let t=e.evals.find(t=>t.id===e.selectedEvalId)??e.evals[0];return(0,m.jsx)(c,{children:(0,m.jsx)(`div`,{className:`grid min-h-0 min-w-0 pb-6 pr-6`,children:(0,m.jsxs)(d,{className:`grid content-start gap-5 overflow-auto p-6`,children:[(0,m.jsxs)(`header`,{className:`flex min-w-0 items-start justify-between gap-4 border-b border-border/80 pb-5`,children:[(0,m.jsxs)(`div`,{className:`min-w-0`,children:[(0,m.jsx)(`p`,{className:`m-0 text-xs font-semibold uppercase tracking-[0.16em] text-muted-foreground`,children:`Evals`}),(0,m.jsx)(`h1`,{className:`m-0 mt-2 text-2xl font-semibold tracking-tight text-foreground`,children:t?.name??`Eval suite`}),(0,m.jsx)(`p`,{className:`m-0 mt-2 max-w-2xl text-sm leading-6 text-muted-foreground`,children:t?.description??`Inspect eval datasets, metrics, run configuration, and per-case outcomes.`})]}),(0,m.jsx)(g,{disabled:!e.enabled||t===void 0||e.runState===`running`,label:e.runState===`running`?`Running`:`Run`,onRun:e.onRun})]}),(0,m.jsxs)(`div`,{className:`grid gap-5 lg:grid-cols-[340px_minmax(0,1fr)]`,children:[(0,m.jsxs)(`aside`,{className:`grid content-start gap-4 border-r border-border/80 pr-5 max-lg:border-b max-lg:border-r-0 max-lg:pb-5 max-lg:pr-0`,children:[(0,m.jsxs)(`label`,{className:`grid gap-2`,htmlFor:`eval-suite-select`,children:[(0,m.jsx)(`span`,{className:` text-xs font-semibold uppercase tracking-[0.14em] text-muted-foreground`,children:`Suite`}),(0,m.jsxs)(a,{value:t?.id??``,onValueChange:e.onSelectEval,children:[(0,m.jsx)(o,{id:`eval-suite-select`,className:`h-9 w-full rounded-lg border-border/80 bg-background text-xs hover:border-muted-foreground/60 focus:border-muted-foreground/70 focus:ring-muted-foreground/20`,children:(0,m.jsx)(s,{placeholder:`Select eval`})}),(0,m.jsx)(l,{children:e.evals.map(e=>(0,m.jsx)(p,{value:e.id,children:e.name},e.id))})]})]}),t===void 0?null:(0,m.jsx)(_,{suite:t,enabled:e.enabled})]}),(0,m.jsx)(`main`,{className:`min-w-0`,children:t===void 0?(0,m.jsx)(u,{className:`min-h-0`,title:`No eval suites`,text:`0 eval suite records are available in this Studio runtime.`}):e.result===void 0?(0,m.jsx)(v,{suite:t,enabled:e.enabled,runState:e.runState}):(0,m.jsx)(w,{result:e.result,suite:t})})]})]})})})}function g(e){return(0,m.jsxs)(r,{className:`h-9 shrink-0 gap-1.5 rounded-lg border border-white bg-white px-3 text-sm font-semibold text-black shadow-none hover:border-white hover:bg-white/90 hover:text-black disabled:border-border disabled:bg-muted disabled:text-muted-foreground [&_svg]:!size-3`,disabled:e.disabled,onClick:e.onRun,variant:`ghost`,children:[(0,m.jsx)(n,{icon:t,"aria-hidden":`true`}),e.label]})}function _(e){let t=z(e.suite.metadata),n=e.suite.casePreviewCount??e.suite.casePreviews?.length??0;return(0,m.jsxs)(`div`,{className:`grid gap-4`,children:[(0,m.jsxs)(`div`,{className:`grid grid-cols-2 gap-2`,children:[(0,m.jsx)(f,{label:`Cases`,value:String(e.suite.caseCount)}),(0,m.jsx)(f,{label:`Metrics`,value:String(e.suite.metricNames.length)}),(0,m.jsx)(f,{label:`Concurrency`,value:String(e.suite.concurrency??1)}),(0,m.jsx)(f,{label:`Previewed`,value:`${n}/${e.suite.caseCount}`})]}),(0,m.jsxs)(`section`,{className:`grid gap-3 rounded-xl border border-border/70 bg-background/45 p-4`,children:[(0,m.jsxs)(`div`,{children:[(0,m.jsx)(`h2`,{className:`m-0 text-sm font-semibold text-foreground`,children:`Run readiness`}),(0,m.jsx)(`p`,{className:`m-0 mt-1 text-xs leading-5 text-muted-foreground`,children:e.enabled?`This suite is available in the current Studio runtime.`:`Eval routes are not available in the current Studio runtime.`})]}),(0,m.jsxs)(`div`,{className:`grid gap-2 text-xs text-muted-foreground`,children:[(0,m.jsx)(A,{label:`Suite id`,value:e.suite.id}),(0,m.jsx)(A,{label:`Metadata keys`,value:t.length>0?t.join(`, `):`None`})]})]})]})}function v(e){return(0,m.jsxs)(`div`,{className:`grid gap-4`,children:[(0,m.jsxs)(`section`,{className:`grid gap-4 rounded-xl border border-border/80 bg-background/45 p-5`,children:[(0,m.jsxs)(`div`,{className:`grid gap-1`,children:[(0,m.jsx)(M,{children:`What this eval tests`}),(0,m.jsx)(`p`,{className:`m-0 max-w-3xl text-sm leading-6 text-foreground`,children:e.suite.description??`This suite has no description. Use the dataset and metric definitions below to inspect coverage before running it.`})]}),(0,m.jsx)(O,{metadata:e.suite.metadata})]}),(0,m.jsxs)(`div`,{className:`grid gap-4 xl:grid-cols-[minmax(0,1.35fr)_minmax(320px,0.65fr)]`,children:[(0,m.jsx)(y,{suite:e.suite}),(0,m.jsxs)(`div`,{className:`grid content-start gap-4`,children:[(0,m.jsx)(x,{metrics:e.suite.metricSummaries,metricNames:e.suite.metricNames}),(0,m.jsx)(C,{suite:e.suite,enabled:e.enabled,runState:e.runState})]})]})]})}function y(e){let t=e.suite.casePreviews??[];return(0,m.jsxs)(`section`,{className:`grid gap-3 rounded-xl border border-border/80 bg-background/45 p-5`,children:[(0,m.jsxs)(`div`,{className:`flex items-start justify-between gap-3`,children:[(0,m.jsxs)(`div`,{children:[(0,m.jsx)(M,{children:`Dataset preview`}),(0,m.jsxs)(`p`,{className:`m-0 mt-1 text-xs leading-5 text-muted-foreground`,children:[`Showing `,t.length,` of `,e.suite.caseCount,` cases.`]})]}),(0,m.jsxs)(`span`,{className:`rounded-lg border border-border/80 bg-card/60 px-2.5 py-1 text-xs font-semibold text-muted-foreground`,children:[e.suite.caseCount,` cases`]})]}),t.length===0?(0,m.jsx)(j,{children:`No dataset preview is available for this suite.`}):(0,m.jsx)(`div`,{className:`grid gap-3`,children:t.map(e=>(0,m.jsx)(b,{testCase:e},e.id))})]})}function b(e){return(0,m.jsxs)(`article`,{className:`grid gap-3 rounded-xl border border-border/70 bg-card/35 p-4`,children:[(0,m.jsxs)(`div`,{className:`flex min-w-0 items-center justify-between gap-3`,children:[(0,m.jsx)(`h3`,{className:`m-0 truncate text-sm font-semibold text-foreground`,children:e.testCase.id}),e.testCase.metadataKeys===void 0?null:(0,m.jsxs)(`span`,{className:`shrink-0 text-xs font-semibold uppercase tracking-[0.12em] text-muted-foreground`,children:[e.testCase.metadataKeys.length,` metadata`]})]}),(0,m.jsxs)(`div`,{className:`grid gap-3 md:grid-cols-2`,children:[(0,m.jsx)(k,{label:`Input`,value:e.testCase.input,emptyText:`No input preview`}),(0,m.jsx)(k,{label:`Expected`,value:e.testCase.expected,emptyText:`No expected value`})]})]})}function x(e){let t=e.metrics??e.metricNames.map(e=>({name:e}));return(0,m.jsxs)(`section`,{className:`grid gap-3 rounded-xl border border-border/80 bg-background/45 p-5`,children:[(0,m.jsxs)(`div`,{children:[(0,m.jsx)(M,{children:`Metrics`}),(0,m.jsx)(`p`,{className:`m-0 mt-1 text-xs leading-5 text-muted-foreground`,children:`Scoring functions that evaluate every case output.`})]}),t.length===0?(0,m.jsx)(j,{children:`No metrics are configured for this suite.`}):(0,m.jsx)(`div`,{className:`grid gap-2`,children:t.map(e=>(0,m.jsx)(S,{metric:e},e.name))})]})}function S(e){let t=[e.metric.dataType,e.metric.configId===void 0?void 0:`config ${e.metric.configId}`,e.metric.scoreConfigId===void 0?void 0:`score ${e.metric.scoreConfigId}`,e.metric.metadataKeys===void 0?void 0:`${e.metric.metadataKeys.length} metadata`].filter(Boolean);return(0,m.jsxs)(`div`,{className:`rounded-lg border border-border/70 bg-card/35 px-3 py-3`,children:[(0,m.jsx)(`div`,{className:` text-sm font-semibold text-foreground`,children:e.metric.name}),(0,m.jsx)(`div`,{className:`mt-1 text-xs leading-5 text-muted-foreground`,children:t.length>0?t.join(` / `):`No metric metadata`})]})}function C(e){return(0,m.jsxs)(`section`,{className:`grid gap-3 rounded-xl border border-border/80 bg-background/45 p-5`,children:[(0,m.jsxs)(`div`,{children:[(0,m.jsx)(M,{children:`Run configuration`}),(0,m.jsxs)(`p`,{className:`m-0 mt-1 text-xs leading-5 text-muted-foreground`,children:[`This run will execute `,e.suite.caseCount,` cases across`,` `,e.suite.metricNames.length,` metrics.`]})]}),(0,m.jsxs)(`div`,{className:`grid gap-2 text-xs text-muted-foreground`,children:[(0,m.jsx)(A,{label:`Concurrency`,value:String(e.suite.concurrency??1)}),(0,m.jsx)(A,{label:`Status`,value:e.enabled?e.runState:`Unavailable`})]})]})}function w(e){let t=P(e.result.result),n=Array.isArray(t.results)?t.results:[];return(0,m.jsxs)(`article`,{className:`grid gap-4`,children:[(0,m.jsxs)(`section`,{className:`grid gap-3 rounded-xl border border-border/80 bg-background/45 p-5`,children:[(0,m.jsxs)(`div`,{className:`flex min-w-0 flex-wrap items-start justify-between gap-3`,children:[(0,m.jsxs)(`div`,{children:[(0,m.jsx)(M,{children:`Run summary`}),(0,m.jsxs)(`p`,{className:`m-0 mt-1 text-xs leading-5 text-muted-foreground`,children:[e.result.runId,` / `,new Date(e.result.startedAt).toLocaleTimeString()]})]}),(0,m.jsx)(`span`,{className:`rounded-lg border border-border/80 bg-card/60 px-2.5 py-1 text-xs font-semibold uppercase tracking-[0.12em] text-muted-foreground`,children:e.suite.name})]}),(0,m.jsxs)(`div`,{className:`grid gap-2 sm:grid-cols-4`,children:[(0,m.jsx)(f,{label:`Passed`,value:String(t.passed??0)}),(0,m.jsx)(f,{label:`Failed`,value:String(t.failed??0)}),(0,m.jsx)(f,{label:`Invalid`,value:String(t.invalid??0)}),(0,m.jsx)(f,{label:`Duration`,value:`${t.durationMs??e.result.durationMs}ms`})]})]}),(0,m.jsxs)(`section`,{className:`grid gap-3 rounded-xl border border-border/80 bg-background/45 p-5`,children:[(0,m.jsxs)(`div`,{className:`flex min-w-0 flex-wrap items-start justify-between gap-3`,children:[(0,m.jsxs)(`div`,{children:[(0,m.jsx)(M,{children:`Case results`}),(0,m.jsx)(`p`,{className:`m-0 mt-1 text-xs leading-5 text-muted-foreground`,children:`Each case shows the prompt, expected answer, model output, then metric judgments.`})]}),(0,m.jsxs)(`span`,{className:`rounded-lg border border-border/80 bg-card/60 px-2.5 py-1 text-xs font-semibold text-muted-foreground`,children:[n.length,` cases`]})]}),n.length===0?(0,m.jsx)(j,{children:`No per-case results were returned by this eval run.`}):(0,m.jsx)(`div`,{className:`grid gap-4`,children:n.map((e,t)=>(0,m.jsx)(T,{index:t,result:e},F(e,t)))})]}),(0,m.jsx)(N,{title:`Raw result`,value:e.result.result})]})}function T(e){let t=V(e.result.case)?e.result.case:{},n=Array.isArray(e.result.metrics)?e.result.metrics:[],r=typeof t.id==`string`?t.id:`case-${e.index+1}`,i=I(n),a=L(i);return(0,m.jsxs)(`article`,{className:`overflow-hidden rounded-xl border border-border/70 bg-card/35`,children:[(0,m.jsxs)(`div`,{className:`flex min-w-0 flex-wrap items-start justify-between gap-4 border-b border-border/70 bg-background/35 px-4 py-4`,children:[(0,m.jsxs)(`div`,{className:`flex min-w-0 items-start gap-3`,children:[(0,m.jsx)(`span`,{className:`flex h-7 min-w-7 items-center justify-center rounded-lg border border-border/80 bg-card/70 text-xs font-semibold text-muted-foreground`,children:e.index+1}),(0,m.jsxs)(`div`,{className:`min-w-0`,children:[(0,m.jsx)(`h3`,{className:`m-0 truncate text-base font-semibold text-foreground`,children:r}),(0,m.jsxs)(`p`,{className:`m-0 mt-1 text-xs leading-5 text-muted-foreground`,children:[n.length,` metric outcomes / `,i.passed,` pass / `,i.failed,` fail /`,` `,i.invalid,` invalid`]})]})]}),(0,m.jsx)(D,{children:a})]}),(0,m.jsxs)(`div`,{className:`grid gap-4 p-4`,children:[(0,m.jsxs)(`section`,{className:`grid gap-3`,children:[(0,m.jsx)(M,{children:`Test case`}),(0,m.jsxs)(`div`,{className:`grid gap-3 xl:grid-cols-[minmax(0,1.15fr)_minmax(0,0.85fr)]`,children:[(0,m.jsx)(k,{label:`Input`,value:t.input,emptyText:`No input`}),(0,m.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2 xl:grid-cols-1`,children:[(0,m.jsx)(k,{label:`Expected`,value:t.expected,emptyText:`No expected value`}),(0,m.jsx)(k,{label:`Output`,value:e.result.output,emptyText:`No output`})]})]})]}),e.result.targetError===void 0?null:(0,m.jsx)(k,{label:`Target error`,value:e.result.targetError,emptyText:`No target error`}),(0,m.jsxs)(`section`,{className:`grid gap-3`,children:[(0,m.jsx)(M,{children:`Metric judgments`}),n.length===0?(0,m.jsx)(j,{children:`No metric results were returned for this case.`}):(0,m.jsxs)(`div`,{className:`overflow-hidden rounded-lg border border-border/70 bg-background/45`,children:[(0,m.jsxs)(`div`,{className:`grid grid-cols-[minmax(0,1fr)_96px_96px] gap-3 border-b border-border/70 px-3 py-2 text-xs font-semibold uppercase tracking-[0.14em] text-muted-foreground`,children:[(0,m.jsx)(`span`,{children:`Metric`}),(0,m.jsx)(`span`,{children:`Score`}),(0,m.jsx)(`span`,{className:`text-right`,children:`Status`})]}),(0,m.jsx)(`div`,{className:`grid`,children:n.map((e,t)=>(0,m.jsx)(E,{index:t,metric:e},R(e)))})]})]})]})]})}function E(e){let t=V(e.metric.outcome)?e.metric.outcome:{},n=typeof t.outcome==`string`?t.outcome:`unknown`,r=Array.isArray(e.metric.reporterErrors)?e.metric.reporterErrors:[];return(0,m.jsxs)(`div`,{className:`grid grid-cols-[minmax(0,1fr)_96px_96px] gap-3 border-b border-border/60 px-3 py-3 last:border-b-0`,children:[(0,m.jsxs)(`div`,{className:`min-w-0`,children:[(0,m.jsx)(`div`,{className:`truncate text-sm font-semibold text-foreground`,children:e.metric.metricName??`metric-${e.index+1}`}),(0,m.jsx)(`div`,{className:`mt-1 text-xs leading-5 text-muted-foreground`,children:typeof t.comment==`string`?t.comment:typeof t.reason==`string`?t.reason:`No comment`}),r.length>0?(0,m.jsx)(`pre`,{className:`m-0 mt-2 whitespace-pre-wrap break-words rounded-md border border-border/70 bg-card/45 p-2 text-xs leading-5 text-muted-foreground`,children:B(r)}):null]}),(0,m.jsx)(`div`,{className:` text-xs leading-6 text-foreground`,children:`score`in t?B(t.score):`n/a`}),(0,m.jsx)(`div`,{className:`flex justify-end`,children:(0,m.jsx)(D,{children:n})})]})}function D(e){return(0,m.jsx)(i,{className:`h-7 rounded-md bg-card/70 text-foreground`,children:e.children})}function O(e){let t=V(e.metadata)?Object.entries(e.metadata):[];return t.length===0?(0,m.jsx)(j,{children:`No suite metadata was provided.`}):(0,m.jsxs)(`div`,{className:`grid gap-2 rounded-xl border border-border/70 bg-card/35 p-4`,children:[(0,m.jsx)(M,{children:`Suite metadata`}),(0,m.jsx)(`div`,{className:`grid gap-2 text-xs text-muted-foreground`,children:t.map(([e,t])=>(0,m.jsx)(A,{label:e,value:B(t)},e))})]})}function k(e){let t=e.value!==void 0;return(0,m.jsxs)(`div`,{className:`min-w-0 rounded-lg border border-border/70 bg-background/45 p-3`,children:[(0,m.jsx)(`div`,{className:` text-xs font-semibold uppercase tracking-[0.14em] text-muted-foreground`,children:e.label}),(0,m.jsx)(`pre`,{className:`m-0 mt-2 whitespace-pre-wrap break-words text-xs leading-5 text-foreground`,children:t?B(e.value):e.emptyText})]})}function A(e){return(0,m.jsxs)(`div`,{className:`flex min-w-0 items-start justify-between gap-3`,children:[(0,m.jsx)(`span`,{className:`shrink-0 text-xs font-semibold uppercase tracking-[0.12em] text-muted-foreground`,children:e.label}),(0,m.jsx)(`span`,{className:`min-w-0 break-words text-right text-xs text-foreground`,children:e.value})]})}function j(e){return(0,m.jsx)(`div`,{className:`rounded-lg border border-border/70 bg-card/35 p-3 text-sm leading-6 text-muted-foreground`,children:e.children})}function M(e){return(0,m.jsx)(`h2`,{className:`m-0 text-xs font-semibold uppercase tracking-[0.16em] text-muted-foreground`,children:e.children})}function N(e){return(0,m.jsxs)(`details`,{className:`rounded-xl border border-border/80 bg-background/45 p-5`,children:[(0,m.jsx)(`summary`,{className:`cursor-pointer text-xs font-semibold uppercase tracking-[0.16em] text-muted-foreground`,children:e.title}),(0,m.jsx)(`pre`,{className:`mt-3 max-h-[45vh] overflow-auto whitespace-pre-wrap break-words rounded-lg border border-border/70 bg-card/35 p-3 text-xs leading-5 text-foreground`,children:B(e.value)})]})}function P(e){return V(e)?e:{}}function F(e,t){let n=V(e.case)?e.case:{};return typeof n.id==`string`?n.id:`case-${t+1}`}function I(e){return e.reduce((e,t)=>{let n=V(t.outcome)?t.outcome.outcome:void 0;return n===`pass`&&(e.passed+=1),n===`fail`&&(e.failed+=1),n===`invalid`&&(e.invalid+=1),e},{passed:0,failed:0,invalid:0})}function L(e){return e.failed>0?`fail`:e.invalid>0?`invalid`:e.passed>0?`pass`:`unknown`}function R(e){return typeof e.metricName==`string`&&e.metricName.length>0?e.metricName:B(e)}function z(e){return V(e)?Object.keys(e).filter(t=>e[t]!==void 0):[]}function B(e){if(typeof e==`string`)return e;try{return JSON.stringify(e,null,2)}catch{return String(e)}}function V(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}export{h as EvalsPage};
2
+ //# sourceMappingURL=evals-page-DYejWQfp.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"evals-page-BmDCHSPk.js","names":[],"sources":["../../../src/ui/app/modules/evals/evals-page.tsx"],"sourcesContent":["import { PlayIcon } from \"@hugeicons/core-free-icons\";\nimport type React from \"react\";\nimport type {\n StudioEvalCasePreview,\n StudioEvalMetricSummary,\n StudioEvalRunResponse,\n StudioEvalSuiteConfig,\n} from \"../../../../types\";\nimport { Button } from \"../../components/ui/button\";\nimport { StudioIcon } from \"../../components/ui/icon\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../../components/ui/select\";\nimport {\n StudioEmptyState,\n StudioMetric,\n StudioPageShell,\n StudioStatusBadge,\n StudioSurface,\n} from \"../../components/ui/studio\";\n\nexport function EvalsPage(props: {\n evals: StudioEvalSuiteConfig[];\n selectedEvalId: string;\n enabled: boolean;\n runState: \"idle\" | \"running\";\n result: StudioEvalRunResponse | undefined;\n onSelectEval: (evalId: string) => void;\n onRun: () => void;\n}) {\n const selected = props.evals.find((suite) => suite.id === props.selectedEvalId) ?? props.evals[0];\n\n return (\n <StudioPageShell>\n <div className=\"grid min-h-0 min-w-0 pb-6 pr-6\">\n <StudioSurface className=\"grid content-start gap-5 overflow-auto p-6\">\n <header className=\"flex min-w-0 items-start justify-between gap-4 border-b border-border/80 pb-5\">\n <div className=\"min-w-0\">\n <p className=\"m-0 text-xs font-semibold uppercase tracking-[0.16em] text-muted-foreground\">\n Evals\n </p>\n <h1 className=\"m-0 mt-2 text-2xl font-semibold tracking-tight text-foreground\">\n {selected?.name ?? \"Eval suite\"}\n </h1>\n <p className=\"m-0 mt-2 max-w-2xl text-sm leading-6 text-muted-foreground\">\n {selected?.description ??\n \"Inspect eval datasets, metrics, run configuration, and per-case outcomes.\"}\n </p>\n </div>\n <RunButton\n disabled={!props.enabled || selected === undefined || props.runState === \"running\"}\n label={props.runState === \"running\" ? \"Running\" : \"Run\"}\n onRun={props.onRun}\n />\n </header>\n\n <div className=\"grid gap-5 lg:grid-cols-[340px_minmax(0,1fr)]\">\n <aside className=\"grid content-start gap-4 border-r border-border/80 pr-5 max-lg:border-b max-lg:border-r-0 max-lg:pb-5 max-lg:pr-0\">\n <label className=\"grid gap-2\" htmlFor=\"eval-suite-select\">\n <span className=\" text-xs font-semibold uppercase tracking-[0.14em] text-muted-foreground\">\n Suite\n </span>\n <Select value={selected?.id ?? \"\"} onValueChange={props.onSelectEval}>\n <SelectTrigger\n id=\"eval-suite-select\"\n className=\"h-9 w-full rounded-lg border-border/80 bg-background text-xs hover:border-muted-foreground/60 focus:border-muted-foreground/70 focus:ring-muted-foreground/20\"\n >\n <SelectValue placeholder=\"Select eval\" />\n </SelectTrigger>\n <SelectContent>\n {props.evals.map((suite) => (\n <SelectItem key={suite.id} value={suite.id}>\n {suite.name}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </label>\n\n {selected === undefined ? null : (\n <SuiteOverview suite={selected} enabled={props.enabled} />\n )}\n </aside>\n\n <main className=\"min-w-0\">\n {selected === undefined ? (\n <StudioEmptyState\n className=\"min-h-0\"\n title=\"No eval suites\"\n text=\"0 eval suite records are available in this Studio runtime.\"\n />\n ) : props.result === undefined ? (\n <BeforeRun suite={selected} enabled={props.enabled} runState={props.runState} />\n ) : (\n <EvalResult result={props.result} suite={selected} />\n )}\n </main>\n </div>\n </StudioSurface>\n </div>\n </StudioPageShell>\n );\n}\n\nfunction RunButton(props: { disabled: boolean; label: string; onRun: () => void }) {\n return (\n <Button\n className=\"h-9 shrink-0 gap-1.5 rounded-lg border border-white bg-white px-3 text-sm font-semibold text-black shadow-none hover:border-white hover:bg-white/90 hover:text-black disabled:border-border disabled:bg-muted disabled:text-muted-foreground [&_svg]:!size-3\"\n disabled={props.disabled}\n onClick={props.onRun}\n variant=\"ghost\"\n >\n <StudioIcon icon={PlayIcon} aria-hidden=\"true\" />\n {props.label}\n </Button>\n );\n}\n\nfunction SuiteOverview(props: { suite: StudioEvalSuiteConfig; enabled: boolean }) {\n const metadataKeys = objectKeys(props.suite.metadata);\n const previewCount = props.suite.casePreviewCount ?? props.suite.casePreviews?.length ?? 0;\n\n return (\n <div className=\"grid gap-4\">\n <div className=\"grid grid-cols-2 gap-2\">\n <StudioMetric label=\"Cases\" value={String(props.suite.caseCount)} />\n <StudioMetric label=\"Metrics\" value={String(props.suite.metricNames.length)} />\n <StudioMetric label=\"Concurrency\" value={String(props.suite.concurrency ?? 1)} />\n <StudioMetric label=\"Previewed\" value={`${previewCount}/${props.suite.caseCount}`} />\n </div>\n\n <section className=\"grid gap-3 rounded-xl border border-border/70 bg-background/45 p-4\">\n <div>\n <h2 className=\"m-0 text-sm font-semibold text-foreground\">Run readiness</h2>\n <p className=\"m-0 mt-1 text-xs leading-5 text-muted-foreground\">\n {props.enabled\n ? \"This suite is available in the current Studio runtime.\"\n : \"Eval routes are not available in the current Studio runtime.\"}\n </p>\n </div>\n <div className=\"grid gap-2 text-xs text-muted-foreground\">\n <KeyValue label=\"Suite id\" value={props.suite.id} />\n <KeyValue\n label=\"Metadata keys\"\n value={metadataKeys.length > 0 ? metadataKeys.join(\", \") : \"None\"}\n />\n </div>\n </section>\n </div>\n );\n}\n\nfunction BeforeRun(props: {\n suite: StudioEvalSuiteConfig;\n enabled: boolean;\n runState: \"idle\" | \"running\";\n}) {\n return (\n <div className=\"grid gap-4\">\n <section className=\"grid gap-4 rounded-xl border border-border/80 bg-background/45 p-5\">\n <div className=\"grid gap-1\">\n <SectionLabel>What this eval tests</SectionLabel>\n <p className=\"m-0 max-w-3xl text-sm leading-6 text-foreground\">\n {props.suite.description ??\n \"This suite has no description. Use the dataset and metric definitions below to inspect coverage before running it.\"}\n </p>\n </div>\n <MetadataBlock metadata={props.suite.metadata} />\n </section>\n\n <div className=\"grid gap-4 xl:grid-cols-[minmax(0,1.35fr)_minmax(320px,0.65fr)]\">\n <DatasetPreview suite={props.suite} />\n <div className=\"grid content-start gap-4\">\n <MetricsPanel\n metrics={props.suite.metricSummaries}\n metricNames={props.suite.metricNames}\n />\n <RunSetup suite={props.suite} enabled={props.enabled} runState={props.runState} />\n </div>\n </div>\n </div>\n );\n}\n\nfunction DatasetPreview(props: { suite: StudioEvalSuiteConfig }) {\n const previews = props.suite.casePreviews ?? [];\n\n return (\n <section className=\"grid gap-3 rounded-xl border border-border/80 bg-background/45 p-5\">\n <div className=\"flex items-start justify-between gap-3\">\n <div>\n <SectionLabel>Dataset preview</SectionLabel>\n <p className=\"m-0 mt-1 text-xs leading-5 text-muted-foreground\">\n Showing {previews.length} of {props.suite.caseCount} cases.\n </p>\n </div>\n <span className=\"rounded-lg border border-border/80 bg-card/60 px-2.5 py-1 text-xs font-semibold text-muted-foreground\">\n {props.suite.caseCount} cases\n </span>\n </div>\n\n {previews.length === 0 ? (\n <MutedPanel>No dataset preview is available for this suite.</MutedPanel>\n ) : (\n <div className=\"grid gap-3\">\n {previews.map((testCase) => (\n <CasePreviewCard key={testCase.id} testCase={testCase} />\n ))}\n </div>\n )}\n </section>\n );\n}\n\nfunction CasePreviewCard(props: { testCase: StudioEvalCasePreview }) {\n return (\n <article className=\"grid gap-3 rounded-xl border border-border/70 bg-card/35 p-4\">\n <div className=\"flex min-w-0 items-center justify-between gap-3\">\n <h3 className=\"m-0 truncate text-sm font-semibold text-foreground\">{props.testCase.id}</h3>\n {props.testCase.metadataKeys === undefined ? null : (\n <span className=\"shrink-0 text-xs font-semibold uppercase tracking-[0.12em] text-muted-foreground\">\n {props.testCase.metadataKeys.length} metadata\n </span>\n )}\n </div>\n <div className=\"grid gap-3 md:grid-cols-2\">\n <ValuePanel label=\"Input\" value={props.testCase.input} emptyText=\"No input preview\" />\n <ValuePanel\n label=\"Expected\"\n value={props.testCase.expected}\n emptyText=\"No expected value\"\n />\n </div>\n </article>\n );\n}\n\nfunction MetricsPanel(props: {\n metrics: StudioEvalMetricSummary[] | undefined;\n metricNames: string[];\n}) {\n const metrics =\n props.metrics ??\n props.metricNames.map(\n (name): StudioEvalMetricSummary => ({\n name,\n }),\n );\n\n return (\n <section className=\"grid gap-3 rounded-xl border border-border/80 bg-background/45 p-5\">\n <div>\n <SectionLabel>Metrics</SectionLabel>\n <p className=\"m-0 mt-1 text-xs leading-5 text-muted-foreground\">\n Scoring functions that evaluate every case output.\n </p>\n </div>\n {metrics.length === 0 ? (\n <MutedPanel>No metrics are configured for this suite.</MutedPanel>\n ) : (\n <div className=\"grid gap-2\">\n {metrics.map((metric) => (\n <MetricSummaryRow key={metric.name} metric={metric} />\n ))}\n </div>\n )}\n </section>\n );\n}\n\nfunction MetricSummaryRow(props: { metric: StudioEvalMetricSummary }) {\n const details = [\n props.metric.dataType,\n props.metric.configId === undefined ? undefined : `config ${props.metric.configId}`,\n props.metric.scoreConfigId === undefined ? undefined : `score ${props.metric.scoreConfigId}`,\n props.metric.metadataKeys === undefined\n ? undefined\n : `${props.metric.metadataKeys.length} metadata`,\n ].filter(Boolean);\n\n return (\n <div className=\"rounded-lg border border-border/70 bg-card/35 px-3 py-3\">\n <div className=\" text-sm font-semibold text-foreground\">{props.metric.name}</div>\n <div className=\"mt-1 text-xs leading-5 text-muted-foreground\">\n {details.length > 0 ? details.join(\" / \") : \"No metric metadata\"}\n </div>\n </div>\n );\n}\n\nfunction RunSetup(props: {\n suite: StudioEvalSuiteConfig;\n enabled: boolean;\n runState: \"idle\" | \"running\";\n}) {\n return (\n <section className=\"grid gap-3 rounded-xl border border-border/80 bg-background/45 p-5\">\n <div>\n <SectionLabel>Run configuration</SectionLabel>\n <p className=\"m-0 mt-1 text-xs leading-5 text-muted-foreground\">\n This run will execute {props.suite.caseCount} cases across{\" \"}\n {props.suite.metricNames.length} metrics.\n </p>\n </div>\n <div className=\"grid gap-2 text-xs text-muted-foreground\">\n <KeyValue label=\"Concurrency\" value={String(props.suite.concurrency ?? 1)} />\n <KeyValue label=\"Status\" value={props.enabled ? props.runState : \"Unavailable\"} />\n </div>\n </section>\n );\n}\n\nfunction EvalResult(props: { result: StudioEvalRunResponse; suite: StudioEvalSuiteConfig }) {\n const result = runResult(props.result.result);\n const cases = Array.isArray(result.results) ? result.results : [];\n\n return (\n <article className=\"grid gap-4\">\n <section className=\"grid gap-3 rounded-xl border border-border/80 bg-background/45 p-5\">\n <div className=\"flex min-w-0 flex-wrap items-start justify-between gap-3\">\n <div>\n <SectionLabel>Run summary</SectionLabel>\n <p className=\"m-0 mt-1 text-xs leading-5 text-muted-foreground\">\n {props.result.runId} / {new Date(props.result.startedAt).toLocaleTimeString()}\n </p>\n </div>\n <span className=\"rounded-lg border border-border/80 bg-card/60 px-2.5 py-1 text-xs font-semibold uppercase tracking-[0.12em] text-muted-foreground\">\n {props.suite.name}\n </span>\n </div>\n <div className=\"grid gap-2 sm:grid-cols-4\">\n <StudioMetric label=\"Passed\" value={String(result.passed ?? 0)} />\n <StudioMetric label=\"Failed\" value={String(result.failed ?? 0)} />\n <StudioMetric label=\"Invalid\" value={String(result.invalid ?? 0)} />\n <StudioMetric\n label=\"Duration\"\n value={`${result.durationMs ?? props.result.durationMs}ms`}\n />\n </div>\n </section>\n\n <section className=\"grid gap-3 rounded-xl border border-border/80 bg-background/45 p-5\">\n <div className=\"flex min-w-0 flex-wrap items-start justify-between gap-3\">\n <div>\n <SectionLabel>Case results</SectionLabel>\n <p className=\"m-0 mt-1 text-xs leading-5 text-muted-foreground\">\n Each case shows the prompt, expected answer, model output, then metric judgments.\n </p>\n </div>\n <span className=\"rounded-lg border border-border/80 bg-card/60 px-2.5 py-1 text-xs font-semibold text-muted-foreground\">\n {cases.length} cases\n </span>\n </div>\n {cases.length === 0 ? (\n <MutedPanel>No per-case results were returned by this eval run.</MutedPanel>\n ) : (\n <div className=\"grid gap-4\">\n {cases.map((testCase, index) => (\n <CaseResultCard\n index={index}\n key={caseResultKey(testCase, index)}\n result={testCase}\n />\n ))}\n </div>\n )}\n </section>\n\n <RawDetails title=\"Raw result\" value={props.result.result} />\n </article>\n );\n}\n\nfunction CaseResultCard(props: { index: number; result: EvalCaseRunResult }) {\n const testCase = isRecord(props.result.case) ? props.result.case : {};\n const metrics = Array.isArray(props.result.metrics) ? props.result.metrics : [];\n const caseId = typeof testCase.id === \"string\" ? testCase.id : `case-${props.index + 1}`;\n const counts = metricOutcomeCounts(metrics);\n const primaryStatus = casePrimaryStatus(counts);\n\n return (\n <article className=\"overflow-hidden rounded-xl border border-border/70 bg-card/35\">\n <div className=\"flex min-w-0 flex-wrap items-start justify-between gap-4 border-b border-border/70 bg-background/35 px-4 py-4\">\n <div className=\"flex min-w-0 items-start gap-3\">\n <span className=\"flex h-7 min-w-7 items-center justify-center rounded-lg border border-border/80 bg-card/70 text-xs font-semibold text-muted-foreground\">\n {props.index + 1}\n </span>\n <div className=\"min-w-0\">\n <h3 className=\"m-0 truncate text-base font-semibold text-foreground\">{caseId}</h3>\n <p className=\"m-0 mt-1 text-xs leading-5 text-muted-foreground\">\n {metrics.length} metric outcomes / {counts.passed} pass / {counts.failed} fail /{\" \"}\n {counts.invalid} invalid\n </p>\n </div>\n </div>\n <StatusBadge>{primaryStatus}</StatusBadge>\n </div>\n\n <div className=\"grid gap-4 p-4\">\n <section className=\"grid gap-3\">\n <SectionLabel>Test case</SectionLabel>\n <div className=\"grid gap-3 xl:grid-cols-[minmax(0,1.15fr)_minmax(0,0.85fr)]\">\n <ValuePanel label=\"Input\" value={testCase.input} emptyText=\"No input\" />\n <div className=\"grid gap-3 sm:grid-cols-2 xl:grid-cols-1\">\n <ValuePanel\n label=\"Expected\"\n value={testCase.expected}\n emptyText=\"No expected value\"\n />\n <ValuePanel label=\"Output\" value={props.result.output} emptyText=\"No output\" />\n </div>\n </div>\n </section>\n\n {props.result.targetError === undefined ? null : (\n <ValuePanel\n label=\"Target error\"\n value={props.result.targetError}\n emptyText=\"No target error\"\n />\n )}\n\n <section className=\"grid gap-3\">\n <SectionLabel>Metric judgments</SectionLabel>\n {metrics.length === 0 ? (\n <MutedPanel>No metric results were returned for this case.</MutedPanel>\n ) : (\n <div className=\"overflow-hidden rounded-lg border border-border/70 bg-background/45\">\n <div className=\"grid grid-cols-[minmax(0,1fr)_96px_96px] gap-3 border-b border-border/70 px-3 py-2 text-xs font-semibold uppercase tracking-[0.14em] text-muted-foreground\">\n <span>Metric</span>\n <span>Score</span>\n <span className=\"text-right\">Status</span>\n </div>\n <div className=\"grid\">\n {metrics.map((metric, index) => (\n <MetricOutcomeRow index={index} key={metricOutcomeKey(metric)} metric={metric} />\n ))}\n </div>\n </div>\n )}\n </section>\n </div>\n </article>\n );\n}\n\nfunction MetricOutcomeRow(props: { index: number; metric: EvalMetricRunResult }) {\n const outcome = isRecord(props.metric.outcome) ? props.metric.outcome : {};\n const status = typeof outcome.outcome === \"string\" ? outcome.outcome : \"unknown\";\n const reporterErrors = Array.isArray(props.metric.reporterErrors)\n ? props.metric.reporterErrors\n : [];\n\n return (\n <div className=\"grid grid-cols-[minmax(0,1fr)_96px_96px] gap-3 border-b border-border/60 px-3 py-3 last:border-b-0\">\n <div className=\"min-w-0\">\n <div className=\"truncate text-sm font-semibold text-foreground\">\n {props.metric.metricName ?? `metric-${props.index + 1}`}\n </div>\n <div className=\"mt-1 text-xs leading-5 text-muted-foreground\">\n {typeof outcome.comment === \"string\"\n ? outcome.comment\n : typeof outcome.reason === \"string\"\n ? outcome.reason\n : \"No comment\"}\n </div>\n {reporterErrors.length > 0 ? (\n <pre className=\"m-0 mt-2 whitespace-pre-wrap break-words rounded-md border border-border/70 bg-card/45 p-2 text-xs leading-5 text-muted-foreground\">\n {formatValue(reporterErrors)}\n </pre>\n ) : null}\n </div>\n <div className=\" text-xs leading-6 text-foreground\">\n {\"score\" in outcome ? formatValue(outcome.score) : \"n/a\"}\n </div>\n <div className=\"flex justify-end\">\n <StatusBadge>{status}</StatusBadge>\n </div>\n </div>\n );\n}\n\nfunction StatusBadge(props: { children: React.ReactNode }) {\n return (\n <StudioStatusBadge className=\"h-7 rounded-md bg-card/70 text-foreground\">\n {props.children}\n </StudioStatusBadge>\n );\n}\n\nfunction MetadataBlock(props: { metadata: unknown }) {\n const entries = isRecord(props.metadata) ? Object.entries(props.metadata) : [];\n if (entries.length === 0) {\n return <MutedPanel>No suite metadata was provided.</MutedPanel>;\n }\n\n return (\n <div className=\"grid gap-2 rounded-xl border border-border/70 bg-card/35 p-4\">\n <SectionLabel>Suite metadata</SectionLabel>\n <div className=\"grid gap-2 text-xs text-muted-foreground\">\n {entries.map(([key, value]) => (\n <KeyValue key={key} label={key} value={formatValue(value)} />\n ))}\n </div>\n </div>\n );\n}\n\nfunction ValuePanel(props: { label: string; value: unknown; emptyText: string }) {\n const hasValue = props.value !== undefined;\n\n return (\n <div className=\"min-w-0 rounded-lg border border-border/70 bg-background/45 p-3\">\n <div className=\" text-xs font-semibold uppercase tracking-[0.14em] text-muted-foreground\">\n {props.label}\n </div>\n <pre className=\"m-0 mt-2 whitespace-pre-wrap break-words text-xs leading-5 text-foreground\">\n {hasValue ? formatValue(props.value) : props.emptyText}\n </pre>\n </div>\n );\n}\n\nfunction KeyValue(props: { label: string; value: string }) {\n return (\n <div className=\"flex min-w-0 items-start justify-between gap-3\">\n <span className=\"shrink-0 text-xs font-semibold uppercase tracking-[0.12em] text-muted-foreground\">\n {props.label}\n </span>\n <span className=\"min-w-0 break-words text-right text-xs text-foreground\">{props.value}</span>\n </div>\n );\n}\n\nfunction MutedPanel(props: { children: React.ReactNode }) {\n return (\n <div className=\"rounded-lg border border-border/70 bg-card/35 p-3 text-sm leading-6 text-muted-foreground\">\n {props.children}\n </div>\n );\n}\n\nfunction SectionLabel(props: { children: React.ReactNode }) {\n return (\n <h2 className=\"m-0 text-xs font-semibold uppercase tracking-[0.16em] text-muted-foreground\">\n {props.children}\n </h2>\n );\n}\n\nfunction RawDetails(props: { title: string; value: unknown }) {\n return (\n <details className=\"rounded-xl border border-border/80 bg-background/45 p-5\">\n <summary className=\"cursor-pointer text-xs font-semibold uppercase tracking-[0.16em] text-muted-foreground\">\n {props.title}\n </summary>\n <pre className=\"mt-3 max-h-[45vh] overflow-auto whitespace-pre-wrap break-words rounded-lg border border-border/70 bg-card/35 p-3 text-xs leading-5 text-foreground\">\n {formatValue(props.value)}\n </pre>\n </details>\n );\n}\n\ntype EvalSuiteRunResult = {\n passed?: number;\n failed?: number;\n invalid?: number;\n durationMs?: number;\n results?: EvalCaseRunResult[];\n};\n\ntype EvalCaseRunResult = {\n case?: unknown;\n output?: unknown;\n targetError?: unknown;\n metrics?: EvalMetricRunResult[];\n};\n\ntype EvalMetricRunResult = {\n metricName?: string;\n outcome?: unknown;\n reporterErrors?: unknown[];\n};\n\nfunction runResult(value: unknown): EvalSuiteRunResult {\n return isRecord(value) ? (value as EvalSuiteRunResult) : {};\n}\n\nfunction caseResultKey(result: EvalCaseRunResult, index: number): string {\n const testCase = isRecord(result.case) ? result.case : {};\n return typeof testCase.id === \"string\" ? testCase.id : `case-${index + 1}`;\n}\n\nfunction metricOutcomeCounts(metrics: EvalMetricRunResult[]): {\n passed: number;\n failed: number;\n invalid: number;\n} {\n return metrics.reduce(\n (counts, metric) => {\n const outcome = isRecord(metric.outcome) ? metric.outcome.outcome : undefined;\n if (outcome === \"pass\") {\n counts.passed += 1;\n }\n if (outcome === \"fail\") {\n counts.failed += 1;\n }\n if (outcome === \"invalid\") {\n counts.invalid += 1;\n }\n return counts;\n },\n { passed: 0, failed: 0, invalid: 0 },\n );\n}\n\nfunction casePrimaryStatus(counts: { passed: number; failed: number; invalid: number }): string {\n if (counts.failed > 0) {\n return \"fail\";\n }\n if (counts.invalid > 0) {\n return \"invalid\";\n }\n if (counts.passed > 0) {\n return \"pass\";\n }\n return \"unknown\";\n}\n\nfunction metricOutcomeKey(result: EvalMetricRunResult): string {\n if (typeof result.metricName === \"string\" && result.metricName.length > 0) {\n return result.metricName;\n }\n return formatValue(result);\n}\n\nfunction objectKeys(value: unknown): string[] {\n return isRecord(value) ? Object.keys(value).filter((key) => value[key] !== undefined) : [];\n}\n\nfunction formatValue(value: unknown): string {\n if (typeof value === \"string\") {\n return value;\n }\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return String(value);\n }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"evals-page-DYejWQfp.js","names":[],"sources":["../../../src/ui/app/modules/evals/evals-page.tsx"],"sourcesContent":["import { PlayIcon } from \"@hugeicons/core-free-icons\";\nimport type React from \"react\";\nimport type {\n StudioEvalCasePreview,\n StudioEvalMetricSummary,\n StudioEvalRunResponse,\n StudioEvalSuiteConfig,\n} from \"../../../../types\";\nimport { Button } from \"../../components/ui/button\";\nimport { StudioIcon } from \"../../components/ui/icon\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../../components/ui/select\";\nimport {\n StudioEmptyState,\n StudioMetric,\n StudioPageShell,\n StudioStatusBadge,\n StudioSurface,\n} from \"../../components/ui/studio\";\n\nexport function EvalsPage(props: {\n evals: StudioEvalSuiteConfig[];\n selectedEvalId: string;\n enabled: boolean;\n runState: \"idle\" | \"running\";\n result: StudioEvalRunResponse | undefined;\n onSelectEval: (evalId: string) => void;\n onRun: () => void;\n}) {\n const selected = props.evals.find((suite) => suite.id === props.selectedEvalId) ?? props.evals[0];\n\n return (\n <StudioPageShell>\n <div className=\"grid min-h-0 min-w-0 pb-6 pr-6\">\n <StudioSurface className=\"grid content-start gap-5 overflow-auto p-6\">\n <header className=\"flex min-w-0 items-start justify-between gap-4 border-b border-border/80 pb-5\">\n <div className=\"min-w-0\">\n <p className=\"m-0 text-xs font-semibold uppercase tracking-[0.16em] text-muted-foreground\">\n Evals\n </p>\n <h1 className=\"m-0 mt-2 text-2xl font-semibold tracking-tight text-foreground\">\n {selected?.name ?? \"Eval suite\"}\n </h1>\n <p className=\"m-0 mt-2 max-w-2xl text-sm leading-6 text-muted-foreground\">\n {selected?.description ??\n \"Inspect eval datasets, metrics, run configuration, and per-case outcomes.\"}\n </p>\n </div>\n <RunButton\n disabled={!props.enabled || selected === undefined || props.runState === \"running\"}\n label={props.runState === \"running\" ? \"Running\" : \"Run\"}\n onRun={props.onRun}\n />\n </header>\n\n <div className=\"grid gap-5 lg:grid-cols-[340px_minmax(0,1fr)]\">\n <aside className=\"grid content-start gap-4 border-r border-border/80 pr-5 max-lg:border-b max-lg:border-r-0 max-lg:pb-5 max-lg:pr-0\">\n <label className=\"grid gap-2\" htmlFor=\"eval-suite-select\">\n <span className=\" text-xs font-semibold uppercase tracking-[0.14em] text-muted-foreground\">\n Suite\n </span>\n <Select value={selected?.id ?? \"\"} onValueChange={props.onSelectEval}>\n <SelectTrigger\n id=\"eval-suite-select\"\n className=\"h-9 w-full rounded-lg border-border/80 bg-background text-xs hover:border-muted-foreground/60 focus:border-muted-foreground/70 focus:ring-muted-foreground/20\"\n >\n <SelectValue placeholder=\"Select eval\" />\n </SelectTrigger>\n <SelectContent>\n {props.evals.map((suite) => (\n <SelectItem key={suite.id} value={suite.id}>\n {suite.name}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </label>\n\n {selected === undefined ? null : (\n <SuiteOverview suite={selected} enabled={props.enabled} />\n )}\n </aside>\n\n <main className=\"min-w-0\">\n {selected === undefined ? (\n <StudioEmptyState\n className=\"min-h-0\"\n title=\"No eval suites\"\n text=\"0 eval suite records are available in this Studio runtime.\"\n />\n ) : props.result === undefined ? (\n <BeforeRun suite={selected} enabled={props.enabled} runState={props.runState} />\n ) : (\n <EvalResult result={props.result} suite={selected} />\n )}\n </main>\n </div>\n </StudioSurface>\n </div>\n </StudioPageShell>\n );\n}\n\nfunction RunButton(props: { disabled: boolean; label: string; onRun: () => void }) {\n return (\n <Button\n className=\"h-9 shrink-0 gap-1.5 rounded-lg border border-white bg-white px-3 text-sm font-semibold text-black shadow-none hover:border-white hover:bg-white/90 hover:text-black disabled:border-border disabled:bg-muted disabled:text-muted-foreground [&_svg]:!size-3\"\n disabled={props.disabled}\n onClick={props.onRun}\n variant=\"ghost\"\n >\n <StudioIcon icon={PlayIcon} aria-hidden=\"true\" />\n {props.label}\n </Button>\n );\n}\n\nfunction SuiteOverview(props: { suite: StudioEvalSuiteConfig; enabled: boolean }) {\n const metadataKeys = objectKeys(props.suite.metadata);\n const previewCount = props.suite.casePreviewCount ?? props.suite.casePreviews?.length ?? 0;\n\n return (\n <div className=\"grid gap-4\">\n <div className=\"grid grid-cols-2 gap-2\">\n <StudioMetric label=\"Cases\" value={String(props.suite.caseCount)} />\n <StudioMetric label=\"Metrics\" value={String(props.suite.metricNames.length)} />\n <StudioMetric label=\"Concurrency\" value={String(props.suite.concurrency ?? 1)} />\n <StudioMetric label=\"Previewed\" value={`${previewCount}/${props.suite.caseCount}`} />\n </div>\n\n <section className=\"grid gap-3 rounded-xl border border-border/70 bg-background/45 p-4\">\n <div>\n <h2 className=\"m-0 text-sm font-semibold text-foreground\">Run readiness</h2>\n <p className=\"m-0 mt-1 text-xs leading-5 text-muted-foreground\">\n {props.enabled\n ? \"This suite is available in the current Studio runtime.\"\n : \"Eval routes are not available in the current Studio runtime.\"}\n </p>\n </div>\n <div className=\"grid gap-2 text-xs text-muted-foreground\">\n <KeyValue label=\"Suite id\" value={props.suite.id} />\n <KeyValue\n label=\"Metadata keys\"\n value={metadataKeys.length > 0 ? metadataKeys.join(\", \") : \"None\"}\n />\n </div>\n </section>\n </div>\n );\n}\n\nfunction BeforeRun(props: {\n suite: StudioEvalSuiteConfig;\n enabled: boolean;\n runState: \"idle\" | \"running\";\n}) {\n return (\n <div className=\"grid gap-4\">\n <section className=\"grid gap-4 rounded-xl border border-border/80 bg-background/45 p-5\">\n <div className=\"grid gap-1\">\n <SectionLabel>What this eval tests</SectionLabel>\n <p className=\"m-0 max-w-3xl text-sm leading-6 text-foreground\">\n {props.suite.description ??\n \"This suite has no description. Use the dataset and metric definitions below to inspect coverage before running it.\"}\n </p>\n </div>\n <MetadataBlock metadata={props.suite.metadata} />\n </section>\n\n <div className=\"grid gap-4 xl:grid-cols-[minmax(0,1.35fr)_minmax(320px,0.65fr)]\">\n <DatasetPreview suite={props.suite} />\n <div className=\"grid content-start gap-4\">\n <MetricsPanel\n metrics={props.suite.metricSummaries}\n metricNames={props.suite.metricNames}\n />\n <RunSetup suite={props.suite} enabled={props.enabled} runState={props.runState} />\n </div>\n </div>\n </div>\n );\n}\n\nfunction DatasetPreview(props: { suite: StudioEvalSuiteConfig }) {\n const previews = props.suite.casePreviews ?? [];\n\n return (\n <section className=\"grid gap-3 rounded-xl border border-border/80 bg-background/45 p-5\">\n <div className=\"flex items-start justify-between gap-3\">\n <div>\n <SectionLabel>Dataset preview</SectionLabel>\n <p className=\"m-0 mt-1 text-xs leading-5 text-muted-foreground\">\n Showing {previews.length} of {props.suite.caseCount} cases.\n </p>\n </div>\n <span className=\"rounded-lg border border-border/80 bg-card/60 px-2.5 py-1 text-xs font-semibold text-muted-foreground\">\n {props.suite.caseCount} cases\n </span>\n </div>\n\n {previews.length === 0 ? (\n <MutedPanel>No dataset preview is available for this suite.</MutedPanel>\n ) : (\n <div className=\"grid gap-3\">\n {previews.map((testCase) => (\n <CasePreviewCard key={testCase.id} testCase={testCase} />\n ))}\n </div>\n )}\n </section>\n );\n}\n\nfunction CasePreviewCard(props: { testCase: StudioEvalCasePreview }) {\n return (\n <article className=\"grid gap-3 rounded-xl border border-border/70 bg-card/35 p-4\">\n <div className=\"flex min-w-0 items-center justify-between gap-3\">\n <h3 className=\"m-0 truncate text-sm font-semibold text-foreground\">{props.testCase.id}</h3>\n {props.testCase.metadataKeys === undefined ? null : (\n <span className=\"shrink-0 text-xs font-semibold uppercase tracking-[0.12em] text-muted-foreground\">\n {props.testCase.metadataKeys.length} metadata\n </span>\n )}\n </div>\n <div className=\"grid gap-3 md:grid-cols-2\">\n <ValuePanel label=\"Input\" value={props.testCase.input} emptyText=\"No input preview\" />\n <ValuePanel\n label=\"Expected\"\n value={props.testCase.expected}\n emptyText=\"No expected value\"\n />\n </div>\n </article>\n );\n}\n\nfunction MetricsPanel(props: {\n metrics: StudioEvalMetricSummary[] | undefined;\n metricNames: string[];\n}) {\n const metrics =\n props.metrics ??\n props.metricNames.map(\n (name): StudioEvalMetricSummary => ({\n name,\n }),\n );\n\n return (\n <section className=\"grid gap-3 rounded-xl border border-border/80 bg-background/45 p-5\">\n <div>\n <SectionLabel>Metrics</SectionLabel>\n <p className=\"m-0 mt-1 text-xs leading-5 text-muted-foreground\">\n Scoring functions that evaluate every case output.\n </p>\n </div>\n {metrics.length === 0 ? (\n <MutedPanel>No metrics are configured for this suite.</MutedPanel>\n ) : (\n <div className=\"grid gap-2\">\n {metrics.map((metric) => (\n <MetricSummaryRow key={metric.name} metric={metric} />\n ))}\n </div>\n )}\n </section>\n );\n}\n\nfunction MetricSummaryRow(props: { metric: StudioEvalMetricSummary }) {\n const details = [\n props.metric.dataType,\n props.metric.configId === undefined ? undefined : `config ${props.metric.configId}`,\n props.metric.scoreConfigId === undefined ? undefined : `score ${props.metric.scoreConfigId}`,\n props.metric.metadataKeys === undefined\n ? undefined\n : `${props.metric.metadataKeys.length} metadata`,\n ].filter(Boolean);\n\n return (\n <div className=\"rounded-lg border border-border/70 bg-card/35 px-3 py-3\">\n <div className=\" text-sm font-semibold text-foreground\">{props.metric.name}</div>\n <div className=\"mt-1 text-xs leading-5 text-muted-foreground\">\n {details.length > 0 ? details.join(\" / \") : \"No metric metadata\"}\n </div>\n </div>\n );\n}\n\nfunction RunSetup(props: {\n suite: StudioEvalSuiteConfig;\n enabled: boolean;\n runState: \"idle\" | \"running\";\n}) {\n return (\n <section className=\"grid gap-3 rounded-xl border border-border/80 bg-background/45 p-5\">\n <div>\n <SectionLabel>Run configuration</SectionLabel>\n <p className=\"m-0 mt-1 text-xs leading-5 text-muted-foreground\">\n This run will execute {props.suite.caseCount} cases across{\" \"}\n {props.suite.metricNames.length} metrics.\n </p>\n </div>\n <div className=\"grid gap-2 text-xs text-muted-foreground\">\n <KeyValue label=\"Concurrency\" value={String(props.suite.concurrency ?? 1)} />\n <KeyValue label=\"Status\" value={props.enabled ? props.runState : \"Unavailable\"} />\n </div>\n </section>\n );\n}\n\nfunction EvalResult(props: { result: StudioEvalRunResponse; suite: StudioEvalSuiteConfig }) {\n const result = runResult(props.result.result);\n const cases = Array.isArray(result.results) ? result.results : [];\n\n return (\n <article className=\"grid gap-4\">\n <section className=\"grid gap-3 rounded-xl border border-border/80 bg-background/45 p-5\">\n <div className=\"flex min-w-0 flex-wrap items-start justify-between gap-3\">\n <div>\n <SectionLabel>Run summary</SectionLabel>\n <p className=\"m-0 mt-1 text-xs leading-5 text-muted-foreground\">\n {props.result.runId} / {new Date(props.result.startedAt).toLocaleTimeString()}\n </p>\n </div>\n <span className=\"rounded-lg border border-border/80 bg-card/60 px-2.5 py-1 text-xs font-semibold uppercase tracking-[0.12em] text-muted-foreground\">\n {props.suite.name}\n </span>\n </div>\n <div className=\"grid gap-2 sm:grid-cols-4\">\n <StudioMetric label=\"Passed\" value={String(result.passed ?? 0)} />\n <StudioMetric label=\"Failed\" value={String(result.failed ?? 0)} />\n <StudioMetric label=\"Invalid\" value={String(result.invalid ?? 0)} />\n <StudioMetric\n label=\"Duration\"\n value={`${result.durationMs ?? props.result.durationMs}ms`}\n />\n </div>\n </section>\n\n <section className=\"grid gap-3 rounded-xl border border-border/80 bg-background/45 p-5\">\n <div className=\"flex min-w-0 flex-wrap items-start justify-between gap-3\">\n <div>\n <SectionLabel>Case results</SectionLabel>\n <p className=\"m-0 mt-1 text-xs leading-5 text-muted-foreground\">\n Each case shows the prompt, expected answer, model output, then metric judgments.\n </p>\n </div>\n <span className=\"rounded-lg border border-border/80 bg-card/60 px-2.5 py-1 text-xs font-semibold text-muted-foreground\">\n {cases.length} cases\n </span>\n </div>\n {cases.length === 0 ? (\n <MutedPanel>No per-case results were returned by this eval run.</MutedPanel>\n ) : (\n <div className=\"grid gap-4\">\n {cases.map((testCase, index) => (\n <CaseResultCard\n index={index}\n key={caseResultKey(testCase, index)}\n result={testCase}\n />\n ))}\n </div>\n )}\n </section>\n\n <RawDetails title=\"Raw result\" value={props.result.result} />\n </article>\n );\n}\n\nfunction CaseResultCard(props: { index: number; result: EvalCaseRunResult }) {\n const testCase = isRecord(props.result.case) ? props.result.case : {};\n const metrics = Array.isArray(props.result.metrics) ? props.result.metrics : [];\n const caseId = typeof testCase.id === \"string\" ? testCase.id : `case-${props.index + 1}`;\n const counts = metricOutcomeCounts(metrics);\n const primaryStatus = casePrimaryStatus(counts);\n\n return (\n <article className=\"overflow-hidden rounded-xl border border-border/70 bg-card/35\">\n <div className=\"flex min-w-0 flex-wrap items-start justify-between gap-4 border-b border-border/70 bg-background/35 px-4 py-4\">\n <div className=\"flex min-w-0 items-start gap-3\">\n <span className=\"flex h-7 min-w-7 items-center justify-center rounded-lg border border-border/80 bg-card/70 text-xs font-semibold text-muted-foreground\">\n {props.index + 1}\n </span>\n <div className=\"min-w-0\">\n <h3 className=\"m-0 truncate text-base font-semibold text-foreground\">{caseId}</h3>\n <p className=\"m-0 mt-1 text-xs leading-5 text-muted-foreground\">\n {metrics.length} metric outcomes / {counts.passed} pass / {counts.failed} fail /{\" \"}\n {counts.invalid} invalid\n </p>\n </div>\n </div>\n <StatusBadge>{primaryStatus}</StatusBadge>\n </div>\n\n <div className=\"grid gap-4 p-4\">\n <section className=\"grid gap-3\">\n <SectionLabel>Test case</SectionLabel>\n <div className=\"grid gap-3 xl:grid-cols-[minmax(0,1.15fr)_minmax(0,0.85fr)]\">\n <ValuePanel label=\"Input\" value={testCase.input} emptyText=\"No input\" />\n <div className=\"grid gap-3 sm:grid-cols-2 xl:grid-cols-1\">\n <ValuePanel\n label=\"Expected\"\n value={testCase.expected}\n emptyText=\"No expected value\"\n />\n <ValuePanel label=\"Output\" value={props.result.output} emptyText=\"No output\" />\n </div>\n </div>\n </section>\n\n {props.result.targetError === undefined ? null : (\n <ValuePanel\n label=\"Target error\"\n value={props.result.targetError}\n emptyText=\"No target error\"\n />\n )}\n\n <section className=\"grid gap-3\">\n <SectionLabel>Metric judgments</SectionLabel>\n {metrics.length === 0 ? (\n <MutedPanel>No metric results were returned for this case.</MutedPanel>\n ) : (\n <div className=\"overflow-hidden rounded-lg border border-border/70 bg-background/45\">\n <div className=\"grid grid-cols-[minmax(0,1fr)_96px_96px] gap-3 border-b border-border/70 px-3 py-2 text-xs font-semibold uppercase tracking-[0.14em] text-muted-foreground\">\n <span>Metric</span>\n <span>Score</span>\n <span className=\"text-right\">Status</span>\n </div>\n <div className=\"grid\">\n {metrics.map((metric, index) => (\n <MetricOutcomeRow index={index} key={metricOutcomeKey(metric)} metric={metric} />\n ))}\n </div>\n </div>\n )}\n </section>\n </div>\n </article>\n );\n}\n\nfunction MetricOutcomeRow(props: { index: number; metric: EvalMetricRunResult }) {\n const outcome = isRecord(props.metric.outcome) ? props.metric.outcome : {};\n const status = typeof outcome.outcome === \"string\" ? outcome.outcome : \"unknown\";\n const reporterErrors = Array.isArray(props.metric.reporterErrors)\n ? props.metric.reporterErrors\n : [];\n\n return (\n <div className=\"grid grid-cols-[minmax(0,1fr)_96px_96px] gap-3 border-b border-border/60 px-3 py-3 last:border-b-0\">\n <div className=\"min-w-0\">\n <div className=\"truncate text-sm font-semibold text-foreground\">\n {props.metric.metricName ?? `metric-${props.index + 1}`}\n </div>\n <div className=\"mt-1 text-xs leading-5 text-muted-foreground\">\n {typeof outcome.comment === \"string\"\n ? outcome.comment\n : typeof outcome.reason === \"string\"\n ? outcome.reason\n : \"No comment\"}\n </div>\n {reporterErrors.length > 0 ? (\n <pre className=\"m-0 mt-2 whitespace-pre-wrap break-words rounded-md border border-border/70 bg-card/45 p-2 text-xs leading-5 text-muted-foreground\">\n {formatValue(reporterErrors)}\n </pre>\n ) : null}\n </div>\n <div className=\" text-xs leading-6 text-foreground\">\n {\"score\" in outcome ? formatValue(outcome.score) : \"n/a\"}\n </div>\n <div className=\"flex justify-end\">\n <StatusBadge>{status}</StatusBadge>\n </div>\n </div>\n );\n}\n\nfunction StatusBadge(props: { children: React.ReactNode }) {\n return (\n <StudioStatusBadge className=\"h-7 rounded-md bg-card/70 text-foreground\">\n {props.children}\n </StudioStatusBadge>\n );\n}\n\nfunction MetadataBlock(props: { metadata: unknown }) {\n const entries = isRecord(props.metadata) ? Object.entries(props.metadata) : [];\n if (entries.length === 0) {\n return <MutedPanel>No suite metadata was provided.</MutedPanel>;\n }\n\n return (\n <div className=\"grid gap-2 rounded-xl border border-border/70 bg-card/35 p-4\">\n <SectionLabel>Suite metadata</SectionLabel>\n <div className=\"grid gap-2 text-xs text-muted-foreground\">\n {entries.map(([key, value]) => (\n <KeyValue key={key} label={key} value={formatValue(value)} />\n ))}\n </div>\n </div>\n );\n}\n\nfunction ValuePanel(props: { label: string; value: unknown; emptyText: string }) {\n const hasValue = props.value !== undefined;\n\n return (\n <div className=\"min-w-0 rounded-lg border border-border/70 bg-background/45 p-3\">\n <div className=\" text-xs font-semibold uppercase tracking-[0.14em] text-muted-foreground\">\n {props.label}\n </div>\n <pre className=\"m-0 mt-2 whitespace-pre-wrap break-words text-xs leading-5 text-foreground\">\n {hasValue ? formatValue(props.value) : props.emptyText}\n </pre>\n </div>\n );\n}\n\nfunction KeyValue(props: { label: string; value: string }) {\n return (\n <div className=\"flex min-w-0 items-start justify-between gap-3\">\n <span className=\"shrink-0 text-xs font-semibold uppercase tracking-[0.12em] text-muted-foreground\">\n {props.label}\n </span>\n <span className=\"min-w-0 break-words text-right text-xs text-foreground\">{props.value}</span>\n </div>\n );\n}\n\nfunction MutedPanel(props: { children: React.ReactNode }) {\n return (\n <div className=\"rounded-lg border border-border/70 bg-card/35 p-3 text-sm leading-6 text-muted-foreground\">\n {props.children}\n </div>\n );\n}\n\nfunction SectionLabel(props: { children: React.ReactNode }) {\n return (\n <h2 className=\"m-0 text-xs font-semibold uppercase tracking-[0.16em] text-muted-foreground\">\n {props.children}\n </h2>\n );\n}\n\nfunction RawDetails(props: { title: string; value: unknown }) {\n return (\n <details className=\"rounded-xl border border-border/80 bg-background/45 p-5\">\n <summary className=\"cursor-pointer text-xs font-semibold uppercase tracking-[0.16em] text-muted-foreground\">\n {props.title}\n </summary>\n <pre className=\"mt-3 max-h-[45vh] overflow-auto whitespace-pre-wrap break-words rounded-lg border border-border/70 bg-card/35 p-3 text-xs leading-5 text-foreground\">\n {formatValue(props.value)}\n </pre>\n </details>\n );\n}\n\ntype EvalSuiteRunResult = {\n passed?: number;\n failed?: number;\n invalid?: number;\n durationMs?: number;\n results?: EvalCaseRunResult[];\n};\n\ntype EvalCaseRunResult = {\n case?: unknown;\n output?: unknown;\n targetError?: unknown;\n metrics?: EvalMetricRunResult[];\n};\n\ntype EvalMetricRunResult = {\n metricName?: string;\n outcome?: unknown;\n reporterErrors?: unknown[];\n};\n\nfunction runResult(value: unknown): EvalSuiteRunResult {\n return isRecord(value) ? (value as EvalSuiteRunResult) : {};\n}\n\nfunction caseResultKey(result: EvalCaseRunResult, index: number): string {\n const testCase = isRecord(result.case) ? result.case : {};\n return typeof testCase.id === \"string\" ? testCase.id : `case-${index + 1}`;\n}\n\nfunction metricOutcomeCounts(metrics: EvalMetricRunResult[]): {\n passed: number;\n failed: number;\n invalid: number;\n} {\n return metrics.reduce(\n (counts, metric) => {\n const outcome = isRecord(metric.outcome) ? metric.outcome.outcome : undefined;\n if (outcome === \"pass\") {\n counts.passed += 1;\n }\n if (outcome === \"fail\") {\n counts.failed += 1;\n }\n if (outcome === \"invalid\") {\n counts.invalid += 1;\n }\n return counts;\n },\n { passed: 0, failed: 0, invalid: 0 },\n );\n}\n\nfunction casePrimaryStatus(counts: { passed: number; failed: number; invalid: number }): string {\n if (counts.failed > 0) {\n return \"fail\";\n }\n if (counts.invalid > 0) {\n return \"invalid\";\n }\n if (counts.passed > 0) {\n return \"pass\";\n }\n return \"unknown\";\n}\n\nfunction metricOutcomeKey(result: EvalMetricRunResult): string {\n if (typeof result.metricName === \"string\" && result.metricName.length > 0) {\n return result.metricName;\n }\n return formatValue(result);\n}\n\nfunction objectKeys(value: unknown): string[] {\n return isRecord(value) ? Object.keys(value).filter((key) => value[key] !== undefined) : [];\n}\n\nfunction formatValue(value: unknown): string {\n if (typeof value === \"string\") {\n return value;\n }\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return String(value);\n }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n"],"mappings":"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"}