evals-lab 0.16.0 → 0.17.0

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 (107) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/README.md +12 -11
  3. package/bin/evals-lab.js +5 -1
  4. package/bin/update.js +65 -0
  5. package/lab/VERSION +1 -1
  6. package/lab/demo/CREDITS.md +4 -3
  7. package/lab/demo/datasets/recorded-replies.json +39 -0
  8. package/lab/demo/manifest.json +2 -2
  9. package/lab/demo/pipelines/recorded-replies.json +89 -0
  10. package/lab/demo/sources/Demo 1/basketball-hoop.jpg +0 -0
  11. package/lab/demo/sources/Demo 1/blue-boardwalk.jpg +0 -0
  12. package/lab/demo/sources/Demo 1/busy-beach.jpg +0 -0
  13. package/lab/demo/sources/Demo 1/butcher-sign.jpg +0 -0
  14. package/lab/demo/sources/Demo 1/cactus-flower.jpg +0 -0
  15. package/lab/demo/sources/Demo 1/corner-shop.jpg +0 -0
  16. package/lab/demo/sources/Demo 1/crosswalk-cyclist-panorama.jpg +0 -0
  17. package/lab/demo/sources/Demo 1/cyanotype-room.jpg +0 -0
  18. package/lab/demo/sources/Demo 1/dead-end-sign.jpg +0 -0
  19. package/lab/demo/sources/Demo 1/dog-in-snow.jpg +0 -0
  20. package/lab/demo/sources/Demo 1/empty-bedroom.jpg +0 -0
  21. package/lab/demo/sources/Demo 1/farmers-market-stall.jpg +0 -0
  22. package/lab/demo/sources/Demo 1/four-jets.jpg +0 -0
  23. package/lab/demo/sources/Demo 1/german-shepherd.jpg +0 -0
  24. package/lab/demo/sources/Demo 1/harbour-bridge-dusk.jpg +0 -0
  25. package/lab/demo/sources/Demo 1/harrow-on-the-hill-sign.jpg +0 -0
  26. package/lab/demo/sources/Demo 1/hong-kong-street.jpg +0 -0
  27. package/lab/demo/sources/Demo 1/house-salisbury-street.jpg +0 -0
  28. package/lab/demo/sources/Demo 1/infrared-orchard.jpg +0 -0
  29. package/lab/demo/sources/Demo 1/keyboard-desk.jpg +0 -0
  30. package/lab/demo/sources/Demo 1/lighthouse-dunes.jpg +0 -0
  31. package/lab/demo/sources/Demo 1/mountain-lake.jpg +0 -0
  32. package/lab/demo/sources/Demo 1/museum-skeleton.jpg +0 -0
  33. package/lab/demo/sources/Demo 1/music-room.jpg +0 -0
  34. package/lab/demo/sources/Demo 1/old-red-car.jpg +0 -0
  35. package/lab/demo/sources/Demo 1/parked-car-plate.jpg +0 -0
  36. package/lab/demo/sources/Demo 1/phone-and-wallet.png +0 -0
  37. package/lab/demo/sources/Demo 1/phone-box.jpg +0 -0
  38. package/lab/demo/sources/Demo 1/pink-flamingo.jpg +0 -0
  39. package/lab/demo/sources/Demo 1/postcards.jpg +0 -0
  40. package/lab/demo/sources/Demo 1/red-roof-church.jpg +0 -0
  41. package/lab/demo/sources/Demo 1/roadside-mailboxes.jpg +0 -0
  42. package/lab/demo/sources/Demo 1/rodeo.jpg +0 -0
  43. package/lab/demo/sources/Demo 1/running-tap.tif +0 -0
  44. package/lab/demo/sources/Demo 1/snail-on-stem.jpg +0 -0
  45. package/lab/demo/sources/Demo 1/two-horses-field.jpg +0 -0
  46. package/lab/demo/sources/Demo 1/university-sign.jpg +0 -0
  47. package/lab/demo/sources/Demo 1/vegetable-crates.jpg +0 -0
  48. package/lab/demo/sources/Demo 1/watermarked-car.jpg +0 -0
  49. package/lab/demo/sources/Demo 1/watermarked-pills.jpg +0 -0
  50. package/lab/demo/sources/Demo 1/whiteboard-delegate.jpg +0 -0
  51. package/lab/demo/sources/Demo 1/whiteboard-germ-layers.jpg +0 -0
  52. package/lab/demo/sources/Demo 2/aerial-city.jpg +0 -0
  53. package/lab/demo/sources/Demo 2/alligator-pen.jpg +0 -0
  54. package/lab/demo/sources/Demo 2/arm-tattoo.jpg +0 -0
  55. package/lab/demo/sources/Demo 2/bed-and-plant.jpg +0 -0
  56. package/lab/demo/sources/Demo 2/bright-bedroom.jpg +0 -0
  57. package/lab/demo/sources/Demo 2/car-headlight.jpg +0 -0
  58. package/lab/demo/sources/Demo 2/child-in-surf.jpg +0 -0
  59. package/lab/demo/sources/Demo 2/city-highway.jpg +0 -0
  60. package/lab/demo/sources/Demo 2/corner-bakery.jpg +0 -0
  61. package/lab/demo/sources/Demo 2/cyclist-yellow-jacket.jpg +0 -0
  62. package/lab/demo/sources/Demo 2/excavator-street-signs.jpg +0 -0
  63. package/lab/demo/sources/Demo 2/globe-closeup.jpg +0 -0
  64. package/lab/demo/sources/Demo 2/harbour-village.jpg +0 -0
  65. package/lab/demo/sources/Demo 2/high-street-walkers.jpg +0 -0
  66. package/lab/demo/sources/Demo 2/hillside-rooftops.jpg +0 -0
  67. package/lab/demo/sources/Demo 2/house-at-night.jpg +0 -0
  68. package/lab/demo/sources/Demo 2/ivy-leaves.jpg +0 -0
  69. package/lab/demo/sources/Demo 2/man-with-alligator.jpg +0 -0
  70. package/lab/demo/sources/Demo 2/orange-mailbox-hedge.jpg +0 -0
  71. package/lab/demo/sources/Demo 2/pedal-boats.jpg +0 -0
  72. package/lab/demo/sources/Demo 2/pink-trees-vignette.jpg +0 -0
  73. package/lab/demo/sources/Demo 2/please-leave-quietly-sign.jpg +0 -0
  74. package/lab/demo/sources/Demo 2/railroad-crossing-sign.jpg +0 -0
  75. package/lab/demo/sources/Demo 2/roadworks-sign.jpg +0 -0
  76. package/lab/demo/sources/Demo 2/roundabout-sign.jpg +0 -0
  77. package/lab/demo/sources/Demo 2/sea-cave.jpg +0 -0
  78. package/lab/demo/sources/Demo 2/shadow-on-sand.jpg +0 -0
  79. package/lab/demo/sources/Demo 2/signpost-a404.jpg +0 -0
  80. package/lab/demo/sources/Demo 2/street-fruit-cart.jpg +0 -0
  81. package/lab/demo/sources/Demo 2/street-sign-parnassusweg.jpg +0 -0
  82. package/lab/demo/sources/Demo 2/two-horses-close.jpg +0 -0
  83. package/lab/demo/sources/Demo 2/victorian-house.jpg +0 -0
  84. package/lab/demo/sources/Demo 2/vintage-dashboard.jpg +0 -0
  85. package/lab/demo/sources/Demo 2/volcano-at-dusk.jpg +0 -0
  86. package/lab/demo/sources/Demo 2/wall-camera.jpg +0 -0
  87. package/lab/demo/sources/Demo 2/watch-for-rocks-sign.jpg +0 -0
  88. package/lab/demo/sources/Demo 2/waterfall.jpg +0 -0
  89. package/lab/demo/sources/Demo 2/white-domes.jpg +0 -0
  90. package/lab/demo/sources/Demo 2/whiteboard-meeting-notes.jpg +0 -0
  91. package/lab/demo/sources/Demo 2/whiteboard-messages.jpg +0 -0
  92. package/lab/demo/sources/Demo 2/wooden-house-fence.jpg +0 -0
  93. package/lab/kinds/list.mjs +11 -3
  94. package/lab/server.py +19 -1
  95. package/lab/web/dist/assets/dist-BfJnsQb9.js +1 -0
  96. package/lab/web/dist/assets/gallery-Dv7iXLfa.js +5 -0
  97. package/lab/web/dist/assets/main-DS76udej.css +1 -0
  98. package/lab/web/dist/assets/main-DaObzKJz.js +18 -0
  99. package/lab/web/dist/assets/tokens-z9rSXnjM.js +64 -0
  100. package/lab/web/dist/gallery.html +2 -2
  101. package/lab/web/dist/index.html +3 -3
  102. package/package.json +3 -3
  103. package/lab/web/dist/assets/dist-DI3ewZYj.js +0 -1
  104. package/lab/web/dist/assets/gallery-ICJNZQIZ.js +0 -5
  105. package/lab/web/dist/assets/main-BOkQWswU.css +0 -1
  106. package/lab/web/dist/assets/main-rJDsPFWT.js +0 -18
  107. package/lab/web/dist/assets/tokens-C5ist-xG.js +0 -64
@@ -0,0 +1,18 @@
1
+ import{$ as e,$n as t,$t as n,A as r,An as i,At as a,B as o,Bn as s,Bt as c,C as l,Cn as u,Cr as d,D as f,Dn as p,Dt as m,E as h,En as g,Er as _,Et as v,F as y,Fn as b,Ft as x,G as S,Gn as C,Gt as w,H as T,Hn as E,Ht as D,I as O,In as k,It as A,J as j,Jn as M,K as N,Kn as P,Kt as F,L as I,Ln as L,Lt as R,M as ee,Mn as te,Mt as ne,N as z,Nn as re,Nt as B,O as ie,On as V,Ot as ae,P as H,Pn as U,Pt as oe,Q as W,Qn as se,Qt as ce,R as le,Rn as ue,Rt as de,S as fe,Sn as G,Sr as pe,St as me,T as he,Tn as ge,Tr as _e,Tt as ve,U as ye,Un as be,Ut as xe,V as Se,Vn as Ce,Vt as we,W as Te,Wn as Ee,Wt as De,X as Oe,Xn as ke,Xt as Ae,Y as je,Yn as K,Yt as Me,Z as Ne,Zn as Pe,Zt as Fe,_ as Ie,_n as Le,_r as Re,_t as ze,a as Be,an as Ve,ar as q,at as He,b as Ue,bn as J,br as We,bt as Ge,c as Ke,cn as qe,cr as Je,ct as Ye,d as Xe,dn as Ze,dr as Qe,dt as $e,en as et,er as tt,et as nt,f as rt,fn as it,ft as at,g as ot,gn as st,gr as ct,gt as lt,h as ut,hn as dt,hr as ft,ht as pt,i as mt,in as ht,ir as gt,it as _t,j as vt,jn as yt,jt as bt,k as xt,kn as St,kt as Ct,ln as wt,lr as Tt,lt as Et,m as Dt,mn as Ot,mr as kt,mt as At,nn as jt,nr as Mt,nt as Nt,o as Pt,on as Ft,or as Y,ot as It,p as Lt,pn as Rt,pr as zt,pt as Bt,q as Vt,qn as Ht,qt as Ut,r as Wt,rn as Gt,rr as Kt,rt as qt,s as Jt,sn as Yt,sr as Xt,st as Zt,t as Qt,tn as $t,tr as en,tt as tn,u as nn,un as rn,ur as an,ut as on,v as sn,vn as cn,vr as ln,vt as un,w as dn,wn as fn,wr as pn,wt as mn,x as hn,xn as gn,xr as _n,xt as vn,y as yn,yn as bn,yr as xn,yt as Sn,z as Cn,zn as wn,zt as Tn}from"./tokens-z9rSXnjM.js";var En=_e(),X=_(),Dn=(0,X.createContext)(null);function Z(){let e=(0,X.useContext)(Dn);if(!e)throw Error(`useApi outside an ApiContext: main.tsx mounts one at the root`);return e}var On={},kn=new Set,An=e=>`/plugins/${encodeURIComponent(e.id)}/${encodeURIComponent(e.version)}/${e.entry.split(`/`).map(encodeURIComponent).join(`/`)}`;async function jn(e){if(!kn.has(e.id))try{let t=await import(An(e));if(typeof t.default!=`function`)throw Error(`its entry exports no register function`);await t.default(Y().pluginHost(e.id)),kn.add(e.id),delete On[e.id]}catch(t){On[e.id]=t instanceof Error?t.message:String(t)}}async function Mn(e){let t=[];try{t=(await e.plugins()).plugins}catch{return}for(let e of t)await jn(e)}var Nn=class extends Error{status;body;constructor(e,t,n=null){super(t),this.name=`ApiError`,this.status=e,this.body=n}},Pn=(e,t)=>`${e}:${t}`,Fn=(e,t,n,r)=>{let i=e[Pn(t,n)]??[];return i.length===0||i.includes(`*all`)||i.includes(r)},In=new EventTarget,Ln=e=>/^\/api\/(sources|queue)(\/|\?|$)/.test(e);function Rn(e=(...e)=>fetch(...e),t=``){let n=e=>t+e;async function r(e){let t=await e.text(),n=t;try{n=t?JSON.parse(t):null}catch{}if(!e.ok){let t=n&&typeof n==`object`&&`error`in n?n.error:null,r=typeof t==`string`?t:t&&typeof t==`object`&&typeof t.message==`string`?`${t.type?`${t.type}: `:``}${t.message}`:t==null?``:JSON.stringify(t);throw new Nn(e.status,r||`HTTP ${e.status}`,n)}return n}async function i(t,i){let a=await r(await e(n(t),i?.body===void 0?{method:i?.method??`GET`}:{method:i.method??`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(i.body),...i.keepalive?{keepalive:!0}:{}}));return(i?.method??(i?.body===void 0?`GET`:`POST`))!==`GET`&&Ln(t)&&In.dispatchEvent(new Event(`write`)),a}let a=e=>({...e,snapshot:Y().upgradePipeline(e.snapshot),results:Y().upgradeResults(e.results)}),o=e=>{let t=new URLSearchParams;return e.pipeline&&t.set(`pipeline`,e.pipeline),e.limit&&t.set(`limit`,String(e.limit)),e.before&&t.set(`before`,e.before),e.beforeId&&t.set(`beforeId`,e.beforeId),e.full&&t.set(`full`,`1`),`/api/queue${t.size?`?${t}`:``}`},s=new Map,c=async e=>({...e,runs:await Promise.all(e.runs.map(e=>f(a(e))))}),l=async e=>{let t=await e;return{...t,run:a(t.run)}},u=new Map,d=e=>Y().evalsOf(e.snapshot).some(e=>Y().isWholeRun(Y().EVAL_TYPES[e.type],e)),f=e=>{if(!e.brief||!d(e))return Promise.resolve(e);let t=`${e.status} ${e.progress?.n??0} ${e.finishedAt??``}`,n=u.get(e.id);if(n?.at===t)return n.row;let r=i(`/api/queue/${encodeURIComponent(e.id)}`).then(a,()=>(u.delete(e.id),e));return u.set(e.id,{at:t,row:r}),r};return{config:()=>i(`/api/config`),google:()=>i(`/api/google`),setGoogle:e=>i(`/api/google`,{method:`PUT`,body:e}),setMicrosoft:(e,t)=>i(`/api/microsoft`,{method:`PUT`,body:{clientId:e,tenant:t}}),state:()=>i(`/api/state`),writeState:(e,t=!1)=>i(`/api/state`,{body:{docs:e},keepalive:t}),queue:(e={})=>{let t=o(e),n=s.get(t);return s.delete(t),n??i(t).then(c)},askQueue:(e,t)=>{let n=o(e),r=i(n),a=t.then(()=>r).then(c);a.catch(()=>{}),s.set(n,a)},run:e=>i(`/api/queue/${encodeURIComponent(e)}`).then(a),setComment:(e,t)=>i(`/api/queue/${encodeURIComponent(e)}`,{method:`PATCH`,body:{comment:t}}).then(a),submit:e=>l(i(`/api/queue`,{body:e})),cancel:e=>l(i(`/api/queue/${encodeURIComponent(e)}/cancel`,{body:{}})),resume:e=>l(i(`/api/queue/${encodeURIComponent(e)}/resume`,{body:{}})),rerunRun:e=>l(i(`/api/queue/${encodeURIComponent(e)}/rerun`,{body:{}})),rerun:(e,t)=>l(i(`/api/queue/${encodeURIComponent(e)}/items/${t}`,{body:{}})),rescore:(e,t)=>l(i(`/api/queue/${encodeURIComponent(e)}/rescore/${t}`,{body:{}})),clear:()=>i(`/api/queue`,{method:`DELETE`}),sources:()=>i(`/api/sources`),source:e=>i(`/api/sources/${encodeURIComponent(e)}`),datasets:()=>i(`/api/datasets`),dataset:e=>i(`/api/datasets/${encodeURIComponent(e)}`),archivedRules:()=>i(`/api/datasets/archived-rules`),createDataset:e=>i(`/api/datasets`,{body:e}),renameDataset:(e,t)=>i(`/api/datasets/${encodeURIComponent(e)}`,{method:`PATCH`,body:{name:t}}),setDatasetPreview:(e,t)=>i(`/api/datasets/${encodeURIComponent(e)}`,{method:`PATCH`,body:{preview:t}}),saveDataset:(e,t,n)=>i(`/api/datasets/${encodeURIComponent(e)}`,{method:`PUT`,body:{version:t,body:n}}),deleteDataset:e=>i(`/api/datasets/${encodeURIComponent(e)}`,{method:`DELETE`}),restoreDataset:e=>i(`/api/datasets/trash/${encodeURIComponent(e)}/restore`,{body:{}}),exportDatasetUrl:e=>n(`/api/datasets/${encodeURIComponent(e)}/export`),exportAllDatasetsUrl:()=>n(`/api/datasets/export`),importDatasets:e=>i(`/api/datasets/import`,{body:e}),runDataset:e=>i(`/api/queue/${encodeURIComponent(e)}/dataset`),runGroups:e=>i(`/api/queue/${encodeURIComponent(e)}/groups`),filterSets:()=>i(`/api/filter-sets`),filterSet:e=>i(`/api/filter-sets/${encodeURIComponent(e)}`),createFilterSet:e=>i(`/api/filter-sets`,{body:e}),renameFilterSet:(e,t)=>i(`/api/filter-sets/${encodeURIComponent(e)}`,{method:`PATCH`,body:{name:t}}),saveFilterSet:(e,t,n)=>i(`/api/filter-sets/${encodeURIComponent(e)}`,{method:`PUT`,body:{version:t,body:n}}),deleteFilterSet:e=>i(`/api/filter-sets/${encodeURIComponent(e)}`,{method:`DELETE`}),restoreFilterSet:e=>i(`/api/filter-sets/trash/${encodeURIComponent(e)}/restore`,{body:{}}),prompts:()=>i(`/api/prompts`),prompt:e=>i(`/api/prompts/${encodeURIComponent(e)}`),createPrompt:e=>i(`/api/prompts`,{body:e}),editPrompt:(e,t,n)=>i(`/api/prompts/${encodeURIComponent(e)}`,{method:`PUT`,body:{base:t,...n}}),setDefaultPrompt:e=>i(`/api/prompts/${encodeURIComponent(e)}/default`,{body:{}}),restorePromptVersion:(e,t)=>i(`/api/prompts/${encodeURIComponent(e)}/versions/${t}/restore`,{body:{}}),deletePrompt:e=>i(`/api/prompts/${encodeURIComponent(e)}`,{method:`DELETE`}),restorePrompt:e=>i(`/api/prompts/trash/${encodeURIComponent(e)}/restore`,{body:{}}),createSource:(e,t,n)=>i(`/api/sources`,{body:{name:e,type:t,...n?{config:n}:{}}}),definition:e=>i(`/api/sources/${encodeURIComponent(e)}/definition`),saveDefinition:(e,t,n)=>i(`/api/sources/${encodeURIComponent(e)}/definition`,{method:`PUT`,body:{version:t,body:n}}),updateSource:(e,t)=>i(`/api/sources/${encodeURIComponent(e)}`,{method:`PATCH`,body:t}),sourceCalls:e=>i(`/api/sources/${encodeURIComponent(e)}/calls`),snapshotSource:e=>i(`/api/sources/${encodeURIComponent(e)}/snapshot`,{body:{}}),sourceResponses:e=>i(`/api/sources/${encodeURIComponent(e)}/responses`),restoreResponse:(e,t,n,r)=>i(`/api/sources/${encodeURIComponent(e)}/responses/restore`,{body:{name:t,n,...r==null?{}:{drop:r}}}),removeCalls:(e,t)=>i(`/api/sources/${encodeURIComponent(e)}/calls/remove`,{body:{names:t}}),editCall:(e,t,n)=>i(`/api/sources/${encodeURIComponent(e)}/calls/edit`,{body:{name:t,...n}}),cloneCall:(e,t)=>i(`/api/sources/${encodeURIComponent(e)}/calls/clone`,{body:{name:t}}),removeSource:e=>i(`/api/sources/${encodeURIComponent(e)}`,{method:`DELETE`}),removeFiles:(e,t)=>i(`/api/sources/${encodeURIComponent(e)}/remove`,{body:{names:t}}),restoreTrash:e=>i(`/api/sources/trash/${encodeURIComponent(e)}/restore`,{body:{}}),copyFiles:(e,t,n,r=!1)=>i(`/api/sources/${encodeURIComponent(e)}/copy`,{body:{from:t,names:n,move:r}}),upload:async(t,i,a)=>r(await e(n(`/api/sources/${encodeURIComponent(t)}`),{method:`POST`,headers:{"X-File-Name":i},body:a})),zip:async(t,i)=>{let a=await e(n(`/api/sources/${encodeURIComponent(t)}/zip`),{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({names:i})});return a.ok||await r(a),a.blob()},bundle:async t=>{let i=await e(n(`/api/bundle`),{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)});return i.ok||await r(i),i.blob()},file:async(t,i)=>{let a=await e(n(`/api/sources/${encodeURIComponent(t)}/files/${encodeURIComponent(i)}`),{cache:`no-store`});return a.ok||await r(a),a.blob()},samples:()=>i(`/api/samples`),presets:()=>i(`/api/presets`),plugins:()=>i(`/api/plugins`),installPlugin:async t=>r(await e(n(`/api/plugins`),{method:`POST`,headers:{"Content-Type":`application/zip`},body:t})),removePlugin:e=>i(`/api/plugins/${encodeURIComponent(e)}`,{method:`DELETE`}),restorePlugin:e=>i(`/api/plugins/trash/${encodeURIComponent(e)}/restore`,{body:{}}),connections:()=>i(`/api/connections`),signIn:e=>i(`/api/connections/${encodeURIComponent(e)}/start`,{body:{}}),signOut:e=>i(`/api/connections/${encodeURIComponent(e)}`,{method:`DELETE`}),connectionShares:()=>i(`/api/connections/shares`),setConnectionShares:(e,t,n)=>i(`/api/connections/shares`,{method:`PUT`,body:{kind:e,id:t,workspaces:n}}),shareConnection:(e,t,n=!1)=>i(`/api/connections/share`,{body:{kind:e,id:t,...n?{undo:!0}:{}}}),packs:()=>i(`/api/packs`),installPack:async t=>r(await e(n(`/api/packs`),{method:`POST`,headers:{"Content-Type":`application/zip`},body:t})),removePack:e=>i(`/api/packs/${encodeURIComponent(e)}`,{method:`DELETE`}),restorePack:e=>i(`/api/packs/trash/${encodeURIComponent(e)}/restore`,{body:{}}),workspaces:()=>i(`/api/workspaces`),createWorkspace:e=>i(`/api/workspaces`,{body:e}),renameWorkspace:(e,t)=>i(`/api/workspaces/${encodeURIComponent(e)}`,{method:`PATCH`,body:{name:t}}),regenerateWorkspace:e=>i(`/api/workspaces/${encodeURIComponent(e)}/regenerate`,{body:{}}),archiveWorkspace:e=>i(`/api/workspaces/${encodeURIComponent(e)}/archive`,{body:{}}),unarchiveWorkspace:e=>i(`/api/workspaces/${encodeURIComponent(e)}/unarchive`,{body:{}}),setDefaultWorkspace:e=>i(`/api/workspaces/${encodeURIComponent(e)}/default`,{body:{}}),deleteWorkspace:e=>i(`/api/workspaces/${encodeURIComponent(e)}`,{method:`DELETE`}),restoreWorkspace:e=>i(`/api/workspaces/trash/${encodeURIComponent(e)}/restore`,{body:{}}),copyMovePreflight:e=>i(`/api/copy-move/preflight`,{body:e}),copyAsset:e=>i(`/api/copy-move/copy`,{body:e}),moveAsset:e=>i(`/api/copy-move/move`,{body:e}),forWorkspace:t=>Rn(e,`/w/${encodeURIComponent(t)}`),models:e=>i(`/api/models`,{body:e}),modelsAsk:e=>i(`/api/models/ask`,{body:e})}}var zn={name:`a-large-small`,size:24,node:[[`path`,{d:`m15 16 2.536-7.328a1.02 1.02 1 0 1 1.928 0L22 16`,key:`xik6mr`}],[`path`,{d:`M15.697 14h5.606`,key:`1stdlc`}],[`path`,{d:`m2 16 4.039-9.69a.5.5 0 0 1 .923 0L11 16`,key:`d5nyq2`}],[`path`,{d:`M3.304 13h6.392`,key:`1q3zxz`}]]};zn.node;var Bn=q(zn),Vn={name:`archive-arrow-up`,size:24,node:[[`rect`,{width:`20`,height:`5`,x:`2`,y:`3`,rx:`1`,key:`1wp1u1`}],[`path`,{d:`M4 8v11a2 2 0 0 0 2 2h2`,key:`tvwodi`}],[`path`,{d:`M20 8v11a2 2 0 0 1-2 2h-2`,key:`1gkqxj`}],[`path`,{d:`m9 15 3-3 3 3`,key:`1pd0qc`}],[`path`,{d:`M12 12v9`,key:`192myk`}]],aliases:[`archive-restore`]};Vn.node;var Hn=q(Vn),Un={name:`archive`,size:24,node:[[`rect`,{width:`20`,height:`5`,x:`2`,y:`3`,rx:`1`,key:`1wp1u1`}],[`path`,{d:`M4 8v11a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8`,key:`1s80jp`}],[`path`,{d:`M10 12h4`,key:`a56b0p`}]]};Un.node;var Wn=q(Un),Gn={name:`arrow-left-right`,size:24,node:[[`path`,{d:`M8 3 4 7l4 4`,key:`9rb6wj`}],[`path`,{d:`M4 7h16`,key:`6tx8e3`}],[`path`,{d:`m16 21 4-4-4-4`,key:`siv7j2`}],[`path`,{d:`M20 17H4`,key:`h6l3hr`}]]};Gn.node;var Kn=q(Gn),qn={name:`ban`,size:24,node:[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M4.929 4.929 19.07 19.071`,key:`196cmz`}]]};qn.node;var Jn=q(qn),Yn={name:`boxes`,size:24,node:[[`path`,{d:`M2.97 12.92A2 2 0 0 0 2 14.63v3.24a2 2 0 0 0 .97 1.71l3 1.8a2 2 0 0 0 2.06 0L12 19v-5.5l-5-3-4.03 2.42Z`,key:`lc1i9w`}],[`path`,{d:`m7 16.5-4.74-2.85`,key:`1o9zyk`}],[`path`,{d:`m7 16.5 5-3`,key:`va8pkn`}],[`path`,{d:`M7 16.5v5.17`,key:`jnp8gn`}],[`path`,{d:`M12 13.5V19l3.97 2.38a2 2 0 0 0 2.06 0l3-1.8a2 2 0 0 0 .97-1.71v-3.24a2 2 0 0 0-.97-1.71L17 10.5l-5 3Z`,key:`8zsnat`}],[`path`,{d:`m17 16.5-5-3`,key:`8arw3v`}],[`path`,{d:`m17 16.5 4.74-2.85`,key:`8rfmw`}],[`path`,{d:`M17 16.5v5.17`,key:`k6z78m`}],[`path`,{d:`M7.97 4.42A2 2 0 0 0 7 6.13v4.37l5 3 5-3V6.13a2 2 0 0 0-.97-1.71l-3-1.8a2 2 0 0 0-2.06 0l-3 1.8Z`,key:`1xygjf`}],[`path`,{d:`M12 8 7.26 5.15`,key:`1vbdud`}],[`path`,{d:`m12 8 4.74-2.85`,key:`3rx089`}],[`path`,{d:`M12 13.5V8`,key:`1io7kd`}]]};Yn.node;var Xn=q(Yn),Zn={name:`chart-line`,size:24,node:[[`path`,{d:`M3 3v16a2 2 0 0 0 2 2h16`,key:`c24i48`}],[`path`,{d:`m19 9-5 5-4-4-3 3`,key:`2osh9i`}]],aliases:[`line-chart`]};Zn.node;var Qn=q(Zn),$n={name:`circle-check`,size:24,node:[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`m16 9-5.5 5.5L8 12`,key:`xofnsj`}]],aliases:[`check-circle-2`]};$n.node;var er=q($n),tr={name:`cloud-sync`,size:24,node:[[`path`,{d:`m17 18-1.535 1.605a5 5 0 0 1-8-1.5`,key:`adpv5j`}],[`path`,{d:`M17 22v-4h-4`,key:`ex1ofj`}],[`path`,{d:`M20.996 15.251A4.5 4.5 0 0 0 17.495 8h-1.79a7 7 0 1 0-12.709 5.607`,key:`ziqt14`}],[`path`,{d:`M7 10v4h4`,key:`1j6gx1`}],[`path`,{d:`m7 14 1.535-1.605a5 5 0 0 1 8 1.5`,key:`19q5h7`}]]};tr.node;var nr=q(tr),rr={name:`columns-3`,size:24,node:[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}],[`path`,{d:`M9 3v18`,key:`fh3hqa`}],[`path`,{d:`M15 3v18`,key:`14nvp0`}]],aliases:[`panels-left-right`]};rr.node;var ir=q(rr),ar={name:`external-link`,size:24,node:[[`path`,{d:`M15 3h6v6`,key:`1q9fwt`}],[`path`,{d:`M10 14 21 3`,key:`gplh6r`}],[`path`,{d:`M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6`,key:`a6xqqp`}]]};ar.node;var or=q(ar),sr={name:`file-code-corner`,size:24,node:[[`path`,{d:`M4 12.15V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.706.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2h-3.35`,key:`1wthlu`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`m5 16-3 3 3 3`,key:`331omg`}],[`path`,{d:`m9 22 3-3-3-3`,key:`lsp7cz`}]],aliases:[`file-code-2`]};sr.node;var cr=q(sr),lr={name:`file-input`,size:24,node:[[`path`,{d:`M4 11V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.706.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2v-1`,key:`1q9hii`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`M2 15h10`,key:`jfw4w8`}],[`path`,{d:`m9 18 3-3-3-3`,key:`112psh`}]]};lr.node;var ur=q(lr),dr={name:`file-text`,size:24,node:[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`M10 9H8`,key:`b1mrlr`}],[`path`,{d:`M16 13H8`,key:`t4e002`}],[`path`,{d:`M16 17H8`,key:`z1uh3a`}]]};dr.node;var fr=q(dr),pr={name:`file-up`,size:24,node:[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`M12 12v6`,key:`3ahymv`}],[`path`,{d:`m15 15-3-3-3 3`,key:`15xj92`}]]};pr.node;var mr=q(pr),hr={name:`flag`,size:24,node:[[`path`,{d:`M4 22V4a1 1 0 0 1 .4-.8A6 6 0 0 1 8 2c3 0 5 2 7.333 2q2 0 3.067-.8A1 1 0 0 1 20 4v10a1 1 0 0 1-.4.8A6 6 0 0 1 16 16c-3 0-5-2-8-2a6 6 0 0 0-4 1.528`,key:`1jaruq`}]]};hr.node;var gr=q(hr),_r={name:`folder-down`,size:24,node:[[`path`,{d:`M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z`,key:`1kt360`}],[`path`,{d:`M12 10v6`,key:`1bos4e`}],[`path`,{d:`m15 13-3 3-3-3`,key:`6j2sf0`}]]};_r.node;var vr=q(_r),yr={name:`folder-input`,size:24,node:[[`path`,{d:`M2 9V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H20a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2v-1`,key:`fm4g5t`}],[`path`,{d:`M2 13h10`,key:`pgb2dq`}],[`path`,{d:`m9 16 3-3-3-3`,key:`6m91ic`}]]};yr.node;var br=q(yr),xr={name:`folder-plus`,size:24,node:[[`path`,{d:`M12 10v6`,key:`1bos4e`}],[`path`,{d:`M9 13h6`,key:`1uhe8q`}],[`path`,{d:`M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z`,key:`1kt360`}]]};xr.node;var Sr=q(xr),Cr={name:`folder-up`,size:24,node:[[`path`,{d:`M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z`,key:`1kt360`}],[`path`,{d:`M12 10v6`,key:`1bos4e`}],[`path`,{d:`m9 13 3-3 3 3`,key:`1pxg3c`}]]};Cr.node;var wr=q(Cr),Tr={name:`form`,size:24,node:[[`path`,{d:`M4 14h6`,key:`77gv2w`}],[`path`,{d:`M4 2h10`,key:`a2b314`}],[`rect`,{x:`4`,y:`18`,width:`16`,height:`4`,rx:`1`,key:`sybzq6`}],[`rect`,{x:`4`,y:`6`,width:`16`,height:`4`,rx:`1`,key:`1osc9e`}]]};Tr.node;var Er=q(Tr),Dr={name:`gavel`,size:24,node:[[`path`,{d:`m14 13-8.381 8.38a1 1 0 0 1-3.001-3l8.384-8.381`,key:`pgg06f`}],[`path`,{d:`m16 16 6-6`,key:`vzrcl6`}],[`path`,{d:`m21.5 10.5-8-8`,key:`a17d9x`}],[`path`,{d:`m8 8 6-6`,key:`18bi4p`}],[`path`,{d:`m8.5 7.5 8 8`,key:`1oyaui`}]]};Dr.node;var Or=q(Dr),kr={name:`link-2`,size:24,node:[[`path`,{d:`M9 17H7A5 5 0 0 1 7 7h2`,key:`8i5ue5`}],[`path`,{d:`M15 7h2a5 5 0 1 1 0 10h-2`,key:`1b9ql8`}],[`line`,{x1:`8`,x2:`16`,y1:`12`,y2:`12`,key:`1jonct`}]]};kr.node;var Ar=q(kr),jr={name:`list-tree`,size:24,node:[[`path`,{d:`M8 5h13`,key:`1pao27`}],[`path`,{d:`M13 12h8`,key:`h98zly`}],[`path`,{d:`M13 19h8`,key:`c3s6r1`}],[`path`,{d:`M3 10a2 2 0 0 0 2 2h3`,key:`1npucw`}],[`path`,{d:`M3 5v12a2 2 0 0 0 2 2h3`,key:`x1gjn2`}]]};jr.node;var Mr=q(jr),Nr={name:`list`,size:24,node:[[`path`,{d:`M3 5h.01`,key:`18ugdj`}],[`path`,{d:`M3 12h.01`,key:`nlz23k`}],[`path`,{d:`M3 19h.01`,key:`noohij`}],[`path`,{d:`M8 5h13`,key:`1pao27`}],[`path`,{d:`M8 12h13`,key:`1za7za`}],[`path`,{d:`M8 19h13`,key:`m83p4d`}]]};Nr.node;var Pr=q(Nr),Fr={name:`log-in`,size:24,node:[[`path`,{d:`m10 17 5-5-5-5`,key:`1bsop3`}],[`path`,{d:`M15 12H3`,key:`6jk70r`}],[`path`,{d:`M15 3h4a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-4`,key:`u53s6r`}]]};Fr.node;var Ir=q(Fr),Lr={name:`log-out`,size:24,node:[[`path`,{d:`m16 17 5-5-5-5`,key:`1bji2h`}],[`path`,{d:`M21 12H9`,key:`dn1m92`}],[`path`,{d:`M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4`,key:`1uf3rs`}]]};Lr.node;var Rr=q(Lr),zr={name:`minus`,size:24,node:[[`path`,{d:`M5 12h14`,key:`1ays0h`}]]};zr.node;var Br=q(zr),Vr={name:`pin-off`,size:24,node:[[`path`,{d:`M12 17v5`,key:`bb1du9`}],[`path`,{d:`M15 9.34V7a1 1 0 0 1 1-1 2 2 0 0 0 0-4H7.89`,key:`znwnzq`}],[`path`,{d:`m2 2 20 20`,key:`1ooewy`}],[`path`,{d:`M9 9v1.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V16a1 1 0 0 0 1 1h11`,key:`c9qhm2`}]]};Vr.node;var Hr=q(Vr),Ur={name:`pin`,size:24,node:[[`path`,{d:`M12 17v5`,key:`bb1du9`}],[`path`,{d:`M9 10.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V16a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-.76a2 2 0 0 0-1.11-1.79l-1.78-.9A2 2 0 0 1 15 10.76V7a1 1 0 0 1 1-1 2 2 0 0 0 0-4H8a2 2 0 0 0 0 4 1 1 0 0 1 1 1z`,key:`1nkz8b`}]]};Ur.node;var Wr=q(Ur),Gr={name:`printer`,size:24,node:[[`path`,{d:`M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2`,key:`143wyd`}],[`path`,{d:`M6 9V3a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v6`,key:`1itne7`}],[`rect`,{x:`6`,y:`14`,width:`12`,height:`8`,rx:`1`,key:`1ue0tg`}]]};Gr.node;var Kr=q(Gr),qr={name:`refresh-cw`,size:24,node:[[`path`,{d:`M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8`,key:`v9h5vc`}],[`path`,{d:`M21 3v5h-5`,key:`1q7to0`}],[`path`,{d:`M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16`,key:`3uifl3`}],[`path`,{d:`M8 16H3v5`,key:`1cv678`}]]};qr.node;var Jr=q(qr),Yr={name:`replace`,size:24,node:[[`path`,{d:`M14 4a1 1 0 0 1 1-1`,key:`dhj8ez`}],[`path`,{d:`M15 10a1 1 0 0 1-1-1`,key:`1mnyi5`}],[`path`,{d:`M21 4a1 1 0 0 0-1-1`,key:`sfs9ap`}],[`path`,{d:`M21 9a1 1 0 0 1-1 1`,key:`mp6qeo`}],[`path`,{d:`m3 7 3 3 3-3`,key:`x25e72`}],[`path`,{d:`M6 10V5a2 2 0 0 1 2-2h2`,key:`15xut4`}],[`rect`,{x:`3`,y:`14`,width:`7`,height:`7`,rx:`1`,key:`1bkyp8`}]]};Yr.node;var Xr=q(Yr),Zr={name:`rotate-ccw`,size:24,node:[[`path`,{d:`M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8`,key:`1357e3`}],[`path`,{d:`M3 3v5h5`,key:`1xhq8a`}]]};Zr.node;var Qr=q(Zr),$r={name:`rotate-cw`,size:24,node:[[`path`,{d:`M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8`,key:`1p45f6`}],[`path`,{d:`M21 3v5h-5`,key:`1q7to0`}]]};$r.node;var ei=q($r),ti={name:`scan-search`,size:24,node:[[`path`,{d:`M3 7V5a2 2 0 0 1 2-2h2`,key:`aa7l1z`}],[`path`,{d:`M17 3h2a2 2 0 0 1 2 2v2`,key:`4qcy5o`}],[`path`,{d:`M21 17v2a2 2 0 0 1-2 2h-2`,key:`6vwrx8`}],[`path`,{d:`M7 21H5a2 2 0 0 1-2-2v-2`,key:`ioqczr`}],[`circle`,{cx:`12`,cy:`12`,r:`3`,key:`1v7zrd`}],[`path`,{d:`m16 16-1.9-1.9`,key:`1dq9hf`}]]};ti.node;var ni=q(ti),ri={name:`scissors`,size:24,node:[[`circle`,{cx:`6`,cy:`6`,r:`3`,key:`1lh9wr`}],[`path`,{d:`M8.12 8.12 12 12`,key:`1alkpv`}],[`path`,{d:`M20 4 8.12 15.88`,key:`xgtan2`}],[`circle`,{cx:`6`,cy:`18`,r:`3`,key:`fqmcym`}],[`path`,{d:`M14.8 14.8 20 20`,key:`ptml3r`}]]};ri.node;var ii=q(ri),ai={name:`send`,size:24,node:[[`path`,{d:`M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z`,key:`1ffxy3`}],[`path`,{d:`m21.854 2.147-10.94 10.939`,key:`12cjpa`}]]};ai.node;var oi=q(ai),si={name:`shapes`,size:24,node:[[`path`,{d:`M8.3 10a.7.7 0 0 1-.626-1.079L11.4 3a.7.7 0 0 1 1.198-.043L16.3 8.9a.7.7 0 0 1-.572 1.1Z`,key:`1bo67w`}],[`rect`,{x:`3`,y:`14`,width:`7`,height:`7`,rx:`1`,key:`1bkyp8`}],[`circle`,{cx:`17.5`,cy:`17.5`,r:`3.5`,key:`w3z12y`}]]};si.node;var ci=q(si),li={name:`square-code`,size:24,node:[[`path`,{d:`m10 9-3 3 3 3`,key:`1oro0q`}],[`path`,{d:`m14 15 3-3-3-3`,key:`bz13h7`}],[`rect`,{x:`3`,y:`3`,width:`18`,height:`18`,rx:`2`,key:`h1oib`}]],aliases:[`code-square`]};li.node;var ui=q(li),di={name:`square-terminal`,size:24,node:[[`path`,{d:`m7 11 2-2-2-2`,key:`1lz0vl`}],[`path`,{d:`M11 13h4`,key:`1p7l4v`}],[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,ry:`2`,key:`1m3agn`}]],aliases:[`terminal-square`]};di.node;var fi=q(di),pi={name:`star`,size:24,node:[[`path`,{d:`M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z`,key:`r04s7s`}]]};pi.node;var mi=q(pi),hi={name:`text-search`,size:24,node:[[`path`,{d:`M21 5H3`,key:`1fi0y6`}],[`path`,{d:`M10 12H3`,key:`1ulcyk`}],[`path`,{d:`M10 19H3`,key:`108z41`}],[`circle`,{cx:`17`,cy:`15`,r:`3`,key:`1upz2a`}],[`path`,{d:`m21 19-1.9-1.9`,key:`dwi7p8`}]]};hi.node;var gi=q(hi),_i={name:`unlink`,size:24,node:[[`path`,{d:`m18.84 12.25 1.72-1.71h-.02a5.004 5.004 0 0 0-.12-7.07 5.006 5.006 0 0 0-6.95 0l-1.72 1.71`,key:`yqzxt4`}],[`path`,{d:`m5.17 11.75-1.71 1.71a5.004 5.004 0 0 0 .12 7.07 5.006 5.006 0 0 0 6.95 0l1.71-1.71`,key:`4qinb0`}],[`line`,{x1:`8`,x2:`8`,y1:`2`,y2:`5`,key:`1041cp`}],[`line`,{x1:`2`,x2:`5`,y1:`8`,y2:`8`,key:`14m1p5`}],[`line`,{x1:`16`,x2:`16`,y1:`19`,y2:`22`,key:`rzdirn`}],[`line`,{x1:`19`,x2:`22`,y1:`16`,y2:`16`,key:`ox905f`}]]};_i.node;var vi=q(_i),yi=(0,X.createContext)(null);function bi(){let e=(0,X.useContext)(yi);if(!e)throw Error(`useStore outside a StoreContext: the app mounts one at its root`);return e}function xi(e){let t=bi();return[(0,X.useSyncExternalStore)(t.subscribe,()=>t.get(e)),(0,X.useCallback)(n=>t.set(e,n),[t,e])]}function Si(){let e=bi();return{sync:(0,X.useSyncExternalStore)(e.subscribe,e.sync),resolve:e.resolve}}var Ci=e=>e,wi=()=>({version:9,scoring:{mode:`all`,threshold:null},grader:null,every:[],run:[],cases:[]});function Q(e,t){return e instanceof Nn?e.message:t===void 0?e instanceof Error?e.message:String(e):t}var Ti=e=>e?.state===`conflict`?`Data conflict: not saved — a newer version was saved in another browser.`:e?.state===`offline`?`Not saved: ${e.message}`:null,Ei=(e,t)=>JSON.stringify(e)===JSON.stringify(t),Di=({body:e,...t})=>t;function Oi({api:e,pause:t=800,idle:n}){let r=Ci(e),i={list:null,error:null},a=new Map,o=new Set,s=new Map,c=new Map,l=new Map,u=new Set,d=null,f=()=>{d=null,u.forEach(e=>e())},p=(e,t)=>{let n=a.get(e)??{id:e,doc:null,sync:{state:`loading`}};a.set(e,{...n,...t,id:e}),f()},m=e=>{i={list:e,error:null},f()},h=e=>{if(!i.list)return;let t=i.list.findIndex(t=>t.id===e.id);m(t<0?[...i.list,e]:i.list.map((n,r)=>r===t?e:n))},g=e=>{for(let t of[s,c]){let n=t.get(e);n&&clearTimeout(n),t.delete(e)}o.delete(e),a.delete(e),i.list?m(i.list.filter(t=>t.id!==e)):f()},_=e=>{p(e.id,{doc:e,sync:{state:`saved`}}),h(Di(e))};async function v(e){let t=a.get(e);if(!t?.doc||!o.has(e)||t.sync.state===`conflict`)return;let{body:n,version:i}=t.doc;p(e,{sync:{state:`saving`}});try{let t=await r.saveDataset(e,i,n),s=a.get(e);if(!s?.doc)return;s.doc.body===n&&o.delete(e);let c={...s.doc,version:t.version,versions:t.versions,cases:n.cases.length};if(p(e,{doc:c,sync:{state:`saved`}}),h(Di(c)),o.has(e))return v(e)}catch(t){let n=a.get(e);if(!n?.doc)return;let r=t instanceof Nn&&t.status===409?t.body?.current??null:null;if(r){if(Ei(r.body,n.doc.body)){o.delete(e),p(e,{doc:{...n.doc,version:r.version},sync:{state:`saved`}});return}p(e,{sync:{state:`conflict`,theirs:r}});return}p(e,{sync:{state:`offline`,message:Q(t)}})}}function y(e){let t=s.get(e);t&&(clearTimeout(t),s.delete(e));let n=l.get(e);return n||(n=v(e).finally(()=>l.delete(e)),l.set(e,n)),n}return{list:()=>i,entry:e=>a.get(e),held:()=>d??=[...a.values()],async refresh(){i.error&&(i={list:i.list,error:null},f());try{let e=(await r.datasets()).datasets;m(e);for(let t of e){let e=a.get(t.id);e?.doc&&!o.has(t.id)&&t.version>e.doc.version&&r.dataset(t.id).then(e=>{a.has(t.id)&&!o.has(t.id)&&_(e)},()=>{})}}catch(e){i={list:i.list,error:Q(e)},f()}},load(e){a.has(e)&&a.get(e).sync.state!==`missing`||(p(e,{sync:{state:`loading`}}),r.dataset(e).then(t=>{a.has(e)&&p(e,{doc:t,sync:{state:`saved`}})},t=>{a.has(e)&&p(e,{sync:{state:`missing`,message:Q(t)}})}))},edit(e,r){let i=a.get(e);if(!i?.doc)return;let l=r(i.doc.body);if(l===i.doc.body)return;p(e,{doc:{...i.doc,body:l,cases:l.cases.length}}),o.add(e);let u=s.get(e);if(u&&clearTimeout(u),s.set(e,setTimeout(()=>{s.delete(e),y(e)},t)),n){let t=c.get(e);t&&clearTimeout(t),c.set(e,setTimeout(()=>{c.delete(e);let t=a.get(e)?.doc;t&&n.cut(e,t.body)},n.ms))}},async flush(e){await Promise.all((e?[e]:[...o]).map(y))},async resolve(e,t){let n=a.get(e);if(!n?.doc||n.sync.state!==`conflict`)return;let r=n.sync.theirs;t===`theirs`?(o.delete(e),_(r)):(p(e,{doc:{...n.doc,version:r.version},sync:{state:`saved`}}),o.add(e),await y(e))},async create(e,t,n){let i=await r.createDataset({name:e,...t?{body:t}:{},...n?{preview:n}:{}});return _(i),i},async rename(e,t){let n=await r.renameDataset(e,t),i=a.get(e)?.doc;i&&p(e,{doc:{...i,name:n.name,version:n.version,updated:n.updated}}),h({...Di(n),cases:i?.body.cases.length??n.cases})},async setPreview(e,t){let n=await r.setDatasetPreview(e,t),i=a.get(e)?.doc;i&&p(e,{doc:{...i,preview:n.preview??null}}),h({...Di(n),cases:i?.body.cases.length??n.cases})},async remove(e){let{trash:t}=await r.deleteDataset(e);return g(e),t},async restore(e){let t=await r.restoreDataset(e);return _(t),t},async importFile(e){let{created:t}=await r.importDatasets(e);for(let e of t)h(e);return t},exportUrl:e=>r.exportDatasetUrl(e),exportAllUrl:()=>r.exportAllDatasetsUrl(),subscribe(e){return u.add(e),()=>{u.delete(e)}}}}var ki=3e4,Ai=(e,t)=>e.get(`promptlab.versions`)[t]??{};function ji(e,t){return(e.get(`promptlab.versions`).dataset?.[t]??[]).map(e=>({...e,doc:Y().upgradeDatasetBody(e?.doc)})).filter(e=>Mi(e.doc))}var Mi=e=>!!e&&typeof e==`object`&&Array.isArray(e.cases);function Ni(e,t,n,r,i){let a=e.get(`promptlab.versions`),o=Ai(e,t),s=(o[n]??[]).slice(),c=structuredClone(r);s[0]&&Fi(s[0].doc,c)||(s.unshift({at:new Date().toISOString(),doc:c,reason:i}),s.length>10&&(s.length=10),e.set(`promptlab.versions`,{...a,[t]:{...o,[n]:s}}))}function Pi(e,t,n,r){let i=e.get(`promptlab.versions`),a=(i.dataset?.[t]??[]).slice(),o=structuredClone(n);a[0]&&Fi(a[0].doc,o)||(a.unshift({at:new Date().toISOString(),doc:o,reason:r}),a.length>10&&(a.length=10),e.set(`promptlab.versions`,{...i,dataset:{...i.dataset??{},[t]:a}}))}var Fi=(e,t)=>JSON.stringify(e)===JSON.stringify(t),$=gn(),Ii=(0,X.createContext)(null);function Li({children:e,pause:t}){let n=Z(),r=bi(),i=(0,X.useMemo)(()=>Oi({api:n,...t==null?{}:{pause:t},idle:{ms:ki,cut:(e,t)=>Pi(r,e,t,`idle`)}}),[n,r,t]);return(0,X.useEffect)(()=>{let e=()=>{i.flush()};return addEventListener(`pagehide`,e),()=>removeEventListener(`pagehide`,e)},[i]),(0,$.jsx)(Ii.Provider,{value:i,children:e})}function Ri(){let e=(0,X.useContext)(Ii);if(!e)throw Error(`useDatasets outside a DatasetsProvider: the app mounts one at its root`);return e}function zi(){let e=Ri(),t=(0,X.useSyncExternalStore)(e.subscribe,e.list);return(0,X.useEffect)(()=>{e.list().list===null&&e.refresh()},[e]),t}function Bi(e){let t=Ri(),n=(0,X.useSyncExternalStore)(t.subscribe,()=>e?t.entry(e):void 0);return(0,X.useEffect)(()=>{e&&t.load(e)},[t,e]),n}var Vi=e=>e.name.trim()||e.text.trim().split(`
2
+ `)[0].trim()||`Untitled prompt`,Hi=e=>e?.state===`conflict`?`Data conflict: not saved — a newer version was saved in another browser.`:e?.state===`offline`?`Not saved: ${e.message}`:null,Ui=({versions:e,uses:t,...n})=>n;function Wi({api:e,pause:t=800}){let n={list:null,error:null},r=new Map,i=new Set,a=new Map,o=new Map,s=new Set,c=()=>s.forEach(e=>e()),l=(e,t)=>{let n=r.get(e)??{id:e,doc:null,sync:{state:`loading`}};r.set(e,{...n,...t,id:e}),c()},u=e=>{n={list:e,error:null},c()},d=e=>{if(!n.list)return;let t=n.list.findIndex(t=>t.id===e.id),r=e.default?n.list.map(t=>t.default&&t.id!==e.id?{...t,default:!1}:t):n.list;u(t<0?[e,...r]:r.map((n,r)=>r===t?e:n))},f=e=>{l(e.id,{doc:e,sync:{state:`saved`}}),d(Ui(e))};async function p(t){let n=r.get(t);if(!n?.doc||!i.has(t)||n.sync.state===`conflict`)return;let{name:a,text:o,version:s}=n.doc;l(t,{sync:{state:`saving`}});try{let n=await e.editPrompt(t,s,{name:a,text:o}),c=r.get(t);if(!c?.doc)return;let u=c.doc.name!==a||c.doc.text!==o;u||i.delete(t);let f=u?{...n,name:c.doc.name,text:c.doc.text}:n;if(l(t,{doc:f,sync:{state:u?`saving`:`saved`}}),d(Ui(f)),u)return p(t)}catch(e){let n=r.get(t);if(!n?.doc)return;let a=e instanceof Nn&&e.status===409?e.body?.current??null:null;if(a){if(a.text===n.doc.text&&a.name===n.doc.name){i.delete(t),f(a);return}l(t,{sync:{state:`conflict`,theirs:a}});return}l(t,{sync:{state:`offline`,message:Q(e)}})}}function m(e){let t=a.get(e);t&&(clearTimeout(t),a.delete(e));let n=o.get(e);return n||(n=p(e).finally(()=>o.delete(e)),o.set(e,n)),n}return{list:()=>n,entry:e=>r.get(e),async refresh(){n.error&&(n={list:n.list,error:null},c());try{u((await e.prompts()).prompts)}catch(e){n={list:n.list,error:Q(e)},c()}},load(t){i.has(t)||(r.has(t)||l(t,{sync:{state:`loading`}}),e.prompt(t).then(e=>{r.has(t)&&!i.has(t)&&f(e)},e=>{r.has(t)&&l(t,{sync:{state:`missing`,message:Q(e)}})}))},edit(e,n){let o=r.get(e);if(!o?.doc)return;let s={...o.doc,...n};if(s.name===o.doc.name&&s.text===o.doc.text)return;l(e,{doc:s}),d(Ui(s)),i.add(e);let c=a.get(e);c&&clearTimeout(c),a.set(e,setTimeout(()=>{a.delete(e),m(e)},t))},async flush(e){await Promise.all((e?[e]:[...i]).map(m))},async resolve(e,t){let n=r.get(e);if(!n?.doc||n.sync.state!==`conflict`)return;let a=n.sync.theirs;t===`theirs`?(i.delete(e),f(a)):(l(e,{doc:{...n.doc,version:a.version},sync:{state:`saved`}}),i.add(e),await m(e))},async create(t={}){let n=await e.createPrompt(t);return f(n),n},async setDefault(t){await m(t),f(await e.setDefaultPrompt(t))},async restoreVersion(t,n){await m(t),f(await e.restorePromptVersion(t,n))},async remove(t){await m(t);let{trash:o}=await e.deletePrompt(t),s=a.get(t);return s&&clearTimeout(s),a.delete(t),i.delete(t),r.delete(t),n.list?u(n.list.filter(e=>e.id!==t)):c(),o},async restore(t){let n=await e.restorePrompt(t);return f(n),n},subscribe(e){return s.add(e),()=>{s.delete(e)}}}}var Gi=(0,X.createContext)(null);function Ki({children:e,pause:t}){let n=Z(),r=(0,X.useMemo)(()=>Wi({api:n,...t==null?{}:{pause:t}}),[n,t]);return(0,X.useEffect)(()=>{let e=()=>{r.flush()};return addEventListener(`pagehide`,e),()=>removeEventListener(`pagehide`,e)},[r]),(0,$.jsx)(Gi.Provider,{value:r,children:e})}function qi(){let e=(0,X.useContext)(Gi);if(!e)throw Error(`usePrompts outside a PromptsProvider: the app mounts one at its root`);return e}function Ji(){let e=qi(),t=(0,X.useSyncExternalStore)(e.subscribe,e.list);return(0,X.useEffect)(()=>{e.refresh()},[e]),t}function Yi(e){let t=qi(),n=(0,X.useSyncExternalStore)(t.subscribe,()=>e?t.entry(e):void 0);return(0,X.useEffect)(()=>{e&&t.load(e)},[t,e]),n}function Xi({n:e,of:t}){return(0,$.jsxs)(`span`,{className:`fig-part`,children:[e,(0,$.jsxs)(`span`,{className:`fig-of`,children:[`/`,t]})]})}var Zi=e=>e===`good`?` fig-good`:e===`bad`?` fig-bad`:``;function Qi({fig:e}){return(0,$.jsx)(`span`,{className:`fig-value${Zi(e.tone)}`,children:e.value??(e.of?(0,$.jsx)(Xi,{n:e.of[0],of:e.of[1]}):`—`)})}function $i({fig:e}){return(0,$.jsxs)(`div`,{className:`fig`,children:[(0,$.jsx)(`span`,{className:`fig-label`,children:e.label}),(0,$.jsx)(Qi,{fig:e})]},e.key)}function ea({label:e,lead:t,rest:n,dense:r}){return(0,$.jsxs)(`div`,{className:`figures${r?` dense`:``}`,role:`group`,"aria-label":e,children:[(0,$.jsxs)(`div`,{className:`fig fig-lead`,children:[(0,$.jsx)(`span`,{className:`fig-label`,children:t.label}),(0,$.jsxs)(`div`,{className:`fig-headline`,children:[(0,$.jsx)(Qi,{fig:t}),t.under&&(0,$.jsx)(`span`,{className:`fig-under`,children:(0,$.jsx)(Xi,{n:t.under[0],of:t.under[1]})})]})]}),!!n.length&&(0,$.jsx)(`div`,{className:`fig-rest`,children:n.map(e=>(0,$.jsx)($i,{fig:e},e.key))})]})}var ta=[`datasets`,`filters`,`prompts`,`sources`],na=[`connections`,`workspaces`],ra=[`connections`],ia={tab:`home`},aa={history:[`overview`,`runs`],library:ta,setup:na},oa=e=>`evals-lab.section.${e}`;function sa(e){let t=aa[e],n=null;try{n=sessionStorage.getItem(oa(e))}catch{}return n&&t.includes(n)?n:t[0]}function ca(e){if(!(e.tab!==`history`&&e.tab!==`library`&&e.tab!==`setup`||!e.section))try{sessionStorage.setItem(oa(e.tab),e.section)}catch{}}function la(e){let t=e.indexOf(`?`),n=new URLSearchParams(t<0?``:e.slice(t+1)),r=(t<0?e:e.slice(0,t)).replace(/^#\/?/,``).split(`/`).map(ha),i=null;if((r[0]===`evals`||r[0]===`datasets`||r[0]===`sources`)&&(r=[`library`,r[0]===`sources`?`sources`:`datasets`,...r.slice(1)],i=`#/${r.map(encodeURIComponent).join(`/`)}`),r[0]===`setup`&&r[1]===`wizards`){let e=r.slice(2).filter(Boolean);r=e.length?[`home`,`guides`,...e]:[`home`],i=`#/${r.map(encodeURIComponent).join(`/`)}`}let a=ua(r);if(a.tab===`history`){let e=n.get(`pipeline`),t=n.get(`content`);e&&(a.pipeline=e),t&&(a.content=t)}let o=r.length===1||r.length===2&&!r[1];return a.tab===`history`&&!a.section?(a.section=n.size?`runs`:sa(`history`),i=da(a)):o&&(a.tab===`library`||a.tab===`setup`)&&(a.section=sa(a.tab),i=da(a)),{route:a,rewrite:i}}function ua([e=``,...t]){let n=t.join(`/`)||null;switch(e){case``:return ia;case`home`:{let[e=``,...n]=t;return e===`guides`?{tab:`home`,guide:n.join(`/`)||null}:ia}case`history`:return t.length?t.length===1&&(t[0]===`overview`||t[0]===`runs`)?{tab:`history`,section:t[0]}:ia:{tab:`history`};case`runs`:return{tab:`runs`,id:n};case`results`:return n?{tab:`results`,id:n}:{tab:`history`};case`library`:{let[e=``,...r]=t,i=ta.find(t=>t===e);return i?{tab:`library`,section:i,id:r.join(`/`)||null}:{tab:`library`,section:`datasets`,id:n}}case`setup`:{let[e=``,...n]=t;if(!e)return{tab:`setup`,section:`connections`,id:null};if(e===`profiles`){let e=n.join(`/`)||null;return e?{tab:`setup`,section:`connections`,id:e,kind:`profile`}:{tab:`setup`,section:`connections`,id:null}}let r=na.find(t=>t===e),i=n.join(`/`)||null;return!r||i&&!ra.includes(r)?ia:{tab:`setup`,section:r,id:i}}default:return ia}}function da(e){switch(e.tab){case`home`:return e.guide?`#/home/guides/${encodeURIComponent(e.guide)}`:`#/home`;case`history`:{let t=new URLSearchParams;e.pipeline&&t.set(`pipeline`,e.pipeline),e.content&&t.set(`content`,e.content);let n=e.section?`#/history/${e.section}`:`#/history`;return t.size?`${n}?${t}`:n}case`runs`:return e.id?`#/runs/${encodeURIComponent(e.id)}`:`#/runs`;case`results`:return`#/results/${encodeURIComponent(e.id)}`;case`library`:return`#/library/${e.section}${e.id?`/${encodeURIComponent(e.id)}`:``}`;case`setup`:return e.kind===`profile`&&e.id?`#/setup/profiles/${encodeURIComponent(e.id)}`:`#/setup/${e.section}${e.id?`/${encodeURIComponent(e.id)}`:``}`}}function fa(e){location.hash=da(e)}function pa(e){history.replaceState(history.state,``,da(e)),window.dispatchEvent(new HashChangeEvent(`hashchange`))}function ma(){return la(location.hash).route}function ha(e){try{return decodeURIComponent(e)}catch{return e}}var ga=e=>(typeof e.id==`string`?e.id.trim():``)||`item:${Y().caseItem(e)}`,_a=(e,t)=>e.trim().toLowerCase()===t.trim().toLowerCase(),va=e=>Array.isArray(e.metrics)?e.metrics:[],ya=e=>!e.not&&e.weight!==0,ba=e=>e.type===`contains`&&e.not===!0&&e.weight!==0,xa=e=>Y().metricLines(e);function Sa(e,t){let n=va(e);switch(t.type){case`bounds`:{let r=n.findIndex(e=>e.type===`item-count`&&ya(e)),i=r>=0?n[r]:null,a=e=>e==null||e===``?null:Number(e),o=(e,t)=>e.kind===`keep`?t:e.kind===`clear`?null:e.n,s=o(t.min,a(i?.min)),c=o(t.max,a(i?.max));if(s===a(i?.min)&&c===a(i?.max))return e;let l=s==null&&c==null?null:{...i??{type:`item-count`},min:s,max:c};return{...e,metrics:r>=0?n.flatMap((e,t)=>t===r?l?[l]:[]:[e]):[...n,...l?[l]:[]]}}case`addTerm`:{let r=t.term.trim();if(!r)return e;if(t.list===`forbid`)return n.some(e=>ba(e)&&_a(String(e.value??``),r))?e:{...e,metrics:[...n,{type:`contains`,value:r,not:!0,ignoreCase:!0}]};let i=n.findIndex(e=>e.type===`contains-all`&&ya(e));return i>=0&&xa(n[i].values).some(e=>_a(e,r))?e:{...e,metrics:i>=0?n.map((e,t)=>t===i?{...e,values:[...xa(e.values),r].join(`
3
+ `)}:e):[...n,{type:`contains-all`,values:r,ignoreCase:!0}]}}case`removeTerm`:{let r=t.term.trim();if(!r)return e;let i=!1,a=n.flatMap(e=>{if(ba(e)&&_a(String(e.value??``),r))return i=!0,[];if((e.type===`contains-all`||e.type===`contains-any`)&&ya(e)&&xa(e.values).some(e=>_a(e,r))){i=!0;let t=xa(e.values).filter(e=>!_a(e,r));return t.length?[{...e,values:t.join(`
4
+ `)}]:[]}return[e]});return i?{...e,metrics:a}:e}case`status`:return!!e.todo===t.todo?e:{...e,todo:t.todo}}}function Ca(e,t,n){let r=[];return n.type===`delete`?{next:e.filter(e=>{let n=t.has(ga(e));return n&&r.push(ga(e)),!n}),changed:r}:{next:e.map(e=>{if(!t.has(ga(e)))return e;let i=Sa(e,n);return i!==e&&r.push(ga(e)),i}),changed:r}}function wa(e,t,n){let r=new Map(e.map(e=>[ga(e),e])),i=new Map(t.map(e=>[ga(e),e])),a=[];for(let e of n){let t=r.get(e),n=i.get(e);if(!t||!n)continue;let o=new Set(Y().validateEvals({cases:[t]})),s=`${n.id}: `,c=Y().validateEvals({cases:[n]}).filter(e=>!o.has(e)).map(e=>e.startsWith(s)?e.slice(s.length):e);c.length&&a.push({key:e,file:Y().caseItem(n),reasons:c})}return{cases:a}}var Ta={expect:`Expect`,forbid:`Forbid`},Ea=e=>Ta[e],Da=e=>`${e} ${e===1?`eval case`:`eval cases`}`;function Oa(e,t){let n=Da(t);switch(e.type){case`bounds`:{let t=[];return e.min.kind!==`keep`&&t.push({verb:e.min.kind===`set`?`Set`:`Cleared`,what:`Min`}),e.max.kind!==`keep`&&t.push({verb:e.max.kind===`set`?`Set`:`Cleared`,what:`Max`}),t.length===2&&t[0].verb===t[1].verb?`${t[0].verb} Min and Max items on ${n}`:t.length===2?`${t[0].verb} Min items and ${t[1].verb.toLowerCase()} Max items on ${n}`:t[0]?`${t[0].verb} ${t[0].what} items on ${n}`:`Changed ${n}`}case`addTerm`:return`Added ${e.term.trim()} to ${Ta[e.list]} on ${n}`;case`removeTerm`:return`Removed ${e.term.trim()} from ${n}`;case`status`:return`Marked ${n} ${e.todo?`To do`:`graded`}`;case`delete`:return`Deleted ${n}`}}var ka={graded:`Graded`,todo:`To do`,missing:`Missing`};function Aa(e,t){return t&&!t.includes(Y().caseItem(e))?`missing`:e.todo?`todo`:`graded`}function ja(e,t){let n=new Set(e.map(e=>Y().caseItem(e)));return t.filter(e=>!n.has(e))}var Ma={file:``,status:`all`,show:`all`};function Na(e,t,n,r=null){let i=t.file.trim().toLowerCase();return e.filter(e=>(!i||Y().caseItem(e).toLowerCase().includes(i))&&(t.status===`all`||Aa(e,r)===t.status)&&(t.show===`all`||n.has(ga(e))))}var Pa=(0,X.createContext)(null);function Fa({children:e}){let[t,n]=(0,X.useState)(null),[r,i]=(0,X.useState)(new Set),[a,o]=(0,X.useState)(Ma),[s,c]=(0,X.useState)(null),[l,u]=(0,X.useState)(null),d=Bi(l?.dataset??null),f=(0,X.useRef)(null),p=(0,X.useCallback)(e=>{e!==f.current&&(f.current=e,n(e),i(new Set),o(Ma),c(null))},[]),m=(0,X.useCallback)(e=>{i(e)},[]),h=(0,X.useCallback)(e=>{o(t=>({...t,...e}))},[]),g=(0,X.useCallback)((e,t,r)=>{f.current=e,n(e),i(new Set),o({...Ma,show:`selected`}),c(null),u({dataset:e,files:t,from:r});let a=da({tab:`library`,section:`datasets`,id:e});location.hash===a?window.dispatchEvent(new HashChangeEvent(`hashchange`)):location.hash=a},[]),_=d?.doc?.body??null,v=d?.sync.state===`missing`;(0,X.useEffect)(()=>{if(!l||!_&&!v)return;let e=new Set(l.files),t=(_?.cases??[]).filter(t=>e.has(Y().caseItem(t))).map(ga);i(new Set(t)),c({from:l.from,wanted:e.size,found:t.length}),u(null)},[l,_,v]);let y=(0,X.useMemo)(()=>({datasetId:t,pickDataset:p,selected:r,setSelected:m,filters:a,setFilters:h,handedOver:s,showCases:g}),[t,p,r,m,a,h,s,g]);return(0,$.jsx)(Pa.Provider,{value:y,children:e})}function Ia(){let e=(0,X.useContext)(Pa);if(!e)throw Error(`useCases outside an CasesProvider: the app mounts one at its root`);return e}var La=(0,X.createContext)(null);function Ra({children:e}){let[t,n]=(0,X.useState)([]),[r,i]=(0,X.useState)(null),a=(0,X.useRef)(t);a.current=t;let o=(0,X.useRef)(r);o.current=r;let s=(0,X.useRef)(0),c=(0,X.useCallback)((e,t)=>{a.current=e,n(e),o.current=t,i(t)},[]),l=(0,X.useCallback)((e,t={})=>{let n=++s.current,r=a.current,i=r.find(t=>t.id===e),o=t.item==null?{}:{item:t.item},l;if(i)l=r.map(r=>r.id===e?{...r,from:t.from??r.from,last:n,...o,...t.item==null?{}:{show:`all`}}:r);else if(l=[...r,{id:e,at:t.at??``,from:t.from??`runs`,show:`all`,last:n,...o}],l.length>4){let e=l.reduce((e,t)=>e.last<t.last?e:t);l=l.filter(t=>t.id!==e.id)}c(l,e)},[c]),u=(0,X.useCallback)(e=>{let t=a.current,n=t.findIndex(t=>t.id===e);if(n<0)return;let r=t[n].from,i=t.filter(t=>t.id!==e);i.length===0?(c(i,null),window.location.hash=`#/${r}`):c(i,o.current===e?i[Math.min(n,i.length-1)].id:o.current)},[c]),d=(0,X.useCallback)((e,t)=>{let n=++s.current;c(a.current.map(r=>r.id===e?{...r,from:t??r.from,last:n}:r),e)},[c]),f=(0,X.useCallback)((e,t)=>{c(a.current.map(n=>n.id===e?{...n,show:t}:n),o.current)},[c]),p=(0,X.useCallback)(()=>{c(a.current,null)},[c]),m=(0,X.useCallback)(()=>{let e=a.current.find(e=>e.id===o.current);window.location.hash=`#/${e?.from??`runs`}`,p()},[p]),h=(0,X.useMemo)(()=>({tabs:t,focusedId:r,openRun:l,closeRun:u,focusRun:d,setShow:f,goBack:m,hide:p}),[t,r,l,u,d,f,m,p]);return(0,$.jsx)(La.Provider,{value:h,children:e})}function za(){let e=(0,X.useContext)(La);if(!e)throw Error(`useResults outside a ResultsProvider: the app mounts one at its root`);return e}var Ba={type:`Connection type`,profile:`Request profile`,px:`Resolution`,format:`Image format`,quality:`Image quality`,seed:`Seed`,nPredict:`Response tokens`,repeatPenalty:`Repeat penalty`,frequencyPenalty:`Frequency penalty`,presencePenalty:`Presence penalty`,dryMultiplier:`DRY multiplier`,dryBase:`DRY base`,dryAllowedLength:`DRY allowed length`,grammar:`Grammar`,url:`Address`,model:`Model`,temperature:`Temperature`,imagePosition:`Image position`,cachePrompt:`Cache prompt`,thinking:`Thinking`,rejectLoops:`Reject looping responses`,maxTokens:`Response tokens`},Va={format:`image/jpeg`,quality:`0.92`,seed:``,nPredict:``,repeatPenalty:``,frequencyPenalty:``,presencePenalty:``,dryMultiplier:``,dryBase:``,dryAllowedLength:``,grammar:``,px:`921600`},Ha=[`type`,`profile`,`px`,`format`,`quality`,`seed`,`nPredict`,`maxTokens`,`repeatPenalty`,`frequencyPenalty`,`presencePenalty`,`dryMultiplier`,`dryBase`,`dryAllowedLength`,`grammar`,`imagePosition`,`cachePrompt`,`thinking`,`rejectLoops`,`url`,`model`,`temperature`],Ua=[`type`,`profile`,`url`,`model`,`temperature`],Wa=[`px`,`format`,`quality`,`imagePosition`];function Ga(e){let t=(t,n)=>String(e[t]??``).trim()?[`${n} ${e[t]}`]:[];return[...t(`frequencyPenalty`,`frequency`),...t(`presencePenalty`,`presence`),...String(e.dryMultiplier??``).trim()?[`DRY ${e.dryMultiplier} / ${e.dryBase||`–`} / ${e.dryAllowedLength||`–`}`]:[],...String(e.grammar??``).trim()?[`grammar`]:[]].join(`, `)}var Ka=(e,t)=>({...Va,...t?.setupProfile?.settings||{}});function qa(e){return Ba[e]??e}function Ja(e,t){return e===`type`?Ya(String(t)):e===`profile`?t===`speed`?`Speed`:`Quality`:e===`px`?Y().budgetLabel(t):e===`format`?String(t).replace(`image/`,``).toUpperCase():String(t)}function Ya(e){return Y().CONNECTION_TYPES[e]?.label??e}var Xa=e=>e.content?e.content!==`text`:null,Za=e=>Number(new Date(e)).toString(36).slice(-6).toUpperCase(),Qa=(e,t,n=`${t}s`)=>`${e} ${e===1?t:n}`,$a=e=>{let t=e?e.timed??e.ran:0;return t?e.ms/t:null};function eo(e,t){let n=e.scenarios.map(()=>0);for(let e of t.results||[])e&&!e.unrun&&(e.scenarios||[]).forEach((e,t)=>{t<n.length&&typeof e?.res?.ms==`number`&&n[t]++});return{...e,scenarios:e.scenarios.map((e,t)=>({...e,timed:n[t]??0}))}}var to={queued:`Queued`,running:`Running`,done:`Done`,incomplete:`Incomplete`,cancelled:`Cancelled`,failed:`Failed`,interrupted:`Interrupted`},no=e=>to[e]??e,ro={done:`sage`,queued:`amber`,running:`amber`,failed:`rust`,incomplete:`rust`,cancelled:`rust`,interrupted:`rust`};function io(e){return to[e]?(0,$.jsx)(wt,{tone:ro[e]??`neutral`,className:`rchip ${e}`,children:to[e]}):null}var ao=e=>e.length?e.reduce((e,t)=>e+t,0)/e.length:null;function oo(e){if(Math.round(e)<1e3)return`${Math.max(0,Math.round(e))} ms`;let t=Math.round(e/100);if(t<600)return`${(t/10).toFixed(1)}s`;let n=Math.round(e/1e3),r=Math.floor(n/60),i=n%60;if(r<60)return i?`${r}m ${i}s`:`${r}m`;let a=Math.floor(r/60),o=r%60;return o?`${a}hr ${o}`:`${a}hr`}function so(e,t){if(!e)return null;let n=new Date(e).getTime();if(Number.isNaN(n))return null;let r=t?new Date(t).getTime():Date.now();return Number.isNaN(r)?null:Math.max(0,r-n)}var co=e=>{let t=(e.scenarios||[]).filter(Boolean),n=t.reduce((e,t)=>e+(t.passed||0),0),r=t.reduce((e,t)=>e+(t.cases||0),0),i=t.map(e=>e.percent).filter(e=>e!=null),a=t.map($a).filter(e=>e!=null);return{pct:r?Math.round(100*n/r):null,avgScore:i.length?Math.round(ao(i)):null,avgTime:a.length?ao(a):null}},lo=e=>{let t=co(e);return{pct:t.pct==null?`—`:`${t.pct}%`,avgScore:t.avgScore==null?`—`:`${t.avgScore}%`,avgTime:t.avgTime==null?`—`:oo(t.avgTime)}},uo=e=>e.profile??`(Default)`,fo=`(No experiment)`,po=`(No content)`,mo=e=>(0,$.jsx)(`span`,{className:`unset`,children:e}),ho=(e,t)=>t?(0,$.jsx)(`a`,{className:`link-btn`,href:t,children:e}):e,go=e=>!!e.run&&(e.status===`cancelled`||e.status===`interrupted`),_o=e=>e.rerunOf?(0,$.jsxs)(`span`,{className:`hrerun note`,children:[`Re-run of `,e.rerunOfAt?Za(e.rerunOfAt):`a cleared run`]}):null,vo=[{key:`runid`,label:`Run ID`,on:!0,sort:e=>e.at,get:e=>(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`code`,{className:`runlink`,"data-openrun":e.run??void 0,children:Za(e.at)}),_o(e)]})},{key:`date`,label:`Date`,on:!0,sort:e=>e.at,get:e=>(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`time`,{dateTime:e.at,title:new Date(e.at).toLocaleString(),children:un(e.at)}),e.cancelled&&(0,$.jsx)(`span`,{className:`err`,children:` cancelled`})]})},{key:`setup`,label:`Experiment`,on:!0,sort:e=>e.setup||null,get:e=>e.setup?ho(e.setup,e.pipelineHref):(0,$.jsx)(`span`,{className:`note`,children:fo})},{key:`state`,label:`State`,on:!0,sort:e=>no(e.status),get:e=>io(e.status)},{key:`content`,label:`Content`,on:!0,sort:e=>e.content||null,get:e=>e.content?ho(e.content,e.contentHref):(0,$.jsx)(`span`,{className:`note`,children:po})},{key:`pct`,label:`% Passed Items`,on:!0,numeric:!0,sort:e=>co(e).pct,get:e=>lo(e).pct},{key:`avgscore`,label:`Avg Score`,on:!0,numeric:!0,sort:e=>co(e).avgScore,get:e=>lo(e).avgScore},{key:`avgtime`,label:`Avg Time`,on:!0,numeric:!0,sort:e=>co(e).avgTime,get:e=>lo(e).avgTime},{key:`duration`,label:`Duration`,on:!1,numeric:!0,sort:e=>so(e.startedAt,e.finishedAt),get:e=>{let t=so(e.startedAt,e.finishedAt);return t==null?`—`:oo(t)}},{key:`ran`,label:`Ran`,on:!1,numeric:!0,sort:e=>e.done,get:e=>(0,$.jsx)(Xi,{n:e.done,of:e.total})},{key:`plugins`,label:`Plugins`,on:!1,get:e=>e.plugins||mo(`(No plugins)`)},{key:`comment`,label:`Comment`,on:!1,sort:e=>e.comment,get:e=>(0,$.jsx)(`button`,{type:`button`,className:`ghost hcomment-btn`,"data-editcomment":e.run??void 0,"aria-label":e.comment?void 0:`Add a comment`,children:e.comment?(0,$.jsx)(`span`,{className:`hcomment`,title:e.comment,children:e.comment}):(0,$.jsx)(`span`,{className:`hcomment empty`,children:`——`})})}],yo=[{key:`name`,label:`Name`,on:!0,sort:(e,t)=>e?.name||`Variant ${Y().targetLetter(t)}`,get:(e,t,n)=>(0,$.jsx)(`button`,{type:`button`,className:`ghost`,"data-scenario":n,children:t?.name||`Variant ${Y().targetLetter(n)}`})},{key:`outcome`,label:`Outcome`,on:!0,sort:e=>e.pass,get:(e,t)=>t.pass==null?(0,$.jsx)(`span`,{className:`note`,children:`—`}):(0,$.jsx)(`b`,{className:t.pass?`hit`:`fault`,children:t.pass?`Pass`:`Fail`})},{key:`evals`,label:`Evals`,on:!0,sort:e=>e.evals||null,get:(e,t)=>t.evalParts?.length?t.evalParts.map((e,t)=>(0,$.jsxs)(`span`,{children:[t>0&&`, `,e.label,` `,e.mark==null?e.value:(0,$.jsx)(qe,{pass:e.mark})]},t)):t.evals||mo(`(No evals)`)},{key:`connection`,label:`Connection`,on:!0,sort:e=>e?.connection,get:(e,t)=>t?.connection||mo(`(No connection)`)},{key:`profile`,label:`Profile`,on:!0,sort:e=>e?.setupProfile?uo(e):null,get:(e,t,n)=>t?.setupProfile?(0,$.jsx)(`button`,{type:`button`,className:`ghost`,"data-prof":n,children:uo(t)}):`—`},{key:`passed`,label:`Passed Items`,on:!0,numeric:!0,sort:e=>e.cases?e.passed/e.cases:null,get:(e,t)=>t.cases?(0,$.jsx)(Xi,{n:t.passed,of:t.cases}):`—`},{key:`score`,label:`Score`,on:!0,numeric:!0,sort:e=>e.percent,get:(e,t)=>t.percent==null?`—`:`${t.percent}%`},{key:`avgtime`,label:`Avg Time`,on:!0,numeric:!0,sort:e=>$a(e),get:(e,t)=>{let n=$a(t);return n==null?`—`:oo(n)}},{key:`total`,label:`Total`,on:!1,numeric:!0,sort:e=>e.ms||null,get:(e,t)=>t.ms?oo(t.ms):`—`},{key:`model`,label:`Model`,on:!1,get:(e,t)=>t.model||mo(`(Not set)`)},{key:`res`,label:`Resolution`,on:!1,image:!0,get:(e,t)=>String(Y().budgetLabel(Ka(e,t).px))},{key:`format`,label:`Format`,on:!1,image:!0,get:(e,t)=>String(Ka(e,t).format).replace(`image/`,``).toUpperCase()},{key:`quality`,label:`Quality`,on:!1,image:!0,get:(e,t)=>Ka(e,t).format===`image/png`?`—`:String(Ka(e,t).quality)},{key:`seed`,label:`Seed`,on:!1,get:(e,t)=>String(Ka(e,t).seed||`1234`)},{key:`predict`,label:`Response tokens`,on:!1,get:(e,t)=>String(Ka(e,t).nPredict||Ka(e,t).maxTokens||`—`)},{key:`penalty`,label:`Repeat penalty`,on:!1,get:(e,t)=>String(Ka(e,t).repeatPenalty||`—`)},{key:`decoding`,label:`Decoding`,on:!1,get:(e,t)=>Ga(Ka(e,t))||mo(`(Default)`)},...[[`case`,`Case`],[`tidy`,`Tidy items`],[`dedupe`,`Remove duplicates`],[`keep-first`,`Keep first`],[`drop-echoes`,`Drop prompt echoes`]].map(([e,t])=>({key:`modifier-${e}`,label:t,on:!1,get:(t,n)=>n.modifiers?.[e]||mo(`(Not set)`)}))],bo={"Run Scenarios":`Run Variants`},xo={tests:`evals`},So={connection:`profile`},Co=[[`Runs`,vo],[`Run Scenarios`,yo]],wo=e=>![`queued`,`running`].includes(e),To=e=>e.cancel&&!wo(e.status),Eo=()=>({ran:0,passed:0,found:0,of:0,ms:0,timed:0,share:0,shared:0});function Do(e){return e.of?Math.round(100*e.found/e.of):e.shared?Math.round(100*e.share/e.shared):null}var Oo=(e,t)=>e.filter(e=>!e.whole).map(e=>e.items[t]).filter(e=>!!e&&!Y().isSkipped(e)),ko=e=>Array.isArray(e)?e.length:typeof e==`number`?e:0;function Ao(e,t){let n=t.map(Eo);return(e||[]).forEach((e,r)=>{e&&!e.unrun&&(e.scenarios||[]).forEach((e,i)=>{let a=n[i];if(!a||!e)return;let o=Oo(t[i],r);if(o.length){a.ran++,o.every(e=>e.pass)&&a.passed++;for(let e of o)a.found+=ko(e.found),a.of+=ko(e.found)+ko(e.missed)+ko(e.invented),e.found==null&&e.missed==null&&typeof e.score==`number`&&!e.points&&(a.share+=e.score,a.shared++)}e.res&&(a.timed++,a.ms+=e.res.ms||0)})}),n}var jo=(e,t,n,r)=>{let i=r?Y().wholeRunsOf(e,t,r):[];return Y().targetsOf(e).map((r,a)=>Y().scenarioEvals(e,a,t,wo(n)).map(e=>{let t=i[a]?.[e.id];return t?{...e,wholeRun:t}:e}))},Mo=e=>jo(e.snapshot||{},e.results||[],e.status);function No(e,t){return t.map((t,n)=>(e||[]).map((e,r)=>{if(!e||e.unrun||!e.scenarios?.[n])return null;let i=Oo(t,r);return i.length?i.every(e=>e.pass):null}))}function Po(e,t){let n=e.rowStep.flatMap((e,n)=>e===t?[n]:[]),r=No(e.results,e.outcomes);return{items:n.length,passed:e.scenarios.map((e,t)=>{let i=n.map(e=>r[t]?.[e]).filter(e=>e!=null);return{passed:i.filter(Boolean).length,ran:i.length}})}}var Fo=(e,t,n)=>(e.outcomes[n]??[]).some(e=>!e.whole&&Y().failedScore(e.items[t]));function Io({done:e,name:t,hasCase:n,caseDatasets:r}){return!e||!t?null:n?`edit`:r>=1?`add`:null}function Lo(e){return e.skipped?`Skipped`:e.whole?e.verdict?.ran?e.verdict.pass?`Passed`:`Failed`:`—`:e.ran?`${e.passed}/${e.ran}`:e.skippedItems?`Skipped`:`—`}var Ro=e=>!e.skipped&&e.whole&&e.verdict?.ran?!!e.verdict.pass:null,zo=e=>e.map(e=>`${e.label} ${Lo(e)}`).join(`, `),Bo=e=>e.map(e=>({label:e.label,value:Lo(e),mark:Ro(e)})),Vo=e=>{if(!e.group)return null;let t=Y().casesRef(e)?.n??e.pin;return t==null?null:`v${t}`},Ho=(e,t,n)=>e.group?.name||e.group?.id||(e.name||``).trim()||Y().evalLabel({evals:n},t);function Uo(e){let t=e.evals,n=t.map((n,r)=>({key:n.id,name:Ho(n,r,t),version:Vo(n),cells:e.scenarios.map((t,n)=>{let i=e.outcomes[n]?.[r];return{pct:i&&!i.whole&&i.ran?Math.round(100*i.passed/i.ran):null,pass:i?Y().groupPass(i):null,skipped:!!i?.skipped}}),whole:e.outcomes.some(e=>e[r]?.wholeRun)?e.scenarios.map((t,n)=>{let i=e.outcomes[n]?.[r]?.wholeRun;return i?.ran?i.pass:null}):null})),r=e.snapshot.pass;return{rows:n,overall:t.length?{label:r?.mode===`atLeast`?`At least ${r.count}`:`All evals pass`,pass:e.scenarios.map((t,n)=>Y().overallVerdict(e.outcomes[n]??[],r)),pct:e.tallies.map(e=>e.ran?Math.round(100*e.passed/e.ran):null)}:null}}var Wo=e=>e.scenarios.map((t,n)=>Y().recordedTargetOf(e.snapshot,n)),Go=e=>e.findIndex(e=>!e);function Ko(e){return!e||e.error?null:e.transcript?.at(-1)?.got!=null||e.raw!=null?Y().gradedText(e):null}function qo(e,t,n,r){let i=e.results[t]?.scenarios?.[n]?.scores?.[r];return i&&!Y().isSkipped(i)?i.metrics??[]:[]}var Jo=e=>`${e.type}::${e.label}`;function Yo(e,t){let n=e.scenarios.length,r=(n,r)=>qo(e,n,r,t),i=[],a=new Set,o=[];e.results.forEach((e,t)=>{for(let e=0;e<n;e++){let n=r(t,e);n.length>o.length&&(o=n)}});let s=e=>{let t=Jo(e);a.has(t)||(a.add(t),i.push({key:t,label:e.label}))};return o.forEach(s),e.results.forEach((e,t)=>{for(let e=0;e<n;e++)r(t,e).forEach(s)}),i.map(({key:t,label:i})=>({key:t,label:i,cells:Array.from({length:n},(n,i)=>{let a=0,o=0;return e.results.forEach((e,n)=>{let s=r(n,i).find(e=>Jo(e)===t);s&&s.weight!==0&&(o++,s.pass&&a++)}),o?{passed:a,ran:o}:null})}))}var Xo=e=>typeof e.n==`number`&&Number.isInteger(e.n)?`${e.id}@${e.n}`:e.id;function Zo(e,t,n,r=[],i=null){let a=e.own??(e.group?n[Xo(e.group)]:void 0),o=Y().casesRef(e),s=o?n[Xo(o)]?.cases??(o.id===i?r:[]):[],c=t?s.find(e=>!e.todo&&Y().caseItem(e)===t):void 0;return[...a?.every??[],...c?.metrics??[]]}function Qo(e,t){let n=e=>[typeof e.metric==`string`&&e.metric.trim()||``,Y().METRICS[e.type]?.label??e.type],r=0;return e.map(e=>{let i=t.findIndex((t,i)=>i>=r&&t.type===e.type&&n(t).includes(e.label));if(i<0)return null;r=i+1;let a=t[i];return[a.not?`not`:``,Y().metricCheck(a)].filter(Boolean).join(` `)||null})}function $o(e,t){let n=e.snapshot||{},r=Y().contentOf(n),i=!!(r&&Y().CONTENT_TYPES[r.type]?.inline),a=Y().lastKind(n),o=Y().runItemsOf(n),s=Y().itemContents(n),c=new Map(s.map(({step:e,content:t})=>[e,t.type===`source`?t.ref.id:null])),l=e.results||[],u=jo(n,l,e.status,t);return{id:e.id,status:e.status,at:e.submittedAt,behind:e.behind,name:n.name||`Run`,error:e.error,progress:e.progress||{current:null,n:0,total:0},scenarios:Y().targetsOf(n).map((e,t)=>({id:e?.id||`scenario-${t}`,name:Y().targetLabel(n,t),kind:a,plain:!(a&&Y().OUTPUT_KINDS[a]?.terms),asked:rs(n,t)})),items:o.map(e=>e.name),groups:s.length>1?s.map(({step:e,content:t})=>({step:e,source:c.get(e)??null,name:t.type===`source`?t.ref.name||t.ref.id:Y().CONTENT_TYPES[t.type]?.label??t.type})):[],rowStep:o.map(e=>e.step),rowSource:o.map(e=>c.get(e.step)??null),content:i?{type:`text`,text:r.text??``}:{type:`source`,source:r?.ref?.id??``,sourceName:r?.ref?.name??``},evals:Y().evalsOf(n),snapshot:n,results:l,outcomes:u,tallies:Ao(l,u),startedAt:e.startedAt,finishedAt:e.finishedAt}}var es={LOWER:`lower case`,SENTENCE:`Sentence case`,TITLE:`Title Case`,UPPER:`UPPER CASE`,NONE:`No change`};function ts(e){if(!e)return{};let t={};for(let n of Y().outOf(e)?.modifiers||[])t[n.type]=n.type===`case`?es[n.mode]??String(n.mode):Y().modifierSummary(n);let n=(e.steps||[]).filter(e=>e?.type===`filters`);for(let e of n.flatMap(e=>e.filterSets||[]))for(let n of e.own?.filters||[]){let e=n.op,r=n.match,i=n.type===`drop-item`||n.type===`remove`&&e?.kind===`items`;n.type===`rewrite-item`&&e?.kind===`case`||n.type===`change-case`?t.case=es[e?.mode??``]??String(e?.mode):n.type===`rewrite-item`&&e?.kind===`tidy`||n.type===`trim`&&e?.bullets?t.tidy=`on`:n.type===`keep-first`&&(e?.unit??`items`)===`items`?t[`keep-first`]=String(e?.n??``):i&&r?.duplicate?t.dedupe=`on`:i&&r?.echoes&&(t[`drop-echoes`]=`on`)}return t}function ns(e,t){let n=Y().scenarioProfile(e,t),r=Y().targetsOf(e)[t],i=e.profiles,a=!r?.connection||!!i&&Object.hasOwn(i,Y().answerKey(r.connection.id,r.profile?.id??null));return n?a?{connection:n.name,profile:r?.profile?.name??null}:{connection:null,profile:n.name}:{connection:null,profile:null}}var rs=(e,t)=>{if(Y().recordedTargetOf(e,t))return null;let{connection:n,profile:r}=ns(e,t);return[n,r].filter(Boolean).join(`, `)||null};function is(e){let t=e.snapshot||{},n=Y().contentOf(t),r=e.results||[],i=Y().targetsOf(t),a=Y().jobsOf(t),o=jo(t,r,e.status),s=Ao(r,o),c=i.map((e,n)=>{let r=s[n]??Eo(),i=(a.length?Y().stagesFor(t,n).connections:[]).map(e=>String(e.model||``)),c=i[0]?new Set(i).size===1?i[0]:i.join(` → `):``,l=Do(r),u=Y().overallVerdict(o[n]??[],t.pass);return{name:Y().targetLabel(t,n),id:e?.id,model:c,setupProfile:Y().scenarioProfile(t,n),...ns(t,n),modifiers:ts(Y().jobsOf(t).at(-1)),percent:l,passed:r.passed,cases:r.ran,pass:u,detail:u==null?`not graded`:zo(o[n]??[]),evals:zo(o[n]??[]),evalParts:Bo(o[n]??[]),ms:r.ms,ran:r.ran}}),l=e.progress||{},u=l.n??l.total??0;return{at:e.submittedAt,run:e.id,status:e.status,cancelled:e.status===`cancelled`,startedAt:e.startedAt,finishedAt:e.finishedAt,setup:t.name||``,pipelineId:t.id||``,comment:t.comment||``,plugins:(t.plugins||[]).map(e=>`${e.id} ${e.version}`).join(`, `),done:u,total:l.total??u,content:n&&Y().CONTENT_TYPES[n.type]?.inline?`text`:n?.type===`source`&&(n.ref?.name||n.ref?.id)||``,sourceId:n?.type===`source`&&n.ref?.id||``,scenarios:c,rerunOf:e.rerunOf??null,rerunOfAt:e.rerunOfAt??null}}var as=(e,t)=>({key:`state`,label:`State`,value:t?`Stopping`:no(e),tone:e===`done`?`good`:[`failed`,`incomplete`,`cancelled`,`interrupted`].includes(e)?`bad`:null}),os=e=>e.length?e.reduce((e,t)=>e+t,0)/e.length:null;function ss(e){let t=0,n=0;for(let r of e||[])for(let e of r?.scenarios||[])for(let r of Object.values(e?.scores||{}))if(r&&!Y().isSkipped(r))for(let e of r.metrics||[])typeof e.asked==`number`&&(t++,n+=e.asked);return{calls:t,ms:n}}function cs(e,t=!1){let n=e.tallies,r=n.reduce((e,t)=>e+t.passed,0),i=n.reduce((e,t)=>e+t.ran,0),a=n.map(Do).filter(e=>e!=null),o=a.length?`${Math.round(os(a))}%`:`—`,s=so(e.startedAt,e.finishedAt),c=ss(e.results),l={key:`ran`,label:`Run Items`,of:e.progress.total?[e.progress.n,e.progress.total]:null};return{lead:i?{key:`pct`,label:`% Passed Items`,value:`${Math.round(100*r/i)}%`}:{...l,key:`lead-ran`},rest:[{key:`run`,label:`Run ID`,value:e.at?(0,X.createElement)(`code`,null,Za(e.at)):`—`},as(e.status,t),{key:`score`,label:`Avg Score`,value:o},{key:`duration`,label:`Duration`,value:s==null?`—`:oo(s)},...c.calls?[{key:`grader`,label:`Grader`,value:`${c.calls} ${c.calls===1?`call`:`calls`}, ${oo(c.ms)}`}]:[],...i?[l]:[],{key:`start`,label:`Start Date`,value:e.at&&un(e.at)||`—`},...e.snapshot.comment?[{key:`comment`,label:`Comment`,value:(0,X.createElement)(`span`,{className:`fig-comment`,title:e.snapshot.comment},e.snapshot.comment)}]:[]]}}var ls=e=>e.evals.length&&wo(e.status)?`(Not graded)`:`—`;function us(e,t){let n=e.tallies[t],r={key:`time`,label:`Avg Time`,value:ds(n)??`—`};return n?.ran?{lead:{key:`pct`,label:`% Passed Items`,value:`${Math.round(100*n.passed/n.ran)}%`},rest:[{key:`score`,label:`Score`,value:Do(n)==null?`—`:`${Do(n)}%`},r]}:e.evals.length&&wo(e.status)&&ms(e,t)==null?{lead:{key:`pct`,label:`% Passed Items`,value:ls(e)},rest:[r]}:{lead:r,rest:[]}}function ds(e){return e?.timed?oo(e.ms/e.timed):null}function fs(e,t=!1){let n=t?`Stopping`:no(e.status);return e.status===`queued`?{state:n,detail:e.behind?`behind ${e.behind}`:`next in line`}:e.status===`running`?{state:n,detail:e.progress.current||``}:null}function ps(e,t){return e.status===`running`&&e.progress.at===t?`busy`:e.results[t]?`done`:wo(e.status)?`unreached`:`waiting`}function ms(e,t){return Y().overallVerdict(e.outcomes[t]??[],e.snapshot.pass)}var hs=(e,t)=>t!=null&&e.rowSource?.[t]!==void 0?e.rowSource[t]:e.content?.type===`source`?e.content.source:null;function gs(e,t,n){let r=hs(e,n);return r===`samples`?`/api/samples/thumbs/${encodeURIComponent(t)}`:r?`/api/sources/${encodeURIComponent(r)}/thumbs/${encodeURIComponent(t)}`:``}function _s(e,t,n){let r=hs(e,n);return r===`samples`?`/api/samples/zoom/${encodeURIComponent(t)}`:r?`/api/sources/${encodeURIComponent(r)}/zoom/${encodeURIComponent(t)}`:`/api/samples/zoom/${encodeURIComponent(t)}`}var vs=(e,t)=>t==null||t===``?null:`${e}: ${t}`,ys=e=>(e||[]).map(String).join(`, `),bs=e=>e.length?e.every(t=>t===e[0])?String(e[0]):e.join(` → `):``,xs=e=>{let t=Y().OUTPUT_KINDS[Y().lastKind(e)??Y().defaultKind()];return t?!t.terms:!1},Ss=e=>{let t=e.metric&&String(e.metric)||Y().METRICS[e.type]?.label||e.type,n=Y().metricCheck(e);return[e.not?`not`:``,`${t}${n?` ${n}`:``}`,e.weight===0?`(watched, not scored)`:typeof e.weight==`number`&&e.weight!==1?`×${e.weight}`:``].filter(Boolean).join(` `)};function Cs(e,t,n,r){let i=Y().readCase(t,n,xs(e)),{stages:a,connections:o}=Y().stagesFor(e,r),s=o.map(e=>Y().connectionSettings(e)),c=e=>bs(s.map(e)),l=Y().evalsDataset(e);return[`An eval case is failing.`,``,`## The eval case`,vs(`item`,Y().caseItem(t)),vs(`eval case id`,t.id),vs(`note`,t.note),...(t.metrics||[]).map((e,t)=>vs(`metric ${t+1}`,Ss(e))),``,`## What came back`,vs(`verdict`,i.pass?`pass`:`fail`),vs(`score`,i.score==null?`—`:`${Math.round(i.score*100)}%`),vs(`items`,ys(n?.terms)||`(none)`),vs(`missed`,ys((i.missed??[]).map(e=>Array.isArray(e)?e.join(` / `):e))),vs(`invented`,ys(i.invented)),vs(`dropped`,ys((n?.dropped||[]).map(e=>`${e.item} (${e.by})`))),vs(`reasons`,ys(i.reasons)),vs(`error`,n?.error),vs(`took`,n?.ms==null?null:`${n.ms} ms`),``,`## How it was asked`,vs(`variant`,`${r+1} of ${Y().targetsOf(e).length}`),vs(`model`,c(e=>e.model)),vs(`endpoint`,c(e=>e.url||`(the lab's own Ollama)`)),vs(`connection type`,c(e=>Ya(String(e.type??``)))),vs(`image`,a[0]?.withImage?ws(s[0]):`no image`),vs(`seed`,c(e=>e.seed||`1234`)),vs(`response tokens`,c(e=>e.nPredict||e.maxTokens||`not set`)),vs(`repeat penalty`,c(e=>e.repeatPenalty||`(profile default)`)),vs(`other decoding`,Ts(s.at(-1))),vs(`modifiers`,(Y().outOf(Y().jobsOf(e).at(-1))?.modifiers||[]).map(e=>`${Y().MODIFIERS[e.type]?.label??e.type}: ${Y().modifierSummary(e)}`).join(`; `)||`none`),``,`## The prompt`,...a.flatMap((e,t)=>[a.length>1?`job ${t+1}${e.withImage?` (with image)`:``}, answering as ${e.kind}, on ${String(o[t]?.name||`unnamed`)}:`:null,e.text]),``,`## Where things live`,l?`the eval: ${l.name||l.id} (this eval case is id "${t.id}")`:null,`the parser and scorer, shared by the lab, the CLI and CI: evals-core.ts`,`what the grading means: the eval's README`].filter(e=>e!==null).join(`
5
+ `)}function ws(e){let{px:t,format:n}=Y().connectionImage(e);return`${t==null?`default budget`:Y().budgetLabel(t)}, ${n.replace(`image/`,``).toUpperCase()}`}function Ts(e){let t=(t,n)=>String(e?.[t]??``).trim()?[`${n} ${e?.[t]}`]:[];return[...t(`frequencyPenalty`,`frequency`),...t(`presencePenalty`,`presence`),...String(e?.dryMultiplier??``).trim()?[`DRY`]:[],...String(e?.grammar??``).trim()?[`grammar`]:[]].join(`, `)}function Es(e,t){let n=[];return!wo(e.status)||!Y().evalsDataset(e.snapshot)||(e.results||[]).forEach((r,i)=>{r&&!r.unrun&&(r.scenarios||[]).forEach((a,o)=>{let s=t.find(e=>Y().caseItem(e)===r.name);Fo(e,i,o)&&s&&a.res&&n.push({kase:s,res:a.res,scenarioIndex:o,item:r.name??``})})}),n}var Ds=e=>{let t=Math.min(...e),n=Math.max(...e);return t===n?String(t):`${t}–${n}`};function Os(e,t,n){let r=Y().evalsDataset(e.snapshot);if(!wo(e.status)||!r)return[];let i=e.outcomes[n]?.find(t=>e.evals.find(e=>e.id===t.id&&Y().casesRef(e))),a=new Map(t.map(e=>[Y().caseItem(e),e])),o=new Map,s=(e,t,n,r,i,a)=>{let s=o.get(e);s||(s={key:e,label:n,note:null,files:[],rank:t,counts:[],limits:[]},o.set(e,s)),s.files.includes(r)||s.files.push(r),i!=null&&s.counts.push(i),a!=null&&s.limits.push(a)};return e.results.forEach((e,t)=>{if(!e||e.unrun||!e.name)return;let r=a.get(e.name),o=e.scenarios?.[n]?.res,c=i?.items[t];if(!r||r.todo||!o||!c||Y().isSkipped(c)||c.pass)return;let l=e.name;if(o.error){s(`error`,6,`Error`,l);return}let u=(o.terms||[]).length,d=(r.metrics||[]).filter(e=>e.type===`item-count`&&e.weight!==0),f=(c.metrics??[]).filter(e=>e.type===`item-count`&&e.weight!==0);d.forEach((e,t)=>{let n=f[t];if(e.not||!n||n.pass)return;let r=e.max==null||e.max===``?null:Number(e.max),i=e.min==null||e.min===``?null:Number(e.min);r!=null&&u>r?s(`over`,0,`Too many items`,l,u,r):i!=null&&s(`under`,1,`Too few items`,l,u,i)});for(let e of c.missed??[])Array.isArray(e)?s(`none:${e.join(`/`)}`,3,`None of ${e.join(` / `)}`,l):s(`missed:${e}`,2,`Missed ${e}`,l);for(let e of c.invented??[])s(`invented:${e}`,4,`Invented ${e}`,l)}),[...o.values()].sort((e,t)=>e.rank-t.rank||t.files.length-e.files.length||e.label.localeCompare(t.label)).map(({key:e,label:t,files:n,counts:r,limits:i})=>({key:e,label:t,files:n,note:r.length&&i.length?`${Ds(r)}, ${e===`over`?`max`:`min`} ${Ds(i)}`:null}))}var ks=[{value:`pass`,label:`% Passed Items`},{value:`score`,label:`Score`},{value:`time`,label:`Avg Time`}],As=[10,20,50],js=e=>e===`done`,Ms=e=>e===`queued`||e===`running`,Ns=(e,t)=>t?`${e}\u0000${t}`:e;function Ps(e){let t=new Map;for(let n of e)t.set(n.work?.id||n.id,(t.get(n.work?.id||n.id)??0)+1);return e.map(e=>{let n=e.work?.id||e.id,r=(t.get(n)??0)>1;return{id:r?e.id:n,doc:n,saved:e.id,label:e.name,only:r?e.name:null}})}var Fs=(e,t)=>{let n=t.snapshot?.id;if(!n)return;let r=e.filter(e=>e.doc===n);return r.length>1?r.find(e=>e.only===t.snapshot?.name):r[0]};function Is(e){let t=eo(is(e),e),n=e.results||[],r=Mo(e),i=No(n,r),a=new Map,o=[],s=new Map(Y().itemContents(e.snapshot).map(e=>[e.step,e]));n.forEach((e,t)=>{if(!e||e.unrun)return;let n=e.name||`Item ${t+1}`,r=e.getItems?s.get(e.getItems):void 0,i=r?.content.type===`source`?r.content.ref:null,c=i&&r.dir?`${i.id}\u0001${n}`:n,l=a.get(c)??0;a.set(c,l+1),o.push({key:Ns(c,l),name:n,x:t,...i?{source:i.name||i.id}:{}})});let c=new Map(o.map(e=>[e.x,e.key])),l=e.prompts||[],u=new Map;return t.scenarios.forEach((e,t)=>{if(!e.id)return;let n=l.filter(t=>t.target===e.id).sort((e,t)=>e.job-t.job),a=new Map;(i[t]??[]).forEach((e,t)=>{let n=c.get(t);e!=null&&n&&a.set(n,e)}),u.set(e.id,{id:e.id,name:e.name,prompt:n.map(e=>[`v${e.version}`,e.name].filter(Boolean).join(`, `)).join(` → `),version:n.map(e=>`v${e.version}`).join(` → `),connection:e.connection??``,model:e.model,passed:e.passed,cases:e.cases,pct:e.cases?Math.round(100*e.passed/e.cases):null,score:e.percent,avgTime:$a(e),evals:(r[t]??[]).map(e=>({id:e.id,label:e.label,passed:e.passed,ran:e.ran,mark:e.whole&&!e.skipped&&e.verdict?.ran?!!e.verdict.pass:null})),verdicts:a})}),{id:e.id,at:e.submittedAt,status:e.status,finished:js(e.status),items:o,targets:u}}function Ls(e,t){let n=e.filter(e=>!Ms(e.status)).sort((e,t)=>t.submittedAt.localeCompare(e.submittedAt)||(e.id<t.id?1:e.id>t.id?-1:0)).slice(0,t).reverse().map(Is),r=n.filter(e=>e.finished),i=r.at(-1)??null,a=r.at(-2)??null,o=i?[...i.targets.values()]:[],s=new Map(o.map(e=>[e.id,e.name]));for(let e of[...n].reverse())for(let t of e.targets.values())s.has(t.id)||s.set(t.id,t.name);return{runs:n,latest:i,previous:a,targets:o,rows:[...s].map(([e,t])=>({id:e,name:t}))}}var Rs=(e,t)=>t===`pass`?e.pct:t===`score`?e.score:e.avgTime;function zs(e,t){return e.map((e,n)=>({t:e,i:n,r:Bs(e,t)})).sort((e,t)=>Vs(e.r,t.r)||e.i-t.i).map(e=>e.t)}var Bs=(e,t)=>[t,...ks.map(e=>e.value).filter(e=>e!==t)].map(t=>{let n=Rs(e,t);return n==null?null:t===`time`?n:-n}),Vs=(e,t)=>{for(let n=0;n<e.length;n++){let r=e[n]??null,i=t[n]??null;if(r!==i)return r==null?1:i==null?-1:r-i}return 0};function Hs(e,t){let n=e[0];if(!n||e.length<2||Rs(n,t)==null)return new Set;let r=Bs(n,t),i=e.filter(e=>Vs(Bs(e,t),r)===0);return i.length===e.length?new Set:new Set(i.map(e=>e.id))}function Us(e){let{latest:t,previous:n}=e;if(!t||!n)return null;let r=[],i=[];for(let e of t.targets.values()){let a=n.targets.get(e.id);if(a)for(let n of t.items){let t=e.verdicts.get(n.key),o=a.verdicts.get(n.key);t!=null&&o!=null&&t!==o&&(t?i:r).push({item:n,target:e})}}return{failing:r,passing:i}}function Ws(e,t,n){let r=null;return e.runs.map(e=>{let i=e.targets.get(t);if(!e.finished)return{run:e,value:null,gap:`unfinished`,version:null};if(!i)return{run:e,value:null,gap:`absent`,version:null};let a=r!=null&&i.version!==r&&i.version?i.version:null;r=i.version;let o=Rs(i,n);return{run:e,value:o,gap:o==null?`ungraded`:null,version:a}})}function Gs(e,t){if(t!==`time`)return 100;let n=0;for(let t of e.runs)if(t.finished)for(let e of t.targets.values())n=Math.max(n,e.avgTime??0);if(!n)return 1e3;let r=10**Math.floor(Math.log10(n));return([1,2,5,10].find(e=>e*r>=n)??10)*r}function Ks(e,t){let n=new Map;for(let t of[...e.runs].reverse())for(let e of t.items)n.has(e.key)||n.set(e.key,e);return[...n].map(([n,{name:r,source:i}])=>{let a=t.map(t=>{let i=e.runs.map(e=>e.finished?e.targets.get(t)?.verdicts.get(n)??null:null),a=i.filter(e=>e===!0).length,o=i.filter(e=>e===!1).length;return a+o?{key:n,name:r,cells:i,passed:a,failed:o}:null});return{key:n,name:r,...i?{source:i}:{},cells:a,failed:a.reduce((e,t)=>e+(t?.failed??0),0)}}).filter(e=>e.cells.some(Boolean)).sort((e,t)=>t.failed-e.failed||e.name.localeCompare(t.name))}var qs=[{id:`home`,label:`Home`,icon:Ce,built:!0},{id:`runs`,label:`Experiments`,icon:P,built:!0},{id:`history`,label:`History`,icon:re,built:!0},{id:`library`,label:`Library`,icon:s,built:!0},{id:`setup`,label:`Setup`,icon:i,built:!0}],Js=e=>e.replace(/[^A-Za-z0-9._-]+/g,`-`).replace(/^[-.]+|[-.]+$/g,``);function Ys(e=new Date){let t=e=>String(e).padStart(2,`0`);return`${e.getFullYear()}${t(e.getMonth()+1)}${t(e.getDate())}-${t(e.getHours())}${t(e.getMinutes())}`}function Xs(e,t,n,r,i=new Date){return`${e}-${Js(t)||e}-v${n}-${Ys(i)}.${r}`}function Zs(e,t){let n=URL.createObjectURL(e),r=document.createElement(`a`);r.href=n,r.download=t,document.body.appendChild(r),r.click(),r.remove(),setTimeout(()=>URL.revokeObjectURL(n),0)}var Qs=()=>fa({tab:`library`,section:`datasets`,id:null}),$s=e=>fa({tab:`library`,section:`datasets`,id:e}),ec=()=>pa({tab:`library`,section:`datasets`,id:null}),tc=(e,t=location.hash)=>`/w/${encodeURIComponent(e)}${t}`,nc=(e,t,n)=>n?`No ${e} ${t} in ${n.name}`:`No ${e} ${t}`,rc=`promptlab.ws.undo`;function ic(e){try{localStorage.setItem(rc,JSON.stringify(e))}catch{}}function ac(){let e=null;try{e=localStorage.getItem(rc),localStorage.removeItem(rc)}catch{return null}if(!e)return null;try{let t=JSON.parse(e);return t&&t.id&&t.slug&&t.name?{id:t.id,slug:t.slug,name:t.name}:null}catch{return null}}function oc(e){let t=e.filter(e=>!e.archived);return t.length?[...t].sort((e,t)=>(t.lastUsed??``).localeCompare(e.lastUsed??``)||Number(t.isDefault)-Number(e.isDefault))[0]??null:null}var sc=(0,X.createContext)({current:{id:`default`,slug:`default`,name:`Default`,archived:!1,isDefault:!0},requestedSlug:null,list:[],switchTo:()=>{}}),cc=()=>(0,X.useContext)(sc),lc=1600,uc=(0,X.createContext)(null);function dc({children:e}){let[t,n]=(0,X.useState)(null),r=(0,X.useRef)(null);(0,X.useEffect)(()=>()=>{r.current&&clearTimeout(r.current)},[]);let i=(0,X.useCallback)(e=>{qt(e).then(e=>{n(e?{label:`Copied to clipboard.`}:{label:`Couldn't copy`,bad:!0}),r.current&&clearTimeout(r.current),r.current=setTimeout(()=>n(null),lc)})},[]);return(0,$.jsxs)(uc.Provider,{value:i,children:[e,(0,$.jsx)(Ye,{undo:null,notice:t,onUndo:()=>{},onDismiss:()=>n(null)})]})}function fc(){let e=(0,X.useContext)(uc);return(0,X.useCallback)(t=>{e?e(t):qt(t)},[e])}var pc=(e,t)=>`${location.origin}${tc(e,da(t))}`;function mc(){let e=fc(),t=cc().current?.slug??null;return(0,X.useCallback)(n=>({label:`Copy link`,icon:J.link,onSelect:()=>{t&&e(pc(t,n))}}),[e,t])}var hc={"eval-group":{noun:`eval`,href:e=>da({tab:`library`,section:`datasets`,id:e})},"filter-set":{noun:`filter set`,href:e=>da({tab:`library`,section:`filters`,id:e})},prompt:{noun:`prompt`,href:e=>da({tab:`library`,section:`prompts`,id:e})},source:{noun:`Source`,href:e=>da({tab:`library`,section:`sources`,id:e})},pipeline:{noun:`experiment`,href:e=>da({tab:`runs`,id:e})}};function gc(e){let t=new Set,n=new Set,r=new Set,i=new Set,a=(e,t)=>{typeof t==`string`&&t&&e.add(t)},o=Array.isArray(e?.evals)?e.evals:[];for(let e of o)a(t,e?.group?.id),a(t,e?.dataset?.id);for(let t of Y().targetsOf(e))for(let e of t?.steps??[])a(n,e?.from?.id);for(let t of Y().jobsOf(e))for(let e of t?.steps??[])if(e?.content?.type===`source`&&a(i,e.content.ref?.id),Array.isArray(e?.filterSets))for(let t of e.filterSets)a(r,t?.set?.id);let s=Y().profileIds(e)??[];return{groups:[...t],prompts:[...n],filterSets:[...r],sources:[...i],profiles:s}}var _c=(e,t)=>e?.find(e=>e.id===t)?.name||t;function vc(e,t){if(e.kind===`pipeline`){let n=t.pipelines.find(t=>t.id===e.id);if(!n)return[];let r=gc(n.work),i=[],a=(e,t,n)=>{for(let r of t)i.push({kind:e,id:r,name:_c(n,r),href:hc[e].href(r)})};return a(`eval-group`,r.groups,t.groups),a(`prompt`,r.prompts,t.prompts),a(`filter-set`,r.filterSets,t.filterSets),a(`source`,r.sources,t.sources),i}let n={"eval-group":`groups`,"filter-set":`filterSets`,prompt:`prompts`,source:`sources`}[e.kind],r=t.pipelines.filter(t=>gc(t.work)[n].includes(e.id)).map(e=>({kind:`pipeline`,id:e.id,name:e.name,href:hc.pipeline.href(e.id)})),i=e.kind===`source`?(t.groups??[]).filter(t=>t.preview?.id===e.id).map(e=>({kind:`eval-group`,id:e.id,name:e.name||e.id,href:hc[`eval-group`].href(e.id)})):[];return[...r,...i]}function yc({subject:e,scan:t,undo:n,onClose:r,onChanged:i,accountShare:a}){let o=Z(),s=cc();return s.current?(0,$.jsx)(at,{api:o,subject:e,workspaces:s.list,current:s.current,dependents:vc(e,t),undo:n,onClose:r,onChanged:i,accountShare:a}):null}function bc({undo:e}){let t=mc(),n=Ri(),{list:r,error:i}=zi(),[a]=xi(`promptlab.workflows`),[o,s]=we(`eval-groups`,20),[c,l]=(0,X.useState)(!1),[u,d]=(0,X.useState)(null),[f,p]=(0,X.useState)(null),[m,h]=(0,X.useState)(null),g=(0,X.useRef)(null),[,_]=(0,X.useState)(0);(0,X.useEffect)(()=>n.subscribe(()=>_(e=>e+1)),[n]),(0,X.useEffect)(()=>{for(let e of r??[])n.load(e.id)},[r,n]);let v=e=>d(e instanceof Error?e.message:String(e)),y=(0,X.useMemo)(()=>{let e=new Map;for(let t of a.list)for(let n of t.work.evals??[]){if(n.type!==`group`)continue;let r=n,i=r.group?.id??r.own?.casesFrom?.id;if(!i)continue;let a=e.get(i)??{names:[],pinned:!1};a.names.includes(t.name)||a.names.push(t.name),typeof r.pin==`number`&&(a.pinned=!0),e.set(i,a)}return e},[a.list]),b=(r??[]).map(e=>({...e,body:n.entry(e.id)?.doc?.body??null,links:y.get(e.id)??{names:[],pinned:!1}})),S=()=>new Set((n.list().list??[]).map(e=>e.name)),w=async()=>{d(null);try{$s((await n.create(xe(`Untitled eval`,S()))).id)}catch(e){v(e)}},T=async t=>{d(null);try{await n.flush(t.id);let r=await n.remove(t.id);e.offer({label:`Deleted ${t.name}`,restore:()=>{n.restore(r).catch(v)}})}catch(e){v(e)}},E=async e=>{d(null);let t;try{t=await xc(e)}catch(e){v(e);return}let r;try{r=JSON.parse(t)}catch(e){d(`Not JSON: ${e instanceof Error?e.message:String(e)}`);return}p(`import`);try{let e=await n.importFile(r);e[0]&&$s(e[0].id)}catch(e){v(e)}finally{p(null)}},D=async()=>{p(`exportAll`);try{let e=await fetch(n.exportAllUrl());if(!e.ok)throw Error(`the export answered ${e.status}`);let t=await e.json();Zs(new Blob([JSON.stringify(t,null,2)+`
6
+ `],{type:`application/json`}),Xs(`evals`,`all`,t.version,`json`))}catch(e){v(e)}finally{p(null)}},O=e=>[{label:`Open`,icon:C,onSelect:()=>$s(e.id)},t({tab:`library`,section:`datasets`,id:e.id}),{label:`Copy or move…`,icon:J.transfer,onSelect:()=>h(e)},{label:`Delete`,icon:J.remove,destructive:!0,onSelect:()=>void T(e)}],k=e=>e.scoring.mode===`weighted`?`Points`:`All metrics pass`,j=[{key:`group`,header:`Eval`,role:`title`,sort:e=>e.name.toLowerCase(),cell:e=>(0,$.jsx)(`button`,{type:`button`,className:`link-btn`,onClick:()=>$s(e.id),children:e.name})},{key:`preview`,header:`Source Coverage`,sort:e=>e.preview?.name??``,tdProps:e=>({"data-state":e.preview?void 0:`none`}),cell:e=>e.preview?.name??(0,$.jsx)(`span`,{className:`unset`,children:`(No Source)`})},{key:`cases`,header:`Eval Cases`,className:`num`,sort:e=>e.cases,cell:e=>e.cases},{key:`every`,header:`Every item metrics`,className:`num`,sort:e=>e.body?.every.length??-1,cell:e=>e.body?e.body.every.length:`…`},{key:`scoring`,header:`Item passes when`,sort:e=>e.body?k(e.body):``,cell:e=>e.body?k(e.body):`…`},{key:`linked`,header:`Linked by`,sort:e=>e.links.names.length,tdProps:e=>({"data-state":e.links.names.length?void 0:`none`}),cell:e=>e.links.names.length?(0,$.jsx)(`span`,{title:e.links.names.join(`, `),children:`${e.links.names.length} ${e.links.names.length===1?`experiment`:`experiments`}${e.links.pinned?`, pinned`:``}`}):(0,$.jsx)(`span`,{className:`unset`,children:`(Not linked)`})},{key:`menu`,header:``,label:``,role:`menu`,sort:null,cell:e=>(0,$.jsx)(it,{label:`${e.name} actions`,actions:O(e)})}],M=[{label:`Import JSON…`,icon:fn,busy:f===`import`,onSelect:()=>g.current?.click()},{label:`Export all`,icon:vr,disabled:!r?.length,busy:f===`exportAll`,onSelect:()=>void D()},{label:`Page size…`,icon:J.pageSize,onSelect:()=>l(!0)}];return(0,$.jsxs)(rn,{id:`evals`,title:`Evals`,note:r?String(r.length):void 0,actions:M,about:`Checks that experiments link to grade responses.`,children:[(0,$.jsx)(`input`,{ref:g,type:`file`,accept:`.json,application/json`,hidden:!0,"aria-label":`Import JSON file`,onChange:e=>{let t=e.target.files?.[0];e.target.value=``,t&&E(t)}}),r===null?(0,$.jsx)(Ot,{label:`Evals`,error:i,onRetry:()=>void n.refresh()}):(0,$.jsx)(x,{className:`eg-groups`,cards:!0,label:`Evals`,rows:b,rowKey:e=>e.id,pageSize:o,columns:j,empty:`(No evals)`}),u&&(0,$.jsx)(st,{tone:`error`,children:u}),(0,$.jsxs)(`button`,{type:`button`,className:`ghost add-btn`,onClick:()=>void w(),children:[(0,$.jsx)(U,{size:14,"aria-hidden":`true`}),`Add eval`]}),c&&(0,$.jsx)(A,{value:o,onChange:s,onClose:()=>l(!1)}),m&&(0,$.jsx)(yc,{subject:{kind:`eval-group`,id:m.id,name:m.name},scan:{pipelines:a.list},undo:e,onClose:()=>h(null),onChanged:()=>void n.refresh()})]})}function xc(e){return new Promise((t,n)=>{let r=new FileReader;r.onload=()=>t(String(r.result??``)),r.onerror=()=>n(r.error??Error(`The file could not be read.`)),r.readAsText(e)})}function Sc(e){return[e.every&&`Every response`,e.not&&`Not`,e.of===`said`&&`Raw response`,e.weight!=null&&`Weight ${e.weight}`].filter(Boolean).join(`, `)}var Cc=(e,t)=>({type:e,...Y().METRICS[e].defaults(),...t?.weight==null?{}:{weight:t.weight},...t?.not?{not:!0}:{},...t?.metric?{metric:t.metric}:{}});function wc({label:e,metrics:t,set:n,undoable:r,over:i=`item`,rawReply:a}){let o=Y(),[s,c]=(0,X.useState)(null),[l,u]=(0,X.useState)(null),d=(e,r)=>n(t.map((t,n)=>n===e?r:t)),f=e=>{s===`new`?n([...t,Cc(e)]):typeof s==`number`&&d(s,Cc(e,t[s])),c(null)};return(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(Sn,{noun:`metric`,items:[...t],empty:`(No metrics)`,onAdd:()=>c(`new`),onRemove:e=>r(t.filter((t,n)=>n!==e),`Removed a metric`),onRename:e=>u(e),extra:(e,t)=>[{label:`Change type…`,icon:ci,onSelect:()=>c(t)}],renderItem:(t,n,r)=>{let s=o.METRICS[t.type],c=(t.metric||s?.label||t.type)+(t.not?` (not)`:``)+(t.weight===0?` (watch)`:``),l=`${e.replace(/\W+/g,`-`).toLowerCase()}-metric-${n}`,u=!!(t.every||t.not||t.of||t.weight!=null),f=!s?.parsedOnly&&(a!==!1||t.of===`said`),p=!s?.expects||!!t.not,m=(s?.options??[]).map(e=>Nt(e,t,e=>d(n,e)));return(0,$.jsx)(rn,{id:l,title:c,level:3,actions:r,about:s?.description,children:(0,$.jsxs)(Ae,{children:[m.length>0&&(0,$.jsx)(F,{label:`${e}, metric ${n+1}`,rows:m}),(0,$.jsx)(rn,{id:`${l}-counts`,title:`Options`,level:3,open:u,note:u?Sc(t):`Defaults`,children:(0,$.jsx)(F,{label:`${e}, metric ${n+1}, options`,rows:[...i===`run`?[{key:`every`,label:`Every response`,control:{type:`checkbox`,checked:!!t.every,onChange:e=>{let{every:r,...i}=t;d(n,e?{...i,every:!0}:i)}}}]:[],...p?[{key:`not`,label:`Not`,control:{type:`checkbox`,checked:!!t.not,onChange:e=>{let{not:r,...i}=t;d(n,e?{...i,not:!0}:i)}}}]:[],...f?[{key:`of`,label:`Reads`,...a==null?{hint:`The text before Read as`}:{},control:{type:`select`,value:t.of??`reply`,options:[{value:`reply`,label:`Parsed response`},{value:`said`,label:`Raw response`}],onChange:e=>{let{of:r,...i}=t;d(n,e===`said`?{...i,of:`said`}:i)}}}]:[],{key:`weight`,label:`Weight`,width:`quarter`,control:{type:`text`,value:t.weight==null?``:String(t.weight),placeholder:`1`,onChange:e=>{let{weight:r,...i}=t;d(n,e.trim()?{...i,weight:/^-?\d+(\.\d+)?$/.test(e.trim())?Number(e):e}:i)}}}]})})]})},n)}}),l!==null&&t[l]&&(0,$.jsx)($e,{title:`Rename metric`,value:t[l].metric||o.METRICS[t[l].type]?.label||t[l].type,onCommit:e=>{let{metric:n,...r}=t[l];d(l,e&&e!==o.METRICS[r.type]?.label?{...r,metric:e}:r)},onClose:()=>u(null)}),s!==null&&(0,$.jsx)(Tc,{title:s===`new`?`Add metric`:`Change type`,current:typeof s==`number`?t[s]?.type??null:null,over:i,onPick:f,onClose:()=>c(null)})]})}function Tc({title:e,current:t,over:n,onPick:r,onClose:i}){let[o,s]=(0,X.useState)(``),c=Object.values(Y().METRICS).filter(e=>n!==`run`||!(e.graded||e.perItem)).length,l=(0,X.useMemo)(()=>{let e=new Map;for(let[t,r]of Object.entries(Y().METRICS)){if(n===`run`&&(r.graded||r.perItem))continue;let i=`${r.label} ${r.description??``}`.toLowerCase();if(o.trim()&&!i.includes(o.trim().toLowerCase()))continue;let a=r.family??`Other`;e.set(a,[...e.get(a)??[],{id:t,label:r.label,description:r.description??``}])}return[...e]},[o,n]),u=o.trim()?l[0]?.[1][0]:void 0,d=(0,X.useId)();return(0,$.jsxs)(Fe,{title:e,onClose:i,className:`metric-picker`,onEnter:u&&(()=>r(u.id)),dismiss:`Cancel`,children:[(0,$.jsx)(ne,{noun:`metrics`,filters:[],count:{shown:l.reduce((e,[,t])=>e+t.length,0),total:c},search:{label:`Find a metric`,placeholder:`Find a metric`,value:o,onChange:s,describedBy:u?d:void 0,onKeyDown:a(d)}}),l.length===0&&(0,$.jsx)(`p`,{className:`unset`,children:`(No matches)`}),l.map(([e,n])=>(0,$.jsxs)(`fieldset`,{className:`mp-family`,children:[(0,$.jsx)(`legend`,{children:e}),(0,$.jsx)(`div`,{className:`mp-grid`,children:n.map(e=>(0,$.jsx)(`button`,{type:`button`,className:`mp-type${e.id===t?` on`:``}${e===u?` top-match`:``}`,...e.id===t?{"aria-current":`true`}:{},...e===u?{id:d,onKeyDown:Ct}:{},title:e.description,onClick:()=>r(e.id),children:e.label},e.id))})]},e))]})}function Ec(e,t,n=[]){return{options:[...n.map(e=>({...e,fixed:!0})),...e.map(e=>{let n=t(e.id);return{id:e.id,label:e.name||`Untitled`,used:n?{at:n,label:un(n)}:null,...e.missing?{missing:!0}:{}}})],recent:e.filter(e=>!e.missing&&t(e.id)).sort((e,n)=>t(n.id).localeCompare(t(e.id))).slice(0,5).map(e=>e.id)}}var Dc=50,Oc=null;In.addEventListener(`write`,()=>{Oc=null});function kc(e){return Oc?.api!==e&&(Oc={api:e,at:Promise.resolve().then(()=>e.queue({limit:Dc})).then(({runs:e})=>{let t={};for(let n of e)for(let[e,r]of Object.entries(n.snapshot?.profiles??{})){let i=Y().answerConnectionId(e,r);i&&(!t[i]||t[i]<n.submittedAt)&&(t[i]=n.submittedAt)}return t},()=>({}))}),Oc.at}function Ac(){let e=Z(),[t]=xi(`promptlab.connections`),[n,r]=(0,X.useState)({});(0,X.useEffect)(()=>{let t=!0,n=()=>{kc(e).then(e=>{t&&r(e)})};return n(),In.addEventListener(`write`,n),()=>{t=!1,In.removeEventListener(`write`,n)}},[e]);let i=e=>t.list.find(t=>t.id===e)?.model?.trim()||void 0;return(e,t=[])=>{let{options:r,recent:a}=Ec(e,e=>n[e]??null,t);return{options:r.map(e=>e.fixed?e:{...e,detail:i(e.id)}),recent:a,usedLabel:`Last used`,detailLabel:`Model`}}}var jc=e=>(Y().CONNECTION_TYPES[e.type??``]?.answers??[`prompt`]).includes(`prompt`);function Mc(){let[e]=xi(`promptlab.connections`);return(0,X.useMemo)(()=>{let t=e.list.find(t=>t.id===e.grader);return t?{id:t.id,name:t.name}:null},[e])}function Nc(){let[e]=xi(`promptlab.connections`),t=Ac(),n=(0,X.useMemo)(()=>e.list.filter(e=>Y().listedConnection(e)&&jc(e)),[e.list]),r=Mc();return{asked:n,labGrader:r,control:(e,i)=>({type:`picker`,kind:`Connection`,title:`Choose grader connection`,value:e,...t(n,[{id:``,label:r?`Lab (${r.name})`:`(No grader)`}]),onChange:i})}}function Pc({name:e,body:t,onSave:n,onClose:r}){let[i]=(0,X.useState)(()=>JSON.stringify(t,null,2)),a=(0,X.useId)(),[o,s]=(0,X.useState)(i),[c,l]=(0,X.useState)(()=>Ic(o));(0,X.useEffect)(()=>{let e=setTimeout(()=>l(Ic(o)),400);return()=>clearTimeout(e)},[o]);let u=c.problems,d=()=>{let e=Ic(o);e.body?n(e.body):l(e)};return(0,$.jsxs)(Fe,{title:`Edit raw… ${e}`,onClose:r,wide:!0,dirty:o!==i,children:[(0,$.jsx)(`textarea`,{className:`mono-block raw-content`,"aria-label":`Eval JSON`,...u.length?{"aria-invalid":!0,"aria-describedby":a}:{},spellCheck:!1,value:o,onChange:e=>s(e.target.value)}),(0,$.jsxs)(`div`,{className:`raw-foot`,children:[u.length?(0,$.jsx)(st,{tone:`error`,inline:!0,id:a,children:`${u.length} to fix — ${u.join(`, `)}`}):(0,$.jsx)(`span`,{className:`note`,children:`Validated before it is accepted.`}),o===i?(0,$.jsx)(`button`,{type:`button`,className:`run`,onClick:r,children:`Close`}):(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`button`,{type:`button`,className:`ghost`,onClick:r,children:`Cancel`}),(0,$.jsx)(`button`,{type:`button`,className:`run`,onClick:d,disabled:u.length>0,children:`Save & Close`})]})]})]})}var Fc=[`version`,`source`,`scoring`,`grader`,`every`,`run`,`cases`];function Ic(e){let t;try{t=JSON.parse(e)}catch(e){return{body:null,problems:[`Not JSON: ${e instanceof Error?e.message:String(e)}`]}}if(!t||typeof t!=`object`||Array.isArray(t))return{body:null,problems:[`an eval has to be a JSON object`]};let n=t,r=[];for(let e of Object.keys(n))Fc.includes(e)||r.push(`${e} is not part of an eval`);Array.isArray(n.cases)||r.push(`cases has to be a list`);let i=Y().DATASET_BODY_VERSION;if(`version`in n&&n.version!==i&&r.push(`version has to be ${i}`),r.length)return{body:null,problems:r};let a=wi(),o={version:i,scoring:n.scoring??a.scoring,grader:n.grader??null,every:n.every??[],run:n.run??[],cases:n.cases};return r.push(...Y().validateEvals(o)),r.length?{body:null,problems:r}:{body:o,problems:[]}}function Lc(e,t){return`/api/sources/${encodeURIComponent(e)}/thumbs/${encodeURIComponent(t)}`}function Rc(e){return/\.(?:jpe?g|png|gif|webp|bmp|heic|heif|dng|tiff?)$/i.test(e)}function zc(e){let t=Z(),[n,r]=(0,X.useState)(null);return(0,X.useEffect)(()=>{if(!e)return;let n=!0;return t.source(e).then(t=>{n&&r({id:e,files:t.files.map(e=>e.name)})}).catch(()=>{n&&r(null)}),()=>{n=!1}},[t,e]),e&&n?.id===e?n.files:null}function Bc({title:e,action:t,start:n,taken:r,initial:i=``,onPick:a,onClose:o}){let s=Z(),[c,l]=(0,X.useState)(null);(0,X.useEffect)(()=>{let e=!0;return s.sources().then(t=>{e&&l(t.sources)}).catch(()=>{e&&l([])}),()=>{e=!1}},[s]);let[u,d]=(0,X.useState)(n),f=zc(u?.id),p=(0,X.useMemo)(()=>(f??[]).filter(e=>!r.has(e)),[f,r]),[h,g]=(0,X.useState)(i),[_,v]=(0,X.useState)(!!i);(0,X.useEffect)(()=>{!_&&p[0]&&g(p[0])},[_,p]);let[y,b]=(0,X.useState)(``),x=p.filter(e=>!y.trim()||e.toLowerCase().includes(y.trim().toLowerCase())),S=h.trim(),C=!!S&&r.has(S),w=[{key:`browse`,label:`Browse`,control:{type:`picker`,kind:`Source`,value:u?.id??``,usedLabel:`Last changed`,...Ec(c??(n?[n]:[]),e=>c?.find(t=>t.id===e)?.changed??null,[{id:``,label:`(No Source)`}]),onChange:e=>{let t=c?.find(t=>t.id===e)??(n?.id===e?n:null);d(t?{id:t.id,name:t.name}:null),v(!0),b(``)}}},{key:`item`,label:`Item`,width:`full`,control:{type:`text`,value:h,onChange:e=>{v(!0),g(e)}}}];return(0,$.jsxs)(Fe,{title:e,onClose:o,dirty:_&&S!==i.trim(),className:`item-picker`,onEnter:!S||C?void 0:()=>a(S),footer:(0,$.jsxs)(`div`,{className:`edit-actions`,children:[C&&(0,$.jsxs)(st,{tone:`error`,inline:!0,children:[S,` has an eval case`]}),(0,$.jsx)(`button`,{type:`button`,className:`ghost`,onClick:o,children:`Cancel`}),(0,$.jsx)(`button`,{type:`button`,className:`edit-done`,disabled:!S||C,onClick:()=>a(S),children:t})]}),children:[(0,$.jsx)(F,{label:e,rows:w}),u&&f&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(ne,{noun:`items`,filters:[],count:{shown:x.length,total:p.length},search:{label:`Find an item`,placeholder:`Find an item`,value:y,onChange:b}}),p.length?x.length?(0,$.jsx)(m,{className:`ip-items`,compact:!0,label:`${p.length} ${p.length===1?`item`:`items`} without an eval case`,legend:!0,value:S,onChange:g,options:x.map(e=>({value:e,label:e,lead:Rc(e)?(0,$.jsx)(`img`,{className:`ip-thumb`,src:Lc(u.id,e),alt:``,loading:`lazy`}):(0,$.jsx)(`span`,{className:`ip-thumb`,"aria-hidden":`true`})}))}):(0,$.jsx)(`p`,{className:`unset`,children:`(No matches)`}):(0,$.jsxs)(`p`,{className:`note`,children:[`Every item of `,u.name,` has an eval case.`]})]})]})}var Vc=2e3,Hc=e=>({id:``,item:e,todo:!0,note:``,metrics:[]}),Uc=e=>{let t=e.map(e=>/^sample-(\d+)$/.exec(String(e?.id??``))?.[1]??0);return`sample-${String(Math.max(0,...t.map(Number))+1).padStart(3,`0`)}`};function Wc({item:e,cases:r,onWrite:i,problem:a,resultFor:o,scenarioCount:s,plain:c=!1,files:l,onFile:u,onClose:d,run:f,source:p=null,sourceFiles:m=null,onRemove:h,onSaved:_}){let v=r.find(t=>Y().caseItem(t)===e),y=!v,[b,x]=(0,X.useState)(()=>structuredClone(v??Hc(e))),[S,C]=(0,X.useState)(0),[T,E]=(0,X.useState)(null),[D,O]=(0,X.useState)(null),[k,A]=(0,X.useState)(!1),[j,M]=(0,X.useState)(!1),[N,P]=(0,X.useState)(!1),F=(0,X.useRef)(b);F.current=b;let I=(0,X.useRef)(r);I.current=r;let L=(0,X.useRef)(null),R=t=>I.current.filter(n=>!(t.id&&n.id===t.id)&&!(!t.id&&Y().caseItem(n)===e)).some(e=>Y().caseItem(e)===Y().caseItem(t))?`${Y().caseItem(t)} has an eval case already`:Y().validateEvals({cases:[{...t,id:t.id||`new`}]})[0]?.replace(/^[^:]*: /,``)??null,ee=R(b),te=(0,X.useCallback)(()=>{let e=F.current;if(R(e))return!1;e.id||(e={...e,id:Uc(I.current)},F.current=e,x(e));let t=e;return i(e=>Gc({cases:e},t)),_?.(Y().caseItem(t)),!0},[i,_,e]);(0,X.useEffect)(()=>()=>{L.current&&clearTimeout(L.current)},[]);let[ne,z]=(0,X.useState)(!1),re=e=>{x(e),z(!0)},B=e=>{let t=F.current;re({...t,metrics:e,...t.todo&&!(t.metrics??[]).length&&e.length?{todo:!1}:{}})},ie=D&&D[S]?D[S]:o(S),V=!ie||b.todo||!(b.metrics??[]).length?null:Y().readCase(b,ie,c),ae=async()=>{if(f&&!k){A(!0),E(null);try{let e=await f(Y().caseItem(F.current));O(e),E(e.length?null:`No response to grade.`)}catch(e){E(e instanceof Error?e.message:String(e))}finally{A(!1)}}},H=l.indexOf(e),U=e=>{let t=H<0?null:l[H+e];if(!t)return;let n=ne||y;(!n||te())&&(n&&(M(!0),L.current&&clearTimeout(L.current),L.current=setTimeout(()=>M(!1),Vc)),u(t))};(0,X.useEffect)(()=>{let e=e=>{e.key!==`ArrowLeft`&&e.key!==`ArrowRight`||e.target?.closest?.(`input, textarea, select, [contenteditable]`)||!Rt()&&n()?.classList.contains(`case-editor`)&&(e.preventDefault(),U(e.key===`ArrowRight`?1:-1))};return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)});let oe=()=>{(!ne&&!y||te())&&d()},W=Y().caseItem(b),se=new Set(r.filter(t=>!(b.id&&t.id===b.id)&&Y().caseItem(t)!==e).map(e=>Y().caseItem(e))),ce=!!m&&!m.includes(W),le=[{key:`item`,label:`Item`,control:p?{type:`static`,text:ce?`${W||`None`} (missing)`:W}:{type:`text`,value:W,onChange:e=>re({...F.current,item:e.trim()})}},{key:`todo`,label:`To do`,control:{type:`checkbox`,checked:!!b.todo,label:`Not graded yet`,onChange:e=>re({...F.current,todo:e})}},{key:`note`,label:`Note`,control:{type:`textarea`,value:b.note??``,onChange:e=>re({...F.current,note:e})}}],ue=[];s>1&&ue.push({key:`scenario`,label:`Show result of`,control:{type:`select`,value:String(S),options:Array.from({length:s},(e,t)=>({value:String(t),label:`Variant ${Y().targetLetter(t)}`})),onChange:e=>C(Number(e))}}),V&&(ue.push({key:`verdict`,label:`Result`,control:{type:`static`,text:V.pass?`Pass`:`Fail`}}),V.watch.length&&ue.push({key:`watch`,label:`Watch`,control:{type:`static`,text:`${V.watch.filter(e=>e.pass).length} of ${V.watch.length}`}}));let de=p&&W&&Rc(W)&&m?.includes(W)?{src:Lc(p.id,W),file:W,source:p.name}:null,fe=[...de?[{key:`preview`,title:`Preview`,children:(0,$.jsxs)(`div`,{className:`cf-preview`,children:[(0,$.jsx)(`img`,{src:de.src,alt:de.file,loading:`lazy`}),(0,$.jsxs)(`p`,{className:`note`,children:[de.file,` in `,de.source]})]})}]:[],{key:`case`,title:`Eval Case`,rows:le},{key:`metrics`,title:`This item's metrics`,children:(0,$.jsx)(wc,{label:`This item's metrics`,metrics:b.metrics??[],set:B,undoable:B})},...ue.length?[{key:`result`,title:`Result`,rows:ue}]:[]],G=[{label:`Previous`,icon:tt,disabled:H<=0,onSelect:()=>U(-1)},{label:`Next`,icon:t,disabled:H<0||H>=l.length-1,onSelect:()=>U(1)},...f?[{label:`Run`,icon:Jr,disabled:k,costly:!0,onSelect:()=>void ae()}]:[]],pe=[{label:`Change item…`,icon:Xr,onSelect:()=>P(!0)},...h?[{label:`Remove`,icon:g,destructive:!0,onSelect:()=>{h(Y().caseItem(F.current)),d()}}]:[]],me=T??a??(ee?`Not saved: ${ee}`:null);return(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(w,{title:W||`Eval Case`,status:me??(k?`Running…`:j?`Saved.`:void 0),...me?{statusBad:!0}:{},sections:fe,...pe.length?{menu:pe}:{},actions:G,dirty:ne,adding:y,className:`case-editor`,onSave:oe,onClose:d}),N&&(0,$.jsx)(Bc,{title:`Change item`,action:`Change`,start:p,taken:se,onPick:e=>{P(!1),re({...F.current,item:e})},onClose:()=>P(!1)})]})}function Gc(e,t){let n=e.cases.findIndex(e=>e.id===t.id),r=structuredClone(e.cases);return n>=0?r[n]=structuredClone(t):r.push(structuredClone(t)),r}function Kc(e,t){return structuredClone(e.cases).filter(e=>Y().caseItem(e)!==t)}var qc=(0,X.createContext)(null);function Jc({children:e}){let t=Ri(),[n,r]=(0,X.useState)(null),i=Bi(n?.dataset??null),a=(0,X.useCallback)((e,t)=>{r({item:e,...t})},[]),o=(0,X.useCallback)(e=>{r(t=>t&&{...t,item:e})},[]),s=i?.doc?.preview??null,c=zc(s?.id),l=n?.dataset??``,u=(0,X.useCallback)(e=>{t.edit(l,t=>({...t,cases:e(t.cases)}))},[t,l]),d=(0,X.useMemo)(()=>({openCaseEditor:a}),[a]),f=i?.doc;return(0,$.jsxs)(qc.Provider,{value:d,children:[e,n&&f&&(0,$.jsx)(Wc,{item:n.item,cases:f.body.cases,onWrite:u,problem:Ti(i.sync),resultFor:n.resultFor??(()=>null),scenarioCount:n.scenarioCount??0,files:n.files??[],onFile:o,...n.run?{run:n.run}:{},...n.plain?{plain:!0}:{},source:s,sourceFiles:c,...n.onRemove?{onRemove:n.onRemove}:{},...n.onSaved?{onSaved:n.onSaved}:{},onClose:()=>r(null)},n.item)]})}function Yc(){let e=(0,X.useContext)(qc);if(!e)throw Error(`useCaseEditor outside a CaseEditorProvider: the app mounts one at its root`);return e}function Xc({rows:e,shown:t,filters:n,onFilters:r,selected:i,onSelect:a,selectionActions:o,sourceFiles:s,noCase:l,pageSize:u,onEdit:d,onAdd:f,onRemove:p,loading:m,loadError:h,onRetry:g,children:_}){let v=t.map(ga),y=v.filter(e=>i.has(e)).length,b=y>0&&y===v.length,S=t=>e.filter(e=>Aa(e,s)===t).length,C={label:`Status`,value:n.status,onChange:e=>r({status:e}),options:[{value:`all`,label:`All`},{value:`graded`,label:`Graded ${S(`graded`)}`},{value:`todo`,label:`To do ${S(`todo`)}`},...s&&l?[{value:`missing`,label:`Missing ${S(`missing`)}`},{value:`nocase`,label:`No eval case ${l.length}`}]:[]]},w=n.status===`nocase`&&l?l.filter(e=>!n.file.trim()||e.toLowerCase().includes(n.file.trim().toLowerCase())):null,T=[{key:`show`,label:`Show`,value:n.show,onChange:e=>r({show:e}),options:[{value:`all`,label:`All`},{value:`selected`,label:`Selected`}]}];return m?(0,$.jsxs)(`div`,{className:`ds-casebody`,children:[_,(0,$.jsx)(Ot,{label:`Eval Cases`,error:h,onRetry:g})]}):(0,$.jsxs)(`div`,{className:`ds-casebody`,children:[(e.length>0||!!l?.length)&&(0,$.jsx)(ne,{noun:`eval cases`,search:{label:`Item`,placeholder:`Search items`,value:n.file,onChange:e=>r({file:e})},filters:T,quick:C,...w?{}:{count:{shown:t.length,total:e.length}},lead:(0,$.jsx)(`label`,{className:`ev-check ev-all`,children:(0,$.jsx)(de,{all:b,some:y>0,disabled:!t.length,label:`Select all shown`,onChange:()=>a(e=>c(e,v))})})}),_,w?w.length===0?(0,$.jsx)(`p`,{className:`unset`,children:`(No matches)`}):(0,$.jsx)(`div`,{className:`ds-cases`,children:(0,$.jsx)(x,{className:`dstable`,cards:!0,label:`Items with no eval case`,rows:w,pageSize:u,defaultSort:null,rowKey:e=>e,columns:[{key:`item`,header:`Item`,role:`title`,sort:e=>e,cell:e=>(0,$.jsx)(`button`,{type:`button`,className:`link-btn`,onClick:()=>f(e),children:e})},{key:`status`,header:`Status`,sort:()=>`No eval case`,cell:()=>(0,$.jsx)(`span`,{className:`ds-status ds-nocase`,children:`No eval case`})}]})}):e.length===0?(0,$.jsx)(`p`,{className:`repeater-empty`,children:`(No eval cases)`}):(0,$.jsx)($.Fragment,{children:t.length===0?(0,$.jsxs)($.Fragment,{children:[i.size>0&&(0,$.jsx)(oe,{count:i.size,noun:`eval case`,hidden:i.size,actions:o,onClear:()=>a(()=>new Set)}),(0,$.jsx)(`p`,{className:`unset`,children:`(No matches)`})]}):(0,$.jsx)(`div`,{className:`ds-cases`,children:(0,$.jsx)(x,{className:`dstable`,cards:!0,label:`Eval Cases`,rows:t,pageSize:u,defaultSort:null,rowKey:e=>ga(e),select:{noun:`eval case`,selected:i,onChange:e=>a(()=>e),actions:()=>o},columns:Zc(s,d,p)})})}),(0,$.jsxs)(`button`,{type:`button`,className:`ghost add-btn`,onClick:()=>f(),children:[(0,$.jsx)(U,{size:14,"aria-hidden":`true`}),`Add eval case`]})]})}function Zc(e,t,n){let r=t=>Aa(t,e);return[{key:`item`,header:`Item`,role:`title`,sort:e=>e.item,cell:e=>(0,$.jsx)(`button`,{type:`button`,className:`link-btn`,onClick:()=>t(e.item),children:e.item})},{key:`status`,header:`Status`,sort:e=>ka[r(e)],tdProps:e=>({"data-state":r(e)}),cell:e=>(0,$.jsx)(`span`,{className:`ds-status ds-${r(e)}`,children:ka[r(e)]})},{key:`metrics`,header:`Metrics`,className:`num`,sort:e=>Qc(e).length,cell:e=>Qc(e).length},{key:`note`,header:`Note`,sort:e=>e.note??``,tdProps:e=>({"data-state":e.note?.trim()?void 0:`none`}),cell:e=>(0,$.jsx)(`span`,{className:`ds-note`,children:e.note})},{key:`menu`,header:``,label:``,role:`menu`,sort:null,cell:e=>(0,$.jsx)(it,{label:`${e.item} actions`,actions:[{label:`Edit…`,icon:J.edit,onSelect:()=>t(e.item)},{label:`Remove`,icon:J.remove,destructive:!0,onSelect:()=>n(e.item)}]})}]}var Qc=e=>(e.metrics??[]).filter(e=>e.weight!==0),$c={bounds:`Set count`,addTerm:`Add term`,removeTerm:`Remove term`,todo:`Mark To do`,graded:`Mark graded`},el=[{value:`keep`,label:`Keep`},{value:`set`,label:`Set`},{value:`clear`,label:`Clear`}],tl=e=>/^\s*\d+\s*$/.test(e)?Number(e):null;function nl({kind:e,cases:t,keys:n,onApply:r,onClose:i}){let[a,o]=(0,X.useState)(`keep`),[s,c]=(0,X.useState)(`keep`),[l,u]=(0,X.useState)(``),[d,f]=(0,X.useState)(``),[p,m]=(0,X.useState)(`expect`),[h,g]=(0,X.useState)(``),[_,v]=(0,X.useState)(null),y=(0,X.useMemo)(()=>{switch(e){case`bounds`:{let e=a===`set`?tl(l):null,t=s===`set`?tl(d):null;return a===`set`&&e==null?`Min items needs a whole number.`:s===`set`&&t==null?`Max items needs a whole number.`:{type:`bounds`,min:a===`set`?{kind:`set`,n:e}:{kind:a},max:s===`set`?{kind:`set`,n:t}:{kind:s}}}case`addTerm`:return h.trim()?{type:`addTerm`,list:p,term:h}:`Name the term.`;case`removeTerm`:return h.trim()?{type:`removeTerm`,term:h}:`Name the term.`;case`todo`:return{type:`status`,todo:!0};case`graded`:return{type:`status`,todo:!1}}},[e,a,s,l,d,p,h]),b=(0,X.useMemo)(()=>{if(typeof y==`string`)return null;let{next:e,changed:r}=Ca(t,n,y);return{changed:r,problems:wa(t,e,r)}},[y,t,n]),x=_??b?.problems??null,S=!!x&&x.cases.length>0,C=b?.changed.length??0,w=(0,X.useCallback)(()=>{if(typeof y==`string`)return;let e=r(y);e&&v(e)},[y,r]),T=e=>t=>{v(null),e(t)},E=[];return e===`bounds`&&(E.push({key:`min`,label:`Min items`,required:!0,control:{type:`select`,value:a,options:el,onChange:T(e=>o(e))}}),a===`set`&&E.push({key:`minN`,label:`Min`,required:!0,width:`quarter`,control:{type:`text`,value:l,onChange:T(u)}}),E.push({key:`max`,label:`Max items`,required:!0,control:{type:`select`,value:s,options:el,onChange:T(e=>c(e))}}),s===`set`&&E.push({key:`maxN`,label:`Max`,required:!0,width:`quarter`,control:{type:`text`,value:d,onChange:T(f)}})),e===`addTerm`&&E.push({key:`list`,label:`List`,required:!0,control:{type:`select`,value:p,onChange:T(e=>m(e)),options:[`expect`,`forbid`].map(e=>({value:e,label:Ea(e)}))}}),(e===`addTerm`||e===`removeTerm`)&&E.push({key:`term`,label:`Term`,required:!0,control:{type:`text`,value:h,onChange:T(g)}}),(0,$.jsxs)(Fe,{title:$c[e],onClose:i,dirty:a!==`keep`||s!==`keep`||!!l||!!d||!!h,className:`ev-bulk`,onEnter:!C||S?void 0:w,footer:(0,$.jsxs)(`div`,{className:`edit-actions`,children:[(0,$.jsx)(`button`,{type:`button`,className:`ghost`,onClick:i,children:`Cancel`}),(0,$.jsx)(`button`,{type:`button`,className:`edit-done`,disabled:!C||S,onClick:w,children:`Apply`})]}),children:[E.length>0&&(0,$.jsx)(F,{label:$c[e],rows:E}),(0,$.jsx)(`p`,{className:`note ev-changes`,role:`status`,children:typeof y==`string`?y:`Changes ${C} of ${n.size}`}),S&&x&&(0,$.jsx)(st,{tone:`error`,className:`ev-refusal`,children:x.cases.length>0&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(`p`,{className:`ev-refusal-head`,children:[x.cases.length,` of `,n.size,` would break`]}),(0,$.jsx)(`ul`,{children:x.cases.map(e=>(0,$.jsxs)(`li`,{children:[(0,$.jsx)(`b`,{children:e.file}),` `,e.reasons.join(`; `)]},e.key))})]})})]})}function rl({pageSize:e=20}){let t=bi(),n=Ri(),r=on(),{openCaseEditor:i}=Yc(),{list:a}=zi(),{datasetId:o,selected:s,setSelected:c,filters:l,setFilters:u,handedOver:d}=Ia(),[f,p]=(0,X.useState)(null),[m,h]=(0,X.useState)(null),g=(0,X.useCallback)(()=>p(null),[]),_=a?.find(e=>e.id===o)??a?.[0]??null,v=_?.id??``,y=Bi(v||null),b=y?.doc?.body??null,x=b?.cases,S=(0,X.useMemo)(()=>x?Y().gradedSetFrom({cases:x}):[],[x]),C=y?.doc?.preview??_?.preview??null,w=zc(C?.id),T=(0,X.useMemo)(()=>w?ja(S,w):null,[S,w]),E=(0,X.useMemo)(()=>new Set(S.map(ga)),[S]),D=(0,X.useMemo)(()=>new Set([...s].filter(e=>E.has(e))),[s,E]),O=(0,X.useMemo)(()=>Na(S,l,D,w),[S,l,D,w]),k=!!y?.doc&&!C;(0,X.useEffect)(()=>{k&&(l.status===`missing`||l.status===`nocase`)&&u({status:`all`})},[k,l.status,u]);let A=(0,X.useCallback)(()=>n.entry(v)?.doc?.body??null,[n,v]),j=(0,X.useCallback)(e=>{v&&n.edit(v,t=>({...t,cases:e}))},[n,v]),M=e=>{i(e,{dataset:v,files:O.map(e=>e.item),onRemove:P})},N=e=>{h(null),i(e,{dataset:v,files:[...S.map(e=>e.item),e],onRemove:P})};function P(e){let t=A()?.cases??[];j(Kc({cases:t},e)),r.offer({label:`Removed ${e}`,restore:()=>j(t)})}let F=e=>{let i=A();if(!v||!i)return null;let{next:a,changed:o}=Ca(i.cases,D,e);if(!o.length)return p(null),null;if(e.type!==`delete`){let e=wa(i.cases,a,o);if(e.cases.length)return e}Pi(t,v,i,`bulk`);let s=i.cases;if(n.edit(v,e=>({...e,cases:a})),e.type===`delete`){let e=new Set(o);c(t=>new Set([...t].filter(t=>!e.has(t))))}return r.offer({label:Oa(e,o.length),restore:()=>n.edit(v,e=>({...e,cases:s}))}),p(null),null},I=D.size===0,L=[{label:`Set count…`,icon:St,disabled:I,onSelect:()=>p(`bounds`)},{label:`Add term…`,icon:J.add,disabled:I,onSelect:()=>p(`addTerm`)},{label:`Remove term…`,icon:Br,disabled:I,onSelect:()=>p(`removeTerm`)},{label:`Mark To do…`,icon:Jn,disabled:I,onSelect:()=>p(`todo`)},{label:`Mark graded…`,icon:er,disabled:I,onSelect:()=>p(`graded`)},{label:`Delete`,icon:J.remove,destructive:!0,disabled:I,onSelect:()=>void F({type:`delete`})}];return(0,$.jsxs)(`div`,{className:`cases`,children:[a?.length?(0,$.jsx)(Xc,{rows:S,shown:O,filters:l,onFilters:u,selected:D,onSelect:c,selectionActions:L,sourceFiles:w,noCase:T,loading:!b,loadError:y?.sync.state===`missing`?y.sync.message:null,onRetry:()=>{v&&n.load(v)},pageSize:e,onEdit:M,onAdd:e=>h({item:e??``}),onRemove:P,children:d&&_&&(0,$.jsxs)(`p`,{className:`note ev-from`,role:`status`,children:[(0,$.jsxs)(`span`,{children:[`From `,d.from]}),d.found<d.wanted&&(0,$.jsxs)(`span`,{children:[d.found,` of `,d.wanted,` are in `,_.name,` now`]})]})}):null,m&&b&&(0,$.jsx)(Bc,{title:`Add eval case`,action:`Add eval case`,start:C,initial:m.item,taken:new Set(S.map(e=>e.item)),onPick:N,onClose:()=>h(null)}),f&&b&&(0,$.jsx)(nl,{kind:f,cases:b.cases,keys:D,onApply:F,onClose:g}),(0,$.jsx)(Ye,{undo:r.undo,onUndo:r.undoNow,onDismiss:r.dismiss})]})}function il({groupId:e,undo:t}){let n=mc(),r=Z(),i=bi(),a=Ri(),{list:o,error:s}=zi(),{pickDataset:c}=Ia(),[l,u]=(0,X.useState)(!1),[d,f]=(0,X.useState)(!1),[p,m]=(0,X.useState)(null),[h,_]=(0,X.useState)(!1),[v,y]=(0,X.useState)(!1),[b,x]=we(`dataset-cases`,20),[S,C]=(0,X.useState)(!1),[w,T]=(0,X.useState)(null),[E,D]=(0,X.useState)(!1),O=(0,X.useRef)(null),[k]=xi(`promptlab.versions`),[j]=xi(`promptlab.workflows`),[M,N]=(0,X.useState)(null);(0,X.useEffect)(()=>{let e=!0;return r.sources().then(t=>{e&&N(t.sources)}).catch(()=>{e&&N([])}),()=>{e=!1}},[r]);let P=Bi(e)?.doc??null,I=P?.body??null,R=o?.find(t=>t.id===e)??null;(0,X.useEffect)(()=>{c(e)},[e,c]);let ee=cc(),te=(0,X.useRef)(new Set);(0,X.useEffect)(()=>{R?te.current.add(e):o&&(ec(),te.current.has(e)||t.notify({label:nc(`eval`,e,ee.current)}))},[o,R,e,t.notify,ee.current]);let ne=(0,X.useMemo)(()=>e?ji(i,e):[],[i,e,k]),z=e=>m({text:e instanceof Error?e.message:String(e),bad:!0}),B=(0,X.useCallback)(()=>a.entry(e)?.doc?.body??null,[a,e]),ie=(0,X.useCallback)(t=>a.edit(e,t),[a,e]),V=()=>new Set((a.list().list??[]).map(e=>e.name)),H=async()=>{m(null);try{$s((await a.create(xe(`Untitled eval`,V()))).id)}catch(e){z(e)}},oe=t=>{let n=t.trim();P&&n&&n!==P.name&&(m(null),a.rename(e,n).catch(e=>{e instanceof Nn&&e.status===409?m({text:`An eval is already called ${n}.`,bad:!0}):z(e)}))},W=async()=>{if(P){m(null);try{await a.flush(e),$s((await a.create(xe(`${P.name} copy`,V()),structuredClone(P.body),P.preview??null)).id)}catch(e){z(e)}}},se=async()=>{if(!P)return;m(null);let{name:n}=P;try{await a.flush(e);let r=await a.remove(e);Qs(),t.offer({label:`Deleted ${n}`,restore:()=>{a.restore(r).then(e=>{$s(e.id),e.name!==n&&m({text:`Restored as ${e.name}.`,bad:!1})}).catch(z)}})}catch(e){z(e)}},ce=async e=>{m(null);let t;try{t=await al(e)}catch(e){z(e);return}let n;try{n=JSON.parse(t)}catch(e){m({text:`Not JSON: ${e instanceof Error?e.message:String(e)}`,bad:!0});return}T(`import`);try{let e=await a.importFile(n);e[0]&&$s(e[0].id),m({text:`Imported ${e.map(e=>e.name).join(`, `)}.`,bad:!1})}catch(e){z(e)}finally{T(null)}},le=async()=>{e&&(T(`export`),await a.flush(e).catch(()=>{}),await ue(a.exportUrl(e),e=>Xs(`eval`,e.group?.name??e.dataset?.name??``,e.version,`json`)),T(null))},ue=async(e,t)=>{try{let n=await fetch(e);if(!n.ok)throw Error(`the export answered ${n.status}`);let r=await n.json();Zs(new Blob([JSON.stringify(r,null,2)+`
7
+ `],{type:`application/json`}),t(r))}catch(e){z(e)}},de=n=>{let r=B();r&&(Pi(i,e,r,`restore`),ie(()=>structuredClone(n.doc)),y(!1),t.offer({label:`Restored the eval`,restore:()=>ie(()=>r)}))},fe=Nc(),G=e=>{let{mode:t,threshold:n}=e.scoring;return[{key:`mode`,label:`Item passes when`,control:{type:`select`,value:t,options:[{value:`all`,label:`All metrics pass`},{value:`weighted`,label:`Points`}],onChange:e=>ie(t=>({...t,scoring:{mode:e===`weighted`?`weighted`:`all`,threshold:e===`weighted`?t.scoring.threshold??1:t.scoring.threshold}}))}},...t===`weighted`?[{key:`threshold`,label:`Pass at`,width:`quarter`,control:{type:`text`,value:n==null?``:String(n),onChange:e=>ie(t=>({...t,scoring:{mode:`weighted`,threshold:e.trim()?/^-?\d+(\.\d+)?$/.test(e.trim())?Number(e):e:null}}))}}]:[],{key:`grader`,label:`Grader`,control:fe.control(e.grader?.id??``,e=>{let t=fe.asked.find(t=>t.id===e);ie(e=>({...e,grader:t?{id:t.id,name:t.name}:null}))})}]},pe=P?.preview??null,me=[{key:`preview`,label:`Source Coverage`,control:{type:`picker`,kind:`Source`,value:pe?.id??``,usedLabel:`Last changed`,...Ec([...pe&&M&&!M.some(e=>e.id===pe.id)?[{id:pe.id,name:`${pe.name} (missing)`,missing:!0}]:[],...M??[]],e=>M?.find(t=>t.id===e)?.changed??null,[{id:``,label:`(No Source)`}]),onChange:t=>{let n=M?.find(e=>e.id===t),r=n?{id:n.id,name:n.name}:pe?.id===t?pe:null;a.setPreview(e,r).catch(z)}}}],he=e=>t=>ie(n=>({...n,[e]:t})),ge=e=>(n,r)=>{let i=B()?.[e]??[];he(e)(n),t.offer({label:r,restore:()=>ie(t=>({...t,[e]:i}))})},_e=I?I.cases.filter(e=>!e.todo).length:0,ve=[{label:`Rename…`,icon:L,disabled:!P,onSelect:()=>u(!0)},{label:`Clone`,icon:J.clone,disabled:!P,onSelect:()=>void W()},n({tab:`library`,section:`datasets`,id:e}),{label:`Copy or move…`,icon:J.transfer,disabled:!P,onSelect:()=>D(!0)},{label:`Import JSON…`,icon:fn,busy:w===`import`,onSelect:()=>O.current?.click()},{label:`Export JSON`,icon:K,disabled:!P,busy:w===`export`,onSelect:()=>void le()},{label:`Export all`,icon:vr,disabled:!o?.length,busy:w===`exportAll`,onSelect:()=>{T(`exportAll`),ue(a.exportAllUrl(),e=>Xs(`evals`,`all`,e.version,`json`)).finally(()=>T(null))}},{label:`Restore…`,icon:re,disabled:!ne.length||!P,onSelect:()=>y(!0)},{label:`Edit raw…`,icon:cr,disabled:!P,onSelect:()=>_(!0)},{label:`Delete`,icon:g,destructive:!0,disabled:!P,onSelect:()=>void se()}],ye=(0,$.jsx)(`input`,{ref:O,type:`file`,accept:`.json,application/json`,hidden:!0,"aria-label":`Import JSON file`,onChange:e=>{let t=e.target.files?.[0];e.target.value=``,t&&ce(t)}}),be=I?`${I.cases.length} ${I.cases.length===1?`eval case`:`eval cases`}, ${_e} graded`:void 0;return(0,$.jsxs)(`div`,{className:`datasets`,children:[(0,$.jsx)(et,{kind:`Eval`,kindId:`Eval group`,name:P?.name??R?.name??(o===null?null:`None`),onPick:o?.length?()=>f(!0):void 0,picking:d,meta:be,primary:{label:`New eval`,icon:U,onSelect:()=>void H()},actions:ve}),p&&(0,$.jsx)(st,{tone:p.bad?`error`:`info`,children:p.text}),ye,I==null?(0,$.jsx)(Ot,{label:`Eval`,error:s,onRetry:()=>void a.refresh()}):(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(rn,{id:`grades`,title:`Grades`,level:2,children:(0,$.jsx)(F,{label:`Grades`,rows:G(I)})}),(0,$.jsx)(rn,{id:`every`,title:`Every item metrics`,level:2,note:I.every.length?String(I.every.length):void 0,children:(0,$.jsx)(wc,{label:`Every item metrics`,metrics:I.every,over:`item`,set:he(`every`),undoable:ge(`every`)})}),(0,$.jsx)(rn,{id:`run`,title:`Whole run metrics`,level:2,note:I.run.length?String(I.run.length):void 0,children:(0,$.jsx)(wc,{label:`Whole run metrics`,metrics:I.run,over:`run`,set:he(`run`),undoable:ge(`run`)})}),(0,$.jsxs)(rn,{id:`cases`,title:`Eval Cases`,level:2,note:String(I.cases.length),actions:[{label:`Page size…`,icon:J.pageSize,onSelect:()=>C(!0)}],children:[(0,$.jsx)(F,{label:`Preview`,rows:me}),(0,$.jsx)(rl,{pageSize:b})]})]}),d&&o&&(0,$.jsx)(ae,{kind:`Eval`,value:e,onClose:()=>f(!1),options:o.map(e=>({id:e.id,label:e.name})),onPick:e=>{m(null),$s(e)}}),l&&P&&(0,$.jsx)($e,{title:`Rename eval`,value:P.name,onCommit:oe,onClose:()=>u(!1)}),S&&(0,$.jsx)(A,{value:b,onChange:x,onClose:()=>C(!1)}),E&&P&&(0,$.jsx)(yc,{subject:{kind:`eval-group`,id:e,name:P.name},scan:{pipelines:j.list},undo:t,onClose:()=>D(!1),onChanged:()=>void a.refresh()}),v&&P&&(0,$.jsx)(Bt,{noun:`eval`,versions:ne,at:e=>e.at,reason:e=>e.reason,onRestore:de,onClose:()=>y(!1)}),h&&P&&(0,$.jsx)(Pc,{name:P.name,body:P.body,onSave:e=>{ie(()=>e),_(!1)},onClose:()=>_(!1)})]})}function al(e){return new Promise((t,n)=>{let r=new FileReader;r.onload=()=>t(String(r.result??``)),r.onerror=()=>n(r.error??Error(`The file could not be read.`)),r.readAsText(e)})}function ol({groupId:e}){let t=on();return(0,$.jsxs)($.Fragment,{children:[e?(0,$.jsx)(il,{groupId:e,undo:t}):(0,$.jsx)(bc,{undo:t}),(0,$.jsx)(Ye,{undo:t.undo,notice:t.notice,onUndo:t.undoNow,onDismiss:t.dismiss})]})}var sl=e=>e,cl=e=>e?.state===`conflict`?`Data conflict: not saved — a newer version was saved in another browser.`:e?.state===`offline`?`Not saved: ${e.message}`:null,ll=(e,t)=>JSON.stringify(e)===JSON.stringify(t),ul=({body:e,...t})=>t;function dl({api:e,pause:t=800}){let n=sl(e),r={list:null,error:null},i=new Map,a=new Set,o=new Map,s=new Map,c=new Set,l=null,u=()=>{l=null,c.forEach(e=>e())},d=(e,t)=>{let n=i.get(e)??{id:e,doc:null,sync:{state:`loading`}};i.set(e,{...n,...t,id:e}),u()},f=e=>{r={list:e,error:null},u()},p=e=>{if(!r.list)return;let t=r.list.findIndex(t=>t.id===e.id);f(t<0?[...r.list,e]:r.list.map((n,r)=>r===t?e:n))},m=e=>{let t=o.get(e);t&&clearTimeout(t),o.delete(e),a.delete(e),i.delete(e),r.list?f(r.list.filter(t=>t.id!==e)):u()},h=e=>{d(e.id,{doc:e,sync:{state:`saved`}}),p(ul(e))};async function g(e){let t=i.get(e);if(!t?.doc||!a.has(e)||t.sync.state===`conflict`)return;let{body:r,version:o}=t.doc;d(e,{sync:{state:`saving`}});try{let t=await n.saveFilterSet(e,o,r),s=i.get(e);if(!s?.doc)return;s.doc.body===r&&a.delete(e);let c={...s.doc,version:t.version,versions:t.versions,filters:r.filters.length};if(d(e,{doc:c,sync:{state:`saved`}}),p(ul(c)),a.has(e))return g(e)}catch(t){let n=i.get(e);if(!n?.doc)return;let r=t instanceof Nn&&t.status===409?t.body?.current??null:null;if(r){if(ll(r.body,n.doc.body)){a.delete(e),d(e,{doc:{...n.doc,version:r.version},sync:{state:`saved`}});return}d(e,{sync:{state:`conflict`,theirs:r}});return}d(e,{sync:{state:`offline`,message:Q(t)}})}}function _(e){let t=o.get(e);t&&(clearTimeout(t),o.delete(e));let n=s.get(e);return n||(n=g(e).finally(()=>s.delete(e)),s.set(e,n)),n}return{list:()=>r,entry:e=>i.get(e),held:()=>l??=[...i.values()],async refresh(){r.error&&(r={list:r.list,error:null},u());try{let e=(await n.filterSets()).filterSets;f(e);for(let t of e){let e=i.get(t.id);e?.doc&&!a.has(t.id)&&t.version>e.doc.version&&n.filterSet(t.id).then(e=>{i.has(t.id)&&!a.has(t.id)&&h(e)},()=>{})}}catch(e){r={list:r.list,error:Q(e)},u()}},load(e){i.has(e)&&i.get(e).sync.state!==`missing`||(d(e,{sync:{state:`loading`}}),n.filterSet(e).then(t=>{i.has(e)&&d(e,{doc:t,sync:{state:`saved`}})},t=>{i.has(e)&&d(e,{sync:{state:`missing`,message:Q(t)}})}))},edit(e,n){let r=i.get(e);if(!r?.doc)return;let s=n(r.doc.body);if(s===r.doc.body)return;d(e,{doc:{...r.doc,body:s,filters:s.filters.length}}),a.add(e);let c=o.get(e);c&&clearTimeout(c),o.set(e,setTimeout(()=>{o.delete(e),_(e)},t))},async flush(e){await Promise.all((e?[e]:[...a]).map(_))},async resolve(e,t){let n=i.get(e);if(!n?.doc||n.sync.state!==`conflict`)return;let r=n.sync.theirs;t===`theirs`?(a.delete(e),h(r)):(d(e,{doc:{...n.doc,version:r.version},sync:{state:`saved`}}),a.add(e),await _(e))},async create(e,t){let r=await n.createFilterSet(t?{name:e,body:t}:{name:e});return h(r),r},async rename(e,t){let r=await n.renameFilterSet(e,t),a=i.get(e)?.doc;a&&d(e,{doc:{...a,name:r.name,version:r.version,updated:r.updated}}),p({...ul(r),filters:a?.body.filters.length??r.filters})},async remove(e){let{trash:t}=await n.deleteFilterSet(e);return m(e),t},async restore(e){let t=await n.restoreFilterSet(e);return h(t),t},subscribe(e){return c.add(e),()=>{c.delete(e)}}}}var fl=(0,X.createContext)(null);function pl({children:e,pause:t}){let n=Z(),r=(0,X.useMemo)(()=>dl({api:n,...t==null?{}:{pause:t}}),[n,t]);return(0,X.useEffect)(()=>{let e=()=>{r.flush()};return addEventListener(`pagehide`,e),()=>removeEventListener(`pagehide`,e)},[r]),(0,$.jsx)(fl.Provider,{value:r,children:e})}function ml(){let e=(0,X.useContext)(fl);if(!e)throw Error(`useFilterSets outside a FilterSetsProvider: the app mounts one at its root`);return e}function hl(){let e=ml(),t=(0,X.useSyncExternalStore)(e.subscribe,e.list);return(0,X.useEffect)(()=>{e.list().list===null&&e.refresh()},[e]),t}function gl(e){let t=ml(),n=(0,X.useSyncExternalStore)(t.subscribe,()=>e?t.entry(e):void 0);return(0,X.useEffect)(()=>{e&&t.load(e)},[t,e]),n}function _l(e){let t=[];for(let n of Y().jobsOf(e))for(let e of n.steps??[]){let n=e.filterSets;if(Array.isArray(n))for(let e of n)e&&typeof e==`object`&&t.push(e)}return t}var vl=()=>fa({tab:`library`,section:`filters`,id:null}),yl=e=>fa({tab:`library`,section:`filters`,id:e}),bl=()=>pa({tab:`library`,section:`filters`,id:null});function xl({undo:e}){let t=mc(),n=ml(),{list:r,error:i}=hl(),[a]=xi(`promptlab.workflows`),[o,s]=we(`filter-sets`,20),[c,l]=(0,X.useState)(!1),[u,d]=(0,X.useState)(null),[f,p]=(0,X.useState)(null),[m,h]=(0,X.useState)(!1),g=e=>d(e instanceof Error?e.message:String(e)),_=(0,X.useMemo)(()=>{let e=new Map;for(let t of a.list)for(let n of _l(t.work)){let r=n.set?.id;if(!r)continue;let i=e.get(r)??{names:[],pinned:!1};i.names.includes(t.name)||i.names.push(t.name),typeof n.pin==`number`&&(i.pinned=!0),e.set(r,i)}return e},[a.list]),v=(r??[]).map(e=>({...e,links:_.get(e.id)??{names:[],pinned:!1}})),y=()=>new Set((n.list().list??[]).map(e=>e.name)),b=async e=>{d(null);try{yl((await n.create(e,Y().blankFilterSetBody())).id)}catch(e){g(e)}},S=async t=>{d(null);try{await n.flush(t.id);let r=await n.remove(t.id);e.offer({label:`Deleted ${t.name}`,restore:()=>{n.restore(r).catch(g)}})}catch(e){g(e)}},w=e=>[{label:`Open`,icon:C,onSelect:()=>yl(e.id)},t({tab:`library`,section:`filters`,id:e.id}),{label:`Copy or move…`,icon:J.transfer,onSelect:()=>p(e)},{label:`Delete`,icon:J.remove,destructive:!0,onSelect:()=>void S(e)}],T=[{key:`set`,header:`Filter set`,role:`title`,sort:e=>e.name.toLowerCase(),cell:e=>(0,$.jsx)(`button`,{type:`button`,className:`link-btn`,onClick:()=>yl(e.id),children:e.name})},{key:`filters`,header:`Filters`,className:`num`,sort:e=>e.filters,cell:e=>e.filters},{key:`linked`,header:`Linked by`,sort:e=>e.links.names.length,tdProps:e=>({"data-state":e.links.names.length?void 0:`none`}),cell:e=>e.links.names.length?(0,$.jsx)(`span`,{title:e.links.names.join(`, `),children:`${e.links.names.length} ${e.links.names.length===1?`experiment`:`experiments`}${e.links.pinned?`, pinned`:``}`}):(0,$.jsx)(`span`,{className:`unset`,children:`(Not linked)`})},{key:`menu`,header:``,label:``,role:`menu`,sort:null,cell:e=>(0,$.jsx)(it,{label:`${e.name} actions`,actions:w(e)})}],E=[{label:`Page size…`,icon:J.pageSize,onSelect:()=>l(!0)}];return(0,$.jsxs)(rn,{id:`filter-sets`,title:`Filter sets`,note:r?String(r.length):void 0,actions:E,about:`Filters that experiments link to clean list responses.`,children:[r===null?(0,$.jsx)(Ot,{label:`Filter sets`,error:i,onRetry:()=>void n.refresh()}):(0,$.jsx)(x,{className:`eg-groups`,cards:!0,label:`Filter sets`,rows:v,rowKey:e=>e.id,pageSize:o,columns:T,empty:`(No filter sets)`}),u&&(0,$.jsx)(st,{tone:`error`,children:u}),(0,$.jsxs)(`button`,{type:`button`,className:`ghost add-btn`,onClick:()=>h(!0),children:[(0,$.jsx)(U,{size:14,"aria-hidden":`true`}),`Add filter set`]}),m&&(0,$.jsx)(Sl,{taken:y(),onCreate:e=>void b(e),onClose:()=>h(!1)}),c&&(0,$.jsx)(A,{value:o,onChange:s,onClose:()=>l(!1)}),f&&(0,$.jsx)(yc,{subject:{kind:`filter-set`,id:f.id,name:f.name},scan:{pipelines:a.list},undo:e,onClose:()=>p(null),onChanged:()=>void n.refresh()})]})}function Sl({taken:e,onCreate:t,onClose:n}){let r=xe(`Untitled filter set`,e);return(0,$.jsx)($e,{title:`New filter set`,value:``,placeholder:r,onCommit:e=>t(e||r),onClose:n})}var Cl=[{id:`terms`,scope:`item`,keys:[`terms`],label:`is one of these words`,control:`chips`},{id:`regex`,scope:`item`,keys:[`regex`],label:`matches a pattern`,control:`regex`},{id:`shorter`,scope:`item`,keys:[`length`],label:`is shorter than`,control:`num`,dir:`below`,unit:`characters`},{id:`longer`,scope:`item`,keys:[`length`],label:`is longer than`,control:`num`,dir:`above`,unit:`characters`},{id:`fewerWords`,scope:`item`,keys:[`words`],label:`has fewer words than`,control:`num`,dir:`below`,unit:`words`},{id:`moreWords`,scope:`item`,keys:[`words`],label:`has more words than`,control:`num`,dir:`above`,unit:`words`},{id:`duplicate`,scope:`item`,keys:[`duplicate`],label:`is already in the list`,control:`flag`},{id:`echoes`,scope:`item`,keys:[`echoes`],label:`is made only of the prompt's words`,control:`flag`},{id:`blank`,scope:`reply`,keys:[`blank`],label:`it is blank`,control:`blank`},{id:`textRegex`,scope:`reply`,keys:[`regex`],label:`it contains a pattern`,control:`regex`},{id:`fewerItems`,scope:`reply`,keys:[`itemCount`],label:`it has fewer items than`,control:`num`,dir:`below`,unit:`items`},{id:`moreItems`,scope:`reply`,keys:[`itemCount`],label:`it has more items than`,control:`num`,dir:`above`,unit:`items`},{id:`share`,scope:`reply`,keys:[`share`,`items`],label:`too many items are one of these words`,control:`share`}],wl=(e,t)=>Cl.filter(n=>n.scope===e&&(!t||n.keys.every(e=>t.includes(e)))),Tl=e=>{let t=Y().FILTER_TYPES[e]?.matches;return t===`reply`?`reply`:t?`item`:null},El=e=>{let t=Tl(e);return t?wl(t,Y().FILTER_TYPES[e].conditions):[]},Dl=e=>!!e&&typeof e==`object`&&!Array.isArray(e);function Ol(e,t,n,r){let i=wl(e,r).filter(e=>e.keys[0]===t);return i.length===0?null:i.length===1?i[0]:(Dl(n)&&n.above!=null?i.find(e=>e.dir===`above`):i.find(e=>e.dir===`below`))??i[0]}function kl(e,t,n){let r=[],i=new Set;for(let a of wl(t,n)){let o=a.keys[0];if(i.has(o)||e[o]==null)continue;let s=Ol(t,o,e[o],n);s&&(r.push(s),s.keys.forEach(e=>i.add(e)))}return r}function Al(e,t){let n={...e};for(let e of t.keys)delete n[e];switch(t.control){case`chips`:n.terms=[];break;case`regex`:n.regex=``;break;case`num`:n[t.keys[0]]={[t.dir]:``};break;case`blank`:n.blank=!0;break;case`flag`:n[t.keys[0]]=!0;break;case`share`:n.share={above:``},n.items={terms:[]}}return n}function jl(e,t,n){return wl(t,n).find(t=>t.keys.every(t=>e[t]==null))??null}function Ml(e,t,n){let r=jl(e,t,n);return r?Al(e,r):e}function Nl(e,t){let n={...e};for(let e of t.keys)delete n[e];return n}function Pl(e,t,n){return Al(Nl(e,t),n)}function Fl(e,t,n,r){let i=n.keys[0];return wl(t,r).filter(t=>t.keys[0]===i||t.keys.every(t=>e[t]==null))}var Il=e=>e==null||e===``?``:String(e),Ll=e=>/^-?\d+(\.\d+)?$/.test(e.trim())?Number(e):e.trim(),Rl=e=>Array.isArray(e.terms)?e.terms.map(String):[],zl=(e,t)=>({...e,terms:t}),Bl=e=>typeof e.regex==`string`?e.regex:``,Vl=(e,t)=>({...e,regex:t}),Hl=(e,t)=>Il(Dl(e[t.keys[0]])?e[t.keys[0]][t.dir]:void 0),Ul=(e,t,n)=>({...e,[t.keys[0]]:{[t.dir]:Ll(n)}}),Wl=e=>({pct:Il(Dl(e.share)&&e.share.above!=null&&e.share.above!==``?Math.round(Number(e.share.above)*100):``),words:Dl(e.items)&&Array.isArray(e.items.terms)?e.items.terms.map(String):[]}),Gl=(e,t)=>({...e,share:{above:/^\d+(\.\d+)?$/.test(t.trim())?Number(t)/100:t.trim()}}),Kl=(e,t)=>({...e,items:{terms:t}});function ql(e,t){let n=Y().FILTER_TYPES[t],r=n?.matches===`limit`?void 0:El(t)[0],i=n?.defaultOp?.();return{id:e,type:t,match:r?Al({},r):{},...i?{op:i}:{},options:{ignoreFailures:!1,repeat:1},tests:[]}}function Jl({scope:e,prefix:t,allowed:n,match:r,onChange:i}){let a=kl(r,e,n),[o,s]=t,c=(0,X.useId)();return(0,$.jsxs)(`div`,{className:`cond-builder`,children:[a.map((t,a)=>(0,$.jsxs)(`div`,{className:`cond-row`,"data-control":t.control,children:[(0,$.jsxs)(`div`,{className:`cond-line`,children:[(0,$.jsx)(`span`,{className:`cond-prefix`,children:a===0?o:s}),(0,$.jsx)(`select`,{className:`cond-pick`,"aria-label":`Condition`,value:t.id,onChange:a=>{let o=Fl(r,e,t,n).find(e=>e.id===a.target.value);o&&i(Pl(r,t,o))},children:Fl(r,e,t,n).map(e=>(0,$.jsx)(`option`,{value:e.id,children:e.label},e.id))}),t.control===`num`&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`input`,{type:`text`,inputMode:`numeric`,className:`cond-num`,"aria-label":t.label,value:Hl(r,t),onChange:e=>i(Ul(r,t,e.target.value))}),t.unit&&(0,$.jsx)(`span`,{className:`cond-unit`,children:t.unit})]}),t.control===`regex`&&(0,$.jsx)(`input`,{type:`text`,className:`cond-regex`,"aria-label":`Pattern`,placeholder:`a regular expression`,spellCheck:!1,value:Bl(r),onChange:e=>i(Vl(r,e.target.value))}),(0,$.jsx)(`button`,{type:`button`,className:`cond-x`,"aria-label":`Remove condition ${a+1}`,onClick:()=>i(Nl(r,t)),children:(0,$.jsx)(G,{size:14,"aria-hidden":`true`})})]}),(t.control===`chips`||t.control===`share`)&&(0,$.jsxs)(`span`,{id:`${c}-${a}-words`,className:`sr-only`,children:[`Condition `,a+1,` words`]}),t.control===`chips`&&(0,$.jsx)(v,{value:Rl(r),onChange:e=>i(zl(r,e)),labelledBy:`${c}-${a}-words`}),t.control===`share`&&(0,$.jsxs)(`div`,{className:`cond-share`,children:[(0,$.jsx)(`input`,{type:`text`,inputMode:`numeric`,className:`cond-num`,"aria-label":`Share, percent`,value:Wl(r).pct,onChange:e=>i(Gl(r,e.target.value))}),(0,$.jsx)(`span`,{className:`cond-unit`,children:`% or more of items are one of these words`}),(0,$.jsx)(v,{value:Wl(r).words,onChange:e=>i(Kl(r,e)),labelledBy:`${c}-${a}-words`})]})]},t.id)),(0,$.jsxs)(`button`,{type:`button`,className:`ghost add-btn cond-add`,disabled:!jl(r,e,n),onClick:()=>i(Ml(r,e,n)),children:[(0,$.jsx)(U,{size:14,"aria-hidden":`true`}),`Add condition`]})]})}var Yl={"a-large-small":Bn,"scan-search":ni,"text-search":gi,trash:g,eraser:M,replace:Xr,scissors:ii},Xl=Er;function Zl(e){let t=Y().FILTER_TYPES[e]?.icon;return t&&Yl[t]||null}var Ql=e=>Y().FILTER_TYPES[e]?.label??e;function $l({type:e}){let t=Zl(e);return(0,$.jsxs)(`span`,{className:`verb-label`,children:[t&&(0,$.jsx)(t,{size:14,"aria-hidden":`true`}),Ql(e)]})}var eu=e=>e.replace(/(^|\s)(\p{Ll})/gu,(e,t,n)=>t+n.toUpperCase()),tu=e=>!!Y().FILTER_TYPES[e.type]?.rawReply?.(e),nu={comma:`Comma`,lines:`New line`,semicolon:`Semicolon`,none:`None`},ru=[{value:`LOWER`,label:`Lower case`},{value:`UPPER`,label:`Upper case`},{value:`SENTENCE`,label:`Sentence case`},{value:`TITLE`,label:`Title case`}],iu=[`mode`,`find`,`pattern`,`replacement`,`n`,`unit`,`bullets`],au=(e,t)=>JSON.stringify(e)===JSON.stringify(t),ou=e=>/^\d+$/.test(e.trim())?Number(e):e.trim();function su({filter:e,isNew:t,others:n,onSave:r,onClose:i}){let a=Y(),o=a.FILTER_TYPES[e.type],s=Tl(e.type),[c,l]=(0,X.useState)(t?``:e.id),[u,d]=(0,X.useState)(e.why??``),[f,p]=(0,X.useState)(()=>structuredClone(e.match??{})),[m,h]=(0,X.useState)(()=>structuredClone(e.op??{})),[g,_]=(0,X.useState)(!!e.options?.ignoreFailures),[v,y]=(0,X.useState)(String(e.options?.repeat??1)),[b,x]=(0,X.useState)(()=>structuredClone(e.tests??[])),[S,C]=(0,X.useState)(!1),[T,E]=(0,X.useState)(null),D=()=>E(null),O=e=>{h(t=>({...t,...e})),D()},k=!!o?.conditions.length&&(o.matchesWith?.(m)??!0),A=(0,X.useMemo)(()=>({id:c.trim()||(t?e.id:``),type:e.type,...u.trim()?{why:u.trim()}:{},match:k?f:{},...o?.defaultOp?{op:m}:{},options:{ignoreFailures:g,repeat:ou(v)},tests:b}),[c,u,f,m,g,v,b,e.type,k,o]),j=a.tryFilter(A),M=j.some(e=>!e.ok),N=(e,t)=>x(n=>n.map((n,r)=>r===e?{...n,...t}:n)),P=()=>{let e=A,t=[...e.id?[]:[`A filter needs a name.`],...n.some(t=>t.id===e.id)?[`A filter is already called ${e.id}.`]:[],...a.filterProblems([e],`This filter`)];if(t.length)return E(t);r(e)},I=[];if(o?.kinds){let t=typeof m.kind==`string`?m.kind:o.kinds[0].kind;I.push({key:`kind`,label:`What`,hint:o.kinds.find(e=>e.kind===t)?.about,control:{type:`select`,value:t,options:o.kinds.map(e=>({value:e.kind,label:e.label})),onChange:t=>{h(o.defaultOp(t)),(o.matchesWith?.({kind:t})??!0)&&!Object.keys(f).length&&p(ql(e.id,e.type).match),D()}}})}for(let e of iu)if(e in m){if(e===`mode`){let t=m.mode===`NONE`?[...ru,{value:`NONE`,label:`As written`}]:ru;I.push({key:e,label:`Case`,control:{type:`select`,value:String(m.mode??`LOWER`),options:t,onChange:e=>O({mode:e})}})}else if(e===`find`||e===`pattern`||e===`replacement`){let t={find:`Find`,pattern:`Pattern`,replacement:`Replace with`}[e];I.push({key:e,label:t,width:`full`,control:{type:`text`,value:String(m[e]??``),onChange:t=>O({[e]:t})}})}else e===`n`?I.push({key:e,label:`Keep`,width:`quarter`,control:{type:`text`,value:String(m.n??``),onChange:e=>O({n:ou(e)})}}):e===`unit`?I.push({key:e,label:`Of`,control:{type:`select`,value:String(m.unit??``),options:o?.choices?.unit??[],onChange:e=>O({unit:e})}}):e===`bullets`&&I.push({key:e,label:`Bullets and numbering`,control:{type:`checkbox`,checked:!!m.bullets,onChange:e=>O({bullets:e})}})}let L=[{key:`filter`,rows:[{key:`id`,label:`Name`,width:`full`,required:!0,control:{type:`text`,value:c,onChange:e=>{l(e),D()},...t?{placeholder:e.id}:{}}},{key:`type`,label:`Type`,control:{type:`static`,text:o?.label??e.type,icon:Zl(e.type)},...t?{}:{hint:`Set when the filter was created — delete and recreate to change it.`}},...I,{key:`why`,label:`Notes`,width:`full`,control:{type:`text`,value:u,onChange:d,placeholder:`Add a note`}}]}];if(k&&s){let e=o?.matches===`reply`?[`${o.label} the response when`,`and`]:o?.matches===`limit`?[`Only when it`,`and it`]:[`${o?.label??``} an item when it`,`and it`];L.push({key:`match`,title:`When`,children:(0,$.jsx)(Jl,{scope:s,prefix:e,allowed:o.conditions,match:f,onChange:e=>{p(e),D()}})})}return L.push({key:`tests`,title:`Tests`,children:(0,$.jsxs)(`div`,{className:`filter-tests`,children:[b.map((e,t)=>{let n=j[t],r=!!n?.ok;return(0,$.jsxs)(`div`,{className:`filter-test`,children:[(0,$.jsx)(F,{label:`Test ${t+1}`,rows:[{key:`sep`,label:`Split by`,control:{type:`select`,value:e.separator,options:a.FILTER_SEPARATORS.map(e=>({value:e,label:nu[e]??e})),onChange:e=>{N(t,{separator:e}),D()}}},{key:`in`,label:`Sample input`,control:{type:`textarea`,value:e.sampleInput,onChange:e=>{N(t,{sampleInput:e}),D()}}},{key:`out`,label:`Expected output`,control:{type:`textarea`,value:e.expectedOutput,onChange:e=>{N(t,{expectedOutput:e}),D()}}}]}),(0,$.jsxs)(`div`,{className:`filter-test-result`,children:[(0,$.jsx)(`span`,{className:`filter-test-verdict ${r?`hit`:`fault`}`,role:`status`,children:cu(!!o?.rejects,r,n?.got??``,e)}),(0,$.jsx)(`button`,{type:`button`,className:`icon-btn`,"aria-label":`Remove test ${t+1}`,onClick:()=>{x(e=>e.filter((e,n)=>n!==t)),D()},children:(0,$.jsx)(G,{size:14,"aria-hidden":`true`})})]})]},t)}),(0,$.jsxs)(`button`,{type:`button`,className:`ghost add-btn`,onClick:()=>{let e=o?.rawReply?.(A)||o?.rejects?`none`:`comma`;x(t=>[...t,{separator:e,sampleInput:``,expectedOutput:``}]),D()},children:[(0,$.jsx)(U,{size:14,"aria-hidden":`true`}),`Add test`]})]})}),L.push({key:`options`,title:`Options`,rows:[{key:`ignore`,label:`Ignore failures`,control:{type:`checkbox`,checked:g,onChange:e=>{_(e),D()}}},{key:`repeat`,label:`Repeat`,hint:`Times to run the filter`,width:`quarter`,control:{type:`text`,value:v,onChange:e=>{y(e),D()}}}]}),(0,$.jsx)(w,{title:t?`New filter`:e.id,...T?.length?{status:T.join(` `),statusBad:!0}:{},sections:L,onSave:P,canSave:!M||S,footerStart:M?(0,$.jsxs)(`label`,{className:`edit-override`,children:[(0,$.jsx)(`input`,{type:`checkbox`,checked:S,onChange:e=>C(e.target.checked)}),`Save with failing tests`]}):void 0,adding:t,dirty:!au(A,e),focusRow:`id`,wide:!0,onClose:i})}function cu(e,t,n,r){let i=r.separator===`none`;if(e)return`${t?`Pass`:`Fail`} — ${n===`rejected`?`rejected`:`kept`}`;if(i&&n===`rejected`)return`${t?`Pass`:`Fail`} — rejected`;if(i)return t?`Pass — reads as expected`:`Fail — left ${n?JSON.stringify(n):`nothing`}`;let a=Y().splitSample(r.expectedOutput,r.separator);return t?`Pass — ${a.length} of ${a.length} items as expected`:`Fail — kept ${n||`nothing`}`}function lu({onPick:e,onClose:t}){let n=Object.entries(Y().FILTER_TYPES).sort(([,e],[,t])=>e.label.localeCompare(t.label));return(0,$.jsx)(Fe,{title:`New filter`,onClose:t,className:`new-filter`,dismiss:`Cancel`,children:(0,$.jsx)(`ul`,{className:`nf-verbs`,"aria-label":`Filter type`,children:n.map(([t,n])=>{let r=Zl(t);return(0,$.jsx)(`li`,{children:(0,$.jsxs)(`button`,{type:`button`,className:`nf-verb`,onClick:()=>e(t),children:[(0,$.jsx)(`span`,{className:`nf-verb-icon`,children:r&&(0,$.jsx)(r,{size:14,"aria-hidden":`true`})}),(0,$.jsxs)(`span`,{className:`nf-verb-text`,children:[(0,$.jsx)(`span`,{className:`nf-verb-name`,children:n.label}),n.about&&(0,$.jsx)(`span`,{className:`nf-verb-about`,children:n.about})]})]})},t)})})})}function uu({label:e,filters:t,format:n,onChange:r,onRemoved:i}){let[a,o]=(0,X.useState)(null),[s,c]=(0,X.useState)(!1),[l,u]=(0,X.useState)(null),d=[...t],f=n!=null&&n>=0&&n<=d.length,p=d.map((e,t)=>({kind:`filter`,filter:e,n:t}));f&&p.splice(n,0,{kind:`format`});let m=e=>{let t=e.findIndex(e=>e.kind===`format`);r(e.flatMap(e=>e.kind===`filter`?[e.filter]:[]),t<0?void 0:t)},h=(e,t)=>{let n=[...p],[r]=n.splice(e,1);n.splice(e+t,0,r),m(n)},g=e=>p.indexOf(e),_=e=>[{label:`Move up`,icon:J.moveUp,disabled:g(e)===0,onSelect:()=>h(g(e),-1)},{label:`Move down`,icon:J.moveDown,disabled:g(e)===p.length-1,onSelect:()=>h(g(e),1)}],v=[{key:`n`,header:`#`,label:``,className:`num fs-n`,sort:null,cell:e=>e.kind===`filter`?e.n+1:null},{key:`id`,header:`Filter`,role:`title`,sort:null,cell:e=>e.kind===`format`?(0,$.jsxs)(`span`,{className:`fs-format-name`,children:[(0,$.jsx)(Xl,{size:14,"aria-hidden":`true`}),`Response Format`]}):(0,$.jsx)(`button`,{type:`button`,className:`link-btn`,onClick:()=>o(e.n),children:e.filter.id})},{key:`type`,header:`Type`,className:`fs-type`,sort:null,cell:e=>e.kind===`filter`?(0,$.jsx)($l,{type:e.filter.type}):null},{key:`examples`,header:`Tests`,sort:null,cell:e=>{if(e.kind===`format`)return null;let t=Y().tryFilter(e.filter),n=t.filter(e=>e.ok).length;return t.length?(0,$.jsxs)(`span`,{className:n<t.length?`ds-nomatch`:void 0,children:[n,` of `,t.length,` pass`]}):(0,$.jsx)(`span`,{className:`ds-nomatch`,children:`(None)`})}},{key:`menu`,header:``,label:``,role:`menu`,sort:null,cell:e=>{if(e.kind===`format`)return(0,$.jsx)(it,{label:`Response Format actions`,actions:[..._(e),{label:`Remove`,icon:J.remove,destructive:!0,onSelect:()=>m(p.filter(t=>t!==e))}]});let t=e.filter,r=e.n,a=[{label:`Edit…`,icon:J.edit,onSelect:()=>o(r)},{label:`Clone`,icon:J.clone,onSelect:()=>{let n=g(e);m([...p.slice(0,n+1),{kind:`filter`,filter:{...structuredClone(t),id:D(d,`${t.id} copy`)},n:-1},...p.slice(n+1)])}},..._(e),{label:`Remove`,icon:J.remove,destructive:!0,onSelect:()=>{m(p.filter(t=>t!==e)),i?.(`Removed ${t.id}`,d,n)}}];return(0,$.jsx)(it,{actions:a,label:`${t.id} actions`})}}],y=a==null?void 0:d[a];return(0,$.jsxs)(`div`,{className:`filters-table`,children:[(0,$.jsx)(x,{empty:`(No filters)`,className:`rules fs-table`,cards:!0,label:e,rows:p,rowKey:e=>e.kind===`format`?`\0format`:e.filter.id,columns:v,rowProps:e=>e.kind===`format`?{className:`fs-format-row`}:{},defaultSort:null,select:{noun:`filter`,selectable:e=>e.kind===`filter`,label:e=>e.kind===`filter`?e.filter.id:`Response Format`,actions:e=>[{label:`Remove`,icon:J.remove,destructive:!0,onSelect:()=>{let t=new Set(e);m(p.filter(e=>!t.has(e)));let r=e[0]?.kind===`filter`?e[0].filter.id:``;i?.(e.length===1?`Removed ${r}`:`Removed ${e.length} filters`,d,n)}}]}}),(0,$.jsx)(`span`,{className:`add-btn fs-add`,children:(0,$.jsx)(it,{label:`Add filter`,trigger:(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(J.add,{size:14,"aria-hidden":`true`}),`Add filter`]}),actions:[{label:`New filter…`,icon:J.add,onSelect:()=>c(!0)},{label:`Response Format`,icon:Xl,disabled:f,onSelect:()=>r(d,d.length)}]})}),s&&(0,$.jsx)(lu,{onPick:e=>{c(!1),u(ql(D(d,eu(Ql(e))),e))},onClose:()=>c(!1)}),(l||y)&&(0,$.jsx)(su,{filter:l??y,isNew:!!l,others:l?d:d.filter((e,t)=>t!==a),onSave:e=>{l?m([...p,{kind:`filter`,filter:e,n:-1}]):r(d.map((t,n)=>n===a?e:t),f?n:void 0),u(null),o(null)},onClose:()=>{u(null),o(null)}},l?`new`:a)]})}function du({setId:e,undo:t}){let n=mc(),r=ml(),{list:i,error:a}=hl(),[o]=xi(`promptlab.workflows`),[s,c]=(0,X.useState)(!1),[l,u]=(0,X.useState)(!1),[d,f]=(0,X.useState)(!1),[p,m]=(0,X.useState)(null),[h,_]=(0,X.useState)(!1),v=gl(e)?.doc??null,y=v?.body??null,b=i?.find(t=>t.id===e)??null;(0,X.useEffect)(()=>{i&&!b&&bl()},[i,b]);let x=e=>m({text:e instanceof Error?e.message:String(e),bad:!0}),S=(0,X.useCallback)(t=>r.edit(e,t),[r,e]),C=()=>new Set((r.list().list??[]).map(e=>e.name)),w=async e=>{m(null);try{yl((await r.create(e)).id)}catch(e){x(e)}},T=t=>{let n=t.trim();v&&n&&n!==v.name&&(m(null),r.rename(e,n).catch(e=>{e instanceof Nn&&e.status===409?m({text:`A filter set is already called ${n}.`,bad:!0}):x(e)}))},E=async()=>{if(v){m(null);try{await r.flush(e),yl((await r.create(xe(`${v.name} copy`,C()),structuredClone(v.body))).id)}catch(e){x(e)}}},D=async()=>{if(!v)return;m(null);let{name:n}=v;try{await r.flush(e);let i=await r.remove(e);vl(),t.offer({label:`Deleted ${n}`,restore:()=>{r.restore(i).then(e=>{yl(e.id),e.name!==n&&m({text:`Restored as ${e.name}.`,bad:!1})}).catch(x)}})}catch(e){x(e)}},O=[{label:`Rename…`,icon:J.rename,disabled:!v,onSelect:()=>c(!0)},{label:`Clone`,icon:J.clone,disabled:!v,onSelect:()=>void E()},n({tab:`library`,section:`filters`,id:e}),{label:`Copy or move…`,icon:J.transfer,disabled:!v,onSelect:()=>_(!0)},{label:`Delete`,icon:g,destructive:!0,disabled:!v,onSelect:()=>void D()}],k=y?y.filters.length:0,A=y?`${k} ${k===1?`filter`:`filters`}`:void 0;return(0,$.jsxs)(`div`,{className:`filters-page`,children:[(0,$.jsx)(et,{kind:`Filter set`,name:v?.name??b?.name??(i===null?null:`None`),onPick:i?.length?()=>f(!0):void 0,picking:d,meta:A,primary:{label:`New filter set`,icon:U,onSelect:()=>u(!0)},actions:O}),p&&(0,$.jsx)(st,{tone:p.bad?`error`:`info`,children:p.text}),y==null?(0,$.jsx)(Ot,{label:`Filter set`,error:a,onRetry:()=>void r.refresh()}):(0,$.jsx)(rn,{id:`filters`,title:`Filters`,level:2,note:k?String(k):void 0,about:`Change a filter here; every run that follows latest grades against it. Filters run top to bottom; the first that matches wins.`,children:(0,$.jsx)(uu,{label:`Filters`,filters:y.filters,format:y.format,onChange:(e,t)=>S(n=>fu({...n,filters:e},t)),onRemoved:(e,n,r)=>t.offer({label:e,restore:()=>S(e=>fu({...e,filters:[...n]},r))})})}),d&&i&&(0,$.jsx)(ae,{kind:`Filter set`,value:e,onClose:()=>f(!1),options:i.map(e=>({id:e.id,label:e.name})),onPick:e=>{m(null),yl(e)}}),l&&(0,$.jsx)(Sl,{taken:C(),onCreate:e=>void w(e),onClose:()=>u(!1)}),s&&v&&(0,$.jsx)($e,{title:`Rename filter set`,value:v.name,onCommit:T,onClose:()=>c(!1)}),h&&v&&(0,$.jsx)(yc,{subject:{kind:`filter-set`,id:e,name:v.name},scan:{pipelines:o.list},undo:t,onClose:()=>_(!1),onChanged:()=>void r.refresh()})]})}function fu(e,t){let{format:n,...r}=e;return t==null?r:{...r,format:t}}function pu({setId:e}){let t=on();return(0,$.jsxs)($.Fragment,{children:[e?(0,$.jsx)(du,{setId:e,undo:t}):(0,$.jsx)(xl,{undo:t}),(0,$.jsx)(Ye,{undo:t.undo,onUndo:t.undoNow,onDismiss:t.dismiss})]})}var mu=[{value:`all`,label:`All`},{value:`used`,label:`Used`},{value:`unused`,label:`Unused`}],hu=[{value:`all`,label:`All`},{value:`scenario`,label:`Used by this variant`},{value:`scenarios`,label:`Used by all variants`}];function gu(e,t,n){let r=t.trim().toLowerCase();return r&&!e.name.toLowerCase().includes(r)&&!e.text.toLowerCase().includes(r)?!1:n===`all`||n===`used`==e.useCount>0}function _u(e,t,n,r){let i=t.trim().toLowerCase();return i&&!e.name.toLowerCase().includes(i)&&!e.text.toLowerCase().includes(i)?!1:n===`scenario`?r.byScenario.has(e.id):n!==`scenarios`||r.byAll.has(e.id)}var vu=e=>un(e)||e;function yu(e){return e.id===null?(0,$.jsx)(bu,{onClose:e.onClose}):(0,$.jsx)(xu,{...e,id:e.id})}function bu({onClose:e}){let t=qi(),[n,r]=(0,X.useState)(``),[i,a]=(0,X.useState)(``),[o,s]=(0,X.useState)(null),[c,l]=(0,X.useState)(!1),u=async()=>{l(!0);try{await t.create({name:n,text:i}),e()}catch(e){s(e instanceof Error?e.message:String(e)),l(!1)}};return(0,$.jsx)(w,{title:`New prompt`,status:o??void 0,statusBad:!!o,focusRow:`text`,wide:!0,sections:[{key:`prompt`,rows:[{key:`name`,label:`Name`,width:`full`,control:{type:`text`,value:n,placeholder:`(First line)`,onChange:r}},{key:`text`,label:`Prompt`,required:!0,control:{type:`textarea`,value:i,placeholder:`None`,onChange:a}}]}],dirty:!!n||!!i,adding:!0,saving:c,onSave:()=>void u(),onClose:e})}function xu({id:e,onClose:t,onDuplicate:n,onDelete:r}){let i=qi(),a=Yi(e),[o,s]=(0,X.useState)(null),[c,l]=(0,X.useState)(!1),{openRun:u}=za(),[d,f]=(0,X.useState)(null),p=mc(),m=a?.doc;if(!m)return(0,$.jsx)(w,{title:`Prompt`,sections:[{key:`loading`,children:(0,$.jsx)(Ot,{label:`Prompt`,error:a?.sync.state===`missing`?a.sync.message:null,onRetry:()=>i.load(e)})}],onClose:t});let h=e=>f(e instanceof Error?e.message:String(e)),g=e=>m.versions.find(t=>t.version===e)?.text??``,_=m.uses.some(e=>e.job>0),v=[{key:`version`,header:`Version`,role:`title`,sort:e=>e.version,cell:e=>`v${e.version}${e.version===m.version?` (newest)`:``}`},{key:`uses`,header:`Uses`,className:`num`,sort:e=>e.uses,cell:e=>e.uses}],y=e=>(0,$.jsx)(`pre`,{className:`mono-block pl-words`,children:e}),b=(e,t)=>t?`Hide words`:`Show words`,S=e=>`${e.runId}:${e.scenarioId}:${e.job}`,C=[{key:`run`,header:`Run`,role:`title`,sort:e=>e.submittedAt,cell:e=>(0,$.jsx)(`a`,{className:`pl-run`,href:da({tab:`results`,id:e.runId}),onClick:n=>{n.preventDefault(),t(),u(e.runId,{at:e.submittedAt,from:`history`})},children:Za(e.submittedAt)})},{key:`scenario`,header:`Scenario`,sort:e=>e.scenarioName,cell:e=>e.scenarioName},..._?[{key:`job`,header:`Job`,className:`num`,sort:e=>e.job,cell:e=>e.job+1}]:[],{key:`version`,header:`Version`,sort:e=>e.version,cell:e=>`v${e.version}`},{key:`when`,header:`When`,sort:e=>e.submittedAt,cell:e=>vu(e.submittedAt)}],T=[{label:`Set as default`,icon:mi,disabled:m.default,onSelect:()=>{f(null),i.setDefault(e).catch(h)}},{label:`Duplicate`,icon:J.clone,onSelect:()=>n(m)},p({tab:`library`,section:`prompts`,id:e}),{label:`Delete`,icon:J.remove,destructive:!0,disabled:m.default,onSelect:()=>r(m)}],E=o?.name??m.name,D=o?.text??m.text,O=E!==m.name||D!==m.text,k=e=>s({name:E,text:D,...e}),A=async()=>{if(!O)t();else{l(!0),i.edit(e,{name:E,text:D});try{if(await i.flush(e),i.entry(e)?.sync.state===`conflict`){s(null),l(!1);return}t()}catch(e){h(e),l(!1)}}},j=d??Hi(a.sync),M=a.sync.state===`conflict`;return(0,$.jsx)(w,{title:Vi({...m,name:E,text:D}),status:j??void 0,statusBad:!!j,menu:T,wide:!0,actions:M?[{label:`Keep this tab's data`,onSelect:()=>void i.resolve(e,`mine`)},{label:`Lose this tab's changes`,onSelect:()=>void i.resolve(e,`theirs`)}]:[],dirty:O,saving:c,onSave:()=>void A(),onClose:t,sections:[{key:`prompt`,rows:[{key:`name`,label:`Name`,width:`full`,control:{type:`text`,value:E,placeholder:`(First line)`,onChange:e=>k({name:e})}},{key:`version`,label:`Version`,required:!0,control:{type:`static`,text:`v${m.version}${m.default?` (Default)`:``}`}},{key:`text`,label:`Prompt`,required:!0,control:{type:`textarea`,value:D,placeholder:`None`,onChange:e=>k({text:e})}}]},{key:`versions`,title:`Versions`,children:(0,$.jsx)(At,{label:`Versions`,versions:[...m.versions].sort((e,t)=>t.version-e.version),rowKey:e=>String(e.version),columns:v,at:e=>e.created,atLabel:`Made`,current:e=>e.version===m.version,onRestore:t=>{f(null),i.restoreVersion(e,t.version).catch(h)},expand:{label:b,detail:e=>y(e.text)}})},{key:`uses`,title:`Uses`,children:(0,$.jsx)(x,{className:`pl-uses`,cards:!0,label:`Uses`,rows:m.uses,rowKey:S,pageSize:10,empty:`(No uses)`,defaultSort:{key:`when`,dir:`desc`},columns:C,expand:{label:b,detail:e=>y(g(e.version))}})}]})}var Su=`#new`,Cu={tab:`library`,section:`prompts`,id:null},wu=e=>({tab:`library`,section:`prompts`,id:e});function Tu({promptId:e=null}){let t=qi(),{list:n,error:r}=Ji(),[i]=xi(`promptlab.workflows`),a=on(),[o,s]=we(`prompts`,20),[c,l]=(0,X.useState)(!1),[u,d]=(0,X.useState)(``),[f,p]=(0,X.useState)(`all`),[m,h]=(0,X.useState)(!1),g=m?Su:e,_=t=>{h(t===Su),t!==Su&&t!==e&&fa(t?wu(t):Cu)},v=mc(),[y,b]=(0,X.useState)(null),[S,C]=(0,X.useState)(null),w=cc(),T=(0,X.useRef)(new Set);(0,X.useEffect)(()=>{e&&n&&(n.some(t=>t.id===e)?T.current.add(e):t.entry(e)?.doc||(pa(Cu),T.current.has(e)||a.notify({label:nc(`prompt`,e,w.current)})))},[e,n,t,a.notify,w.current]);let E=n??[],D=E.filter(e=>gu(e,u,f)),O=e=>b(e instanceof Error?e.message:String(e)),k=async()=>{b(null),_(Su)},j=async e=>{b(null);try{await t.flush(e.id);let n=await t.create({name:`${Vi(e)} copy`,text:t.entry(e.id)?.doc?.text??e.text});_(n.id)}catch(e){O(e)}},M=async e=>{b(null);let n=[];try{for(let r of e)n.push(await t.remove(r.id)),g===r.id&&_(null)}catch(e){O(e)}n.length&&a.offer({label:e.length===1?`Deleted ${Vi(e[0])}`:`Deleted ${n.length} prompts`,restore:()=>{for(let e of n)t.restore(e).catch(O)}})},N=e=>M([e]),P=e=>{b(null),t.setDefault(e.id).catch(O)},F=e=>[{label:`Edit…`,icon:J.edit,onSelect:()=>_(e.id)},{label:`Set as default`,icon:mi,disabled:e.default,onSelect:()=>P(e)},{label:`Duplicate`,icon:J.clone,onSelect:()=>void j(e)},v(wu(e.id)),{label:`Copy or move…`,icon:J.transfer,onSelect:()=>C(e)},{label:`Delete`,icon:J.remove,destructive:!0,disabled:e.default,onSelect:()=>void N(e)}];return(0,$.jsxs)(rn,{id:`prompts`,title:`Prompt library`,note:n?`${E.length} ${E.length===1?`prompt`:`prompts`}`:void 0,actions:[{label:`Page size…`,icon:J.pageSize,onSelect:()=>l(!0)}],about:`Every version kept, with the runs that used it.${E.some(e=>e.default)?` The Default is the one a new variant starts from.`:``}`,children:[n===null?(0,$.jsx)(Ot,{label:`Prompts`,error:r,onRetry:()=>void t.refresh()}):(0,$.jsxs)($.Fragment,{children:[E.length>0&&(0,$.jsx)(ne,{noun:`prompts`,search:{label:`Search prompts`,placeholder:`Search prompts`,value:u,onChange:d},filters:[{key:`show`,label:`Show`,value:f,onChange:e=>p(e),options:mu}],count:{shown:D.length,total:E.length}}),(0,$.jsx)(x,{className:`pl-prompts`,cards:!0,label:`Prompts`,rows:D,rowKey:e=>e.id,pageSize:o,total:E.length,empty:`(No prompts)`,rowProps:e=>({"data-default":e.default||void 0}),columns:[{key:`prompt`,header:`Prompt`,role:`title`,sort:e=>Vi(e).toLowerCase(),cell:e=>(0,$.jsxs)(`button`,{type:`button`,className:`link-btn pl-open`,onClick:()=>_(e.id),children:[(0,$.jsxs)(`span`,{className:`pl-title`,children:[Vi(e),e.default&&(0,$.jsx)(wt,{tone:`amber`,children:`Default`})]}),e.name.trim()&&e.text.trim()&&(0,$.jsx)(`span`,{className:`pl-preview`,children:e.text.trim()})]})},{key:`version`,header:`Version`,sort:e=>e.version,cell:e=>`v${e.version}`},{key:`uses`,header:`Uses`,className:`num`,sort:e=>e.useCount,cell:e=>e.useCount},{key:`last`,header:`Last used`,sort:e=>e.lastUsed??null,tdProps:e=>({"data-state":e.lastUsed?void 0:`none`}),cell:e=>e.lastUsed?vu(e.lastUsed):(0,$.jsx)(`span`,{className:`unset`,children:`(Never)`})},{key:`menu`,header:``,label:``,role:`menu`,sort:null,cell:e=>(0,$.jsx)(it,{label:`${Vi(e)} actions`,actions:F(e)})}],select:{noun:`prompt`,label:Vi,actions:e=>[{label:`Delete`,icon:J.remove,destructive:!0,disabled:e.every(e=>e.default),onSelect:()=>void M(e.filter(e=>!e.default))}]}})]}),y&&(0,$.jsx)(st,{tone:`error`,children:y}),(0,$.jsxs)(`button`,{type:`button`,className:`ghost add-btn`,onClick:()=>void k(),children:[(0,$.jsx)(U,{size:14,"aria-hidden":`true`}),`Add prompt`]}),g&&(0,$.jsx)(yu,{id:g===Su?null:g,onClose:()=>_(null),onDuplicate:e=>void j(e),onDelete:e=>void N(e)}),c&&(0,$.jsx)(A,{value:o,onChange:s,onClose:()=>l(!1)}),S&&(0,$.jsx)(yc,{subject:{kind:`prompt`,id:S.id,name:Vi(S)},scan:{pipelines:i.list},undo:a,onClose:()=>C(null),onChanged:()=>void t.refresh()}),(0,$.jsx)(Ye,{undo:a.undo,notice:a.notice,onUndo:a.undoNow,onDismiss:a.dismiss})]})}var Eu=[{value:`name`,label:`Name`,dir:1},{value:`added`,label:`Newest`,dir:-1},{value:`size`,label:`Largest`,dir:-1},{value:`type`,label:`Type`,dir:1}],Du=`evals-lab.sources`,Ou={view:`thumbs`,sort:`name`,dir:1};function ku(){try{let e=window.localStorage.getItem(Du);if(e){let t=JSON.parse(e);if(t.view===`thumbs`||t.view===`list`)return{view:t.view,sort:t.sort===`added`||t.sort===`size`||t.sort===`type`?t.sort:`name`,dir:t.dir===-1?-1:1}}}catch{}return Ou}function Au(e){try{window.localStorage.setItem(Du,JSON.stringify(e))}catch{}}var ju=e=>{let t=e.lastIndexOf(`.`);return t<0?``:e.slice(t).toLowerCase()},Mu=[`.heic`,`.heif`,`.dng`,`.tif`,`.tiff`],Nu=[`.jpg`,`.jpeg`,`.png`],Pu=e=>Nu.includes(ju(e))||Mu.includes(ju(e)),Fu=(e,t)=>`/api/sources/${encodeURIComponent(e)}/thumbs/${encodeURIComponent(t.name)}${t.v?`?v=${t.v}`:``}`,Iu=(e,t)=>Mu.includes(ju(t.name))?`/api/sources/${encodeURIComponent(e)}/zoom/${encodeURIComponent(t.name)}`:`/api/sources/${encodeURIComponent(e)}/files/${encodeURIComponent(t.name)}`;function Lu(e,t,n){let r=[...e],i=(e,t)=>e.name.localeCompare(t.name,void 0,{numeric:!0,sensitivity:`base`});return r.sort((e,r)=>{let a;return a=t===`size`?e.bytes-r.bytes:t===`added`?(e.added??0)-(r.added??0):t===`type`&&ju(e.name).localeCompare(ju(r.name))||i(e,r),a*n}),r}function Ru(e,t){let n=t.trim().toLowerCase();return n?e.filter(e=>e.name.toLowerCase().includes(n)):[...e]}function zu(e){if(e<1024)return`${e} B`;let t=[`KB`,`MB`,`GB`,`TB`],n=e,r=-1;do n/=1024,r+=1;while(n>=1024&&r<t.length-1);let i=Math.round(n*10)/10;return`${Number.isInteger(i)?i:i.toFixed(1)} ${t[r]}`}var Bu=e=>lt(e*1e3);function Vu(e){let t=e.platform??e.config?.platform,n=e.provider??e.config?.provider;return{id:e.id,name:e.name,system:e.system,type:e.type,...t?{platform:t}:{},...n?{provider:n}:{},files:e.files.length,bytes:e.bytes}}var Hu=`[redacted]`,Uu=/^(?:api[-_]?key|x-api-key|authorization|ocp-apim-subscription-key|password|secret|client[-_]?secret|token|access[-_]?token|refresh[-_]?token|sig)$/i,Wu=/^(?:headers|authentication)$/,Gu=[[/sk-ant-[A-Za-z0-9_-]+/g,Hu],[/sk-[A-Za-z0-9_-]{20,}/g,Hu],[/Bearer\s+[A-Za-z0-9._~+/=-]+/g,`Bearer ${Hu}`],[/eyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+/g,Hu],[/([?&](?:sig|code)=)[^&"\s]+/g,`$1${Hu}`]];function Ku(e){let t=0,n=e=>{let n=e;for(let[e,r]of Gu)n=n.replace(e,(...e)=>(t++,r.replace(`$1`,e[1]??``)));return n},r=e=>{if(Array.isArray(e))return e.map(r);if(e&&typeof e==`object`){let n={};for(let[i,a]of Object.entries(e))Wu.test(i)&&a&&typeof a==`object`&&!Array.isArray(a)?n[i]=Object.fromEntries(Object.keys(a).map(e=>(t++,[e,Hu]))):Wu.test(i)&&typeof a==`string`||Uu.test(i)&&a!=null&&typeof a!=`object`?(t++,n[i]=Hu):n[i]=r(a);return n}return typeof e==`string`?n(e):e};return{value:r(e),count:t}}var qu={import:`evals-lab.flow.importing`,resync:`evals-lab.flow.resyncing`},Ju=`resume`;function Yu(e){try{return sessionStorage.getItem(e)}catch{return null}}function Xu(e,t){try{t?sessionStorage.setItem(e,t):sessionStorage.removeItem(e)}catch{}}function Zu(e,t){Xu(qu[e],t)}function Qu(e,t){let n=Yu(qu[e]);return n!==null&&Xu(qu[e],null),n===t}function $u(e){let t=new URL(e);for(let e of Object.keys(qu)){let n=Yu(qu[e]);n&&t.searchParams.append(Ju,`${e}:${n}`)}return t.href}function ed(e){for(let t of e.searchParams.getAll(Ju)){let e=t.indexOf(`:`),n=t.slice(0,e);e>0&&Object.hasOwn(qu,n)&&Xu(qu[n],t.slice(e+1))}e.searchParams.delete(Ju)}var td=`modulepreload`,nd=function(e){return`/`+e},rd={},id=function(e){return e.pathname.endsWith(`.css`)},ad=function(e,t,n){if(t in e)return e[t];let r=n();if(!r){e[t]=void 0;return}let i=r.then(()=>{e[t]=void 0},n=>{throw e[t]=void 0,n});return e[t]=i,i},od=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e,i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}function s(e){return import.meta.resolve?new URL(import.meta.resolve(e)):new URL(e,import.meta.url)}r=o(t.map(t=>{t=nd(t,n);let r=s(t),i=id(r);return ad(rd,r.href,()=>{if(e===void 0){e={all:new Set,styles:new Set};let t=document.getElementsByTagName(`link`);for(let n=t.length-1;n>=0;n--){let r=t[n];e.all.add(r.href),r.rel===`stylesheet`&&e.styles.add(r.href)}}if((i?e.styles:e.all).has(r.href))return;let t=document.createElement(`link`);if(t.rel=i?`stylesheet`:td,i||(t.as=`script`),t.crossOrigin=``,t.href=r.href,a&&t.setAttribute(`nonce`,a),document.head.appendChild(t),i)return new Promise((e,n)=>{let i=a=>{t.removeEventListener(`load`,i),t.removeEventListener(`error`,i),a.type===`error`?n(Error(`Unable to preload CSS for ${r}`)):e(a)};t.addEventListener(`load`,i),t.addEventListener(`error`,i)})})}).filter(e=>e!==void 0))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})},sd=[`https://service.flow.microsoft.com//.default`];function cd(e){let t=e.trim();return!t||t.toLowerCase()===`organizations`?`Any organisation`:`${t} only`}var ld=null;function ud(e){let t=`${e.clientId}/${e.tenant}`;return ld?.key!==t&&(ld={key:t,pca:od(()=>import(`./dist-BfJnsQb9.js`).then(async t=>{let n=await t.createStandardPublicClientApplication({auth:{clientId:e.clientId,authority:`https://login.microsoftonline.com/${e.tenant}`,redirectUri:`${window.location.origin}/`,OIDCOptions:{responseMode:t.ResponseMode.QUERY}},cache:{cacheLocation:`sessionStorage`}}),r=await n.handleRedirectPromise();return r?.account&&n.setActiveAccount(r.account),n}),[])}),ld.pca}var dd=()=>{let e=new URLSearchParams(window.location.search);return e.has(`state`)&&(e.has(`code`)||e.has(`error`))};async function fd(e){await ud(e)}async function pd(e){let t=await ud(e);return(t.getActiveAccount()??t.getAllAccounts()[0]??null)?.username??null}var md=`signin`;function hd(e=window.location.href){let t=new URL(e);return t.hostname===`127.0.0.1`?(t.hostname=`localhost`,t.searchParams.set(md,`microsoft`),t.href):null}function gd(){let e=new URL(window.location.href);return e.searchParams.get(`signin`)===`microsoft`&&(e.searchParams.delete(md),ed(e),window.history.replaceState(window.history.state,``,e.href),!0)}async function _d(e,t=window.location.href){let n=hd();n?window.location.assign($u(n)):await(await ud(e)).loginRedirect({scopes:sd,prompt:`select_account`,redirectStartPage:t})}async function vd(e){let t=await ud(e),n=t.getActiveAccount()??t.getAllAccounts()[0];n&&await t.clearCache({account:n})}async function yd(e){let t=await ud(e),n=t.getActiveAccount()??t.getAllAccounts()[0];if(!n)throw Error(`sign in to Microsoft first`);try{return(await t.acquireTokenSilent({scopes:sd,account:n})).accessToken}catch(e){let{InteractionRequiredAuthError:r}=await od(async()=>{let{InteractionRequiredAuthError:e}=await import(`./dist-BfJnsQb9.js`);return{InteractionRequiredAuthError:e}},[]);throw e instanceof r&&await t.acquireTokenRedirect({scopes:sd,account:n,redirectStartPage:window.location.href}),e}}var bd=new EventTarget,xd=()=>bd.dispatchEvent(new Event(`change`));function Sd(){let e=Z(),[t,n]=(0,X.useState)({cfg:void 0,editable:!1});return(0,X.useEffect)(()=>{let t=!0,r=()=>e.config().then(e=>{t&&n({cfg:e.microsoft??null,editable:!!e.microsoftEditable})},()=>{t&&n({cfg:null,editable:!1})});return r(),bd.addEventListener(`change`,r),()=>{t=!1,bd.removeEventListener(`change`,r)}},[e]),t}var Cd=()=>Sd().cfg,wd=e=>Qe(()=>yd(e));async function Td(e,t,n){let r=await e.flow(t,n);return{name:r.name,definition:Ku(r.definition).value}}async function Ed(e,t,n,r,i){let a=await e.run(t,n,r),o=zt(i),s=new Map,c=new Map,l=t=>t?(c.has(t)||c.set(t,e.content(t)),c.get(t)):Promise.resolve(null),u=i=>(s.has(i)||s.set(i,e.repetitions(t,n,r,i)),s.get(i)),d=async(e,t)=>{let n=o[e]?.loops??[];return n.length?(await u(e)).find(e=>n.every(n=>!(n in t)||e.at[n]===t[n]))??null:a.actions[e]??null},f=e=>e.status!==`Skipped`&&(e.inputsLink||e.outputsLink||e.error),p=async e=>({run:r,at:e.at,startTime:e.startTime,inputs:await l(e.inputsLink),outputs:await l(e.outputsLink),error:e.error});return{detail:a,triggerOutputs:()=>l(a.trigger?.outputsLink??null),actionInputs:async(e,t)=>l((await d(e,t))?.inputsLink??null),actionOutputs:async(e,t)=>l((await d(e,t))?.outputsLink??null),callsOf:async e=>{let t=e.loops.length?await u(e.name):[a.actions[e.name]].filter(e=>!!e);return Promise.all(t.filter(f).map(p))}}}async function Dd(e,t,n,r,i,a){if(!r.length)return[];let o=(await e.runs(t,n)).slice(0,a).map(e=>e.id);if(!o.length)return[];let s=new Set,c=[];for(let a of r){let{records:r}=await Od(e,t,n,o,a,i,s);for(let e of r)s.add(We(e)),c.push(e)}return c}async function Od(e,t,n,r,i,a,o,s){let c=new Set(o),l=[],u=0,d=0;for(let o of r){let r=await Ed(e,t,n,o,a);for(let e of await r.callsOf(i)){let t=Ku(await xn(i,e,r,a)).value,n=We(t);c.has(n)?u++:(c.add(n),l.push(t))}s?.(++d)}return{records:l,skipped:u}}var kd=5;function Ad({typeRow:e,initial:t,onMade:n,bind:r}){let i=Z(),a=Cd(),o=(0,X.useMemo)(()=>a?wd(a):null,[a]),[s,c]=(0,X.useState)(void 0),[l,u]=(0,X.useState)(null),f=t?.config??{},[p,m]=(0,X.useState)(``),[h,g]=(0,X.useState)(null),[_,v]=(0,X.useState)(``),[y,b]=(0,X.useState)(t?.name??``),[x,S]=(0,X.useState)(!1),[C,w]=(0,X.useState)(null),T=e=>w(e instanceof Error?e.message:String(e)),[E,D]=(0,X.useState)(null),[O,k]=(0,X.useState)(null),A=e=>e instanceof Error?e.message:String(e);(0,X.useEffect)(()=>{a&&pd(a).then(c,()=>c(null))},[a]),(0,X.useEffect)(()=>{o&&s&&(D(null),o.environments().then(e=>{u(e),m((e.find(e=>e.id===f.environment)??e.find(e=>e.isDefault)??e[0])?.id??``)},e=>D(A(e))))},[o,s,f.environment]),(0,X.useEffect)(()=>{o&&p&&(g(null),k(null),v(``),o.flows(p).then(e=>{g(e),t?v(e.find(e=>e.id===f.flow)?.id??``):(v(e[0]?.id??``),b(e[0]?.name??``))},e=>k(A(e))))},[o,p,t,f.flow]);let j=!!o&&!!s,M=!!t&&j&&(_!==f.flow||p!==f.environment),N=!!t&&y.trim()!==t.name,P=M||N,I=!!y.trim()&&(t&&!j?!0:j&&!!_),L=(0,X.useRef)(async()=>{});(0,X.useEffect)(()=>{r({enabled:I&&!x,busy:x,changed:P,run:()=>void L.current()})},[r,I,x,P]),(0,X.useEffect)(()=>()=>r(null),[r]);let R=t?t.name:`New Source`,ee={key:`name`,label:`Name`,width:`full`,control:{type:`text`,value:y,onChange:b}},te=(0,$.jsx)(F,{label:R,rows:t?[e,ee]:[e]}),ne=async(e,t,n)=>{try{for(let r of await Dd(e,p,_,d(n),n,kd))try{await i.upload(t,_n(r),new Blob([JSON.stringify(r,null,2)],{type:`application/json`}))}catch{}}catch{}},z=()=>{let e=l?.find(e=>e.id===p)?.name;return{platform:`power-automate`,environment:p,...e?{environmentName:e}:{},flow:_,displayName:h?.find(e=>e.id===_)?.name??_}},re=async e=>{if(!P)await n(e);else{S(!0),w(null);try{let t=M&&o?await Td(o,p,_):null,r=await i.updateSource(e.id,{...N?{name:y.trim()}:{},...t?{config:z()}:{}});t&&await i.saveDefinition(e.id,(await i.definition(e.id)).version,t.definition),await n(r)}catch(e){T(e instanceof Nn?Error(e.message):e)}finally{S(!1)}}};return L.current=async()=>{if(!I)return;if(t){await re(t);return}if(!o)return;S(!0),w(null);let e=null;try{let t=await i.createSource(y.trim(),`workflow`,z());e=t.id;let r=await Td(o,p,_);await i.saveDefinition(t.id,0,r.definition),ne(o,t.id,r.definition),await n(t)}catch(t){e&&await i.removeSource(e).catch(()=>{}),T(t instanceof Nn?Error(t.message):t)}finally{S(!1)}},a===void 0||a&&s===void 0?(0,$.jsxs)($.Fragment,{children:[te,(0,$.jsx)(Ot,{label:`Account`})]}):a===null?(0,$.jsxs)($.Fragment,{children:[te,(0,$.jsxs)(`p`,{className:`note`,children:[`(Microsoft sign-in not set up) `,(0,$.jsxs)(`a`,{href:`#/setup`,children:[`Open`,`\xA0`,`Setup`]})]})]}):s?(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(F,{label:R,rows:[e,{key:`account`,label:`Account`,control:{type:`static`,text:s}},{key:`env`,label:`Environment`,error:E??void 0,control:l?{type:`picker`,kind:`Environment`,value:p,options:l.map(e=>({id:e.id,label:e.name})),onChange:m}:{type:`static`,text:E?`(No environment)`:`(Loading)`,none:!0}},{key:`flow`,label:`Flow`,error:O??void 0,control:h?{type:`picker`,kind:`Flow`,value:_,placeholder:`(Not set)`,options:h.map(e=>({id:e.id,label:e.name})),onChange:e=>{v(e),t||b(h.find(t=>t.id===e)?.name??``)}}:{type:`static`,text:p&&!O?`(Loading)`:`(Not set)`,none:!0}},ee]}),h&&!h.length&&(0,$.jsx)(`p`,{className:`unset`,children:`(No flows)`}),C&&(0,$.jsx)(st,{tone:`error`,children:C})]}):(0,$.jsxs)($.Fragment,{children:[te,(0,$.jsx)(`div`,{className:`sacts`,children:(0,$.jsxs)(`button`,{type:`button`,className:`ghost`,onClick:()=>void _d(a).catch(T),children:[(0,$.jsx)(Ir,{size:14,"aria-hidden":`true`}),` Sign in with Microsoft`]})}),C&&(0,$.jsx)(st,{tone:`error`,children:C})]})}function jd(e){let t=/^https?:\/\/[^/?#]+(\/[^?#]*)?(?:\?([^#]*))?/i.exec(e);if(!t)return{path:e,query:{}};let n={};for(let e of(t[2]??``).split(`&`).filter(Boolean)){let t=e.indexOf(`=`);n[t<0?e:e.slice(0,t)]=t<0?``:e.slice(t+1)}return{path:t[1]||`/`,query:n}}var Md=e=>{try{return new URL(/^https?:\/\//i.test(e)?e:`https://`+e).host}catch{return null}},Nd=e=>(Y().CONNECTION_TYPES[e??``]?.answers??[`prompt`]).includes(`request`);function Pd(e,t){let n=Md(e);return n&&t.find(e=>Nd(e.type)&&Md(Y().addressOf(e))===n)||null}function Fd(e,t){let n=Y(),r=n.httpApiFor(e);if(r!==`raw`)return r;let i=Pd(e,t);return i&&n.CONNECTION_TYPES[i.type]?.speaks?.(i)||`raw`}function Id(e,t){let n=Pd(e,t)??t.find(e=>Nd(e.type));return n?{id:n.id,name:n.name??``}:{id:`http-endpoint`,name:`HTTP endpoint`}}function Ld(e){let t=Md(e),n=Object.values(Y().CONNECTION_TYPES).filter(e=>e.picker!==!1&&Nd(e.id)),r=n.find(e=>e.url&&Md(e.url)===t);if(r)return{type:r.id,name:r.label,url:``};let i=n.find(e=>!e.url)??n[0],a=(()=>{try{return new URL(e).origin}catch{return``}})();return{type:i.id,name:i.label,url:a}}function Rd(e,t){let n=ln(e,t.name),r=n?Re(e,n.name):[],i=Y();return[...n?[{type:`is-json`,schema:n.schema?JSON.stringify(n.schema,null,2):``}]:[],r.length?{type:`fields-equal-recorded`,fields:r.join(`
8
+ `)}:n?{type:`same-as-recorded`}:{type:`judge-vs-production`,...i.METRICS[`judge-vs-production`].defaults()}]}function zd(e,t,n,r,i){let a=Y(),o=n.template,s=String(o.uri??``),c=Fd(s,r),l={type:`httpRequest`,method:String(o.method??`POST`).toUpperCase(),...jd(s),body:o.body??null,...a.HTTP_APIS[c].cellOf(o.body??null)},u=ln(t,n.name),d=Id(s,r),f=a.withOut({type:`job`,id:a.newId(),name:n.name,steps:[{type:`attachContent`,content:{type:`source`,ref:e,first:null,loops:1}},{type:`flowStep`,step:n.name,loop:n.loops.at(-1)??null,api:c},...u?.expression?[{type:`readAs`,readAs:u.expression}]:[]]},{kind:`text`,...a.OUTPUT_KINDS.text?.settingDefaults?.()??{},modifiers:a.OUTPUT_KINDS.text?.modifiers?.()??[]}),p=[{id:a.newId(),name:`Recorded`,connection:null,profile:null,steps:[{type:`recorded`,prompt:``}]},{id:a.newId(),name:`Draft`,connection:d,profile:null,steps:[structuredClone(l)]}];return{version:a.PIPELINE_VERSION,id:a.newId(),name:`${e.name}, ${n.name}`,...a.serialize([f],p),evals:[a.newLink(i)],pass:{mode:`all`}}}function Bd(e,t,n){let r=e.result;if(!r||!(`status`in r))return null;let i=d(t).find(t=>t.name===e.step);if(!i)return null;let a=String(i.template.uri??``),o={step:i.name,loop:i.loops.at(-1)??null,api:Fd(a,n),readAs:ln(t,i.name)?.expression??null};try{return Y().httpReplyOf(o,{prompt:``},r.body,r.status,{scope:e.scope,now:e.at}).raw}catch{return null}}function Vd(e,t){let n;try{n=JSON.parse(e)}catch{return[{type:`equals`,value:e,json:!1}]}if(!n||typeof n!=`object`||Array.isArray(n))return[{type:`equals`,value:e,json:!0}];let r=n,i=t.length?t.filter(e=>e in r):Object.keys(r).filter(e=>r[e]==null||typeof r[e]!=`object`);return i.length?i.map(e=>({type:`json-field`,path:e,op:`equals`,value:typeof r[e]==`string`?r[e]:JSON.stringify(r[e])})):[{type:`equals`,value:e,json:!0}]}var Hd=e=>e.replace(/\.json$/i,``).replace(/[^A-Za-z0-9._-]/g,`_`);function Ud(e,t,n){let r=[],i=0;for(let{name:a,record:o}of e)Bd(o,t,n)==null?i++:r.push({id:Hd(a),item:a,todo:!1,note:``,metrics:[]});return{cases:r,skipped:i}}function Wd(e){return e.map(e=>({id:e.replace(/\.[a-z0-9]+$/i,``).replace(/[^A-Za-z0-9._-]/g,`_`),item:e,todo:!0,note:``,metrics:[]}))}function Gd(e,t,n){let r=[],i=0;for(let{name:a,record:o}of e){let e=Bd(o,t,n);if(e==null){i++;continue}let s=ln(t,o.step),c=s?Re(t,s.name):[];r.push({id:a.replace(/\.json$/i,``).replace(/[^A-Za-z0-9._-]/g,`_`),item:a,todo:!0,note:``,metrics:Vd(e,c)})}return{cases:r,skipped:i}}var Kd={fetched:`Fetched`,recorded:`Recorded`,uploaded:`Uploaded`,added:`Added`,edited:`Edited`,copied:`Copied`},qd=e=>e?[Kd[e.kind]??e.kind,e.at?un(e.at):``].filter(Boolean).join(` `):``;function Jd({status:e,title:t}){return e==null?(0,$.jsx)(`span`,{className:`unset`,children:`(n/a)`}):(0,$.jsxs)(`span`,{className:`sresult`,title:t,children:[(0,$.jsx)(qe,{pass:e>=200&&e<300,decorative:!0}),e]})}function Yd(e,t){return{key:`history`,title:`History`,children:(0,$.jsx)(`div`,{className:`sflow sresponses`,children:(0,$.jsx)(x,{className:`slist`,cards:!0,label:`History`,rows:[...e],rowKey:e=>String(e.n),defaultSort:null,columns:[{key:`updated`,header:`Updated`,role:`title`,sort:e=>e.at,cell:e=>qd(e)},{key:`status`,header:`Status`,sort:e=>e.status,cell:e=>(0,$.jsx)(Jd,{status:e.status})},{key:`act`,header:``,className:`s-actions`,role:`menu`,sort:null,cell:e=>e.current?(0,$.jsx)(wt,{children:`Current`}):(0,$.jsx)(Ze,{actions:[{label:`Restore`,icon:Qr,onSelect:()=>t(e.n)}]})}]})})}}function Xd({name:e,facts:t,sections:n,changed:r,valid:i,taken:a,menu:o,onSave:s,onClose:c}){let l=e.lastIndexOf(`.`),u=l>0?e.slice(l):``,d=e.slice(0,e.length-u.length),[f,p]=(0,X.useState)(d),[m,h]=(0,X.useState)(),[g,_]=(0,X.useState)(),[v,y]=(0,X.useState)(!1),b=async()=>{let t=f.trim(),n=t+u;if(!t)return h(`An item needs a name.`);if(n!==e&&a(n))return h(`${n} is taken.`);if(!i||i()){if(n===e&&!r)return c();y(!0),_(void 0);try{await s(n),c()}catch(e){e instanceof Nn&&e.body?.field===`name`?h(Q(e)):_(Q(e)),y(!1)}}};return(0,$.jsx)(w,{title:e,menu:o,wide:!0,sections:[{key:`call`,rows:s?[{key:`name`,label:`Name`,width:`full`,control:{type:`text`,value:f,suffix:u,onChange:e=>{p(e),h(void 0)}},error:m},...t]:t},...n??[]],...s?{onSave:()=>void b(),saving:v,dirty:f!==d||!!r,refusal:g}:{},onClose:c})}function Zd(e){let[t]=xi(`promptlab.workflows`);return(0,X.useMemo)(()=>t.list.filter(t=>{let n=Y().contentOf(t.work);return n?.type===`source`&&n.ref.id===e}),[t.list,e])}var Qd=e=>da({tab:`runs`,id:e});function $d(e,t){let n=Ri(),{list:r}=zi(),i=(0,X.useMemo)(()=>[...new Set([...t.flatMap(e=>{let t=Y().evalsDataset(e.work);return t?.id?[t.id]:[]}),...(r??[]).filter(t=>t.preview?.id===e).map(e=>e.id)])],[t,r,e]);(0,X.useEffect)(()=>{for(let e of i)n.load(e)},[n,i]);let a=(0,X.useSyncExternalStore)(n.subscribe,n.held);return(0,X.useMemo)(()=>{let e=new Map,t=new Map;for(let n of i){let r=a.find(e=>e.id===n)?.doc;if(!r)continue;let i=new Set(r.body.cases.flatMap(e=>e.item?[e.item]:[]));e.set(n,i);for(let e of i)t.has(e)||t.set(e,{id:r.id,name:r.name})}return{caseOf:e=>t.get(e)??null,casesIn:t=>t&&e.get(t)||new Set}},[i,a])}function ef({group:e}){return e?(0,$.jsx)(`a`,{href:da({tab:`library`,section:`datasets`,id:e.id}),children:e.name}):(0,$.jsx)(`span`,{className:`unset`,children:`(No eval case)`})}var tf=e=>e?{type:`static`,text:e.name,href:da({tab:`library`,section:`datasets`,id:e.id})}:{type:`static`,text:`(No eval case)`,none:!0};function nf({pipelines:e,columns:t,itemsOf:n,casesIn:r,footer:i}){let a=e=>{let t=n(e),i=r(Y().evalsDataset(e)?.id);return{n:t.filter(e=>i.has(e)).length,of:t.length}};return(0,$.jsxs)(rn,{id:`source-pipelines`,title:`Experiments`,note:String(e.length),children:[e.length?(0,$.jsx)(`div`,{className:`sflow`,children:(0,$.jsx)(x,{className:`slist`,cards:!0,label:`Experiments`,rows:[...e],rowKey:e=>e.id,columns:[{key:`name`,header:`Experiment`,role:`title`,sort:e=>e.name,cell:e=>(0,$.jsx)(`a`,{href:Qd(e.id),children:e.name})},...t.map(e=>({key:e.key,header:e.header,sort:e.sort?t=>e.sort(t.work):null,cell:t=>e.cell(t.work)})),{key:`graded`,header:`Graded`,sort:e=>a(e.work).n,cell:e=>{let t=a(e.work);return`${t.n} of ${t.of}`}}]})}):(0,$.jsx)(`p`,{className:`note`,children:`(No experiments)`}),i]})}var rf=e=>e.name.toLowerCase().endsWith(`.json`),af=e=>new Promise((t,n)=>{let r=new FileReader;r.onload=()=>t(String(r.result)),r.onerror=()=>n(r.error),r.readAsText(e)});function of({source:e,definition:t,cfg:n}){let r=Z(),i=Ri(),[a]=xi(`promptlab.connections`),o=on(),[s,c]=(0,X.useState)(e.files.filter(rf)),[l,u]=(0,X.useState)({}),[f,p]=(0,X.useState)({}),[m,h]=(0,X.useState)(null),[_,v]=(0,X.useState)(()=>Qu(`import`,e.id)?`import`:null),[y,b]=(0,X.useState)(null),S=(0,X.useMemo)(()=>d(t),[t]),[C,w]=(0,X.useState)(!1),[T,E]=(0,X.useState)(null),D=(0,X.useCallback)(async()=>{let[t,n]=await Promise.all([r.source(e.id),r.sourceResponses(e.id)]),i=t.files.filter(rf);c(i);let a=await Promise.all(i.map(async t=>{try{return[t.name,pn(JSON.parse(await af(await r.file(e.id,t.name))))]}catch{return[t.name,null]}}));u(Object.fromEntries(a)),p(n.responses)},[r,e.id]),O=(0,X.useCallback)(()=>{E(null),D().then(()=>w(!0),e=>E(Q(e)))},[D]);(0,X.useEffect)(O,[O]);let k=e=>{let n=l[e],r=n?S.find(e=>e.name===n.step):void 0;return n&&r?ct(r,n,t):null},A=(0,X.useMemo)(()=>new Set(s.flatMap(e=>l[e.name]?[We(l[e.name])]:[])),[s,l]),j=async(t,n=0)=>{let i=0,a=[];for(let o of t)try{(await r.upload(e.id,_n(o),new Blob([JSON.stringify(o,null,2)],{type:`application/json`}))).unchanged?n++:i++}catch(e){a.push(Q(e))}await D();let o=[`Added ${i}`,n?`Skipped ${n}`:``,a.length?`Refused ${a.length}: ${a[0]}`:``].filter(Boolean).join(`, `);h(a.length?cn(o):bn(o))},M=async()=>{let{cases:n,skipped:r}=Gd(s.flatMap(e=>l[e.name]?[{name:e.name,record:l[e.name]}]:[]),t,a.list);if(!n.length)return h(bn(`No item holds a production response.`));try{let t=await i.create(`${e.name} · production`,{...wi(),cases:n},{id:e.id,name:e.name});h(bn([`Made ${t.name}: ${n.length} ${n.length===1?`eval case`:`eval cases`}`,r?`Skipped ${r}`:``].filter(Boolean).join(`, `)))}catch(e){h(cn(Q(e)))}},N=async t=>{try{let{trash:n}=await r.removeFiles(e.id,t);c(e=>e.filter(e=>!t.includes(e.name))),o.offer({label:t.length===1?`Removed ${t[0]}`:`Removed ${t.length} items`,restore:()=>void r.restoreTrash(n).then(D,e=>h(cn(Q(e))))})}catch(e){h(cn(Q(e)))}},P=async t=>{let n=URL.createObjectURL(await r.file(e.id,t)),i=document.createElement(`a`);i.href=n,i.download=t,document.body.append(i),i.click(),i.remove(),URL.revokeObjectURL(n)},F=async t=>{try{let{call:n}=await r.cloneCall(e.id,t);c(e=>e.flatMap(e=>e.name===t?[e,{...e,name:n.name}]:[e])),u(e=>({...e,[n.name]:e[t]??null})),o.offer({label:`Cloned ${t}`,restore:()=>void r.removeFiles(e.id,[n.name]).then(()=>c(e=>e.filter(e=>e.name!==n.name)),e=>h(cn(Q(e))))})}catch(e){h(cn(Q(e)))}},I=async(t,n,i)=>{let a=i?JSON.stringify(Ku(i).value,null,2):void 0,{call:s}=await r.editCall(e.id,t,{...n===t?{}:{to:n},...a===void 0?{}:{content:a}});await D(),o.offer({label:a===void 0?`Renamed ${t}`:`Edited ${t}`,restore:async()=>{s.n!=null&&s.was!=null&&await r.restoreResponse(e.id,s.name,s.was,s.n),s.name!==t&&await r.editCall(e.id,s.name,{to:t}),await D()}})},L=async(t,n)=>{let i=(f[t]??[]).find(e=>e.current)?.n;try{await r.restoreResponse(e.id,t,n),await D(),b({name:t,seq:Date.now()}),i!=null&&o.offer({label:`Restored ${t}`,restore:()=>r.restoreResponse(e.id,t,i).then(D)})}catch(e){h(cn(Q(e)))}},R=(e,t)=>[...t?[]:[{label:`Edit…`,icon:J.edit,disabled:!l[e],onSelect:()=>b({name:e,seq:Date.now()})}],{label:`Clone`,icon:J.clone,onSelect:()=>{t&&b(null),F(e)}},{label:`Download`,icon:K,onSelect:()=>void P(e).catch(e=>h(cn(Q(e))))},{label:`Remove`,icon:g,destructive:!0,onSelect:()=>{t&&b(null),N([e])}}],ee=(0,X.useCallback)(()=>v(null),[]),te=(0,X.useCallback)(()=>b(null),[]),ne=y?l[y.name]:null,z=Zd(e.id),{caseOf:B,casesIn:ie}=$d(e.id,z),V=S.length<=1,ae=e=>(f[e]??[]).find(e=>e.current)??null;return(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(rn,{id:`flow-calls`,title:`Items`,note:String(s.length),actions:[{label:`Import runs…`,icon:re,disabled:!S.length||!n,onSelect:()=>v(`import`)},{label:`Upload…`,icon:fn,disabled:!S.length,onSelect:()=>v(`upload`)},{label:`New eval`,icon:ke,disabled:!s.length,onSelect:()=>void M()}],children:[(0,$.jsx)(Le,{said:m}),C?s.length?(0,$.jsx)(`div`,{className:`sflow`,children:(0,$.jsx)(x,{className:`slist`,cards:!0,label:`Items`,rows:s,rowKey:e=>e.name,select:{noun:`item`,actions:e=>[{label:`Download`,icon:K,onSelect:()=>void(async()=>{for(let t of e)await P(t.name)})().catch(e=>h(cn(Q(e))))},{label:`Remove`,icon:g,destructive:!0,onSelect:()=>void N(e.map(e=>e.name))}]},columns:[{key:`reads`,header:`Reads`,role:`title`,sort:e=>df(l[e.name])||e.name,cell:e=>l[e.name]?(0,$.jsx)(`button`,{type:`button`,className:`link-btn sopen`,onClick:()=>b({name:e.name,seq:Date.now()}),children:df(l[e.name])||e.name}):`Unreadable`},...V?[]:[{key:`action`,header:`Action`,sort:e=>l[e.name]?.step??``,cell:e=>l[e.name]?.step??(0,$.jsx)(`span`,{className:`unset`,children:`(No step)`})}],{key:`updated`,header:`Updated`,sort:e=>ae(e.name)?.at??``,cell:e=>qd(ae(e.name))||(0,$.jsx)(`span`,{className:`unset`,children:`(Never)`})},{key:`reply`,header:`Response`,sort:e=>uf(l[e.name])?.code??``,cell:e=>{let t=uf(l[e.name]);return l[e.name]?t?(0,$.jsxs)(`span`,{className:`sresult`,title:t.title,children:[(0,$.jsx)(qe,{pass:t.ok,decorative:!0}),t.code]}):(0,$.jsx)(Jd,{status:null}):(0,$.jsx)(`span`,{className:`unset`,children:`(No record)`})}},{key:`request`,header:`Request`,sort:e=>lf(l[e.name],k(e.name)),tdProps:e=>{let t=k(e.name);return t&&t.match===!1?{title:t.where}:{}},cell:e=>{let t=lf(l[e.name],k(e.name));return t===sf||t===cf?(0,$.jsx)(`span`,{className:`unset`,children:t}):t}},{key:`case`,header:`Eval Case`,sort:e=>B(e.name)?.name??``,cell:e=>(0,$.jsx)(ef,{group:B(e.name)})},{key:`menu`,header:``,className:`s-actions`,role:`menu`,sort:null,cell:e=>(0,$.jsx)(Ze,{label:`${e.name} actions`,actions:R(e.name,!1)})}]})}):(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`p`,{className:`unset`,children:`(No items)`}),!!S.length&&n&&(0,$.jsxs)(`button`,{type:`button`,className:`ghost`,onClick:()=>v(`import`),children:[(0,$.jsx)(re,{size:14,"aria-hidden":`true`}),` Import runs…`]})]}):(0,$.jsx)(Ot,{label:`Items`,error:T,onRetry:O}),(0,$.jsxs)(`button`,{type:`button`,className:`ghost add-btn`,disabled:!S.length,onClick:()=>v(`hand`),children:[(0,$.jsx)(U,{size:14,"aria-hidden":`true`}),` Add item`]})]}),_===`import`&&n&&(0,$.jsx)(vf,{cfg:n,source:e,steps:S,definition:t,held:A,onClose:ee,onRead:async(e,t)=>{v(null),await j(e,t)}}),_===`hand`&&(0,$.jsx)(yf,{steps:S,onClose:ee,onAdd:async e=>{v(null),await j([e])}}),_===`upload`&&(0,$.jsx)(xf,{steps:S,onClose:ee,onRead:async e=>{v(null),await j(e)}}),(0,$.jsx)(nf,{pipelines:z,casesIn:ie,itemsOf:e=>{let t=Y().flowStepOf(Y().jobsOf(e)[0])?.step;return s.filter(e=>!t||l[e.name]?.step===t).map(e=>e.name)},columns:[{key:`action`,header:`Action`,cell:e=>Y().flowStepOf(Y().jobsOf(e)[0])?.step??(0,$.jsx)(`span`,{className:`unset`,children:`(No action)`})},{key:`targets`,header:`Variants`,cell:e=>Y().targetsOf(e).map((t,n)=>Y().targetLabel(e,n)).join(`, `)||(0,$.jsx)(`span`,{className:`unset`,children:`(No variants)`})}]}),y&&ne&&(0,$.jsx)(_f,{name:y.name,record:ne,menu:R(y.name,!0),caseOf:B(y.name),responses:f[y.name]??[],onRestore:e=>void L(y.name,e),taken:e=>s.some(t=>t.name===e),onSave:(e,t)=>I(y.name,e,t),onClose:te},y.seq),(0,$.jsx)(Ye,{undo:o.undo,onUndo:o.undoNow,onDismiss:o.dismiss})]})}var sf=`(n/a)`,cf=`(Not compared)`,lf=(e,t)=>e&&!e.request?sf:!t||t.match===null?cf:t.match?`Matches`:`Differs`;function uf(e){let t=e?.result;return t?`error`in t?{ok:!1,code:t.error.code||`Error`,...t.error.message?{title:t.error.message}:{}}:{ok:t.status>=200&&t.status<300,code:String(t.status)}:null}function df(e){if(!e)return``;let t=e=>{let t=hf(e).replace(/\s+/g,` `).trim();return t.length>60?`${t.slice(0,59)}…`:t};return mf(e).map(e=>`${e.label}: ${t(e.value)}`).join(`, `)}var ff=e=>e.map(e=>({value:e.name,label:e.name})),pf=e=>e.from===`trigger`?`Trigger body`:kt(e);function mf(e){let t=e.scope;return[...t.trigger?[{key:`trigger`,label:pf({from:`trigger`}),value:t.trigger.body,put:(e,t)=>{e.scope.trigger={...e.scope.trigger,body:t}}}]:[],...Object.entries(t.actions??{}).map(([e,t])=>({key:`action-${e}`,label:e,value:t.body,put:(t,n)=>{t.scope.actions[e]={...t.scope.actions[e],body:n}}})),...Object.entries(t.variables??{}).map(([e,t])=>({key:`variable-${e}`,label:e,value:t,put:(t,n)=>{t.scope.variables[e]=n}})),...Object.entries(t.items??{}).map(([e,t])=>({key:`item-${e}`,label:e,value:t,put:(t,n)=>{t.scope.items[e]=n}}))]}var hf=e=>typeof e==`string`?e:e==null?``:JSON.stringify(e,null,2),gf=e=>{if(e===``)return null;try{return JSON.parse(e)}catch{return e}};function _f({name:e,record:t,menu:n,caseOf:r,responses:i,onRestore:a,taken:o,onSave:s,onClose:c}){let l=(0,X.useMemo)(()=>mf(t),[t]),u=t.result,d=(0,X.useMemo)(()=>({...Object.fromEntries(l.map(e=>[e.key,hf(e.value)])),...u&&`status`in u?{status:String(u.status),body:hf(u.body)}:{},...u&&`error`in u?{code:u.error.code??``,message:u.error.message??``}:{}}),[l,u]),[f,p]=(0,X.useState)(d),[m,h]=(0,X.useState)(),g=Object.keys(d).filter(e=>f[e]!==d[e]),_=(e,t,n=!0)=>({key:e,label:t,control:{type:`textarea`,mono:n,value:f[e]??``,onChange:t=>p(n=>({...n,[e]:t}))}}),v=async e=>{if(!g.length)return s(e,null);let n=structuredClone(t);for(let e of l)g.includes(e.key)&&e.put(n,gf(f[e.key]));u&&`status`in u?n.result={status:Number(f.status),body:g.includes(`body`)?gf(f.body):u.body}:u&&`error`in u&&(n.result={error:{...u.error,code:f.code,message:f.message}});let{run:r,iteration:i}=t.origin;return n.origin={kind:`edited`,...r?{run:r}:{},...i?{iteration:i}:{}},s(e,n)},y=()=>!(u&&`status`in u)||/^\d+$/.test(f.status.trim())?!0:(h(`A status is a whole number.`),!1),b=t.request?`${t.request.method} ${t.request.uri}`:null,x=[{key:`action`,label:`Action`,control:{type:`static`,text:t.step}},...b?[{key:`request`,label:`Request`,control:{type:`code`,text:b}}]:[],{key:`case`,label:`Eval case`,control:tf(r)}],S=[...l.length?[{key:`reads`,title:`Reads`,rows:l.map(e=>_(e.key,e.label))}]:[],...u&&`status`in u?[{key:`reply`,title:`Response`,rows:[{key:`status`,label:`Status`,width:`quarter`,error:m,control:{type:`text`,numeric:!0,value:f.status??``,onChange:e=>{h(void 0),p(t=>({...t,status:e}))}}},_(`body`,`Body`)]}]:[],...u&&`error`in u?[{key:`reply`,title:`Response`,rows:[{key:`code`,label:`Code`,control:{type:`text`,value:f.code??``,onChange:e=>p(t=>({...t,code:e}))}},_(`message`,`Message`,!1)]}]:[],...i.length?[Yd(i,a)]:[]];return(0,$.jsx)(Xd,{name:e,facts:x,sections:S,changed:g.length>0,taken:o,menu:n,valid:y,onSave:v,onClose:c})}function vf({cfg:e,source:t,steps:n,definition:r,held:i,onClose:a,onRead:o}){let s=(0,X.useMemo)(()=>wd(e),[e]),c=t.config??{},[l,u]=(0,X.useState)(void 0),[d,f]=(0,X.useState)(n[0]?.name??``),[p,m]=(0,X.useState)(null),[h,g]=(0,X.useState)(``),[_,v]=(0,X.useState)(new Set),[y,b]=(0,X.useState)(``),[S,C]=(0,X.useState)(null),[w,T]=(0,X.useState)(null),[E,D]=(0,X.useState)(null),[O,k]=(0,X.useState)(0);(0,X.useEffect)(()=>{pd(e).then(u,()=>u(null))},[e]),(0,X.useEffect)(()=>{l&&c.environment&&c.flow&&(D(null),s.runs(c.environment,c.flow).then(m,e=>D(Q(e))))},[l,s,c.environment,c.flow,O]);let A=(0,X.useMemo)(()=>[...new Set((p??[]).map(e=>e.status))].sort(),[p]),j=(0,X.useMemo)(()=>(p??[]).filter(e=>!h||e.status===h),[p,h]),M=e=>v(t=>De(t,e)),N=j.filter(e=>_.has(e.id)).map(e=>e.id),P=async()=>{let e=n.find(e=>e.name===d);if(!e||!c.environment||!c.flow)return;let t=N;T(null),C(`Reading 0 of ${t.length}`);try{let{records:n,skipped:a}=await Od(s,c.environment,c.flow,t,e,r,i,e=>C(`Reading ${e} of ${t.length}`));await o(n,a)}catch(e){T(cn(Q(e))),C(null)}};return(0,$.jsxs)(Fe,{title:`Import runs`,onClose:a,wide:!0,dirty:N.length>0,onEnter:S||!N.length||!d?void 0:()=>void P(),footer:(0,$.jsxs)(`div`,{className:`sacts`,children:[S&&(0,$.jsx)(`span`,{className:`note`,role:`status`,children:S}),(0,$.jsx)(`button`,{type:`button`,className:`ghost`,onClick:a,children:`Cancel`}),(0,$.jsxs)($t,{disabled:!!S||!N.length||!d,busy:!!S,why:d?N.length?null:`Choose runs to import`:`Choose a step`,onClick:()=>void P(),children:[S&&(0,$.jsx)(dt,{}),`Import `,N.length||``]})]}),children:[l===void 0?(0,$.jsx)(Ot,{label:`Account`}):l?(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(F,{label:`Import`,rows:[{key:`step`,label:`Step`,control:{type:`select`,value:d,options:ff(n),onChange:f}},{key:`latest`,label:`Latest`,width:`quarter`,control:{type:`text`,value:y,placeholder:`N`,onChange:e=>{b(e);let t=Number.parseInt(e,10);t>0&&v(new Set(j.slice(0,t).map(e=>e.id)))}}}]}),p?(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(ne,{noun:`runs`,count:{shown:j.length,total:p.length},filters:[{key:`status`,label:`Status`,value:h,onChange:g,options:[{value:``,label:`All`},...A.map(e=>({value:e,label:e}))]}]}),(0,$.jsx)(`div`,{className:`sflow`,children:(0,$.jsx)(x,{className:`slist`,label:`Runs`,rows:j,rowKey:e=>e.id,pageSize:20,total:p.length,empty:`(No runs)`,select:{noun:`run`,label:e=>`run ${e.id}`,selected:_,onChange:v},rowProps:e=>({onClick:()=>M(e.id),"data-selected":_.has(e.id)||void 0}),columns:[{key:`start`,header:`Started`,sort:e=>e.startTime??``,cell:e=>e.startTime&&lt(e.startTime)||(0,$.jsx)(`span`,{className:`unset`,children:`(Not started)`})},{key:`status`,header:`Status`,sort:e=>e.status,cell:e=>e.status}]})})]}):(0,$.jsx)(Ot,{label:`Runs`,error:E,onRetry:()=>k(e=>e+1)})]}):(0,$.jsx)(`div`,{className:`sacts`,children:(0,$.jsxs)(`button`,{type:`button`,className:`ghost`,onClick:()=>{Zu(`import`,t.id),_d(e).catch(e=>{Zu(`import`,null),T(cn(Q(e)))})},children:[(0,$.jsx)(Ir,{size:14,"aria-hidden":`true`}),` Sign in with Microsoft`]})}),(0,$.jsx)(Le,{said:w})]})}function yf({steps:e,onClose:t,onAdd:n}){let[r,i]=(0,X.useState)(e[0]?.name??``),[a,o]=(0,X.useState)({}),s=e.find(e=>e.name===r),c=(s?.reads??[]).filter(e=>kt(e));return(0,$.jsxs)(Fe,{title:`Add item`,onClose:t,wide:!0,dirty:Object.values(a).some(Boolean),footer:(0,$.jsxs)(`div`,{className:`sacts`,children:[(0,$.jsx)(`button`,{type:`button`,className:`ghost`,onClick:t,children:`Cancel`}),(0,$.jsx)(`button`,{type:`button`,disabled:!s,onClick:()=>{if(!s)return;let e=Object.fromEntries(Object.entries(a).filter(([e,t])=>t!==``&&c.some(t=>kt(t)===e))),[t]=pe(s,[e]).records;n({...t,origin:{kind:`hand`}})},children:`Add`})]}),children:[(0,$.jsx)(F,{label:`Item`,rows:[{key:`step`,label:`Step`,control:{type:`select`,value:r,options:ff(e),onChange:e=>{i(e),o({})}}},...c.map(e=>({key:`read-${kt(e)}`,label:pf(e),control:{type:`textarea`,value:a[kt(e)]??``,onChange:t=>o(n=>({...n,[kt(e)]:t}))}}))]}),s&&!c.length&&(0,$.jsx)(`p`,{className:`unset`,children:`(No reads)`})]})}function bf(e,t){if(e.toLowerCase().endsWith(`.csv`))return{rows:ft(t)};let n=JSON.parse(t),r=Array.isArray(n)?n:[n];if(r.length&&r.every(e=>!!e&&typeof e==`object`&&e.format===`evals-lab/record`))return{records:r.map(pn)};if(r.every(e=>e&&typeof e==`object`&&!Array.isArray(e)))return{rows:r};throw Error(`a file of records, or rows of objects`)}function xf({steps:e,onClose:t,onRead:n}){let r=(0,X.useRef)(null),[i,a]=(0,X.useState)(e[0]?.name??``),[o,s]=(0,X.useState)(null),[c,l]=(0,X.useState)(null),u=e.find(e=>e.name===i),d=o&&u&&`rows`in o.parsed?pe(u,o.parsed.rows):null,f=o?`records`in o.parsed?o.parsed.records:d?.records??[]:[],p=async e=>{if(e){l(null);try{s({name:e.name,parsed:bf(e.name,await af(e))})}catch(t){s(null),l(cn(`${e.name}: ${Q(t)}`))}}};return(0,$.jsxs)(Fe,{title:`Upload`,onClose:t,wide:!0,dirty:!!o,footer:(0,$.jsxs)(`div`,{className:`sacts`,children:[(0,$.jsx)(`button`,{type:`button`,className:`ghost`,onClick:t,children:`Cancel`}),(0,$.jsxs)(`button`,{type:`button`,disabled:!f.length,onClick:()=>void n(f),children:[`Add `,f.length||``]})]}),children:[(0,$.jsx)(F,{label:`Upload`,rows:[...o&&`records`in o.parsed?[]:[{key:`step`,label:`Step`,control:{type:`select`,value:i,options:ff(e),onChange:a}}],{key:`file`,label:`File`,control:o?{type:`static`,text:o.name}:{type:`static`,text:`(No file)`,none:!0}},...o?[{key:`count`,label:`records`in o.parsed?`Items`:`Rows`,control:{type:`static`,text:String(f.length)}}]:[],...d?.unmatched.length?[{key:`unmatched`,label:`Unmatched`,control:{type:`static`,text:d.unmatched.join(`, `)}}]:[]]}),(0,$.jsxs)(`div`,{className:`sacts`,children:[(0,$.jsxs)(`button`,{type:`button`,className:`ghost`,onClick:()=>r.current?.click(),children:[(0,$.jsx)(fn,{size:14,"aria-hidden":`true`}),` Choose file`]}),(0,$.jsx)(`input`,{ref:r,type:`file`,accept:`.json,.csv`,hidden:!0,"aria-hidden":`true`,onChange:e=>{p(e.target.files?.[0]),e.target.value=``}})]}),(0,$.jsx)(Le,{said:c})]})}function Sf(e){let t=Ri(),n=on(),[r,i]=xi(`promptlab.workflows`),[a,o]=(0,X.useState)(!1),[s,c]=(0,X.useState)(null);return{busy:a,say:s,create:async(a,s)=>{o(!0),c(null);let l=r;try{let{groupId:o,work:c}=await s(),u={id:c.id,name:c.name,work:c};i({...r,list:[...r.list,u],at:u.id}),e(),location.hash=`#/runs`,n.offer({label:a,restore:()=>{i(l),t.remove(o).catch(()=>{})}})}catch(e){c(Q(e)),o(!1)}}}}function Cf({test:e,ready:t,why:n,onCreate:r,onClose:i,children:a}){return(0,$.jsxs)(Fe,{title:`Create new experiment test`,onClose:i,className:`edit`,footer:(0,$.jsxs)(`div`,{className:`sacts`,children:[(0,$.jsx)(`button`,{type:`button`,className:`ghost`,onClick:i,children:`Cancel`}),(0,$.jsxs)($t,{why:n,disabled:e.busy||!t,busy:e.busy,onClick:r,children:[e.busy&&(0,$.jsx)(dt,{}),`Create`]})]}),children:[a,e.say&&(0,$.jsx)(st,{tone:`error`,children:e.say})]})}var wf=e=>e.toLowerCase().endsWith(`.json`),Tf=e=>Y().METRICS[e.type]?.label??e.type;function Ef({source:e,definition:t,step:n,connections:r,onClose:i}){let a=Z(),o=Ri(),[s,c]=xi(`promptlab.connections`),l=Sf(i),u=Nc(),[d,f]=(0,X.useState)(null),[p,m]=(0,X.useState)(null),h=(0,X.useCallback)(()=>{m(null),(async()=>{try{let t=(await a.source(e.id)).files.filter(e=>wf(e.name)),n=await Promise.all(t.map(async t=>({name:t.name,record:JSON.parse(await af(await a.file(e.id,t.name)))})));f(n)}catch(e){m(Q(e))}})()},[a,e.id]);(0,X.useEffect)(h,[h]);let g=Rd(t,n),_=d?Ud(d,t,r):null,v=g.some(e=>Y().METRICS[e.type]?.graded),[y,b]=(0,X.useState)(``),x=u.asked.find(e=>e.id===y)??null,S=e=>{if(Pd(e,r))return r;let t={id:Y().newId(),model:``,key:``,...Ld(e)};return c({...s,list:[...s.list,t]}),[...r,t]};return(0,$.jsx)(Cf,{test:l,ready:!!_?.cases.length,onCreate:()=>_&&void l.create(`Made a test of ${n.name}`,async()=>{let r=String(n.template.uri??``),i=await o.create(`${e.name}, ${n.name}`,{...wi(),every:g,cases:_.cases,...x?{grader:{id:x.id,name:x.name}}:{}},{id:e.id,name:e.name}),a={id:i.id,name:i.name};return{groupId:i.id,work:zd({id:e.id,name:e.name},t,n,S(r),a)}}),onClose:i,why:_&&!_.cases.length?`No recorded responses`:void 0,children:d?(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(F,{label:`Test`,rows:[{key:`pipeline`,label:`Experiment`,control:{type:`static`,text:`${e.name}, ${n.name}`}},{key:`a`,label:`Variant A`,control:{type:`static`,text:`Recorded`}},{key:`b`,label:`Variant B`,control:{type:`static`,text:`Draft`}},{key:`checks`,label:`Checks`,control:g.length?{type:`static`,text:g.map(Tf).join(`, `)}:{type:`static`,text:`(No checks)`,none:!0}},...v?[{key:`grader`,label:`Grader`,control:u.control(y,b)}]:[],{key:`calls`,label:`Items graded`,control:{type:`static`,text:`${_.cases.length}${_.skipped?`, ${_.skipped} with no recorded response left out`:``}`}}]}),!_.cases.length&&(0,$.jsx)(`p`,{className:`note`,children:`(No recorded responses)`})]}):(0,$.jsx)(Ot,{label:`Items`,error:p,onRetry:h})})}function Df({source:e}){let t=Z(),n=Cd(),[r,i]=(0,X.useState)(null),[a,o]=(0,X.useState)(null),[s,c]=(0,X.useState)(!1),[l,u]=(0,X.useState)(null),f=e.config??{},p=(0,X.useCallback)(()=>{u(null),t.definition(e.id).then(i,e=>{i(null),u(e instanceof Error?e.message:String(e))})},[t,e.id,f.flow]);(0,X.useEffect)(p,[p]);let[m,h]=(0,X.useState)(f.environmentName??``),g=async()=>{if(m||!n||!f.environment)return;let r=(await wd(n).environments()).find(e=>e.id===f.environment);r&&r.name!==r.id&&(h(r.name),await t.updateSource(e.id,{config:{...f,environmentName:r.name}}))};(0,X.useEffect)(()=>{!m&&n&&pd(n).then(e=>e?g():void 0).catch(()=>{})},[n]);let _=async()=>{if(!n||!r||!f.environment||!f.flow)return;c(!0),o(null),Zu(`resync`,e.id);let a=!1;try{if(!await pd(n)){await _d(n),a=!0;return}let s=await Td(wd(n),f.environment,f.flow);i(await t.saveDefinition(e.id,r.version,s.definition)),o(bn(`Synced.`)),g().catch(()=>{})}catch(e){e instanceof Nn&&e.status===409?(p(),o(bn(`It changed since: reloaded.`))):o(cn(e instanceof Error?e.message:String(e)))}finally{a||Zu(`resync`,null),c(!1)}},[v,y]=(0,X.useState)(()=>Qu(`resync`,e.id));(0,X.useEffect)(()=>{v&&n&&r&&(y(!1),pd(n).then(e=>{e&&_()},()=>{}))},[v,n,r]);let b=(0,X.useMemo)(()=>Of(r?.body),[r]),S=(0,X.useMemo)(()=>d(r?.body),[r]),[C]=xi(`promptlab.connections`),[w,T]=(0,X.useState)(null),E=Zd(e.id),D=e=>E.find(t=>Y().flowStepOf(Y().jobsOf(t.work)[0])?.step===e)??null,[O,k]=(0,X.useState)(``),[A,j]=(0,X.useState)(`testable`),[M,N]=(0,X.useState)(``),I=e=>S.some(t=>t.name===e.name),L=(0,X.useMemo)(()=>[...new Set(b.map(e=>e.type).filter(Boolean))].sort(),[b]),R=b.filter(e=>(A===`all`||I(e))&&(!M||e.type===M)&&e.name.toLowerCase().includes(O.trim().toLowerCase()));return(0,$.jsxs)(`div`,{className:`sources`,"data-level":`flow`,children:[(0,$.jsx)(Le,{said:a}),(0,$.jsxs)(rn,{id:`flow-source`,title:`Flow`,actions:[{label:`Re-sync`,icon:Jr,busy:s,disabled:!n||!r,onSelect:()=>void _()}],children:[(0,$.jsx)(F,{label:`Flow`,rows:[...f.displayName&&f.displayName!==e.name?[{key:`flow`,label:`Flow`,control:{type:`static`,text:f.displayName}}]:[],{key:`env`,label:`Environment`,control:m||f.environment?{type:`static`,text:m||f.environment}:{type:`static`,text:`(No environment)`,none:!0}},...r?[{key:`version`,label:`Definition`,control:r.version?{type:`static`,text:`V${r.version}${r.at?`, ${lt(r.at)}`:``}`}:{type:`static`,text:`(No version)`,none:!0}}]:[]]}),!r&&(0,$.jsx)(Ot,{label:`Definition`,error:l,onRetry:p})]}),(0,$.jsx)(rn,{id:`flow-actions`,title:`Actions`,note:r?String(b.length):void 0,children:r?b.length?(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(ne,{noun:`actions`,search:{label:`Find an action`,value:O,placeholder:`Name`,onChange:k},quick:{label:`Show`,value:A,onChange:e=>j(e),options:[{value:`all`,label:`All`},{value:`testable`,label:`Can be tested`}]},filters:[{key:`type`,label:`Type`,value:M,onChange:N,options:[{value:``,label:`All`},...L.map(e=>({value:e,label:e}))]}],count:{shown:R.length,total:b.length}}),(0,$.jsx)(`div`,{className:`sflow`,children:(0,$.jsx)(x,{className:`slist`,cards:!0,label:`Actions`,rows:R,rowKey:e=>e.name,total:b.length,defaultSort:null,columns:[{key:`name`,header:`Name`,role:`title`,sort:e=>e.name,cell:e=>(0,$.jsxs)($.Fragment,{children:[e.name,e.in&&(0,$.jsxs)(`span`,{className:`sflow-in`,children:[`in `,e.in]})]})},{key:`type`,header:`Type`,sort:e=>e.type,cell:e=>e.type},{key:`calls`,header:`Items from`,sort:e=>e.calls,cell:e=>e.calls||`—`},{key:`menu`,header:``,className:`s-actions`,role:`menu`,sort:null,cell:e=>{let t=S.find(t=>t.name===e.name),n=t?D(t.name):null;return t?(0,$.jsx)(Ze,{label:`${e.name} actions`,actions:[n?{label:`Open test`,icon:P,onSelect:()=>{location.hash=Qd(n.id)}}:{label:`Create test…`,icon:P,onSelect:()=>T(t)}]}):null}}]})})]}):(0,$.jsx)(`p`,{className:`unset`,children:`(No actions)`}):(0,$.jsx)(Ot,{label:`Actions`,error:l,onRetry:p})}),(0,$.jsx)(of,{source:e,definition:r?.body??null,cfg:n}),w&&r&&(0,$.jsx)(Ef,{source:e,definition:r.body,step:w,connections:C.list,onClose:()=>T(null)})]})}function Of(e){let t=[],n=(e,i)=>{for(let[a,o]of Object.entries(e??{})){t.push({name:a,type:o.type??``,in:i,calls:r(o)}),n(o.actions,a),n(o.else?.actions,`${a} (else)`);for(let[e,t]of Object.entries(o.cases??{}))n(t.actions,`${a} (${e})`);n(o.default?.actions,`${a} (default)`)}},r=e=>{if(e.type===`Http`&&typeof e.inputs?.uri==`string`)try{return new URL(e.inputs.uri).host}catch{return e.inputs.uri.startsWith(`@`)?`(expression)`:``}let t=e.inputs?.host?.apiId??e.inputs?.host?.connectionName;return t?t.split(`/`).pop()??``:``};return n(e?.actions,``),t}var kf={url:`URL`,reqHeaders:`Headers`,body:`Body`,method:`Method`,connection:`Auth connection`,path:`Path`,command:`Command`,args:`Arguments`},Af=[`GET`,`POST`,`PUT`,`PATCH`,`DELETE`],jf=e=>kf[e]??e.charAt(0).toUpperCase()+e.slice(1);function Mf({typeRow:e,which:t,initial:n,onMade:r,bind:i}){let a=Z(),[o]=xi(`promptlab.connections`),[s]=xi(`promptlab.versions`),c=cc().current,[l,u]=(0,X.useState)(null);(0,X.useEffect)(()=>{let e=!0;return a.connectionShares().then(t=>{e&&u(t.shares)},()=>{e&&u({})}),()=>{e=!1}},[a]);let d=Y().DYNAMIC_PROVIDERS,f=n?n.config?.provider:t,p=f&&f in d?f:n?``:Object.keys(d)[0]??``,m=d[p],h=!!m&&m.tier!==`supplied`&&!n,[g,_]=(0,X.useState)(()=>{let{provider:e,...t}=n?.config??{};return t}),[v,y]=(0,X.useState)(n?.name??null),b=v??Nf(g.url??``),[x,S]=(0,X.useState)(!1),[C,w]=(0,X.useState)(null),T=m?m.configProblems(g):[`unknown provider`],E=!!m&&!!b.trim()&&T.length===0,D={provider:p,...g},O=!!n&&!Pf(D,n.config??{}),k=!!n&&b.trim()!==n.name,A=O||k,j=(0,X.useRef)(async()=>{});(0,X.useEffect)(()=>{i({enabled:E&&!x,busy:x,changed:A,run:()=>void j.current()})},[i,E,x,A,p]),(0,X.useEffect)(()=>()=>i(null),[i]),j.current=async()=>{if(!m||!E)return;if(n&&!A){await r(n);return}S(!0),w(null);let e=null;try{if(n){await r(await a.updateSource(n.id,{...k?{name:b.trim()}:{},...O?{config:D}:{}}));return}let t=await a.createSource(b.trim(),`dynamic`,D);e=t.id;let i;if(h){let e=m.noun;i=await a.snapshotSource(t.id).then(({call:t})=>t.error?`The ${e} failed: ${t.error}`:void 0,t=>`The ${e} failed: ${t instanceof Error?t.message:String(t)}`)}await r(t,i)}catch(t){e&&await a.removeSource(e).catch(()=>{}),w(t instanceof Nn||t instanceof Error?t.message:String(t))}finally{S(!1)}};let M=e=>t=>_(n=>({...n,[e]:t})),N=e=>{let t=g[e]??``;if(e===`method`)return{type:`select`,value:t||`GET`,onChange:M(e),options:Af.map(e=>({value:e,label:e}))};if(e===`connection`){let n=o.list.filter(e=>Y().listedConnection(e)&&l!==null&&(!c||Fn(l,`profile`,e.id,c.id))),r=!n.some(e=>e.id===t)&&o.list.find(e=>e.id===t),i=r?r.name||r.id:``;return{type:`picker`,kind:`Connection`,value:t,onChange:M(e),usedLabel:`Last changed`,...Ec(n,e=>s.profile?.[e]?.[0]?.at??null,[{id:``,label:`No auth`}]),...r?{placeholder:l===null?i:`${i}, not shared with ${c?.name??`this workspace`}`}:{}}}return e===`reqHeaders`||e===`body`||e===`args`?{type:`textarea`,value:t,onChange:M(e),placeholder:e===`reqHeaders`?`Name: value; Name: value`:e===`args`?`One a line`:``}:{type:`text`,value:t,onChange:M(e),...e===`url`?{placeholder:`https://…`}:{}}},P=b.trim()&&T[0]?T[0].charAt(0).toUpperCase()+T[0].slice(1):null,I=m?.config??[],L=P?I.find(e=>[e,jf(e).replace(/s$/,``)].some(e=>P.toLowerCase().includes(e.toLowerCase())))??I[0]:void 0,R=I.map(e=>({key:e,label:jf(e),control:N(e),...e===L?{error:P}:{}}));return(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(F,{label:n?n.name:`New Source`,rows:[e,...R,{key:`name`,label:`Name`,width:`full`,control:{type:`text`,value:b,onChange:y}}]}),m?.warning&&(0,$.jsxs)(`p`,{className:`swarn`,role:`note`,children:[(0,$.jsx)(ge,{size:14,"aria-hidden":`true`}),m.warning]}),P&&!L&&(0,$.jsx)(st,{tone:`error`,children:P}),C&&(0,$.jsx)(st,{tone:`error`,children:C})]})}var Nf=e=>{try{let t=new URL(e.trim());if(t.protocol!==`http:`&&t.protocol!==`https:`)return``;let n=t.pathname.split(`/`).filter(Boolean).pop()??``;return[t.hostname,decodeURIComponent(n)].filter(Boolean).join(` `)}catch{return``}},Pf=(e,t)=>[...new Set([...Object.keys(e),...Object.keys(t)])].every(n=>(e[n]??``)===(t[n]??``)),Ff=e=>`${e.n}:${e.name}`,If=e=>e.status==null||e.status>=200&&e.status<300;function Lf(e){return Object.entries(e).flatMap(([e,t])=>t.map(t=>({...t,name:e}))).sort((e,t)=>(t.at??``).localeCompare(e.at??``)||t.n-e.n)}function Rf(e){let t=Lf(e).find(If);return t?{name:t.name,n:t.n}:null}function zf(e,t){let n=e[t.name];return n?.find(e=>e.n===t.n)??(t.n===0?n?.find(e=>e.n===1):void 0)}function Bf(e,t){let n=zf(e,t);return n?Ff({name:t.name,n:n.n}):``}var Vf=(e,t)=>[e,qd(t)].filter(Boolean).join(`, `),Hf=e=>Lf(e).map(e=>({id:Ff(e),label:Vf(e.name,e)}));function Uf(e){let t=e.indexOf(`:`);return{n:Number(e.slice(0,t)),name:e.slice(t+1)}}function Wf(e,t,n=0){let[r,i]=(0,X.useState)(null);return(0,X.useEffect)(()=>{if(!t)return;let n=!0;return e.sourceResponses(t).then(e=>{n&&i({id:t,responses:e.responses})},()=>{n&&i({id:t,responses:{}})}),()=>{n=!1}},[e,t,n]),t?r?.id===t?r.responses:null:{}}var Gf=`Answers the prompt using only what's in the item.`,Kf=`#default`;function qf({source:e,responses:t,plural:n,onClose:r}){let i=Ri(),[a]=xi(`promptlab.connections`),[o]=xi(`promptlab.connectionProfiles`),{list:s,error:c}=Ji(),l=Sf(r),u=Nc(),{asked:d,labGrader:f}=u,p=(0,X.useMemo)(()=>Y().answersOf(Y().withSlugs(a.list),o.list).split,[a.list,o.list]),m=Ac(),[h,g]=(0,X.useState)(d[0]?.id??``),[_,v]=(0,X.useState)(null),[y,b]=(0,X.useState)(null),[x,S]=(0,X.useState)(``),[C,w]=(0,X.useState)(Gf),[T,E]=(0,X.useState)(()=>Rf(t)),D=_??p(h)?.id??Kf,O=y??(f?``:h),k=s!==null||c!==null,A=x.trim()||(s?.find(e=>e.default)?.text??``),j=(e,t)=>{let n=e.find(e=>e.id===t);return n?{id:n.id,name:n.name}:null};return(0,$.jsx)(Cf,{test:l,onCreate:()=>{let t=j(d,h);t&&T&&l.create(`Made a test of ${e.name}`,async()=>{let r={type:`llm-rubric`,...Y().METRICS[`llm-rubric`].defaults(),rubric:C.trim()},a=O?j(d,O):null,s=await i.create(`${e.name}, ${n}`,{...wi(),every:[r],cases:Wd([T.name]).map(e=>({...e,todo:!1})),...a?{grader:a}:{}},{id:e.id,name:e.name}),c=xt(e,{connection:t,profile:D===Kf?null:j(o.list,D)},{id:s.id,name:s.name},A),l=Y().contentOf(c);return{groupId:s.id,work:l?.type===`source`?Y().withContent(c,{...l,live:!1,pin:T}):c}})},onClose:r,ready:!!h&&!!T&&k&&!!A&&!!C.trim(),why:k&&!A?`Needs a prompt`:void 0,children:(0,$.jsx)(F,{label:`Test`,rows:[{key:`pipeline`,label:`Experiment`,control:{type:`static`,text:e.name}},{key:`connection`,label:`Connection`,required:!0,control:{type:`picker`,kind:`Connection`,value:h,...m(d),onChange:e=>{g(e),v(null)}}},{key:`profile`,label:`Profile`,control:{type:`picker`,kind:`Profile`,value:D,...Ec(o.list,()=>null,[{id:Kf,label:`(Default)`}]),onChange:v}},{key:`prompt`,label:`Prompt`,required:!A,control:{type:`textarea`,value:x,onChange:S,placeholder:s?.find(e=>e.default)?.text??``}},{key:`rubric`,label:`Rubric`,required:!0,control:{type:`textarea`,value:C,onChange:w}},{key:`grader`,label:`Grader`,control:u.control(O,b)},{key:`response`,label:`Response`,required:!0,width:`full`,control:{type:`picker`,kind:`Response`,ordered:!0,value:T?Ff(T):``,options:Hf(t),placeholder:`(Not set)`,onChange:e=>E(Uf(e))}}]})})}var Jf={"cloud-sync":nr,"file-input":ur,"square-terminal":fi};function Yf({name:e}){let t=Jf[e]??nr;return(0,$.jsx)(t,{size:14,"aria-hidden":`true`})}var Xf=e=>e.slice(0,1).toUpperCase()+e.slice(1),Zf=e=>/^[aeiou]/i.test(e)?`an`:`a`;function Qf({source:e,note:t}){let[n]=xi(`promptlab.connections`),r=e.config??{},i=Y().DYNAMIC_PROVIDERS[r.provider??``],a=(i?.config??[]).filter(e=>r[e]?.trim()).map(e=>{let t=r[e],i=jf(e);return e===`connection`?{key:e,label:i,control:{type:`static`,text:n.list.find(e=>e.id===t)?.name||t}}:{key:e,label:i,control:{type:`code`,text:t}}});return(0,$.jsxs)(`div`,{className:`sources`,"data-level":`dynamic`,children:[a.length>0&&(0,$.jsx)(rn,{id:`dynamic-provider`,title:`Provider`,children:(0,$.jsx)(F,{label:`Provider`,rows:a})}),(0,$.jsx)($f,{source:e,noun:i?.noun??`item`,canProduce:i?.tier!==`supplied`,produceIcon:i?.produceIcon??`cloud-sync`,takes:Object.keys(i?.uploads??{}),note:t})]})}function $f({source:e,noun:t,canProduce:n,produceIcon:r,takes:i,note:a}){let o=Z(),s=Ri(),c=on(),[l,u]=(0,X.useState)(null),[d,f]=(0,X.useState)({}),[p,m]=(0,X.useState)(null),[h,g]=(0,X.useState)(a?cn(a):null);(0,X.useEffect)(()=>{a&&g(cn(a))},[a]);let[_,v]=(0,X.useState)(!1),y=(0,X.useRef)(null),[b,S]=(0,X.useState)(!1),[C,w]=(0,X.useState)(null),[T,E]=(0,X.useState)(null),[D,O]=(0,X.useState)(!1),k=`${t}s`,A=Xf(k),j=(0,X.useMemo)(()=>(l??[]).filter(e=>!e.error).map(e=>e.name),[l]),M=Zd(e.id),{caseOf:N,casesIn:F}=$d(e.id,M),I=Zf(t),L=n?`Needs ${I} ${t} that succeeded`:`Needs ${I} ${t}`,R=(0,X.useCallback)(()=>{m(null),Promise.all([o.sourceCalls(e.id),o.sourceResponses(e.id)]).then(([e,t])=>{u(e.calls),f(t.responses),E(null)},e=>m(Q(e)))},[o,e.id]);(0,X.useEffect)(R,[R]);let ee=async()=>{v(!0),g(null);try{let{call:t}=await o.snapshotSource(e.id);if(R(),t.outcome===`fetched`&&t.n!=null){let{n,was:r}=t;c.offer({label:`Fetched ${t.name}`,restore:()=>r==null?void 0:o.restoreResponse(e.id,t.name,r,n).then(R)})}else t.outcome===`added`?c.offer({label:`Added ${t.name}`,restore:()=>o.removeCalls(e.id,[t.name]).then(R)}):t.outcome===`unchanged`?c.notify({label:`${t.name} is unchanged`}):c.notify({label:`Fetch failed: ${t.status??t.error??`no answer`}`,bad:!0})}catch(e){c.notify({label:`Fetch failed: ${Q(e)}`,bad:!0})}finally{v(!1)}},te=async t=>{if(!t.length)return;g(null);let n=[],r=[];for(let i of t)try{await o.upload(e.id,i.name,i),n.push(i.name)}catch(e){r.push(`${i.name}: ${Q(e)}`)}R();let i=[...n.length===1?[`Uploaded ${n[0]}`]:n.length?[`Uploaded ${n.length} ${k}`]:[],...r].join(`; `);g(r.length?cn(i):bn(i))},ne=async()=>{let n=j;if(!n.length)return g(bn(`No ${t} to grade yet.`));try{let t=await s.create(`${e.name}, ${k}`,{...wi(),cases:Wd(n)},{id:e.id,name:e.name});g(bn(`Made ${t.name}: ${n.length} ${n.length===1?`eval case`:`eval cases`}`))}catch(e){g(cn(Q(e)))}},z=async t=>{try{let{trash:n}=await o.removeCalls(e.id,t);u(e=>(e??[]).filter(e=>!t.includes(e.name))),f(e=>Object.fromEntries(Object.entries(e).filter(([e])=>!t.includes(e))));let r=t.length===1?`Removed ${t[0]}`:`Removed ${t.length} ${k}`;n?c.offer({label:r,restore:()=>void o.restoreTrash(n).then(R,e=>g(cn(Q(e))))}):g(bn(r))}catch(e){g(cn(Q(e)))}},re=async t=>{if(t.error)return w({call:t,text:null,seq:Date.now()});try{w({call:t,text:await(await o.file(e.id,t.name)).text(),seq:Date.now()})}catch(e){g(cn(Q(e)))}},B=async(t,n,r)=>{let{call:i}=await o.editCall(e.id,t.name,{...n===t.name?{}:{to:n},...r===void 0?{}:{content:r}});R(),c.offer({label:r===void 0?`Renamed ${t.name}`:`Edited ${t.name}`,restore:async()=>{i.n!=null&&i.was!=null&&await o.restoreResponse(e.id,i.name,i.was,i.n),i.name!==t.name&&await o.editCall(e.id,i.name,{to:t.name}),R()}})},ie=async(t,n)=>{let r=(d[t.name]??[]).find(e=>e.current)?.n;try{await o.restoreResponse(e.id,t.name,n),R(),await re(t),r!=null&&c.offer({label:`Restored ${t.name}`,restore:()=>o.restoreResponse(e.id,t.name,r).then(R)})}catch(e){g(cn(Q(e)))}},V=async t=>{try{let{call:n}=await o.cloneCall(e.id,t),r={kind:`copied`,at:new Date().toISOString()};u(e=>(e??[]).flatMap(e=>e.name===t?[e,{...e,name:n.name,origin:`copy`,updated:r}]:[e])),E(n.name),c.offer({label:`Cloned ${t}`,restore:()=>void o.removeCalls(e.id,[n.name]).then(()=>u(e=>(e??[]).filter(e=>e.name!==n.name)),e=>g(cn(Q(e))))})}catch(e){g(cn(Q(e)))}},ae=(t,n)=>[...n?[]:[{label:`Edit…`,icon:J.edit,disabled:!!t.error,onSelect:()=>void re(t)}],{label:`Clone`,icon:J.clone,disabled:!!t.error,onSelect:()=>{n&&w(null),V(t.name)}},{label:`Download`,icon:J.export,disabled:!!t.error,onSelect:()=>void np(o,e.id,t.name).catch(e=>g(cn(Q(e))))},{label:`Remove`,icon:J.remove,destructive:!0,onSelect:()=>{n&&w(null),z([t.name])}}],H=[{label:`Upload…`,icon:fn,onSelect:()=>y.current?.click()},{label:`New eval`,icon:ke,disabled:!(l??[]).some(e=>!e.error),onSelect:()=>void ne()}],oe=e=>e.error?(0,$.jsxs)(`span`,{className:`sresult`,title:e.error,children:[(0,$.jsx)(qe,{pass:!1,decorative:!0}),e.status??`Failed`]}):(0,$.jsx)(Jd,{status:e.origin===`copy`?null:e.status}),W=e=>e.error?null:N(e.name),se=e=>{let t=Y().contentOf(e);return t?.type===`source`&&!(t.live??!(l??[]).length)?{pin:t.pin??null}:null},ce=e=>{let t=se(e);if(!t)return`Live data`;if(!t.pin)return(0,$.jsx)(`span`,{className:`unset`,children:`(Not set)`});let n=zf(d,t.pin);return n?Vf(t.pin.name,n):(0,$.jsx)(`span`,{className:`unset`,children:`(Removed)`})};return(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(rn,{id:`dynamic-calls`,title:A,note:l?String(l.length):void 0,actions:H,children:[(0,$.jsx)(Le,{said:h}),l===null?(0,$.jsx)(Ot,{label:A,error:p,onRetry:R}):l.length?(0,$.jsx)(`div`,{className:`sflow`,children:(0,$.jsx)(x,{className:`slist`,cards:!0,label:A,rows:l,rowKey:e=>e.name,select:{noun:t,actions:e=>[{label:`Remove`,icon:J.remove,destructive:!0,onSelect:()=>void z(e.map(e=>e.name))}]},rowProps:e=>e.name===T?{"data-fresh":``}:{},columns:[{key:`name`,header:`Name`,role:`title`,sort:e=>e.name.replace(/\.[^.]*$/,``),cell:e=>(0,$.jsx)(`button`,{type:`button`,className:`link-btn sopen`,onClick:()=>void re(e),children:e.name})},{key:`updated`,header:`Updated`,sort:e=>e.updated?.at??e.at??``,cell:e=>qd(e.updated)||(0,$.jsx)(`span`,{className:`unset`,children:`(Never)`})},...n?[{key:`status`,header:`Status`,sort:e=>String(e.status??``),cell:oe}]:[],{key:`case`,header:`Eval Case`,sort:e=>W(e)?.name??``,cell:e=>(0,$.jsx)(ef,{group:W(e)})},{key:`menu`,header:``,className:`s-actions`,role:`menu`,sort:null,cell:e=>(0,$.jsx)(Ze,{label:`${e.name} actions`,actions:ae(e,!1)})}]})}):(0,$.jsxs)(`p`,{className:`note`,children:[`No `,k,` yet.`,n?``:` Write or upload one, or hand them in through the CLI.`]}),n?(0,$.jsxs)(`button`,{type:`button`,className:`ghost add-btn`,"aria-busy":_||void 0,disabled:_,onClick:()=>void ee(),children:[(0,$.jsx)(Yf,{name:r}),` Get response`]}):(0,$.jsxs)(`button`,{type:`button`,className:`ghost add-btn`,onClick:()=>S(!0),children:[(0,$.jsx)(U,{size:14,"aria-hidden":`true`}),` New `,t,`…`]})]}),(0,$.jsx)(nf,{pipelines:M,casesIn:F,itemsOf:e=>{let t=n?se(e):null;return t?.pin?[t.pin.name]:j},columns:n?[{key:`updates`,header:`Data updates`,cell:ce}]:[],footer:(0,$.jsxs)($t,{className:`ghost add-btn`,why:L,disabled:!j.length,onClick:()=>O(!0),children:[(0,$.jsx)(P,{size:14,"aria-hidden":`true`}),` Create test…`]})}),(0,$.jsx)(`input`,{ref:y,type:`file`,multiple:!0,accept:`.txt,.json,.csv,.md`,hidden:!0,"aria-hidden":`true`,onChange:e=>{te([...e.target.files??[]]),e.target.value=``}}),b&&(0,$.jsx)(ep,{noun:t,takes:i,onSave:async(t,n)=>{try{await o.upload(e.id,t,new Blob([n],{type:`text/plain`}))}finally{R()}},onClose:()=>S(!1)}),D&&(0,$.jsx)(qf,{source:e,responses:d,plural:k,onClose:()=>O(!1)}),C&&(0,$.jsx)(tp,{call:C.call,text:C.text,menu:ae(C.call,!0),caseOf:W(C.call),responses:d[C.call.name]??[],onRestore:e=>void ie(C.call,e),taken:e=>(l??[]).some(t=>t.name===e),onSave:(e,t)=>B(C.call,e,t===(C.text??``)?void 0:t),onClose:()=>w(null)},C.seq),(0,$.jsx)(Ye,{undo:c.undo,notice:c.notice,onUndo:c.undoNow,onDismiss:c.dismiss})]})}function ep({noun:e,takes:t,onSave:n,onClose:r}){let[i,a]=(0,X.useState)(``),[o,s]=(0,X.useState)(``),[c,l]=(0,X.useState)(!1),[u,d]=(0,X.useState)(null),f=async()=>{let a=i.trim(),s=/\.[^./]+$/.exec(a)?.[0].toLowerCase(),c=s?a:`${a}.txt`,u=Xf(Zf(e));if(!a)return d(`${u} ${e} needs a name.`);if(s&&t.length&&!t.includes(s))return d(`${u} ${e}'s name ends ${t.join(`, `)}.`);if(!o.trim())return d(`${u} ${e} needs some text.`);l(!0);try{await n(c,o),r()}catch(e){d(Q(e)),l(!1)}};return(0,$.jsx)(w,{title:`New ${e}`,focusRow:`name`,status:u??void 0,statusBad:!!u,wide:!0,sections:[{key:`item`,rows:[{key:`name`,label:`Name`,width:`full`,required:!0,control:{type:`text`,value:i,onChange:a,placeholder:`notes.txt`}},{key:`text`,label:`Text`,required:!0,control:{type:`textarea`,value:o,onChange:s}}]}],onSave:()=>void f(),saving:c,adding:!0,onClose:r})}function tp({call:e,text:t,menu:n,caseOf:r,responses:i,onRestore:a,taken:o,onSave:s,onClose:c}){let[l,u]=(0,X.useState)(t??``),d=e.request,f=d?.url?`${d.method??`GET`} ${d.url}`:d?.path??d?.command,p=[...f?[{key:`request`,label:`Request`,control:{type:`code`,text:f}}]:[],...e.error?[{key:`error`,label:`Error`,control:{type:`static`,text:e.error}}]:[{key:`case`,label:`Eval case`,control:tf(r)}]];return t===null?(0,$.jsx)(Xd,{name:e.name,facts:p,taken:o,menu:n,onClose:c}):(0,$.jsx)(Xd,{name:e.name,facts:p,taken:o,menu:n,onClose:c,changed:l!==t,onSave:e=>s(e,l),sections:[{key:`content`,title:`Content`,children:(0,$.jsx)(`textarea`,{className:`mono call-content`,"aria-label":`Content`,spellCheck:!1,value:l,onChange:e=>u(e.target.value)})},...i.length?[Yd(i,a)]:[]]})}async function np(e,t,n){let r=URL.createObjectURL(await e.file(t,n)),i=document.createElement(`a`);i.href=r,i.download=n,document.body.append(i),i.click(),i.remove(),URL.revokeObjectURL(r)}var rp={workflow:{Create:Ad,Level:Df},dynamic:{Create:Mf,Level:Qf}},ip=e=>(e.provider?Y().DYNAMIC_PROVIDERS[e.provider]?.label??e.provider:null)??(e.platform?Y().WORKFLOW_PLATFORMS[e.platform]?.label??e.platform:null)??Y().SOURCE_TYPES[e.type]?.label??e.type,ap=e=>Q(e,`the request failed`);function op({source:e,onSaved:t,onClose:n}){let r={key:`kind`,label:`Kind`,control:{type:`static`,text:ip(e)}},i=rp[e.type]?.Create;return i?(0,$.jsx)(cp,{source:e,kindRow:r,Create:i,onSaved:t,onClose:n}):(0,$.jsx)(sp,{source:e,kindRow:r,onSaved:t,onClose:n})}function sp({source:e,kindRow:t,onSaved:n,onClose:r}){let i=Z(),[a,o]=(0,X.useState)(e.name),[s,c]=(0,X.useState)(!1),[l,u]=(0,X.useState)(null),d=async()=>{let t=a.trim();if(!t||t===e.name)r();else{c(!0);try{n(await i.updateSource(e.id,{name:t})),r()}catch(e){u(ap(e)),c(!1)}}};return(0,$.jsx)(w,{title:`Edit ${e.name}`,focusRow:`name`,status:l??void 0,statusBad:!!l,sections:[{key:`source`,rows:[{key:`name`,label:`Name`,width:`full`,required:!0,control:{type:`text`,value:a,onChange:o}},t]}],onSave:()=>void d(),saving:s,onClose:r})}function cp({source:e,kindRow:t,Create:n,onSaved:r,onClose:i}){let a=Z(),[o,s]=(0,X.useState)(null),[c,l]=(0,X.useState)(null),[u,d]=(0,X.useState)(0),[f,p]=(0,X.useState)(null);return(0,X.useEffect)(()=>{let t=!0;return a.source(e.id).then(e=>{t&&s(e)},e=>{t&&l(ap(e))}),()=>{t=!1}},[a,e.id,u]),(0,$.jsx)(w,{title:`Edit ${e.name}`,dirty:!!f?.changed,sections:[{key:`source`,children:o?(0,$.jsx)(n,{typeRow:t,initial:o,bind:p,onMade:e=>{r(e),i()}}):(0,$.jsx)(Ot,{label:`Source`,error:c,onRetry:()=>{l(null),d(e=>e+1)}})}],onSave:()=>f?.run(),saving:!!f?.busy,canSave:!!f?.enabled,onClose:i})}var lp={folder:Ee,workflow:u,globe:E,upload:fn,file:fr,terminal:fi,"square-code":ui,"arrow-left-right":Kn},up=new Set([`square-code`,`arrow-left-right`]);function dp(e,t,n){let r=t?Y().WORKFLOW_PLATFORMS[t]:void 0,i=n?Y().DYNAMIC_PROVIDERS[n]:void 0;return r?.icon??i?.icon??Y().SOURCE_TYPES[e]?.icon}function fp({name:e,size:t=16}){let n=e&&lp[e]||Ee;return(0,$.jsx)(n,{className:`skind`,size:t,fill:e&&up.has(e)?`none`:`currentColor`,"aria-hidden":`true`})}function pp({sourceId:e=null,onOpen:t,onGone:n,mode:r=`browse`,onPick:i,disabled:a}){let o=mc(),s=Z(),c=on(),[l]=xi(`promptlab.workflows`),u=zi(),[d,f]=(0,X.useState)(null),[p,m]=(0,X.useState)(0),[h,_]=(0,X.useState)(null),[v,y]=(0,X.useState)(ku),[b,S]=(0,X.useState)(``),[C,w]=(0,X.useState)(new Set),[T,E]=(0,X.useState)(null),[D,O]=(0,X.useState)(!1),[k,A]=(0,X.useState)(()=>r===`browse`&&hp()!==null),[j,M]=(0,X.useState)(null),[N,P]=(0,X.useState)(null),[I,R]=(0,X.useState)(null),[ee,te]=(0,X.useState)(void 0),[z,re]=(0,X.useState)(!1),[B,ie]=(0,X.useState)(``),V=(0,X.useRef)(!1),[H,W]=(0,X.useState)(!1),se=async e=>{if(!V.current){V.current=!0,W(!0);try{await e()}finally{V.current=!1,W(!1)}}},[ce,le]=(0,X.useState)(()=>r===`browse`&&hp()||Y().DEFAULT_SOURCE_TYPE),[ue,de]=(0,X.useState)(null),[fe,G]=(0,X.useState)(null),[pe,me]=(0,X.useState)(null);(0,X.useEffect)(()=>{me(t=>t&&t.id!==e?null:t)},[e]);let[he,ge]=(0,X.useState)(``),[_e,ve]=(0,X.useState)(``),[ye,be]=(0,X.useState)([]),[xe,Se]=(0,X.useState)(null),[Ce,we]=(0,X.useState)([]),[Te,Ee]=(0,X.useState)(!1),[Oe,ke]=(0,X.useState)(!1),[Ae,je]=(0,X.useState)(null),[Me,Ne]=(0,X.useState)(null),[Ie,Re]=(0,X.useState)(0),[ze,Be]=(0,X.useState)(0),Ve=(0,X.useRef)(null),q=(0,X.useRef)(1),{view:He,sort:Ue,dir:We}=v,Ge=(0,X.useCallback)(()=>M(null),[]),Ke=(0,X.useCallback)(()=>{A(!1),G(null)},[]),qe=(0,X.useCallback)(()=>P(null),[]),Je=(0,X.useCallback)(()=>re(!1),[]);(0,X.useEffect)(()=>Au(v),[v]),(0,X.useEffect)(()=>{r===`browse`&&gp(k?ce:null)},[r,k,ce]),(0,X.useEffect)(()=>{let e=!0;return s.config().then(t=>{e&&be(t.dynamicProviders??[])},()=>{}),()=>{e=!1}},[s]),(0,X.useEffect)(()=>{if(!I?.platform){te(void 0);return}let e=!0;return Promise.all([s.connections(),s.connectionShares()]).then(([{connections:t},{shares:n}])=>{if(!e)return;let r=t.find(e=>e.id===`microsoft`);if(!r){te(void 0);return}let i=n[Pn(`account`,r.id)];te({name:r.label,sharedWith:e=>!i||i.includes(e)||i.includes(`*all`)})},()=>{e&&te(void 0)}),()=>{e=!1}},[I,s]);let Xe=async()=>{try{let e=await s.sources();f(e.sources),m(e.cap)}catch{}};(0,X.useEffect)(()=>{let e=!0;return s.sources().then(t=>{e&&(f(t.sources),m(t.cap))}).catch(t=>{e&&je($e(t))}),()=>{e=!1}},[s,Ie]),(0,X.useEffect)(()=>{w(new Set),we([]);let t=!0;return Ne(null),e?s.source(e).then(e=>{t&&_(e)}).catch(e=>{t&&(_(null),e instanceof Nn&&e.status===404&&n?n():Ne($e(e)))}):_(null),()=>{t=!1}},[e,ze]);let Ze=async()=>{if(!e)_(null);else try{_(await s.source(e))}catch{_(null)}},Qe=(e,t=`info`)=>{Se({tone:t,text:e}),window.setTimeout(()=>Se(null),6e3)},$e=e=>Q(e,`the request failed`),tt=Ru(Lu(h?.files??[],Ue,We),b),nt=e=>w(t=>De(t,e)),rt=()=>w(new Set),at=e=>{y(t=>({...t,view:e})),e===`thumbs`&&rt()},ot=async e=>{let t=[];try{for(let n of e)t.push((await s.removeSource(n.id)).trash),f(e=>(e??[]).filter(e=>e.id!==n.id))}catch(e){Qe($e(e),`error`)}t.length&&c.offer({label:e.length===1?`Deleted ${e[0].name}`:`Deleted ${t.length} Sources`,restore:()=>void(async()=>{try{for(let e of t)await s.restoreTrash(e);await Xe()}catch(e){Qe($e(e),`error`)}})()})},ct=e=>ot([e]),lt=async e=>{if(h)try{let{trash:t}=await s.removeFiles(h.id,e),n=new Set(e);_(t=>t&&{...t,files:t.files.filter(e=>!n.has(e.name)),bytes:t.bytes-e.reduce((e,n)=>e+(t.files.find(e=>e.name===n)?.bytes??0),0)}),w(e=>new Set([...e].filter(e=>!n.has(e)))),c.offer({label:e.length===1?`Removed ${e[0]}`:`Removed ${e.length} files`,restore:()=>void(async()=>{try{let e=await s.restoreTrash(t);_(e.source)}catch(e){Qe($e(e),`error`)}})()})}catch(e){Qe($e(e),`error`)}},ut=(e,t)=>{let n=URL.createObjectURL(e),r=document.createElement(`a`);r.href=n,r.download=t,document.body.append(r),r.click(),r.remove(),URL.revokeObjectURL(n)},ft=async e=>{if(!h)return;let t=e.length===1?e[0]:null;ke(!0);try{let n=t?await s.file(h.id,t):await s.zip(h.id,e);ut(n,t??`${h.name}.zip`)}catch(e){Qe($e(e),`error`)}finally{ke(!1)}},pt=async e=>{if(!h||h.system)return;let t=[...e];if(!t.length)return;let n=t.map(e=>({id:q.current++,file:e,state:`uploading`}));we(e=>[...e,...n]);for(let e of n)try{await s.upload(h.id,e.file.name,e.file),we(t=>t.map(t=>t.id===e.id?{...t,state:`done`}:t))}catch(t){we(n=>n.map(n=>n.id===e.id?{...n,state:`error`,error:$e(t)}:n))}await Ze()},mt=e=>void pt([e.file]),ht=async(e,t)=>{if(h&&N)try{await s.copyFiles(t.id,h.id,N.names,e===`move`),P(null),w(new Set),await Ze(),Qe(e===`move`?`Moved to ${t.name}.`:`Copied to ${t.name}.`)}catch(e){Qe($e(e),`error`),P(null)}},gt=()=>se(async()=>{if(h&&B.trim())try{let e=await s.createSource(B.trim(),h.type);try{await s.copyFiles(e.id,h.id,[...C],!1)}catch(t){throw await s.removeSource(e.id).catch(()=>{}),t}re(!1),ie(``),w(new Set),await Xe(),Qe(`Made a new Source.`)}catch(e){Qe($e(e),`error`)}}),_t=()=>se(async()=>{if(B.trim()){G(null);try{await s.createSource(B.trim(),ce),A(!1),ie(``),le(Y().DEFAULT_SOURCE_TYPE),await Xe()}catch(e){G($e(e))}}}),vt=T&&(0,$.jsx)(op,{source:T,onSaved:e=>{f(t=>(t??[]).map(t=>t.id===e.id?Vu(e):t)),_(t=>t?.id===e.id?{...t,name:e.name,config:e.config??null}:t)},onClose:()=>E(null)}),yt=e=>o({tab:`library`,section:`sources`,id:e.id}),bt=(e,t)=>e.system?[yt(e)]:[{label:`Edit…`,icon:L,onSelect:()=>E(e)},yt(e),{label:`Copy or move…`,icon:J.transfer,onSelect:()=>R(e)},{label:`Delete`,icon:g,destructive:!0,onSelect:()=>void ct(e).then(t)}],xt=e=>[{label:`Preview`,icon:Ht,onSelect:()=>M(e)},{label:`Download`,icon:K,onSelect:()=>void ft([e.name])},...h?.system?[]:[{label:`Remove`,icon:g,destructive:!0,onSelect:()=>void lt([e.name])}]],St=[...h?.system?[]:[{label:`Remove`,icon:g,destructive:!0,onSelect:()=>void lt([...C])}],{label:`Download`,icon:K,busy:Oe,onSelect:()=>void ft([...C])},...h?.system?[]:[{label:`Move to…`,icon:br,onSelect:()=>P({kind:`move`,names:[...C]})}],{label:`Copy to…`,icon:Pe,onSelect:()=>P({kind:`copy`,names:[...C]})},...h?.system?[]:[{label:`New Source from selection…`,icon:Sr,onSelect:()=>re(!0)}]],Ct=e=>{e.preventDefault(),Ee(!1),h&&!h.system&&pt(e.dataTransfer.files)},wt=I&&(0,$.jsx)(yc,{subject:{kind:`source`,id:I.id,name:I.name},scan:{pipelines:l.list,groups:u.list??[]},undo:c,accountShare:ee,onClose:()=>{R(null),te(void 0)},onChanged:()=>{Xe(),e===I.id&&t?.(null)}}),Tt=(d??[]).filter(e=>(!_e||kp(e)===_e)&&e.name.toLowerCase().includes(he.trim().toLowerCase())),Et=(0,$.jsx)(xp,{view:He,onChange:at}),Dt=e=>(0,$.jsx)(ne,{noun:`Sources`,search:{label:`Find a Source`,value:he,placeholder:`Name`,onChange:ge},filters:[{key:`type`,label:`Type`,value:_e,onChange:ve,options:[{value:``,label:`All`},...Ep(ye).filter(e=>!e.disabled)]}],trail:e,count:{shown:Tt.length,total:(d??[]).length}}),kt=()=>(0,$.jsxs)(`div`,{className:`sources`,"data-level":`sources`,children:[(0,$.jsx)(Le,{said:xe}),(0,$.jsxs)(`header`,{className:`shead`,children:[(0,$.jsx)(`h2`,{className:`shead-title`,children:`Sources`}),Et]}),d!==null&&d.length>0&&Dt(),d===null?(0,$.jsx)(Ot,{label:`Sources`,error:Ae,onRetry:()=>{je(null),Re(e=>e+1)}}):d.length===0?(0,$.jsx)(`p`,{className:`unset`,children:`(No Sources)`}):He===`thumbs`?(0,$.jsx)(`ul`,{className:`sfolders`,children:Tt.map(e=>(0,$.jsx)(`li`,{className:`sfolder`,children:(0,$.jsxs)(`button`,{type:`button`,className:`pane sfolder-open${a?.(e)?` off`:``}`,disabled:a?.(e),onClick:()=>i?.(e),children:[(0,$.jsx)(fp,{name:Op(e)}),(0,$.jsx)(`span`,{className:`sfolder-name`,children:e.name}),(0,$.jsx)(`span`,{className:`sfolder-meta`,children:Ap(e)})]})},e.id))}):(0,$.jsx)(x,{className:`slist slist-folders`,label:`Sources`,rows:Tt,rowKey:e=>e.id,columns:[{key:`name`,header:`Name`,className:`sfile-name`,role:`title`,sort:e=>e.name,cell:e=>(0,$.jsxs)(`button`,{type:`button`,className:`srow-pick${a?.(e)?` off`:``}`,disabled:a?.(e),onClick:()=>i?.(e),children:[(0,$.jsx)(fp,{name:Op(e)}),e.name]})},{key:`type`,header:`Type`,sort:e=>Ap(e),cell:e=>Ap(e)},{key:`files`,header:`Items`,className:`num`,cell:e=>e.files},{key:`size`,header:`Size`,className:`num`,sort:e=>e.bytes,cell:e=>zu(e.bytes)}]})]});if(r===`pick`)return kt();if(e){if(!h)return(0,$.jsx)(`div`,{className:`sources`,children:(0,$.jsx)(Ot,{label:`Files`,error:Me,onRetry:()=>Be(e=>e+1)})});let e=rp[h.type]?.Level,n=!e&&!h.system,r=()=>t?.(null),i=(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(et,{kind:`Source`,name:h.name,onPick:d?.length?()=>O(!0):void 0,picking:D,meta:Ap(Vu(h)),primary:n?{label:`Upload…`,icon:fn,onSelect:()=>Ve.current?.click()}:void 0,actions:bt(Vu(h),r)}),D&&d&&(0,$.jsx)(ae,{kind:`Source`,value:h.id,onPick:e=>t?.(e),onClose:()=>O(!1),options:d.map(e=>({id:e.id,label:e.name}))}),vt,wt]});return e?(0,$.jsxs)(`div`,{className:`sources`,children:[i,(0,$.jsx)(e,{source:h,onBack:r,note:pe?.id===h.id?pe.text:void 0}),(0,$.jsx)(Ye,{undo:c.undo,onUndo:c.undoNow,onDismiss:c.dismiss})]}):(0,$.jsxs)(`div`,{className:`sources`,"data-level":`files`,children:[i,(0,$.jsx)(Le,{said:xe}),(0,$.jsxs)(rn,{id:`source-files`,title:`Files`,note:String(h.files.length),children:[h.files.length>0&&(0,$.jsx)(ne,{noun:`files`,search:{label:`Find a file`,value:b,placeholder:`Name`,onChange:S},filters:[{key:`sort`,label:`Sort`,value:Ue,neutral:`name`,options:Eu,onChange:e=>y(t=>({...t,sort:e,dir:Eu.find(t=>t.value===e)?.dir??1}))}],trail:Et,count:{shown:tt.length,total:h.files.length}}),He===`list`&&C.size>0&&(0,$.jsx)(oe,{count:C.size,noun:`file`,onClear:rt,actions:St}),(0,$.jsx)(`div`,{className:`pane sfiles${Te?` drag`:``}`,onDragOver:e=>{e.preventDefault(),Ee(!0)},onDragLeave:()=>Ee(!1),onDrop:Ct,children:tt.length===0?(0,$.jsx)(`p`,{className:`unset`,children:b?`(No matches)`:`(No files)`}):He===`thumbs`?(0,$.jsx)(`ul`,{className:`stiles`,children:tt.map(e=>(0,$.jsxs)(`li`,{className:`stile-cell`,children:[(0,$.jsxs)(`button`,{type:`button`,className:`stile`,title:e.name,"aria-label":e.name,onClick:()=>M(e),children:[(0,$.jsx)(_p,{id:h.id,file:e,text:!!Y().SOURCE_TYPES[h.type]?.itemText?.(e.name)}),(0,$.jsx)(`span`,{className:`stile-name`,children:e.name})]}),(0,$.jsx)(`span`,{className:`stile-menu`,children:(0,$.jsx)(it,{label:`${e.name} actions`,actions:xt(e)})})]},e.name))}):(0,$.jsx)(x,{className:`slist`,label:`${h.name} files`,rows:tt,rowKey:e=>e.name,sort:{key:Ue,dir:We===1?`asc`:`desc`},onSort:e=>y(t=>({...t,sort:e?.key??`name`,dir:e?.dir===`desc`?-1:1})),select:{noun:`file`,selected:C,onChange:w},rowProps:e=>({onClick:()=>nt(e.name)}),columns:[{key:`name`,header:`Name`,className:`sfile-name`,role:`title`,sort:e=>e.name,cell:e=>e.name},{key:`type`,header:`Type`,className:`stype`,sort:e=>Sp(e.name),cell:e=>Sp(e.name)},{key:`size`,header:`Size`,className:`num`,sort:e=>e.bytes,cell:e=>zu(e.bytes)},{key:`added`,header:`Added`,sort:e=>e.added,cell:e=>e.added?Bu(e.added):(0,$.jsx)(`span`,{className:`unset`,children:`(Unknown)`})},{key:`menu`,header:``,className:`s-actions`,role:`menu`,sort:null,tdProps:()=>({onClick:e=>e.stopPropagation()}),cell:e=>(0,$.jsx)(it,{label:`${e.name} actions`,actions:xt(e)})}]})})]}),n&&(0,$.jsxs)(`div`,{className:`supload`,children:[(0,$.jsx)(`input`,{ref:Ve,type:`file`,multiple:!0,hidden:!0,"aria-hidden":`true`,accept:Y().sourceTypeOf(h)?.uploads?.join(`,`),onChange:e=>{e.target.files&&pt(e.target.files),e.target.value=``}}),Ce.length>0&&(0,$.jsx)(`ul`,{className:`suploads`,children:Ce.map(e=>(0,$.jsxs)(`li`,{className:`supload ${e.state}`,children:[(0,$.jsx)(`span`,{className:`supload-name`,children:e.file.name}),e.state===`uploading`&&(0,$.jsx)(Ot,{inline:!0,label:`Uploading…`}),e.state===`done`&&(0,$.jsx)(`span`,{className:`note`,children:`Uploaded`}),e.state===`error`&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(st,{tone:`error`,inline:!0,children:e.error}),(0,$.jsx)(`button`,{type:`button`,className:`ghost`,onClick:()=>mt(e),children:`Retry`})]})]},e.id))})]}),j&&(0,$.jsxs)(Fe,{title:j.name,onClose:Ge,wide:!!Y().documentTypeOf(j.name),dismiss:`Close`,children:[(0,$.jsx)(bp,{id:h.id,file:j}),(0,$.jsx)(`p`,{className:`note`,children:zu(j.bytes)})]}),N&&(0,$.jsx)(Fe,{title:N.kind===`move`?`Move to…`:`Copy to…`,onClose:qe,dismiss:`Cancel`,children:(0,$.jsx)(pp,{mode:`pick`,disabled:e=>e.id===h.id||e.system||e.type!==h.type,onPick:e=>void ht(N.kind,e)})}),z&&(0,$.jsxs)(Fe,{title:`New Source from selection`,onClose:Je,dirty:!!B.trim(),initialFocus:`input[aria-label="New Source name"]`,onEnter:B.trim()&&!H?()=>void gt():void 0,children:[(0,$.jsxs)(`label`,{className:`prompt`,children:[(0,$.jsx)(`span`,{className:`prop-name`,children:`Name`}),(0,$.jsx)(`input`,{"aria-label":`New Source name`,value:B,onChange:e=>ie(e.target.value)})]}),(0,$.jsxs)(`div`,{className:`sacts`,children:[(0,$.jsx)(`button`,{type:`button`,className:`ghost`,onClick:()=>re(!1),children:`Cancel`}),(0,$.jsxs)(`button`,{type:`button`,disabled:!B.trim()||H,"aria-busy":H||void 0,onClick:()=>void gt(),children:[H&&(0,$.jsx)(dt,{}),`Make`]})]})]}),(0,$.jsx)(Ye,{undo:c.undo,onUndo:c.undoNow,onDismiss:c.dismiss})]})}let At=rp[Dp(ce,ye)]?.Create,jt={key:`type`,label:`Type`,control:{type:`cards`,value:ce,onChange:e=>{le(e),de(null)},options:Ep(ye).map(e=>({...e,icon:(0,$.jsx)(fp,{name:e.icon})}))}},Mt=At?!!ue?.enabled&&!ue.busy:!!B.trim()&&!H,Nt=()=>{At?ue?.enabled&&ue.run():_t()};return(0,$.jsxs)(`div`,{className:`sources`,"data-level":`sources`,children:[(0,$.jsx)(Le,{said:xe}),(0,$.jsxs)(rn,{id:`library-sources`,title:`Sources`,children:[d!==null&&d.length>0&&Dt(Et),d===null?(0,$.jsx)(Ot,{label:`Sources`,error:Ae,onRetry:()=>{je(null),Re(e=>e+1)}}):d.length===0?(0,$.jsx)(`p`,{className:`unset`,children:`(No Sources)`}):He===`thumbs`?(0,$.jsx)(`ul`,{className:`sfolders`,children:Tt.map(e=>(0,$.jsxs)(`li`,{className:`sfolder`,children:[(0,$.jsxs)(`button`,{type:`button`,className:`pane sfolder-open`,onClick:()=>t?.(e.id),children:[(0,$.jsx)(fp,{name:Op(e)}),(0,$.jsx)(`span`,{className:`sfolder-name`,children:e.name}),(0,$.jsx)(`span`,{className:`sfolder-meta`,children:Ap(e)}),wp(e)&&(0,$.jsxs)(Tp,{source:e,cap:p,children:[(0,$.jsx)(`span`,{className:`squota-bar`,children:(0,$.jsx)(`span`,{className:`squota-fill`,style:{width:`${Cp(e.bytes,p)}%`}})}),(0,$.jsx)(`span`,{className:`squota-pct`,children:`${Cp(e.bytes,p)}%`})]})]}),(0,$.jsx)(`span`,{className:`sfolder-menu`,children:(0,$.jsx)(it,{label:`${e.name} actions`,actions:bt(e)})})]},e.id))}):(0,$.jsx)(`div`,{className:`pane sfiles`,children:(0,$.jsx)(x,{className:`slist slist-folders`,label:`Sources`,rows:Tt,rowKey:e=>e.id,rowProps:e=>({"data-open":e.id,onClick:n=>{n.target.closest(`button, a, input, .menu`)||t?.(e.id)}}),select:{noun:`Source`,actions:e=>[{label:`Delete`,icon:g,destructive:!0,disabled:e.every(e=>e.system),onSelect:()=>void ot(e.filter(e=>!e.system))}]},columns:[{key:`name`,header:`Name`,className:`sfile-name`,role:`title`,sort:e=>e.name,cell:e=>(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(fp,{name:Op(e)}),(0,$.jsx)(`button`,{type:`button`,className:`link-btn`,onClick:()=>t?.(e.id),children:e.name})]})},{key:`type`,header:`Type`,sort:e=>Ap(e),cell:e=>Ap(e)},{key:`files`,header:`Items`,className:`num`,cell:e=>e.files},{key:`size`,header:`Size`,className:`num`,sort:e=>e.bytes,cell:e=>zu(e.bytes)},{key:`used`,header:`Used`,className:`num`,sort:e=>wp(e)?e.bytes:null,cell:e=>wp(e)?(0,$.jsx)(Tp,{source:e,cap:p,children:(0,$.jsx)(`span`,{className:`squota-pct`,children:`${Cp(e.bytes,p)}%`})}):(0,$.jsx)(`span`,{className:`unset`,children:`(n/a)`})},{key:`menu`,header:``,className:`s-actions`,role:`menu`,sort:null,tdProps:()=>({onClick:e=>e.stopPropagation()}),cell:e=>(0,$.jsx)(it,{label:`${e.name} actions`,actions:bt(e)})}]})}),vt,(0,$.jsx)(`div`,{className:`sfoot`,children:(0,$.jsxs)(`button`,{type:`button`,className:`ghost add-btn`,onClick:()=>A(!0),children:[(0,$.jsx)(U,{size:14,"aria-hidden":`true`}),` Add source`]})})]}),k&&(0,$.jsxs)(Fe,{title:`Add source`,onClose:Ke,dirty:!!B.trim(),className:`edit sadd`,initialFocus:`.prop[data-key="name"] input`,onEnter:Mt?Nt:void 0,footer:(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`button`,{type:`button`,className:`ghost`,onClick:Ke,children:`Cancel`}),(0,$.jsxs)(`button`,{type:`button`,disabled:At?!ue?.enabled:!B.trim()||H,"aria-busy":(At?ue?.busy:H)||void 0,onClick:Nt,children:[(At?ue?.busy:H)&&(0,$.jsx)(dt,{}),`Add source`]})]}),children:[At?(0,$.jsx)(At,{typeRow:jt,which:ce,bind:de,onMade:async(e,n)=>{A(!1),le(Y().DEFAULT_SOURCE_TYPE),await Xe(),n&&(me({id:e.id,text:n}),t?.(e.id))}}):(0,$.jsx)(F,{label:`New Source`,rows:[jt,{key:`name`,label:`Name`,width:`full`,control:{type:`text`,value:B,onChange:e=>{ie(e),G(null)}}}]}),!At&&fe&&(0,$.jsx)(st,{tone:`error`,children:fe})]}),wt,(0,$.jsx)(Ye,{undo:c.undo,onUndo:c.undoNow,onDismiss:c.dismiss})]})}var mp=`evals-lab.sources.adding`;function hp(){try{return sessionStorage.getItem(mp)}catch{return null}}function gp(e){try{e?sessionStorage.setItem(mp,e):sessionStorage.removeItem(mp)}catch{}}function _p({id:e,file:t,text:n}){let[r,i]=(0,X.useState)(!1),a=yp(n?e:null,t,vp);return Y().documentTypeOf(t.name)?(0,$.jsxs)(`span`,{className:`stile-type`,children:[(0,$.jsx)(fr,{size:32,"aria-hidden":`true`}),Sp(t.name)]}):a?(0,$.jsx)(`span`,{className:`stile-text`,"aria-hidden":`true`,children:a}):!t.thumb||r?(0,$.jsx)(`span`,{className:`stile-type`,children:Sp(t.name)||`FILE`}):(0,$.jsx)(`img`,{className:`stile-img`,src:Fu(e,t),alt:``,loading:`lazy`,onError:()=>i(!0)})}var vp=600;function yp(e,t,n){let r=Z(),[i,a]=(0,X.useState)(null);return(0,X.useEffect)(()=>{if(!e)return;let i=!0;return Promise.resolve().then(()=>r.file(e,t.name)).then(e=>(n?e.slice(0,n):e).text()).then(e=>{i&&a(e)},()=>{}),()=>{i=!1}},[r,e,t.name,t.v,n]),i}function bp({id:e,file:t}){let n=Z(),r=Pu(t.name),i=r?void 0:Y().documentTypeOf(t.name)?.media,[a,o]=(0,X.useState)(null),[s,c]=(0,X.useState)(null),[l,u]=(0,X.useState)(0);return(0,X.useEffect)(()=>{if(r)return;let a=null,s=!0;return o(null),c(null),n.file(e,t.name).then(async e=>{if(!s)return;if(i){a=URL.createObjectURL(new Blob([e],{type:i})),o({url:a});return}let t=await e.text();s&&o({text:t})}).catch(e=>{s&&c(Q(e,`the request failed`))}),()=>{s=!1,a&&URL.revokeObjectURL(a)}},[n,e,t.name,t.v,r,i,l]),r?(0,$.jsx)(`img`,{className:`spreview-img`,src:Iu(e,t),alt:t.name}):a&&`url`in a?(0,$.jsx)(`iframe`,{className:`spreview-doc`,src:a.url,title:t.name}):a?(0,$.jsx)(`pre`,{className:`mono-block spreview-text`,tabIndex:0,children:a.text}):(0,$.jsx)(Ot,{error:s,onRetry:()=>u(e=>e+1)})}function xp({view:e,onChange:t}){return(0,$.jsx)(B,{label:`View`,value:e,onChange:e=>t(e),options:[{value:`thumbs`,label:`Thumbnails`},{value:`list`,label:`List`}]})}function Sp(e){let t=e.lastIndexOf(`.`);return t<0?``:e.slice(t+1).toUpperCase()}function Cp(e,t){return t<=0?0:Math.max(0,Math.min(100,Math.round(e/t*100)))}var wp=e=>!e.system&&!rp[e.type]?.Level;function Tp({source:e,cap:t,children:n}){let r=`Quota: ${zu(e.bytes)} of ${zu(t)}`;return(0,$.jsxs)(`span`,{className:`squota`,role:`img`,"aria-label":r,children:[n,(0,$.jsx)(`span`,{className:`squota-pop`,"aria-hidden":`true`,children:r})]})}var Ep=(e=[])=>Object.entries(Y().SOURCE_TYPES).flatMap(([t,n])=>n.platforms?n.platforms.flatMap(e=>{let n=Y().WORKFLOW_PLATFORMS[e];return n?[{value:e,label:n.label,icon:dp(t,e)}]:[]}):n.providers?e.map(e=>({value:e.id,label:e.label,icon:dp(t,void 0,e.id),...e.enrolled?{}:{disabled:!0,note:e.note??`set by the server`}})):[{value:t,label:n.label,icon:dp(t)}]),Dp=(e,t=[])=>{if(e in Y().SOURCE_TYPES)return e;let n=Object.entries(Y().SOURCE_TYPES).find(([,t])=>t.platforms?.includes(e))?.[0];if(n)return n;if(t.some(t=>t.id===e)||e in Y().DYNAMIC_PROVIDERS){let e=Object.entries(Y().SOURCE_TYPES).find(([,e])=>e.providers)?.[0];if(e)return e}return e},Op=e=>dp(e.type,e.platform,e.provider),kp=e=>e.provider??e.platform??e.type,Ap=e=>e.provider?Y().DYNAMIC_PROVIDERS[e.provider]?.label??Y().SOURCE_TYPES[e.type]?.label??e.type:e.platform?Y().WORKFLOW_PLATFORMS[e.platform]?.label??Y().SOURCE_TYPES[e.type]?.label??e.type:Y().SOURCE_TYPES[e.type]?.label??e.type;function jp({sourceId:e}){let[t,n]=(0,X.useState)(e);return(0,X.useEffect)(()=>n(e),[e]),(0,$.jsx)(pp,{sourceId:t,onOpen:e=>{n(e),fa({tab:`library`,section:`sources`,id:e})},onGone:()=>pa({tab:`library`,section:`sources`,id:null})})}var Mp=[{id:`datasets`,label:`Evals`,icon:ke},{id:`filters`,label:`Filter sets`,icon:be},{id:`prompts`,label:`Prompts`,icon:ue},{id:`sources`,label:`Sources`,icon:C}];function Np({section:e,id:t}){return(0,$.jsxs)(`div`,{className:`library`,children:[(0,$.jsx)(jt,{label:`Library`,level:`section`,className:`lib-sections`,current:e,items:Mp.map(({id:e,label:t,icon:n})=>({key:e,label:t,href:da({tab:`library`,section:e,id:null}),icon:n}))}),(0,$.jsx)(`section`,{className:`lib-section`,"data-section":e,children:e===`datasets`?(0,$.jsx)(ol,{groupId:t}):e===`filters`?(0,$.jsx)(pu,{setId:t}):e===`prompts`?(0,$.jsx)(Tu,{promptId:t}):(0,$.jsx)(jp,{sourceId:t})})]})}function Pp(e,t){e.focus(t),e.setAttribute(`data-focus-ring`,``);let n=()=>{e.removeAttribute(`data-focus-ring`),e.removeEventListener(`blur`,n),document.removeEventListener(`pointerdown`,n,!0)};e.addEventListener(`blur`,n),document.addEventListener(`pointerdown`,n,!0)}var Fp=Y().WIZARDS,Ip=Y().wizardProgress;function Lp(e){return Y().targetsOf(e).some(e=>e.steps?.some(e=>e.type===`recorded`))}Y().WIZARDS[`test-workflow`]={id:`test-workflow`,title:`Test a Power Automate workflow`,blurb:`Vary a workflow action's request and grade the responses against what it recorded.`,steps:[{id:`source`,title:`Add a workflow Source`,detail:`In the Library, add the workflow and let it import its recent items.`,where:`#/library/sources`,focus:`.add-btn`,done:e=>e.sources.some(e=>!!e.platform)},{id:`test`,title:`Test an action`,detail:`Open the Source and Create test… on the action that calls the model.`,where:`#/library/sources`,done:e=>e.pipelines.some(e=>Lp(e.work))},{id:`run`,title:`Run the test`,detail:`On Experiments, change the editable variant's request and run it.`,where:`#/runs`,focus:`.action-bar-primary`,done:e=>e.runs.some(e=>Lp(e.snapshot))},{id:`compare`,title:`Compare the responses`,detail:`Open the finished run and read the two responses side by side.`,where:`#/history`,done:e=>e.runs.some(e=>e.status===`done`&&Lp(e.snapshot))}]};var Rp=(0,X.createContext)(null);function zp({children:e}){let t=Z(),[n,r]=xi(`promptlab.wizard`),[i]=xi(`promptlab.connections`),[a]=xi(`promptlab.workflows`),[o,s]=(0,X.useState)([]),[c,l]=(0,X.useState)([]),u=(0,X.useRef)(!!n);u.current=!!n,(0,X.useEffect)(()=>{let e=!0,n=()=>{t.sources().then(t=>{e&&s(t.sources)},()=>{}),t.queue({limit:20}).then(t=>{e&&l(t.runs)},()=>{})};n();let r=()=>{u.current&&n()};return window.addEventListener(`hashchange`,r),In.addEventListener(`write`,r),()=>{e=!1,window.removeEventListener(`hashchange`,r),In.removeEventListener(`write`,r)}},[t,n?.id]);let d=(0,X.useMemo)(()=>({profiles:i.list,pipelines:a.list,sources:o,runs:c}),[i.list,a.list,o,c]),f=(0,X.useMemo)(()=>Object.values(Fp),[]),p=n?Fp[n.id]??null:null,m=(0,X.useCallback)(e=>{Fp[e]&&r({id:e})},[r]),h=(0,X.useCallback)(()=>r(null),[r]),g=(0,X.useCallback)(e=>{location.hash!==e.where&&(location.hash=e.where),e.focus&&Hp(e.focus)},[]),_=(0,X.useMemo)(()=>({entries:f,active:p,lab:d,start:m,cancel:h,goToStep:g}),[f,p,d,m,h,g]);return(0,$.jsx)(Rp.Provider,{value:_,children:e})}function Bp(){let e=(0,X.useContext)(Rp);if(!e)throw Error(`useWizard outside a WizardProvider: the app mounts one at its root`);return e}function Vp(){let{active:e,lab:t}=Bp();return(0,X.useMemo)(()=>e?{entry:e,...Ip(e,t)}:null,[e,t])}function Hp(e,t=20){let n=document.querySelector(e);n?(Pp(n),n.scrollIntoView?.({block:`center`,behavior:`smooth`})):t>0&&requestAnimationFrame(()=>Hp(e,t-1))}var Up=e=>({tab:`home`,guide:e});function Wp(e,t){return e.some(e=>{let n=Ip(e,t);return n.total>0&&n.done===n.total})}function Gp(){let{entries:e,lab:t,start:n}=Bp(),[r,i]=xi(`promptlab.guidesDismissed`);return r||e.length===0||Wp(e,t)?null:(0,$.jsxs)(`section`,{className:`home-guides`,"aria-label":`Guides`,children:[(0,$.jsxs)(`div`,{className:`home-guides-head`,children:[(0,$.jsx)(`h2`,{className:`home-guides-title`,children:`Guides`}),(0,$.jsx)(`button`,{type:`button`,className:`icon-btn home-guides-dismiss`,"aria-label":`Dismiss guides`,onClick:()=>i(!0),children:(0,$.jsx)(G,{size:16,"aria-hidden":`true`})})]}),(0,$.jsx)(`p`,{className:`note`,children:`Step-by-step walk-throughs.`}),(0,$.jsx)(x,{className:`wiz-table`,cards:!0,label:`Guides`,rows:e,rowKey:e=>e.id,columns:[{key:`name`,header:`Guide`,role:`title`,cell:e=>(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`a`,{className:`link-btn wiz-list-name`,href:da(Up(e.id)),children:e.title}),(0,$.jsx)(`span`,{className:`note`,children:e.blurb})]})},{key:`progress`,header:`Steps`,sort:e=>Ip(e,t).done,cell:e=>{let n=Ip(e,t);return`${n.done}/${n.total}`}},{key:`start`,header:``,role:`menu`,sort:null,cell:e=>(0,$.jsx)(Ze,{label:`${e.title} actions`,actions:[{label:`Start`,icon:k,onSelect:()=>{n(e.id),fa(Up(e.id))}}]})}]})]})}function Kp({guideId:e}){let{entries:t,active:n,lab:r,start:i,cancel:a,goToStep:o}=Bp(),s=mc(),c=t.find(t=>t.id===e)??null;if((0,X.useEffect)(()=>{c||pa(Up(null))},[e,c]),!c)return null;let l=c.id===n?.id,{ticks:u,done:d,total:f,current:m}=Ip(c,r),h=m>=0?c.steps[m]:null,g=m<0;return(0,$.jsxs)(`div`,{className:`guide-view`,children:[(0,$.jsx)(et,{kind:`Guide`,name:c.title,meta:`${d} of ${f} complete`,actions:[s(Up(c.id))],docked:!0}),l?(0,$.jsx)(Ge,{primary:{label:`Next step`,icon:gt,onSelect:()=>h&&o(h),disabled:g},status:g?(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`b`,{children:`All steps done.`}),` Cancel to close it.`]}):(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(`b`,{children:[`Step `,m+1,` of `,f]}),` · `,h.title]}),secondary:{label:`Cancel guide`,icon:g?G:p,onSelect:a}}):(0,$.jsx)(Ge,{primary:{label:`Start`,icon:k,onSelect:()=>i(c.id)},status:g?(0,$.jsx)(`b`,{children:`All steps done.`}):(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(`b`,{children:[`Step `,m+1,` of `,f]}),` · `,h.title]})}),(0,$.jsx)(rn,{id:`home-guide-steps`,title:c.title,note:c.blurb,children:(0,$.jsx)(x,{className:`wiz-table`,cards:!0,label:`${c.title} steps`,rows:c.steps.map((e,t)=>({...e,n:t,state:u[t]?`done`:t===m?`now`:`todo`})),rowKey:e=>e.id,columns:[{key:`step`,header:`Step`,role:`title`,cell:e=>(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(`span`,{className:`wiz-step-title${e.state===`now`?` current`:``}`,children:[e.n+1,`. `,e.title]}),(0,$.jsx)(`span`,{className:`note`,children:e.detail})]})},{key:`state`,header:`Status`,cell:e=>(0,$.jsx)(`span`,{className:`wiz-row-state ${e.state}`,children:e.state===`done`?`Done`:e.state===`now`?`Next`:`To do`})},{key:`go`,header:``,role:`menu`,sort:null,cell:e=>(0,$.jsx)(Ze,{label:`${e.title} actions`,actions:[{label:`Go to step`,icon:wn,onSelect:()=>o(e)}]})}]})})]})}var qp=`0.17.0 (2026.11.11-1029)`,Jp=`https://www.npmjs.com/package/evals-lab?activeTab=code`,Yp=3,Xp=25,Zp=3e3,Qp=e=>qs.find(t=>t.id===e),$p=e=>Mp.find(t=>t.id===e);function em({guide:e=null}){return e?(0,$.jsx)(Kp,{guideId:e}):(0,$.jsx)(tm,{})}function tm(){let e=Z(),[t]=xi(`promptlab.connections`),n=(0,X.useMemo)(()=>t.list.filter(e=>Y().listedConnection(e)),[t.list]),[r,i]=xi(`promptlab.workflows`),a=zi(),o=Ji(),{pickDataset:s}=Ia(),{openRun:c}=za(),l=Ri(),u=qi(),[d,f]=(0,X.useState)(null),[p,m]=(0,X.useState)(null),[h,g]=(0,X.useState)(null),[_,v]=(0,X.useState)(null),[y,b]=(0,X.useState)(0),[x,S]=(0,X.useState)(0),[C,w]=(0,X.useState)(null);(0,X.useEffect)(()=>{let t=!0;return e.config().then(e=>{t&&w(e.newerVersion??null)},()=>{}),()=>{t=!1}},[e]);let T=e=>e instanceof Error?e.message:String(e);(0,X.useEffect)(()=>{let t=!0;return g(null),e.sources().then(e=>{t&&f(e.sources)},e=>{t&&g(T(e))}),()=>{t=!1}},[e,y]),(0,X.useEffect)(()=>{let t=!0,n;v(null);let r=()=>e.queue({limit:Xp}).then(e=>{t&&(m(e.runs),e.runs.some(e=>e.status===`queued`||e.status===`running`)&&(n=setTimeout(()=>void r(),Zp)))},e=>{t&&v(T(e))});return r(),()=>{t=!1,n&&clearTimeout(n)}},[e,x]);let E=(0,X.useMemo)(()=>r.list.filter(e=>e.work?.version===20),[r.list]),D=(0,X.useMemo)(()=>Ps(E),[E]),O=a.list??[],k=O.reduce((e,t)=>e+t.cases,0),A=n.length===0?`setup`:a.list===null?null:O.length===0||k===0?`datasets`:p!==null&&p.length===0?`runs`:null,j=(...e)=>e.filter(Boolean).join(`, `)||void 0,M=Qp(`library`),N=M.icon;return(0,$.jsxs)(`div`,{className:`home`,children:[(0,$.jsxs)(`div`,{className:`pane home-pane`,children:[(0,$.jsx)(Gp,{}),(0,$.jsxs)(`ol`,{className:`home-line`,"aria-label":`Lab`,children:[(0,$.jsx)(nm,{id:`runs`,icon:Qp(`runs`).icon,name:Qp(`runs`).label,hub:!A||A===`runs`,start:A===`runs`,fact:j(Qa(E.length,`experiment`)),total:E.length,items:E.map(e=>({key:e.id,label:e.name,title:e.name,href:da({tab:`runs`,id:e.id}),onPick:()=>i({...r,at:e.id})}))}),(0,$.jsx)(nm,{id:`history`,icon:Qp(`history`).icon,name:Qp(`history`).label,fact:p&&p.length===0?`(No runs)`:void 0,wait:p?void 0:{error:_,onRetry:()=>S(e=>e+1)},items:[],children:p&&p.length>0&&(0,$.jsx)(rm,{runs:p,choices:D,onOpen:e=>c(e.id,{at:e.submittedAt,from:`home`})})}),(0,$.jsxs)(`li`,{className:`home-stop home-fork`,"data-stop":`library`,children:[(0,$.jsxs)(`a`,{className:`home-name`,href:`#/library`,children:[(0,$.jsx)(`span`,{className:`home-mark`,"aria-hidden":`true`,children:(0,$.jsx)(N,{size:18})}),M.label]}),(0,$.jsxs)(`ol`,{className:`home-branch`,"aria-label":M.label,children:[(0,$.jsx)(nm,{id:`datasets`,to:`library/datasets`,branch:!0,icon:$p(`datasets`).icon,name:$p(`datasets`).label,start:A===`datasets`,fact:a.list?j(Qa(O.length,`eval`),Qa(k,`eval case`)):void 0,total:O.length,wait:a.list?void 0:{error:a.error,onRetry:()=>void l.refresh()},items:O.map(e=>({key:e.id,label:e.name,title:e.name,sub:Qa(e.cases,`eval case`),href:da({tab:`library`,section:`datasets`,id:e.id}),onPick:()=>s(e.id)}))}),(0,$.jsx)(nm,{id:`prompts`,to:`library/prompts`,branch:!0,icon:$p(`prompts`).icon,name:$p(`prompts`).label,fact:o.list?j(Qa(o.list.length,`prompt`)):void 0,total:o.list?.length??0,wait:o.list?void 0:{error:o.error,onRetry:()=>void u.refresh()},items:(o.list??[]).map(e=>{let t=Vi(e);return{key:e.id,label:t,title:t,sub:e.default?`Default`:void 0,href:da({tab:`library`,section:`prompts`,id:e.id})}})}),(0,$.jsx)(nm,{id:`sources`,to:`library/sources`,branch:!0,icon:$p(`sources`).icon,name:$p(`sources`).label,fact:d?j(Qa(d.length,`source`)):void 0,total:d?.length??0,wait:d?void 0:{error:h,onRetry:()=>b(e=>e+1)},items:(d??[]).map(e=>({key:e.id,label:e.name,title:e.name,sub:Qa(e.files,an(e)),href:da({tab:`library`,section:`sources`,id:e.id})}))})]})]}),(0,$.jsx)(nm,{id:`setup`,icon:Qp(`setup`).icon,name:Qp(`setup`).label,start:A===`setup`,fact:j(Qa(n.length,`connection`)),total:n.length,items:n.map(e=>({key:e.id,label:e.name||`Untitled`,title:e.name||`Untitled`,sub:e.model,href:da({tab:`setup`,section:`connections`,id:e.id})}))})]})]}),(0,$.jsxs)(`p`,{className:`home-version`,children:[`Evals Lab `,qp,C&&(0,$.jsxs)($.Fragment,{children:[` · `,(0,$.jsxs)(`a`,{href:Jp,target:`_blank`,rel:`noreferrer`,children:[C,` available`]})]})]})]})}function nm({id:e,icon:t,name:n,to:r,fact:i,items:a,total:o=a.length,hub:s,start:c,branch:l,wait:u,children:d}){let f=o-Math.min(a.length,Yp);return(0,$.jsxs)(`li`,{className:[`home-stop`,s&&`hub`,c&&`start`,l&&`branch`].filter(Boolean).join(` `),"data-stop":e,children:[(0,$.jsxs)(`a`,{className:`home-name`,href:`#/${r??e}`,children:[(0,$.jsx)(`span`,{className:`home-mark`,"aria-hidden":`true`,children:(0,$.jsx)(t,{size:l?15:18})}),n]}),c&&(0,$.jsx)(`a`,{className:`home-start`,href:`#/${r??e}`,children:(0,$.jsx)(wt,{tone:`amber`,children:`Start Here`})}),u&&(0,$.jsx)(Ot,{label:n,error:u.error,onRetry:u.onRetry}),!u&&i&&(0,$.jsx)(`span`,{className:`home-fact`,children:i}),!u&&d,!u&&a.length>0&&(0,$.jsxs)(`ul`,{className:`home-items`,children:[a.slice(0,Yp).map(e=>(0,$.jsx)(`li`,{children:(0,$.jsxs)(`a`,{href:e.href,title:e.title,onClick:t=>{e.onOpen?(t.preventDefault(),e.onOpen()):e.onPick?.()},children:[(0,$.jsx)(`span`,{className:`home-item`,children:e.label}),e.sub&&(0,$.jsx)(`span`,{className:`home-sub`,children:e.sub})]})},e.key)),f>0&&(0,$.jsx)(`li`,{children:(0,$.jsxs)(`a`,{className:`home-more`,href:`#/${r??e}`,children:[f,` more`]})})]})]})}function rm({runs:e,choices:t,onOpen:n}){let r=[],i=new Set;for(let n of e){let e=Fs(t,n),a=e?e.id:n.snapshot?.id?`${n.snapshot.id}\0${n.snapshot.name??``}`:n.id;if(i.has(a))continue;i.add(a);let o=t.filter(e=>e.doc===n.snapshot?.id).length>1;r.push({row:n,to:e?.id??(o?null:n.snapshot?.id??null)})}return(0,$.jsx)(`ul`,{className:`home-compare`,children:r.slice(0,Yp).map(({row:e,to:t})=>{let r=is(e),i=e.results||[],a=No(i,Mo(e)),o=Math.max(e.progress?.total??0,i.length),s=e.snapshot?.name||`Untitled`,c=e.status===`queued`||e.status===`running`,l=da({tab:`results`,id:e.id});return(0,$.jsxs)(`li`,{children:[(0,$.jsxs)(`div`,{className:`home-compare-head`,children:[t?(0,$.jsx)(`a`,{href:da({tab:`history`,section:`overview`,pipeline:t}),title:s,children:s}):(0,$.jsx)(`span`,{title:s,children:s}),c&&(0,$.jsx)(wt,{tone:`amber`,children:`Running`}),(0,$.jsx)(`a`,{className:`home-compare-run`,href:l,title:`${un(e.submittedAt)}, ${Za(e.submittedAt)}`,onClick:t=>{t.preventDefault(),n(e)},children:ze(e.submittedAt)})]}),r.scenarios.map((t,r)=>{let s=Array.from({length:o},(e,t)=>{let n=i[t],o=n&&!n.unrun?a[r]?.[t]??null:null,s=n?.name||`Item ${t+1}`;return{state:o==null?`none`:o?`pass`:`fail`,title:`${s}, ${o==null?n&&!n.unrun?`not graded`:`not run yet`:o?`passed`:`failed`}`}}),c=s.filter(e=>e.state===`pass`).length,u=s.filter(e=>e.title.endsWith(`not run yet`)).length;return(0,$.jsxs)(`div`,{className:`home-compare-row`,children:[(0,$.jsx)(`span`,{className:`home-compare-name`,title:t.name,children:t.name}),(0,$.jsx)(Yt,{className:`sm fit`,label:`${t.name}: ${c} of ${o} passed${u?`, ${u} not run yet`:``}`,cells:s,href:l,onOpen:()=>n(e)}),(0,$.jsx)(`span`,{className:`home-compare-n`,children:(0,$.jsx)(Xi,{n:c,of:o})})]},t.id??r)})]},e.id)})})}function im({list:e,at:t,canRestore:n,onSelect:r,onNew:i,onClone:a,link:o,onCopyMove:s,onRename:c,onDelete:l,onRestore:u,onExport:d,onExportCi:f,onImport:p,used:m={}}){let[h,_]=(0,X.useState)(!1),[v,y]=(0,X.useState)(!1),b=e.find(e=>e.id===t),x=[{label:`Rename…`,icon:L,onSelect:()=>_(!0)},{label:`Clone`,icon:Pe,onSelect:a},o,{label:`Copy or move…`,icon:J.transfer,onSelect:s},{label:`Export YAML`,icon:K,onSelect:d},{label:`Export for CI…`,icon:K,onSelect:f},{label:`Import YAML…`,icon:fn,onSelect:p},{label:`Restore…`,icon:re,disabled:!n,onSelect:u},{label:`Delete`,icon:g,destructive:!0,onSelect:l}],S=Y().jobsOf(b?.work).length,C=Y().targetsOf(b?.work).length;return(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(et,{kind:`Experiment`,kindId:`Pipeline`,name:b?.name?.trim()||`Untitled`,onPick:()=>y(!0),picking:v,meta:`${om(S,`request`)}, ${om(C,`variant`)}`,primary:{label:`New experiment`,icon:U,onSelect:i},actions:x,docked:!0}),v&&(0,$.jsx)(ae,{kind:`Experiment`,value:t,onPick:r,onClose:()=>y(!1),options:e.map(e=>{let t=m[e.id];return{id:e.id,label:e.name||`Untitled`,used:t?{at:t,label:un(t)}:null}}),recent:e.filter(e=>m[e.id]).sort((e,t)=>m[t.id].localeCompare(m[e.id])).slice(0,am).map(e=>e.id)}),h&&(0,$.jsx)($e,{title:`Rename experiment`,value:b?.name??``,onCommit:c,onClose:()=>_(!1)})]})}var am=5,om=(e,t)=>`${e} ${e===1?t:`${t}s`}`;function sm({hasItems:e,onExport:t,onClose:n}){let[r,i]=(0,X.useState)(!1),[a,o]=(0,X.useState)(!1),[s,c]=(0,X.useState)(null),l=async()=>{o(!0),c(null);try{await t(e&&r),n()}catch(e){c(e instanceof Error?e.message:String(e))}finally{o(!1)}};return(0,$.jsx)(w,{title:`Export for CI`,status:s??void 0,statusBad:!!s,onClose:n,sections:[{key:`bundle`,rows:[{key:`items`,label:`Include files`,...e?{hint:`Copy the Source's files into the zip. Off: evals-lab run needs --items.`}:{},control:e?{type:`checkbox`,checked:r,onChange:i}:{type:`static`,text:`(No files)`,none:!0}}]}],actions:[{label:`Export`,icon:K,busy:a,primary:!0,onSelect:()=>void l()}]})}function cm({problems:e,error:t,run:n,submitting:r,stopping:i=!1,onRun:a,onStop:o,onOpen:s,onShare:c}){let l=!!n&&!wo(n.status),u=l&&(i||To(n)),d=n?.progress?.total??0,f=n?.progress?.n??0,m=l&&d?Math.round(f/d*100):null,h=n&&(0,$.jsxs)(`button`,{type:`button`,className:`runbar-open`,title:`Open this run`,onClick:s,children:[(0,$.jsx)(`span`,{className:`runbar-word`,children:u?`Stopping`:no(n.status)}),lm(n)&&(0,$.jsx)(`span`,{className:`runbar-detail`,children:lm(n)})]}),g=l?h:e.length?(0,$.jsxs)(`span`,{className:`runbar-why`,children:[pm(e[0]),fm(e[0])]}):t?(0,$.jsxs)(`span`,{className:`runbar-why bad`,children:[pm(t),c&&(0,$.jsxs)($.Fragment,{children:[` `,(0,$.jsx)(`button`,{type:`button`,className:`link-btn runbar-fix`,onClick:c,children:`Share`})]})]}):h??(0,$.jsx)(`span`,{className:`runbar-word`,children:`Ready to run`});return(0,$.jsx)(Ge,{className:`runbar`,primary:{label:`Run`,icon:k,onSelect:a,disabled:e.length>0,busy:r},status:g,secondary:l?{label:u?`Stopping…`:`Stop`,icon:p,onSelect:o,busy:u}:void 0,progress:m,progressLabel:`Run progress`})}function lm(e){if(e.status===`queued`)return e.behind?`behind ${e.behind}`:`next in line`;if(e.status===`running`)return e.progress?.total?`${e.progress.n} of ${e.progress.total}`:``;if(e.status===`done`&&e.progress?.total){let t=so(e.startedAt,e.finishedAt);return t==null?String(e.progress.total):`${e.progress.total} in ${oo(t)}`}return``}var um=[[/^(?:Connection(?: Profile)?|Grader) .* not found$/,`#/setup`,`Open\xA0Setup`],[/^Source .* not found$/,`#/library/sources`,`Open\xA0Sources`],[/^(?:Dataset|Eval group|Eval) .* not found$/,`#/library/datasets`,`Open\xA0Evals`]],dm=e=>um.find(([t])=>t.test(e.trim()))?.[1];function fm(e){let t=um.find(([t])=>t.test(e.trim()));return t?(0,$.jsxs)($.Fragment,{children:[` `,(0,$.jsx)(`a`,{className:`runbar-fix`,href:t[1],children:t[2]})]}):null}var pm=e=>{let t=e.trim();if(!t)return t;let n=t[0].toUpperCase()+t.slice(1);return/[.!?]$/.test(n)?n:`${n}.`},mm=10;function hm({onPick:e,onClose:t,used:n}){let{list:r,error:i}=Ji(),o=qi(),[s,c]=(0,X.useState)(``),[l,u]=(0,X.useState)(`all`),[d,f]=(0,X.useState)(0),p=r??[],m=p.filter(e=>_u(e,s,l,n??{byScenario:new Set,byAll:new Set})).sort((e,t)=>Number(t.default)-Number(e.default)),h=Math.ceil(m.length/mm),g=Math.min(d,Math.max(0,h-1)),_=m.slice(g*mm,(g+1)*mm),v=s.trim()?_[0]:void 0,y=(0,X.useId)();return(0,$.jsxs)(Fe,{title:`Select prompt`,onClose:t,className:`sp`,initialFocus:`.sp input[type=search]`,onEnter:v&&(()=>e(v)),dismiss:`Cancel`,children:[(0,$.jsx)(ne,{noun:`prompts`,search:{label:`Search prompts`,placeholder:`Search prompts`,value:s,onChange:e=>{c(e),f(0)},describedBy:v?y:void 0,onKeyDown:a(y)},filters:[{key:`show`,label:`Show`,value:l,onChange:e=>{u(e),f(0)},options:hu}],count:{shown:m.length,total:p.length}}),r===null?(0,$.jsx)(Ot,{label:`Prompts`,error:i,onRetry:()=>void o.refresh()}):p.length===0?(0,$.jsx)(`p`,{className:`unset`,children:`(No prompts)`}):m.length===0?(0,$.jsx)(`p`,{className:`unset`,children:`(No matches)`}):(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`ul`,{className:`sp-list`,"aria-label":`Prompts`,children:_.map(t=>(0,$.jsx)(`li`,{children:(0,$.jsxs)(`button`,{type:`button`,className:`pane sp-pick${t===v?` top-match`:``}`,onClick:()=>e(t),...t===v?{onKeyDown:Ct}:{},children:[(0,$.jsxs)(`span`,{className:`sp-head`,children:[(0,$.jsx)(`span`,{className:`sp-title`,...t===v?{id:y}:{},children:Vi(t)}),t.default&&(0,$.jsx)(wt,{tone:`amber`,children:`Default`})]}),(0,$.jsx)(`span`,{className:`sp-text`,children:t.text.trim()||(0,$.jsx)(`span`,{className:`unset`,children:`(Empty)`})}),(0,$.jsxs)(`span`,{className:`sp-meta`,children:[(0,$.jsx)(`span`,{children:t.useCount===1?`1 use`:`${t.useCount} uses`}),t.lastUsed&&(0,$.jsxs)(`span`,{children:[`last `,vu(t.lastUsed)]}),(0,$.jsxs)(`span`,{children:[`v`,t.version]})]})]})},t.id))}),(0,$.jsx)(R,{label:`Prompts`,page:g,size:mm,total:m.length,onPage:f})]})]})}function gm({what:e,options:t,recent:n,taken:r,linkedHere:i,ready:a,onPick:o,onMove:s,onClose:c}){let[l,u]=(0,X.useState)(`new`),[d,f]=(0,X.useState)(``),[p,h]=(0,X.useState)(``),[g,_]=(0,X.useState)(!1),[v,y]=(0,X.useState)(null),b=(0,X.useId)(),x=d.trim(),S=l===`new`&&r.has(x),C=t.find(e=>e.id===p),w=!g&&(l===`new`?!!x&&!S:!!p&&a(p)),T=async()=>{if(!w)return;_(!0),y(null);let e=await s(l===`new`?{kind:l,name:x}:{kind:l,id:p});e?(y(e),_(!1)):c()};return(0,$.jsxs)(Fe,{title:`Move ${e} to a filter set`,onClose:c,className:`move-to-set`,dirty:!!x||!!p,initialFocus:`.mv-name`,onEnter:w?()=>void T():void 0,footer:(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`button`,{type:`button`,className:`ghost`,onClick:c,children:`Cancel`}),(0,$.jsx)(`button`,{type:`button`,disabled:!w,"aria-busy":g||void 0,onClick:()=>void T(),children:`Move`})]}),children:[(0,$.jsx)(m,{label:`Filter set`,value:l,onChange:e=>u(e),options:[{value:`new`,label:`New filter set`,children:(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`input`,{className:`mv-name`,type:`text`,"aria-label":`Name`,placeholder:`Name`,value:d,...S?{"aria-invalid":!0,"aria-describedby":b}:{},onChange:e=>f(e.target.value)}),S&&(0,$.jsxs)(st,{tone:`error`,id:b,children:[`A filter set named `,x,` already exists.`]})]})},{value:`existing`,label:`Existing filter set`,children:e=>(0,$.jsx)(Me,{kind:`Filter set`,value:p,options:t,recent:n,usedLabel:`Last changed`,placeholder:`Choose a filter set`,labelledBy:e,onChange:e=>{u(`existing`),h(e),o?.(e)}})}]}),l===`existing`&&C&&i.has(p)&&(0,$.jsxs)(`p`,{className:`note`,children:[C.label,` is already linked here, so `,e,` joins its end and runs where it runs.`]}),v&&(0,$.jsx)(st,{tone:`error`,children:v})]})}function _m(e,t){return e==null?`Follow latest`:t!=null&&t>e?`Pinned v${e} · v${t} is latest`:`Pinned v${e}`}function vm(e,t){if(!e||!t)return null;let n=e.cases.map(e=>Y().caseItem(e));return{found:Y().itemsFound(n,t),total:n.length}}function ym({pipeline:e,edit:t,offer:n,children:r,contentFiles:i}){let a=Ri(),{list:o}=zi(),[s,c]=(0,X.useState)(!1),[l,u]=(0,X.useState)(null),d=e.evals,[,f]=(0,X.useState)(0);(0,X.useEffect)(()=>a.subscribe(()=>f(e=>e+1)),[a]),(0,X.useEffect)(()=>{for(let e of d)e.group&&a.load(e.group.id)},[d,a]);let p=(r,i)=>{let a=e;t(r),n({label:i,restore:()=>t(a)})},m=e=>a.entry(e)?.doc?.body??null,h=new Map((o??[]).map(e=>[e.id,e])),g=new Set(d.flatMap(e=>e.group?[e.group.id]:[])),_=d.flatMap((e,t)=>e.group?[{t:e,j:t}]:[]),v=d.flatMap((e,t)=>e.own?[{t:e,j:t}]:[]),y=async(t,n,r)=>{await a.flush(n),await a.refresh();let{list:i,error:o}=a.list(),s=o?void 0:i?.find(e=>e.id===n)?.versions;s!=null&&p(S(e,t,s),`Pinned ${r}`)},b=({t,j:n})=>{let r=t.group.id;return[{label:`Open in Library`,icon:C,onSelect:()=>$s(r)},t.pin==null?{label:`Pin`,icon:Wr,disabled:!h.has(r),onSelect:()=>{y(n,r,t.group.name||r)}}:{label:`Follow latest`,icon:Hr,onSelect:()=>p(S(e,n,null),`${t.group.name||r} follows the latest`)},{label:`Unlink`,icon:vi,onSelect:()=>p(z(e,n),`Unlinked ${t.group.name||r}`)}]};return(0,$.jsxs)(rn,{id:`evals`,title:`Evals`,level:2,note:d.length?String(d.length):void 0,children:[d.length===0&&(0,$.jsx)(`p`,{className:`repeater-empty`,children:`(No evals)`}),d.length>0&&(0,$.jsx)(xm,{pass:e.pass,count:d.length,edit:n=>t(Te(e,n))}),_.length>0&&(0,$.jsx)(x,{className:`eg-links`,cards:!0,label:`Linked evals`,rows:_,rowKey:e=>e.t.id,columns:[{key:`group`,header:`Eval`,role:`title`,sort:e=>(e.t.group.name||``).toLowerCase(),cell:e=>(0,$.jsx)(`button`,{type:`button`,className:`link-btn`,onClick:()=>$s(e.t.group.id),children:e.t.group.name||e.t.group.id})},{key:`items`,header:`Eval Cases here`,sort:e=>vm(m(e.t.group.id),i)?.found??-1,cell:e=>{let t=vm(m(e.t.group.id),i);if(!t)return`…`;let n=`${t.found} of ${t.total}`;return t.found<t.total?(0,$.jsxs)(`span`,{className:`eval-flag`,title:`${t.total-t.found} not in this run's content`,children:[(0,$.jsx)(gr,{size:12,"aria-hidden":`true`}),n]}):n}},{key:`follows`,header:`Version`,sort:e=>e.t.pin??0,cell:e=>_m(e.t.pin,h.get(e.t.group.id)?.versions)},{key:`menu`,header:``,label:``,role:`menu`,sort:null,cell:e=>(0,$.jsx)(it,{label:`${e.t.group.name||e.t.group.id} actions`,actions:b(e)})}]}),(0,$.jsxs)(`button`,{type:`button`,className:`ghost add-btn`,onClick:()=>c(!0),children:[(0,$.jsx)(J.add,{size:14,"aria-hidden":`true`}),`Link eval`]}),r,v.map(({t:n,j:r})=>(0,$.jsx)(bm,{ev:n,label:Y().evalLabel(e,r),renaming:l===r,onRename:()=>u(r),rawReply:Y().jobsOf(e).some(e=>Y().readAsOf(e)!=null),casesBody:n.own.casesFrom?m(n.own.casesFrom.id):null,loadCases:()=>{n.own.casesFrom&&a.load(n.own.casesFrom.id)},set:n=>t(Cn(e,r,n)),undoableSet:(t,n)=>p(Cn(e,r,t),n),onCommitName:n=>{t(I(e,r,n)),u(null)},onCancelName:()=>u(null),onCopyCases:t=>p(Ie(e,r,t),`Copied ${Y().evalLabel(e,r)}'s eval cases in`),onMoveToLibrary:async()=>{let t=xe((n.name||``).trim()||Y().evalLabel(e,r),new Set((o??[]).map(e=>e.name))),{casesFrom:i,...s}=n.own,c=await a.create(t,s);p(he(e,r,{id:c.id,name:c.name}),`Moved ${t} to the Library`)},onRemove:()=>p(z(e,r),`Removed ${Y().evalLabel(e,r)}`)},n.id)),s&&(0,$.jsx)(Sm,{list:o??[],linkedIds:g,contentFiles:i,onLink:n=>{t(dn(e,n)),c(!1)},onNew:async()=>{let n=await a.create(xe(`Untitled eval`,new Set((o??[]).map(e=>e.name))));t(dn(e,{id:n.id,name:n.name})),c(!1)},onClose:()=>c(!1)})]})}function bm({ev:e,label:t,renaming:n,onRename:r,rawReply:i,casesBody:a,loadCases:o,set:s,undoableSet:c,onCommitName:l,onCancelName:u,onCopyCases:d,onMoveToLibrary:f,onRemove:p}){let m=Y(),h=Nc(),g=e.own;(0,X.useEffect)(()=>{g.casesFrom&&o()},[g.casesFrom,o]);let _=m.isWholeRun(m.EVAL_TYPES.group,e),v=_?g.run:g.every,y=t=>s({...e,own:{...g,...t}}),b=t=>({...e,own:{...g,..._?{run:t}:{every:t}}}),x=v.some(e=>m.METRICS[e.type]?.graded),{mode:S,threshold:C}=g.scoring,w=[{label:`Rename…`,icon:J.rename,onSelect:r},...g.casesFrom?[{label:`Copy eval cases in`,icon:se,disabled:!a,onSelect:()=>a&&d(a.cases)}]:[],{label:`Move to Library`,icon:wr,onSelect:()=>void f()},{label:`Remove`,icon:J.remove,destructive:!0,onSelect:p}],T=[{key:`mode`,label:`Item passes when`,control:{type:`select`,value:S,options:[{value:`all`,label:`All metrics pass`},{value:`weighted`,label:`Points`}],onChange:e=>y({scoring:{mode:e===`weighted`?`weighted`:`all`,threshold:e===`weighted`?C??1:C}})}},...S===`weighted`?[{key:`threshold`,label:`Pass at`,width:`quarter`,control:{type:`text`,value:C==null?``:String(C),onChange:e=>y({scoring:{mode:S,threshold:e.trim()?/^-?\d+(\.\d+)?$/.test(e.trim())?Number(e):e:null}})}}]:[],...g.casesFrom?[]:[{key:`over`,label:`Reads`,control:{type:`select`,value:_?`run`:`item`,options:[{value:`item`,label:`Each item`},{value:`run`,label:`Whole run`}],onChange:e=>y(e===`run`?{every:[],run:[...g.every,...g.run]}:{every:[...g.every,...g.run],run:[]})}}],...g.casesFrom?[{key:`cases-from`,label:`Eval cases from`,control:{type:`static`,text:g.casesFrom.name||g.casesFrom.id}}]:[],...x||g.grader?[{key:`grader`,label:`Grader`,control:h.control(g.grader?.id??``,e=>{let t=h.asked.find(t=>t.id===e);y({grader:t?{id:t.id,name:t.name}:null})})}]:[]];return(0,$.jsx)(rn,{id:`eval-${e.id}`,title:t,level:3,note:m.EVAL_TYPES.group?.label??`Eval`,about:`An eval of this experiment's own, defined here rather than in the Library.`,actions:w,...n?{rename:{value:e.name||t,onCommit:l,onCancel:u}}:{},children:(0,$.jsxs)(Ae,{children:[(0,$.jsx)(F,{label:t,rows:T}),(0,$.jsx)(wc,{label:t,metrics:v,over:_?`run`:`item`,rawReply:i,set:e=>s(b(e)),undoable:(e,t)=>c(b(e),t)}),(0,$.jsx)(F,{label:`${t} on failure`,rows:[{key:`continue`,label:`Continue on failure`,control:{type:`checkbox`,checked:e.continueOnFailure,onChange:t=>s({...e,continueOnFailure:t})}}]})]})})}function xm({pass:e,count:t,edit:n}){let r=e.mode===`atLeast`?e.count:t,i=[{key:`pass`,label:`Run passes when`,control:{type:`select`,value:e.mode,options:[{value:`all`,label:`All evals pass`},{value:`atLeast`,label:`At least`}],onChange:e=>n(e===`atLeast`?{mode:`atLeast`,count:Math.min(Math.max(r,1),t)}:{mode:`all`})}},...e.mode===`atLeast`?[{key:`count`,label:`Evals`,width:`quarter`,control:{type:`text`,value:String(e.count),onChange:e=>{let t=Number(e);n({mode:`atLeast`,count:Number.isInteger(t)&&t>0?t:e.trim()})}}}]:[]];return(0,$.jsx)(F,{rows:i})}function Sm({list:e,linkedIds:t,contentFiles:n,onLink:r,onNew:i,onClose:a}){let o=Ri(),[,s]=(0,X.useState)(0);(0,X.useEffect)(()=>o.subscribe(()=>s(e=>e+1)),[o]),(0,X.useEffect)(()=>{for(let t of e)o.load(t.id)},[e,o]);let c=e=>vm(o.entry(e)?.doc?.body,n),l=Ec(e,t=>e.find(e=>e.id===t)?.updated),u=l.options.map(e=>{let n=c(e.id);return{...e,chosen:t.has(e.id),detail:n&&n.total?`${n.found} of ${n.total} eval cases here`:void 0}});return(0,$.jsx)(ae,{kind:`Eval`,title:`Link eval`,usedLabel:`Last changed`,detailLabel:`Eval Cases`,value:``,options:u,recent:l.recent,onPick:t=>{let n=e.find(e=>e.id===t);n&&r({id:n.id,name:n.name})},onClose:a,footer:(0,$.jsxs)(`button`,{type:`button`,className:`ghost pick-item`,onClick:()=>void i(),children:[(0,$.jsx)(J.add,{size:14,"aria-hidden":`true`}),`New eval…`]})})}var Cm=(e,t)=>e.entry(t)?.doc?.body??null,wm=e=>t=>(t.own??(t.set?Cm(e,t.set.id):null))?.format!=null;function Tm(e,t){return e.entry(t)?.doc?Promise.resolve(!0):new Promise(n=>{let r=e.subscribe(()=>{let a=e.entry(t);(a?.doc||a&&a.sync.state===`missing`)&&(r(),clearTimeout(i),n(!!a.doc))}),i=setTimeout(()=>{r(),n(!1)},1e4);e.load(t)})}function Em({pipeline:n,job:i,format:a,edit:s,offer:c,moveAll:u,onMoveAllClose:d}){let f=ml(),{list:p}=hl(),[m,h]=(0,X.useState)(new Set),[g,_]=(0,X.useState)(null),[v,y]=(0,X.useState)(null),[b,S]=(0,X.useState)(null),[w,T]=(0,X.useState)(null),[E,O]=(0,X.useState)(null),[,k]=(0,X.useState)(0);(0,X.useEffect)(()=>f.subscribe(()=>k(e=>e+1)),[f]);let A=Y().filterSetsOf(Y().jobsOf(n)[i]),M=A.flatMap(e=>e.set?[e.set.id]:[]).join(` `);(0,X.useEffect)(()=>{for(let e of M.split(` `).filter(Boolean))f.load(e)},[f,M]);let N=wm(f),P=fe(Y().jobsOf(n)[i],N),F=P.flatMap(e=>e.kind===`filter`?[e.filter]:[]),I=new Map((p??[]).map(e=>[e.id,e])),L=Y().formatReadsItems(Y().outOf(Y().jobsOf(n)[i]).kind),R=P.findIndex(e=>e.kind===`format`),ee=L&&R<0?P.findIndex(e=>e.kind===`set`&&N(e.link)):-1,te=R>=0?R:ee,ne=e=>L&&te>=0&&e>te,z=e=>{O(null),s(e)},re=e=>z(j(n,i,e)),B=(e,t)=>{let r=n;z(e),c({label:t,restore:()=>s(r)})},ie=(e,t)=>{let n=[...P],[r]=n.splice(e,1);n.splice(e+t,0,r),re(n)},H=e=>[{label:`Move up`,icon:J.moveUp,disabled:e===0,onSelect:()=>ie(e,-1)},{label:`Move down`,icon:J.moveDown,disabled:e===P.length-1,onSelect:()=>ie(e,1)}],U=e=>e.set.name||e.set.id,oe=(e,t)=>[{label:`Edit…`,icon:J.edit,onSelect:()=>_(t)},{label:`Clone`,icon:J.clone,onSelect:()=>{let n=P[t];re([...P.slice(0,t+1),{...n,filter:{...structuredClone(e),id:D(F,`${e.id} copy`)}},...P.slice(t+1)])}},...H(t),{label:`Move to filter set…`,icon:wr,onSelect:()=>T([t])},{label:`Remove`,icon:J.remove,destructive:!0,onSelect:()=>B(j(n,i,P.filter((e,n)=>n!==t)),`Removed ${e.id}`)}],W=async e=>{let t=e.set.id;await f.flush(t),await f.refresh();let{list:r,error:a}=f.list(),s=a?void 0:r?.find(e=>e.id===t)?.versions;s!=null&&B(o(n,i,e.id,s),`Pinned ${U(e)}`)},se=(t,r)=>[{label:`Open in Library`,icon:C,onSelect:()=>yl(t.set.id)},t.pin==null?{label:`Pin`,icon:Wr,disabled:!I.has(t.set.id),onSelect:()=>{W(t)}}:{label:`Follow latest`,icon:Hr,onSelect:()=>B(o(n,i,t.id,null),`${U(t)} follows the latest`)},...H(r),{label:`Unlink`,icon:vi,onSelect:()=>B(e(n,i,t.id,N),`Unlinked ${U(t)}`)}],ce=(0,X.useId)(),le=P.flatMap((e,t)=>{let n={...e,n:t+1,at:t};if(e.kind!==`set`||!m.has(e.link.id))return[n];let r=Cm(f,e.link.set.id),i=r?.filters??[],a=t===ee?r?.format??null:null,o=i.map((n,r)=>({kind:`inner`,filter:n,key:`${e.link.id}/${r}`,below:a==null?ne(t):r>=a,id:`${ce}-${t}-${r}`}));return a!=null&&o.splice(a,0,{kind:`innerFormat`,key:`${e.link.id}/format`,id:`${ce}-${t}-format`}),[n,...o]}),ue=e=>h(t=>De(t,e)),de=e=>le.flatMap(t=>(t.kind===`inner`||t.kind===`innerFormat`)&&t.key.startsWith(`${e}/`)?[t.id]:[]).join(` `)||void 0,G=(e,t)=>t&&tu(e)?(0,$.jsx)(`span`,{className:`fs-per-item`,children:`(Per item)`}):null,pe=(0,$.jsxs)(`span`,{className:`fs-format`,children:[(0,$.jsxs)(`span`,{className:`fs-format-name`,children:[(0,$.jsx)(Xl,{size:14,"aria-hidden":`true`}),`Response Format`]}),a]}),me=[{key:`n`,header:`#`,label:``,className:`num fs-n`,sort:null,cell:e=>e.kind===`inner`||e.kind===`innerFormat`?null:e.n},{key:`filter`,header:`Filter`,role:`title`,sort:null,cell:e=>{if(e.kind===`format`)return pe;if(e.kind===`innerFormat`)return(0,$.jsx)(`span`,{className:`fs-inner`,children:pe});if(e.kind===`filter`)return(0,$.jsxs)(`span`,{className:`fs-name`,children:[(0,$.jsx)(`button`,{type:`button`,className:`link-btn`,onClick:()=>_(e.at),children:e.filter.id}),G(e.filter,ne(e.at))]});if(e.kind===`set`){let n=m.has(e.link.id),r=n?en:t;return(0,$.jsxs)(`span`,{className:`fs-set`,children:[(0,$.jsx)(`button`,{type:`button`,className:`ghost fs-toggle`,"aria-expanded":n,"aria-controls":n?de(e.link.id):void 0,"aria-label":`${n?`Hide`:`Show`} ${U(e.link)}'s filters`,onClick:()=>ue(e.link.id),children:(0,$.jsx)(r,{size:14,"aria-hidden":`true`})}),(0,$.jsx)(`button`,{type:`button`,className:`link-btn`,onClick:()=>yl(e.link.set.id),children:U(e.link)}),(0,$.jsx)(wt,{children:e.link.pin==null?`Latest`:_m(e.link.pin,I.get(e.link.set.id)?.versions)})]})}return(0,$.jsxs)(`span`,{className:`fs-inner`,children:[e.filter.id,G(e.filter,e.below)]})}},{key:`type`,header:`Type`,className:`fs-type`,sort:null,cell:e=>e.kind===`filter`||e.kind===`inner`?(0,$.jsx)($l,{type:e.filter.type}):e.kind===`set`?`Filter set`:null},{key:`menu`,header:``,label:``,role:`menu`,sort:null,cell:e=>e.kind===`filter`?(0,$.jsx)(it,{label:`${e.filter.id} actions`,actions:oe(e.filter,e.at)}):e.kind===`set`?(0,$.jsx)(it,{label:`${U(e.link)} actions`,actions:se(e.link,e.at)}):e.kind===`format`?(0,$.jsx)(it,{label:`Response Format actions`,actions:H(e.at)}):null}],he=g!=null&&P[g]?.kind===`filter`?P[g]:null,ge=new Set(A.flatMap(e=>e.set?[e.set.id]:[])),{options:_e,recent:ve}=Ec((p??[]).filter(e=>!ge.has(e.id)),e=>I.get(e)?.updated),ye=async e=>{let t={id:e,name:I.get(e)?.name??``};if(!await Tm(f,e))return O(`That filter set hasn't loaded.`);let r=Y().newFilterLink(t),a=A.find(N);if(L&&N(r)&&a)return O(`${t.name||`That set`} holds a Response Format, and ${a.set?U(a):`a set here`} already does.`);z(l(n,i,t,N))},be=P.flatMap((e,t)=>e.kind===`filter`?[t]:[]),xe=u?be:w,Se=()=>{T(null),d?.()},Ce=e=>e.length===1?P[e[0]].filter.id:`${e.length} filters`,we=async(e,t)=>{let a=e.map(e=>P[e].filter),l=n,u=null,d,p,m;if(t.kind===`new`){let o=R<0?0:e.filter(e=>e<R).length,s=o>0&&o<e.length,c;try{c=await f.create(t.name,{...Y().blankFilterSetBody(),filters:a.map(e=>structuredClone(e)),...s?{format:o}:{}})}catch(e){return e instanceof Error?e.message:String(e)}d=c.name,u=Y().newFilterLink({id:c.id,name:d}),p=j(n,i,r(P,e,u,s)),m=()=>{f.remove(c.id).catch(()=>{})}}else{let s=f.entry(t.id)?.doc;if(!s)return`That filter set hasn't loaded.`;f.edit(t.id,e=>Lt(e,a.map(e=>structuredClone(e)))),await f.flush(t.id);let c=f.entry(t.id),l=cl(c?.sync);if(l)return f.edit(t.id,()=>s.body),l;d=s.name||s.id;let h=A.find(e=>e.set?.id===t.id);h||(u=Y().newFilterLink({id:t.id,name:s.name})),p=j(n,i,r(P,e,u)),h?.pin!=null&&c?.doc&&(p=o(p,i,h.id,c.doc.versions)),m=()=>f.edit(t.id,()=>s.body)}let h=Ce(e);return Se(),z(p),c({label:`Moved ${h} to ${d}`,restore:()=>{s(l),m()}}),null},Te=Ec(p??[],e=>I.get(e)?.updated);return(0,$.jsxs)(`div`,{className:`filter-stage`,id:`job-${i}-filters`,children:[le.length>0&&(0,$.jsx)(x,{className:`fs-table`,cards:!0,label:`Filters`,rows:le,defaultSort:null,rowKey:e=>e.kind===`inner`||e.kind===`innerFormat`?e.key:e.kind===`set`?e.link.id:e.kind===`format`?`\0format`:`${e.from}/${e.filter.id}`,rowProps:e=>e.kind===`inner`?{id:e.id,className:`fs-inner-row`}:e.kind===`innerFormat`?{id:e.id,className:`fs-inner-row fs-format-row`}:e.kind===`format`?{className:`fs-format-row`}:{},columns:me}),E&&(0,$.jsx)(st,{tone:`error`,children:E}),(0,$.jsx)(`span`,{className:`add-btn fs-add`,children:(0,$.jsx)(it,{label:`Add filter`,trigger:(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(J.add,{size:14,"aria-hidden":`true`}),`Add filter`]}),actions:[{label:`New filter…`,icon:V,onSelect:()=>S(`type`)},{label:`Link filter set…`,icon:Ar,onSelect:()=>S(`link`)}]})}),b===`type`&&(0,$.jsx)(lu,{onPick:e=>{S(null),y(ql(D(F,eu(Ql(e))),e))},onClose:()=>S(null)}),(v||he)&&(0,$.jsx)(su,{filter:v??he.filter,isNew:!!v,others:v?F:F.filter(e=>e!==he.filter),onSave:e=>{re(v?[...P,{kind:`filter`,filter:e,from:``}]:P.map((t,n)=>n===g?{...he,filter:e}:t)),y(null),_(null)},onClose:()=>{y(null),_(null)}},v?`new`:g),xe&&xe.length>0&&xe.every(e=>P[e]?.kind===`filter`)&&(0,$.jsx)(gm,{what:Ce(xe),options:Te.options,recent:Te.recent,taken:new Set((p??[]).map(e=>e.name)),linkedHere:ge,ready:e=>!!f.entry(e)?.doc,onPick:e=>f.load(e),onMove:e=>we(xe,e),onClose:Se}),b===`link`&&(0,$.jsx)(ae,{kind:`Filter set`,title:`Link filter set`,usedLabel:`Last changed`,value:``,options:_e,recent:ve,onPick:e=>{ye(e)},onClose:()=>S(null),footer:(0,$.jsxs)(`button`,{type:`button`,className:`ghost pick-item`,onClick:()=>S(`new-set`),children:[(0,$.jsx)(J.add,{size:14,"aria-hidden":`true`}),`New filter set…`]})}),b===`new-set`&&(0,$.jsx)(Sl,{taken:new Set((p??[]).map(e=>e.name)),onClose:()=>S(null),onCreate:e=>void(async()=>{let t=await f.create(e,Y().blankFilterSetBody());z(l(n,i,{id:t.id,name:t.name},N))})()})]})}var Dm=(e,t)=>Y().filterSetsOf(Y().jobsOf(e)[t]).some(e=>!!e.own?.filters.length),Om=e=>e.steps??[],km=(e,t)=>({...e,steps:t}),Am=e=>Om(e).filter(e=>e.type===`request`),jm=(e,t)=>Am(e).findIndex(e=>e.id===t);function Mm(e,t,n){let r=[...Om(e)],i=r.findIndex(e=>e.id===t),a=i+n;return i<0||a<0||a>=r.length?e:([r[i],r[a]]=[r[a],r[i]],km(e,r))}var Nm=(e,t)=>Om(e).find(e=>e.id===t)?.type!==`request`||Am(e).length>1;function Pm(e,t){let n=Om(e).find(e=>e.id===t);return n?n.type===`request`?H(e,jm(e,t)):km(e,Om(e).filter(e=>e.id!==t)):e}var Fm=(e,t)=>{let n=Om(e).find(e=>e.id===t)?.type;return n===`request`||n===`getItems`};function Im(e,t){let n=Y(),r=Om(e),i=r.findIndex(e=>e.id===t),a=r[i];if(!a||!Fm(e,t))return e;if(a.type===`getItems`)return km(e,[...r.slice(0,i+1),{...structuredClone(a),id:n.newId()},...r.slice(i+1)]);let o=jm(e,t),s=n.jobsOf(e),c={...structuredClone(s[o]),id:n.newId(),name:``};c.steps=c.steps.filter(e=>e.type!==`attachContent`);let l=[...s.slice(0,o+1),c,...s.slice(o+1)],u=n.targetsOf(e).map(e=>({...e,steps:[...e.steps.slice(0,o+1),structuredClone(e.steps[o]),...e.steps.slice(o+1)]})),d=n.withTargets(n.withJobs(e,l),u),f=Om(d).filter(e=>e.id===c.id||`request`in e&&e.request===c.id),p=Om(d).filter(e=>!f.includes(e)),m=Math.max(...p.map((e,n)=>e.id===t||`request`in e&&e.request===t?n:-1))+1;return km(d,[...p.slice(0,m),...f,...p.slice(m)])}function Lm(e,t){let n=new Set(Om(e).flatMap(e=>e.type===t?[e.request]:[]));return[...Am(e)].reverse().find(e=>!n.has(e.id))}function Rm(e,t){let n=Y(),r=Om(e);if(t===`request`){let t=Xe(e),r=n.jobsOf(t).at(-1).id,i=Om(t).filter(e=>e.id===r||`request`in e&&e.request===r);return{next:km(t,[...Om(t).filter(e=>!i.includes(e)),...i]),id:r}}if(t===`getItems`){let t=n.newId(),i=r.findIndex(e=>e.type===`request`),a=i<0?r.length:i,o={type:`prompt`};return{next:km(e,[...r.slice(0,a),{type:`getItems`,id:t,content:o},...r.slice(a)]),id:t}}let i=Lm(e,t);if(!i)return null;let a=n.newId(),o=t===`readResponse`?{type:`readResponse`,id:a,request:i.id}:{type:`filter`,id:a,request:i.id,filterSets:[]};return{next:km(e,[...r,o]),id:a}}var zm=(e,t,n)=>km(e,Om(e).map(e=>e.id===t&&e.type===`getItems`?{...e,content:n}:e));function Bm({stepId:e,pipeline:t,sources:n,edit:r}){let[i,a]=(0,X.useState)(!1),o=Z(),s=Y(),c=Om(t).find(t=>t.id===e),l=c?.type===`getItems`?c.content:null,u=s.CONTENT_TYPES,d=Om(t).find(e=>e.type===`getItems`)?.id===e,f=l?.type===`source`?n.find(e=>e.id===l.ref.id):void 0,p=f?.type===`dynamic`&&(!f?.provider||s.DYNAMIC_PROVIDERS[f.provider]?.tier!==`supplied`),m=p&&l?.type===`source`?l.live??(f?f.files===0:!1):!1,h=l?.type===`source`?l.pin??null:null,g=Wf(o,p&&l?.type===`source`?l.ref.id:null),_=(n,i)=>{let a=zm(t,e,n);r(d&&i!==void 0?Se(a,0,i):a)},v=async e=>{let t=e.type===`dynamic`&&s.DYNAMIC_PROVIDERS[e.provider??``]?.tier!==`supplied`&&e.files>0?await o.sourceResponses(e.id).then(e=>Rf(e.responses),()=>null):null;_({type:`source`,ref:Tt(e.id,e.name),first:null,loops:1,...t?{pin:t}:{}},s.sourceTypeOf(e)?.sendsImage??!1)},y=[{label:`Change content`,icon:J.rename,onSelect:()=>a(!0)}],b=[l?.type===`text`?{key:`attach`,label:s.CONTENT_TYPES.text?.label??`Text`,required:!0,actions:y,control:{type:`textarea`,value:l.text,placeholder:`Item text`,onChange:e=>_({...l,text:e})}}:{key:`attach`,label:s.CONTENT_TYPES[l?.type??``]?.label??s.STEP_TYPES.attachContent?.label??`Content`,required:!0,actions:y,control:{type:`static`,text:Um(l,n)}},...p&&l?.type===`source`?[{key:`freshness`,label:`Data updates`,control:{type:`select`,value:m?`live`:`saved`,options:Vm,onChange:e=>_({...l,live:e===`live`,...e===`saved`&&!l.pin&&g&&Rf(g)?{pin:Rf(g)}:{}})}}]:[],...p&&l?.type===`source`&&!m?[{key:`response`,label:`Response`,required:!0,control:{type:`picker`,kind:`Response`,ordered:!0,value:h&&g?Bf(g,h):``,options:g?Hf(g):[],placeholder:h?g?zf(g,h)?h.name:`(Removed)`:h.name:`(Not set)`,onChange:e=>_({...l,pin:Uf(e)})}}]:[]];return(0,$.jsxs)(`div`,{className:`stage-row`,id:`step-${e}-items`,children:[(0,$.jsx)(F,{label:`Content`,rows:b}),i&&(0,$.jsxs)(Fe,{title:l?`Change content`:`Add content`,onClose:()=>a(!1),dismiss:`Cancel`,children:[(0,$.jsx)(pp,{mode:`pick`,onPick:e=>{a(!1),v(e)}}),(0,$.jsxs)(`div`,{className:`pick-others`,children:[(0,$.jsx)(`h2`,{className:`shead-title`,children:`Without a Source`}),(0,$.jsxs)(`button`,{type:`button`,className:`ghost pick-item`,onClick:()=>{_({type:`text`,text:``},!1),a(!1)},children:[(0,$.jsx)(`span`,{children:u.text?.label??`Text`}),u.text?.description&&(0,$.jsx)(`span`,{className:`pick-about`,children:u.text.description})]}),(0,$.jsxs)(`button`,{type:`button`,className:`ghost pick-item`,onClick:()=>{_({type:`prompt`},!1),a(!1)},children:[(0,$.jsx)(`span`,{children:u.prompt?.label??`(No content)`}),u.prompt?.description&&(0,$.jsx)(`span`,{className:`pick-about`,children:u.prompt.description})]})]})]})]})}var Vm=[{value:`live`,label:`Live data`},{value:`saved`,label:`Saved response`}],Hm=(e,t)=>{let n=t.find(t=>t.id===e.ref.id);return n?`${n.name}, ${Qa(n.files,an(n))}`:`A Source that is gone: ${e.ref.name}`},Um=(e,t)=>e?e.type===`source`?Hm(e,t):Y().CONTENT_TYPES[e.type]?.label??e.type:`none`,Wm=`#echo`,Gm=`#default`,Km=e=>!!Y().STEP_TYPES[e.type]?.local,qm=()=>Object.entries(Y().STEP_TYPES).filter(([,e])=>e.slot===`target`&&e.local&&!Y().CONNECTION_TYPES[e.replaces??``]?.replays).map(([,e])=>({id:Wm,label:e.label??`Echo`}));function Jm(e,t,n,r,i){let a=e.same!=null,o={key:`connection`,label:e.label??`Connection`,required:!a,control:{type:`picker`,kind:`Connection`,value:e.connection,...r(Ym(t,e.at),a?[{id:``,label:e.same}]:e.fixed),onChange:i.connection}};if(e.echo)return[o];let s=a&&!e.own?``:e.profile?.id??`#default`,c=[...a&&e.connection===``?[{id:``,label:e.same}]:[],{id:Gm,label:`(Default)`}];return[o,{key:`profile`,label:`Profile`,control:{type:`picker`,kind:`Profile`,value:s,...Ec(Ym(n,e.profile),()=>null,c),onChange:i.profile}}]}var Ym=(e,t)=>[...t?.id&&!e.some(e=>e.id===t.id)?[{id:t.id,name:`${t.name||t.id} (missing)`,missing:!0}]:[],...e.map(e=>({id:e.id,name:e.name}))],Xm=(e,t)=>{let n=e.find(e=>e.id===t);return n?{id:n.id,name:n.name}:null},Zm=[`answeredBy`,`connection`,`model`,`profile`,`settings`,`prompt`],Qm={answeredBy:`Answered by`,connection:`AI Connection`,model:`Model`,profile:`Profile`,settings:`Settings`,prompt:`Prompt`},$m=(e,t,n)=>n===`prompt`&&eh(e,t)?`Body`:Qm[n],eh=(e,t)=>!!Y().flowStepOf(Y().jobsOf(e)[t]),th=(e,t,n)=>Y().targetEntryOf(e,t,n)?.asks===`request`;function nh(e,t){return eh(e,t)?Math.max(0,Y().targetsOf(e).findIndex((n,r)=>th(e,r,t))):0}function rh(e,t){let n=Y(),r=nh(e,t);if(eh(e,t)&&th(e,r,t))return n.targetEntryOf(e,r,t)?.newStep?.(n.requestStepOf(e,r,t))}function ih(e,t,n){let r=Y(),i=r.targetStepOf(e,t,n)?.type??``,a=r.STEP_TYPES[i];return a?.asks===`request`?`Request`:a?.label??i}function ah(e,t){let n=Y(),r=nh(e,t),i=e=>e.asks===`request`?0:n.CONNECTION_TYPES[e.replaces??``]?.replays?1:2;return Object.entries(n.STEP_TYPES).filter(([i,a])=>a.slot===`target`&&!(t>0&&a.firstJobOnly)&&(a.asks===`request`?th(e,r,t)&&n.targetStepOf(e,r,t)?.type===i:!!a.local)).sort(([,e],[,t])=>i(e)-i(t)).map(([e,t])=>({type:e,label:t.asks===`request`?`Request`:t.label??e}))}var oh=(e,t,n)=>{let r=Y().targetEntryOf(e,t,n);return!!r&&!r.local&&r.modelFrom===`profile`},sh=(e,t,n)=>!!Y().targetEntryOf(e,t,n)?.local;function ch(e,t,n,r){let i=Y(),a=i.targetStepOf(e,t,n);if(!a)return``;let o=i.targetAnswerOf(e,t,n);switch(r){case`answeredBy`:return a.type;case`connection`:return sh(e,t,n)?`#${a.type}`:o?.connection.id??``;case`profile`:return sh(e,t,n)?``:o?.profile?.id??``;case`model`:return sh(e,t,n)?``:a.model??``;case`settings`:return oh(e,t,n)?JSON.stringify(Object.entries(a.settings??{}).sort()):``;case`prompt`:return JSON.stringify([a.type,a.prompt??``,a.from?.id??``])}}function lh(e,t,n){if(!eh(e,t))return ch(e,0,t,n);let r=nh(e,t),i=rh(e,t);return i?n===`model`?i.model??``:n===`prompt`?JSON.stringify([i.type,i.prompt??``,``]):ch(e,r,t,n):n===`answeredBy`?``:ch(e,r,t,n)}function uh(e,t,n,r){return eh(e,n)&&r!==`answeredBy`&&sh(e,t,n)?!1:ch(e,t,n,r)!==lh(e,n,r)}var dh=(e,t,n,r)=>r!==`answeredBy`&&eh(e,n)&&sh(e,t,n);function fh(e,t,n,r){let i=Y(),a=i.targetStepOf(e,t,n);return r===`answeredBy`?eh(e,n):r===`model`&&eh(e,n)&&th(e,t,n)?!!i.HTTP_APIS[i.flowStepOf(i.jobsOf(e)[n])?.api??``]?.fields.includes(`model`):r===`model`||r===`profile`?!sh(e,t,n):r===`settings`?oh(e,t,n):r!==`prompt`||!i.CONNECTION_TYPES[i.STEP_TYPES[a?.type??``]?.replaces??``]?.replays}var ph=(e,t)=>Zm.filter(n=>n===`answeredBy`?eh(e,t):n!==`settings`||Y().targetsOf(e).some((n,r)=>oh(e,r,t)&&!!Y().targetStepOf(e,r,t)?.settings));function mh(e,t){return Y().jobsOf(e).flatMap((n,r)=>ph(e,r).filter(n=>uh(e,t,r,n)).map(e=>({k:r,row:e})))}function hh(e,t,n,r){let i=Y(),a=i.STEP_TYPES[r];if(!a||i.targetStepOf(e,t,n)?.type===r)return e;let o=i.jobsOf(e).length===1;if(a.asks===`request`){let a=rh(e,n);if(!a||a.type!==r)return e;let o=i.targetsOf(e)[nh(e,n)],s=i.withTarget(e,t,n,()=>a);return n===0?i.withTargets(s,i.targetsOf(s).map((e,n)=>n===t?{...e,connection:o.connection,profile:o.profile}:e)):s}let s=i.withTarget(e,t,n,()=>({type:r,prompt:``}));return o?i.withTargets(s,i.targetsOf(s).map((e,n)=>n===t?{...e,connection:null,profile:null}:e)):s}var gh=(e,t,n,r)=>Y().withTarget(e,t,n,e=>{let t={...e,model:r};return r||delete t.model,t}),_h=(e,t,n,r,i)=>Y().withTarget(e,t,n,e=>{let{from:t,...n}=e;return{...n,prompt:r,...i?{from:{...i}}:{}}});function vh(e,t,n,r,i){let a=Y(),o=nh(e,n),s=rh(e,n)??a.targetStepOf(e,o,n);if(!s||!uh(e,t,n,r))return e;if(r===`answeredBy`)return hh(e,t,n,a.targetStepOf(e,o,n)?.type??``);if(r===`model`)return gh(e,t,n,s.model??``);if(r===`settings`)return Sh(e,t,n,s.settings??null);if(r===`prompt`)return _h(e,t,n,s.prompt??``,s.from??null);let c=a.targetAnswerOf(e,o,n);if(r===`connection`&&sh(e,o,n))return n===0&&s.type===`echo`?Oe(e,t):e;let l=r===`connection`?`profile`:`connection`,u=uh(e,t,n,l),d=[...n>0?[()=>a.withTarget(e,t,n,e=>{let{connection:t,profile:n,...r}=e;return r}),()=>r===`connection`?je(e,t,n,null,i):Ne(e,t,n,nn,i)]:[],()=>r===`connection`?c?je(e,t,n,c.connection,i):e:Ne(e,t,n,c?.profile??null,i)];for(let e of d){let i=e();if(!uh(i,t,n,r)&&uh(i,t,n,l)===u)return i}return d.at(-1)()}function yh(e,t,n,r){let i=nh(e,t);return Y().targetsOf(e).map((r,a)=>a===i||(typeof n==`function`?n(a):ch(e,a,t,n)===ch(e,i,t,n))).reduce((e,t,n)=>t?r(e,n):e,e)}function bh(e){let t=Y(),n=t.targetsOf(e),r=n[0];if(!r)return e;let i={...structuredClone(r),id:t.newId(),name:``},a=t.withTargets(e,[...n,i]),o=n.length;return t.jobsOf(a).reduce((e,n,r)=>eh(e,r)&&uh(e,o,r,`answeredBy`)?hh(e,o,r,t.targetStepOf(e,nh(e,r),r)?.type??``):e,a)}var xh=e=>Y().jobsOf(e).flatMap((t,n)=>oh(e,0,n)?[n]:[]),Sh=(e,t,n,r)=>Y().withTarget(e,t,n,e=>{let{settings:t,...n}=e;return r?{...n,settings:{...r}}:n});function Ch(e){let t=Y(),n=(t.CONNECTION_TYPES[e.type??`llama.cpp`]?.settings??[]).filter(e=>e.scope!==`connection`&&e.key!==`model`).map(e=>e.key),r={};for(let e of n)t.DECODING_KEYS.includes(e)&&(r[e]=``);for(let[t,i]of Object.entries(e.opts))n.includes(t)&&(r[t]=String(i));return r}function wh(e,t,n){return n.reduce((e,n)=>{let r=bh(e),i=Y().targetsOf(r).length-1;return Sh(Y().withTargets(r,Y().targetsOf(r).map((e,t)=>t===i?{...e,name:n.label}:e)),i,t,Ch(n))},e)}function Th({pipeline:e,title:t,onClose:n}){let r=Z(),[i,a]=(0,X.useState)(null),[o,s]=(0,X.useState)(null),c=Y().contentOf(e),l=c?.type===`source`?c.ref.id:null,u=(0,X.useCallback)(()=>{s(null),l?(async()=>{try{let t=(await r.source(l)).files.filter(e=>e.name.toLowerCase().endsWith(`.json`));a(await Promise.all(t.map(async t=>{let n=JSON.parse(await af(await r.file(l,t.name)));return{name:t.name,reply:Y().recordedReplyOf(e,n)}})))}catch(e){s(Q(e))}})():a([])},[r,l,e]);return(0,X.useEffect)(u,[u]),(0,$.jsx)(Fe,{title:t,wide:!0,className:`edit`,onClose:n,dismiss:`Close`,children:i?i.length?(0,$.jsx)(`div`,{className:`recorded-replies`,children:i.map(e=>(0,$.jsxs)(`section`,{"aria-label":e.name,children:[(0,$.jsx)(`h3`,{children:e.name}),(0,$.jsx)(`pre`,{className:`mono-block`,children:e.reply??`(no recorded response)`})]},e.name))}):(0,$.jsx)(`p`,{className:`unset`,children:`(No items)`}):(0,$.jsx)(Ot,{label:`Responses`,error:o,onRetry:u})})}function Eh({pipeline:e,k:t,name:n,connections:r,connectionProfiles:i,resolve:a,prompts:o,joined:c,edit:l,offer:u,onConnection:d,onProfile:p,onEcho:m,onSelectPrompt:h,onSaveToLibrary:g,extra:_=[]}){let v=Y(),b=Ac(),[x,S]=(0,X.useState)(null),[C,w]=(0,X.useState)(!1),[T,E]=(0,X.useState)(!1),D=nh(e,t),O=Be(e,D,t)??{type:`prompt`,prompt:``},k=Pt(O.type),A=v.STEP_TYPES[O.type],j=v.jobsOf(e)[t],M=v.targetsOf(e)[D],P=v.tokensOf(j),I=t===0?``:`Same as ${v.stepNames(e)[v.jobsOf(e)[0].id]??`Request 1`}`,L=(n,r)=>l(yh(e,t,n,r)),R=(0,X.useRef)(null),ee=(0,X.useRef)(null);(0,X.useLayoutEffect)(()=>{if(ee.current==null||!R.current)return;let e=ee.current;ee.current=null,R.current.focus(),R.current.setSelectionRange(e,e)},[O.prompt]);let ne=e=>{let n=O.prompt??``,r=R.current,i=r?.selectionStart??n.length,a=r?.selectionEnd??n.length,o=n.slice(0,i)+e+n.slice(a);L(`prompt`,(e,n)=>N(e,n,t,o)),ee.current=i+e.length},z=O.from?o?.find(e=>e.id===O.from.id):void 0,re=O.prompt??``,B=O.from?`${z?Vi(z):O.from.name}${z?`, version ${z.version}`:``}`:Dh(re),V=!!v.CONNECTION_TYPES[A?.replaces??``]?.replays,ae=A?.modelFrom===`profile`&&!A?.local,H=[...P.map(e=>v.TOKEN_TYPES[e.type]?.notation(e.name)??`{${e.name}}`),...t>0?[`{reply}`]:[]],U=[{label:`Select prompt…`,icon:s,onSelect:h},{label:`Save to library…`,icon:te,disabled:!re,onSelect:g},{label:`Insert token…`,icon:Kt,disabled:!H.length,onSelect:()=>w(!0)},...z?[{label:`Revert to version ${z.version}`,icon:J.revert,disabled:re===z.text,onSelect:()=>{let r=e;L(`prompt`,(e,n)=>ie(e,n,t,z.text,{id:z.id,name:Vi(z)})),u({label:`Reverted ${n} to version ${z.version}`,restore:()=>l(r)})}}]:[],..._],oe=V?[]:Jm(t===0?{connection:Km(O)?Wm:M?.connection?.id??``,at:M?.connection,profile:M?.profile,fixed:eh(e,t)?[]:qm(),echo:Km(O),label:`AI Connection`}:{connection:O.connection?.id??``,at:O.connection,profile:O.profile,own:O.connection!=null||O.profile!=null,same:I,label:`AI Connection`},r,i,b,{connection:e=>e===`#echo`?m():d(e===``?null:Xm(r,e)),profile:e=>p(e===``?nn:e===`#default`?null:Xm(i,e))}),W=v.targetAnswerOf(e,D,t),se=W?a(v.answerKey(W.connection.id,W.profile?.id)):null,ce=ae?[{key:`model`,label:`Model`,width:`full`,control:{type:`text`,value:O.model??``,placeholder:se?.model||`(Not set)`,onChange:e=>L(`model`,(n,r)=>gh(n,r,t,e))}}]:[],le=v.contentOf(e),ue=A?.asks===`request`||V||t===0&&v.CONTENT_TYPES[le?.type??``]?.inline?[]:[{key:`image`,label:`Send image`,control:{type:`switch`,checked:v.sendsImage(j),onChange:n=>l(Se(e,t,n))}}],de=v.flowStepOf(j),fe=de?[{key:`flow`,label:v.STEP_TYPES.flowStep?.label??`Flow step`,locked:!0,control:{type:`static`,text:de.step}}]:[],G=k.rows?.(O,n=>L(r=>Object.keys(n).every(n=>{let i=v.targetStepOf(e,D,t),a=v.targetStepOf(e,r,t);return i?.type===a?.type&&JSON.stringify(i?.[n])===JSON.stringify(a?.[n])}),(e,r)=>v.withTarget(e,r,t,e=>{let t={...e,...n};for(let[e,r]of Object.entries(n))r===``&&e!==`prompt`&&e!==`system`&&delete t[e];return t})))??[],pe=P.map(n=>{let r=v.TOKEN_TYPES[n.type],i=r?.fields??[];return{key:n.name,label:r?r.notation(n.name):`{${n.name}}`,code:!0,control:i.includes(`value`)?{type:`text`,value:n.value??``,placeholder:`(Not set)`,onChange:r=>l(ye(e,t,n.name,{value:r}))}:{type:`static`,text:r?.label??n.type},...i.includes(`enabled`)?{enabled:{checked:!!n.enabled,onChange:r=>l(ye(e,t,n.name,{enabled:r}))}}:{},actions:[{label:`Edit…`,icon:J.edit,onSelect:()=>S({mode:`edit`,name:n.name})}]}}),me=x?.mode===`edit`?P.find(e=>e.name===x.name):void 0,he=n=>{let r=e;x?.mode===`add`?l(rt(r,t,n.name,n.type)):me&&(l(sn(r,t,me.name,n)),n.type!==me.type&&me.value&&u({label:`Changed {${me.name}} to ${v.TOKEN_TYPES[n.type]?.label.toLowerCase()??n.type}`,restore:()=>l(r)})),S(null)},ge=k.words?.(O),_e=k.promptLabel?.(O)??`Prompt`,ve=k.request?.(O)??[],be=V?Wt(e,t):null;return(0,$.jsxs)(Ae,{children:[V&&(0,$.jsxs)(`div`,{className:`prompt request-prompt`,children:[(0,$.jsxs)(`div`,{className:`pe-head`,children:[(0,$.jsx)(`span`,{className:`prop-name`,children:`Prompt`}),(0,$.jsx)(`span`,{className:`request-meta`,children:A?.label??O.type}),(0,$.jsx)(it,{actions:[{label:`Preview responses…`,icon:Ht,onSelect:()=>E(!0)}],label:`${n} prompt actions`})]}),be!=null&&(0,$.jsx)(Jt,{className:`readonly`,words:be,showExprs:!1})]}),T&&(0,$.jsx)(Th,{pipeline:e,title:`${n} responses`,onClose:()=>E(!1)}),!V&&_e&&(0,$.jsxs)(`div`,{className:`prompt request-prompt`,children:[(0,$.jsxs)(`div`,{className:`pe-head`,children:[(0,$.jsx)(`span`,{className:`prop-name`,children:_e}),(0,$.jsx)(`span`,{className:`request-meta`,children:B}),(0,$.jsx)(it,{actions:U,label:`${n} ${_e.toLowerCase()} actions`})]}),(0,$.jsx)(`textarea`,{ref:R,value:re,"aria-label":`${n}, ${_e.toLowerCase()}`,rows:4,onChange:e=>{let n=e.target.value;L(`prompt`,(e,r)=>N(e,r,t,n))}}),ge&&(0,$.jsx)(Jt,{className:`pe-words`,words:ge.text,was:ge.was,showExprs:!1}),c&&(0,$.jsx)(`span`,{className:`prop-hint`,role:`note`,children:`Content is attached after the prompt`})]}),(0,$.jsx)(F,{label:`${n} settings`,rows:[...oe,...ce,...G,...ue,...fe]}),pe.length?(0,$.jsx)(F,{label:`Tokens`,rows:pe,addLabel:`Add token`,onAdd:()=>S({mode:`add`}),onRemove:n=>{let r=e;l(y(e,t,n.key)),u({label:`Removed {${n.key}}`,restore:()=>l(r)})}}):(0,$.jsxs)(`button`,{type:`button`,className:`ghost add-btn`,onClick:()=>S({mode:`add`}),children:[(0,$.jsx)(J.add,{size:14,"aria-hidden":`true`}),`Add token`]}),ve.length>0&&(0,$.jsx)(rn,{id:`request-${t}-flow-request`,title:`Flow's request`,level:3,open:!1,children:(0,$.jsx)(F,{label:`Flow's request`,rows:ve})}),x&&(x.mode===`add`||me)&&(0,$.jsx)(Ke,{title:me?v.TOKEN_TYPES[me.type]?.notation(me.name)??`{${me.name}}`:`New token`,initial:me?{name:me.name,type:me.type}:{name:``,type:`value`},adding:!me,problem:n=>f(e,t,n,me?.name),onSave:he,onClose:()=>S(null)},x.mode===`edit`?x.name:`add`),C&&(0,$.jsx)(Fe,{title:`Insert token`,onClose:()=>w(!1),dismiss:`Cancel`,children:(0,$.jsx)(`div`,{className:`pick-others`,children:H.map(e=>(0,$.jsx)(`button`,{type:`button`,className:`ghost pick-item`,onClick:()=>{w(!1),ne(e)},children:(0,$.jsx)(`code`,{children:e})},e))})})]})}function Dh(e){let t=e.trim().split(/\s+/).filter(Boolean);return t.length?t.length>6?`${t.slice(0,6).join(` `)}…`:t.join(` `):`(No prompt)`}function Oh({text:e,writtenFor:t,say:n,onClose:r}){let i=async()=>{n(await qt(e)?`Copied the request.`:`Could not copy.`),r()};return(0,$.jsx)(w,{title:`Copy request`,wide:!0,onClose:r,sections:[{key:`request`,rows:[{key:`for`,label:`Written for`,control:{type:`static`,text:t}},{key:`body`,label:`Request`,control:{type:`code`,text:e}}]}],actions:[{label:`Copy`,icon:se,primary:!0,onSelect:()=>void i()}]})}function kh({pipeline:e,i:t,k:n,variant:r,request:i,label:a,prompts:o,tokens:c,onSave:l,extra:u=[],onClose:d}){Y();let f=eh(e,n)?rh(e,n):Be(e,0,n),p=Be(e,t,n)??{type:`prompt`,prompt:``},[m,h]=(0,X.useState)(p),[g,_]=(0,X.useState)(!1),[v,y]=(0,X.useState)(!1),[b,x]=(0,X.useState)(!1),S=qi(),C=Pt(m.type),T=a??C.promptLabel?.(m)??`Prompt`,E=m.prompt??``,D=e=>{if(!e?.from)return Dh(e?.prompt??``);let t=o?.find(t=>t.id===e.from.id);return t?`${Vi(t)}, version ${t.version}`:e.from.name},O=(e,t)=>h(n=>{let{from:r,...i}=n;return{...i,prompt:e,...t?{from:{...t}}:{}}}),k=(0,X.useRef)(null),A=(0,X.useRef)(null);(0,X.useLayoutEffect)(()=>{if(A.current==null||!k.current)return;let e=A.current;A.current=null,k.current.focus(),k.current.setSelectionRange(e,e)},[m.prompt]);let j=e=>{let t=k.current,n=t?.selectionStart??E.length,r=t?.selectionEnd??E.length;h(t=>({...t,prompt:E.slice(0,n)+e+E.slice(r)})),A.current=n+e.length},M=!!f&&f.type===m.type&&(f.prompt??``)===E&&(f.from?.id??``)===(m.from?.id??``),N=[{label:`Save to library…`,icon:te,disabled:!E,onSelect:()=>x(!0)},{label:`Clear override`,icon:J.clear,disabled:!f||M,onSelect:()=>f&&O(f.prompt??``,f.from??null)},...u],P=(C.rows?.(m,e=>h(t=>{let n={...t,...e};for(let[t,r]of Object.entries(e))r===``&&t!==`prompt`&&t!==`system`&&delete n[t];return n}))??[]).filter(e=>e.key!==`model`),F=C.words?.(m),I=C.fields?.(m)??[],L=C.request?.(m)??[],R=`${r}, ${i} ${T.toLowerCase()}`,{api:ne,...z}=m;return(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(w,{title:R,wide:!0,className:`variant-prompt`,dirty:JSON.stringify(m)!==JSON.stringify(p),onSave:()=>{l(z),d()},onClose:d,sections:[{key:`words`,rows:P,children:(0,$.jsxs)(`div`,{className:`variant-words`,children:[f&&(0,$.jsxs)(`div`,{className:`prompt`,children:[(0,$.jsxs)(`div`,{className:`pe-head`,children:[(0,$.jsx)(`span`,{className:`prop-name`,children:i}),(0,$.jsx)(`span`,{className:`request-meta`,children:D(f)})]}),(0,$.jsx)(Jt,{className:`readonly`,words:f.prompt??``,showExprs:!1})]}),(0,$.jsxs)(`div`,{className:`prompt`,children:[(0,$.jsxs)(`div`,{className:`pe-head`,children:[(0,$.jsx)(`span`,{className:`prop-name`,children:r}),(0,$.jsx)(`span`,{className:`request-meta`,children:D(m)}),(0,$.jsxs)(`span`,{className:`variant-words-actions`,children:[I.length>0&&(0,$.jsx)(ht,{fields:I,onInsert:j,label:r}),(0,$.jsxs)(`button`,{type:`button`,className:`ghost`,onClick:()=>_(!0),children:[(0,$.jsx)(s,{size:14,"aria-hidden":`true`}),`Select prompt…`]}),(0,$.jsxs)(`button`,{type:`button`,className:`ghost`,disabled:!c.length,onClick:()=>y(!0),children:[(0,$.jsx)(Kt,{size:14,"aria-hidden":`true`}),`Insert token…`]}),(0,$.jsx)(it,{actions:N,label:`${r} ${T.toLowerCase()} actions`})]})]}),(0,$.jsx)(`textarea`,{ref:k,value:E,"aria-label":R,rows:6,onChange:e=>{let t=e.target.value;h(e=>({...e,prompt:t}))}}),F&&(0,$.jsx)(Jt,{className:`pe-words`,words:F.text,was:F.was,showExprs:!1})]})]})},...L.length?[{key:`request`,title:`Flow's request`,rows:L,folded:!0}]:[]]}),g&&(0,$.jsx)(hm,{onClose:()=>_(!1),used:{byScenario:vt(e,t),byAll:ee(e)},onPick:e=>{O(e.text,{id:e.id,name:Vi(e)}),_(!1)}}),v&&(0,$.jsx)(Fe,{title:`Insert token`,onClose:()=>y(!1),dismiss:`Cancel`,children:(0,$.jsx)(`div`,{className:`pick-others`,children:c.map(e=>(0,$.jsx)(`button`,{type:`button`,className:`ghost pick-item`,onClick:()=>{y(!1),j(e)},children:(0,$.jsx)(`code`,{children:e})},e))})}),b&&(0,$.jsx)($e,{title:`Save to library`,value:E.split(`
9
+ `)[0]?.trim()??``,onCommit:e=>void(async()=>{let t=await S.create({name:e,text:E});O(E,{id:t.id,name:Vi(t)})})(),onClose:()=>x(!1)})]})}function Ah(e,t){let n=Y(),r=n.jobsOf(e)[t];return[...r?n.tokensOf(r).map(e=>n.TOKEN_TYPES[e.type]?.notation(e.name)??`{${e.name}}`):[],...t>0?[`{reply}`]:[]]}var jh=e=>`${e.pack??``}/${e.id}`;function Mh({pipeline:e,free:t,names:n,resolve:r,onAdd:i,onClose:a}){let o=Z(),s=Y(),c=xh(e),[l,u]=(0,X.useState)(c[0]??0),[d,f]=(0,X.useState)(null),[p,m]=(0,X.useState)([]),h=(0,X.useId)();(0,X.useEffect)(()=>{let e=!0;return o.presets().then(t=>{e&&f(t)}).catch(()=>{e&&f([])}),()=>{e=!1}},[o]);let g=s.targetAnswerOf(e,0,l),_=g?r(s.answerKey(g.connection.id,g.profile?.id))?.type:void 0,v=(d??[]).filter(e=>!_||(e.type??`llama.cpp`)===_),y=v.filter(e=>p.includes(jh(e))),b=[...new Set(v.map(e=>e.packName??`Lab`))],x=()=>{y.length&&i(l,y)};return(0,$.jsx)(w,{title:`Add variants from presets`,className:`from-presets`,onClose:a,dirty:p.length>0,sections:[{key:`request`,rows:[{key:`request`,label:`Request`,control:{type:`select`,value:String(l),options:c.map(e=>({value:String(e),label:n(e)})),onChange:e=>u(Number(e))}}]},{key:`presets`,children:(0,$.jsxs)(`div`,{role:`group`,"aria-labelledby":h,className:`preset-pick`,onKeyDown:e=>{e.key===`Enter`&&e.target.type===`checkbox`&&(e.preventDefault(),x())},children:[(0,$.jsxs)(`div`,{className:`preset-head`,children:[(0,$.jsx)(`span`,{id:h,children:`Presets`}),(0,$.jsx)(`span`,{className:`preset-count`,children:`${y.length} of ${t}`})]}),d&&!v.length&&(0,$.jsx)(`p`,{className:`unset`,children:`(No presets)`}),b.map(e=>(0,$.jsxs)(`div`,{className:`preset-group`,role:`group`,"aria-label":e,children:[(0,$.jsx)(`h4`,{children:e}),v.filter(t=>(t.packName??`Lab`)===e).map(e=>{let n=p.includes(jh(e));return(0,$.jsxs)(`label`,{className:`multi-opt`,children:[(0,$.jsx)(`input`,{type:`checkbox`,checked:n,disabled:!n&&y.length>=t,onChange:t=>m(n=>t.target.checked?[...n,jh(e)]:n.filter(t=>t!==jh(e)))}),(0,$.jsx)(`span`,{children:e.label})]},jh(e))})]},e))]})}],actions:[{label:`Add ${y.length} ${y.length===1?`variant`:`variants`}`,primary:!0,disabled:!y.length,onSelect:x}]})}var Nh=e=>`${e.i}:${e.k}:${e.row}`,Ph=4;function Fh({pipeline:e,connections:n,connectionProfiles:r,resolve:i,answers:a,fromProfile:o,prompts:s,targetCap:c,names:l,edit:u,undoable:d,onRename:f,onCopyRequest:p,say:m}){let h=Y(),g=h.targetsOf(e),_=h.jobsOf(e),v=Vh(),[y,b]=(0,X.useState)(null),[x,S]=(0,X.useState)(null),[C,w]=(0,X.useState)(null),[T,E]=(0,X.useState)(!1),[D,k]=(0,X.useState)({}),A=Math.min(c,Ph),j=e=>l[_[e]?.id??``]??`Request ${e+1}`,M=t=>t===0&&!_.some((t,n)=>eh(e,n)),N=t=>{let n=_.some((n,r)=>!fh(e,t,r,`prompt`));return[{label:`Rename…`,icon:J.rename,onSelect:()=>f(t)},{label:`Clone`,icon:J.clone,disabled:g.length>=A,onSelect:()=>u(ot(e,t))},...n?[{label:`Preview responses…`,icon:Ht,onSelect:()=>w(t)}]:[],...g.length>1?[{label:`Remove`,icon:J.remove,destructive:!0,onSelect:()=>d(`Removed ${W(e,t)}`,O(e,t))}]:[]]},P=t=>(0,$.jsx)(Bh,{at:t,pipeline:e,variant:W(e,t.i),request:j(t.k),connections:n,connectionProfiles:r,resolve:i,prompts:s,editing:y===Nh(t),onEdit:e=>b(e?Nh(t):null),onPrompt:()=>S({i:t.i,k:t.k}),onAnsweredBy:n=>u(n?hh(e,t.i,t.k,n):vh(e,t.i,t.k,t.row,a)),onConnection:r=>u(r===`#echo`?Oe(e,t.i):je(e,t.i,t.k,Xm(n,r),a,o)),onProfile:n=>u(Ne(e,t.i,t.k,n===`#default`?null:Xm(r,n),a)),onModel:n=>u(gh(e,t.i,t.k,n)),onClear:()=>u(vh(e,t.i,t.k,t.row,a))},Nh(t)),F=t=>{let n=!!g[t]?.name?.trim();return(0,$.jsxs)(`span`,{className:`variant-head`,children:[n?W(e,t):(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`span`,{className:`sr-only`,children:`Variant`}),` ${h.targetLetter(t)}`]}),(0,$.jsx)(it,{actions:N(t),label:`${W(e,t)} actions`})]})},I=(0,$.jsx)(`div`,{className:`scrollx`,children:(0,$.jsxs)(`table`,{className:`variants`,"aria-label":`Variants`,children:[(0,$.jsx)(`thead`,{children:(0,$.jsxs)(`tr`,{children:[(0,$.jsx)(`td`,{}),g.map((e,t)=>(0,$.jsx)(`th`,{scope:`col`,children:F(t)},e.id))]})}),_.map((t,n)=>(0,$.jsxs)(`tbody`,{children:[(0,$.jsx)(`tr`,{className:`variants-request`,children:(0,$.jsx)(`th`,{scope:`rowgroup`,colSpan:g.length+1,children:j(n)})}),ph(e,n).map(t=>(0,$.jsxs)(`tr`,{children:[(0,$.jsx)(`th`,{scope:`row`,children:$m(e,n,t)}),g.map((e,r)=>(0,$.jsx)(`td`,{children:P({i:r,k:n,row:t})},e.id))]},t))]},t.id))]})}),L=(0,$.jsx)(`ul`,{className:`variant-cards`,"aria-label":`Variants`,children:g.map((i,a)=>{let o=!M(a)&&!!D[i.id],c=mh(e,a);return(0,$.jsxs)(`li`,{className:`variant-card`,children:[(0,$.jsxs)(`div`,{className:`variant-card-head`,children:[M(a)?(0,$.jsx)(`span`,{className:`variant-card-name`,children:W(e,a)}):(0,$.jsxs)(`button`,{type:`button`,className:`variant-card-toggle`,"aria-expanded":o,onClick:()=>k(e=>({...e,[i.id]:!o})),children:[(0,$.jsx)(t,{className:`step-caret`,size:14,"aria-hidden":`true`}),W(e,a)]}),(0,$.jsx)(it,{actions:N(a),label:`${W(e,a)} actions`})]}),o?_.map((t,n)=>(0,$.jsxs)(`div`,{className:`variant-card-request`,children:[(0,$.jsx)(`h4`,{children:j(n)}),(0,$.jsx)(`dl`,{className:`variant-pairs`,children:ph(e,n).map(t=>(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`dt`,{children:$m(e,n,t)}),(0,$.jsx)(`dd`,{children:P({i:a,k:n,row:t})})]},t))})]},t.id)):c.length?(0,$.jsx)(`dl`,{className:`variant-pairs`,children:c.map(({k:t,row:i})=>(0,$.jsxs)(`div`,{children:[(0,$.jsxs)(`dt`,{children:[j(t),` `,$m(e,t,i)]}),(0,$.jsx)(`dd`,{children:Ih({pipeline:e,i:a,k:t,row:i,connections:n,connectionProfiles:r,prompts:s})})]},`${t}:${i}`))}):(0,$.jsx)(`p`,{className:`unset`,children:`(No overrides)`})]},i.id)})});return(0,$.jsxs)(rn,{id:`variants`,title:`Variants`,note:String(g.length),actions:[{label:`Add variants from presets…`,icon:J.preset,disabled:g.length>=A||!xh(e).length,onSelect:()=>E(!0)}],children:[v?L:I,(0,$.jsxs)(`button`,{type:`button`,className:`ghost add-btn`,disabled:g.length>=A,onClick:()=>u(bh(e)),children:[(0,$.jsx)(U,{size:14,"aria-hidden":`true`}),`Add variant`]}),x&&(()=>{let{i:t,k:n}=x,r=Be(e,t,n),i=(Pt(r?.type).actions?.({pipeline:e,i:t,k:n,say:m,onSelectPrompt:()=>{},onClearPrompt:()=>{},onCopyRequest:()=>p(t,n)})??[]).filter(e=>![`Select prompt…`,`Save to library…`,`Clear prompt`,`Revert to default`].includes(e.label));return(0,$.jsx)(kh,{pipeline:e,i:t,k:n,variant:W(e,t),request:j(n),label:eh(e,n)?$m(e,n,`prompt`):void 0,prompts:s,tokens:Ah(e,n),extra:i,onSave:r=>u(h.withTarget(e,t,n,()=>r)),onClose:()=>S(null)})})(),T&&(0,$.jsx)(Mh,{pipeline:e,free:A-g.length,names:j,resolve:i,onAdd:(t,n)=>{u(wh(e,t,n)),E(!1)},onClose:()=>E(!1)}),C!==null&&(0,$.jsx)(Th,{pipeline:e,title:`${W(e,C)} responses`,onClose:()=>w(null)})]})}function Ih({pipeline:e,i:t,k:n,row:r,connections:i,connectionProfiles:a,prompts:o}){let s=Y(),c=s.targetStepOf(e,t,n),l=s.targetAnswerOf(e,t,n);if(dh(e,t,n,r))return`(Not sent)`;if(!fh(e,t,n,r))return`(None)`;switch(r){case`answeredBy`:return ih(e,t,n);case`connection`:{let e=s.STEP_TYPES[c?.type??``];return e?.local?e.label??c.type:l?Lh(l.connection,i):`(No connection)`}case`profile`:return l?.profile?Lh(l.profile,a):`(Default)`;case`model`:return c?.model||`(Not set)`;case`settings`:return Rh(c?.settings);case`prompt`:return eh(e,n)&&uh(e,t,n,r)?`Edited`:zh(c,o)}}var Lh=(e,t)=>t.some(t=>t.id===e.id)?e.name||e.id:`${e.name||e.id} (missing)`;function Rh(e){let t=Y(),n=e=>Object.values(t.CONNECTION_TYPES).flatMap(e=>e.settings).find(t=>t.key===e)?.label??e,r=Object.entries(e??{}).filter(([,e])=>e.trim()).map(([e,t])=>`${n(e)} ${t}`);return r.length?r.join(`, `):`(Not set)`}function zh(e,t){if(!e?.from)return Dh(e?.prompt??``);let n=t?.find(t=>t.id===e.from.id);return n?`${Vi(n)}, version ${n.version}`:e.from.name}function Bh({at:e,pipeline:t,variant:n,request:r,connections:i,connectionProfiles:a,resolve:o,prompts:s,editing:c,onEdit:l,onPrompt:u,onAnsweredBy:d,onConnection:f,onProfile:p,onModel:m,onClear:h}){let g=Y(),_=Ac(),v=(0,X.useId)(),y=(0,X.useRef)(null),b=(0,X.useRef)(!1);(0,X.useEffect)(()=>{!c&&b.current&&(b.current=!1,y.current?.focus())},[c]);let x=()=>{b.current=!0,l(!1)},{i:S,k:C,row:w}=e,T=`${n}, ${r} ${$m(t,C,w)}`,E=uh(t,S,C,w),D=eh(t,C),O=nh(t,C);if(!D&&S===0)return(0,$.jsx)(`span`,{className:`unset`,children:`(Same)`});if(dh(t,S,C,w))return(0,$.jsx)(`span`,{className:`unset`,children:`(Not sent)`});if(!E&&!fh(t,O,C,w))return(0,$.jsx)(`span`,{className:`unset`,children:`(Same)`});if(!fh(t,S,C,w))return(0,$.jsx)(`span`,{className:`unset`,children:`(None)`});if(w===`settings`&&!E||D&&S===O&&(w===`connection`||w===`profile`))return(0,$.jsx)(`span`,{className:`unset`,children:`(Same)`});let k=Ih({pipeline:t,i:S,k:C,row:w,connections:i,connectionProfiles:a,prompts:s});if(!c)return(0,$.jsx)(`button`,{ref:y,type:`button`,className:`variant-cell${E?` override`:``}`,"aria-label":`${T}: ${E?k:`(Same)`}`,onClick:()=>w===`prompt`?u():l(!0),children:E?k:`(Same)`});let A=e=>{let t=e.relatedTarget;(t?e.currentTarget.contains(t):document.querySelector(`[role=dialog]`))||l(!1)},j=e=>{e.key===`Escape`&&!e.target.closest(`[role=dialog]`)&&(e.stopPropagation(),x())},M=g.targetAnswerOf(t,S,C),N=g.targetStepOf(t,S,C),P=null;if(w===`answeredBy`)P=(0,$.jsxs)(`select`,{autoFocus:!0,"aria-labelledby":v,value:E?N?.type??``:``,onChange:e=>{d(e.target.value),x()},children:[(0,$.jsx)(`option`,{value:``,children:`(Same)`}),ah(t,C).map(e=>(0,$.jsx)(`option`,{value:e.type,children:e.label},e.type))]});else if(w===`model`){let e=M?o(g.answerKey(M.connection.id,M.profile?.id)):null;P=(0,$.jsx)(`input`,{type:`text`,autoFocus:!0,"aria-labelledby":v,value:N?.model??``,placeholder:e?.model||`(Not set)`,onChange:e=>m(e.target.value)})}else if(w===`connection`){let e=g.STEP_TYPES[N?.type??``]?.local?Wm:M?.connection.id??``;P=(0,$.jsx)(Me,{kind:`Connection`,labelledBy:v,value:e,..._(Ym(i,M?.connection),C===0&&!D?qm():[]),onChange:f})}else w===`settings`?P=(0,$.jsx)(`span`,{className:`variant-settings`,"aria-labelledby":v,children:k}):w===`profile`&&(P=(0,$.jsx)(Me,{kind:`Profile`,labelledBy:v,value:M?.profile?.id??`#default`,...Ec(Ym(a,M?.profile),()=>null,[{id:Gm,label:`(Default)`}]),onChange:p}));return(0,$.jsxs)(`span`,{className:`variant-edit`,onBlur:A,onKeyDown:j,children:[(0,$.jsx)(`span`,{id:v,className:`sr-only`,children:T}),P,(0,$.jsx)(`button`,{type:`button`,className:`icon-btn`,"aria-label":`Clear override`,title:`Clear override`,disabled:!E,autoFocus:w===`settings`,onMouseDown:e=>e.preventDefault(),onClick:()=>{h(),x()},children:(0,$.jsx)(J.clear,{size:16,"aria-hidden":`true`})})]})}function Vh(){let[e]=(0,X.useState)(()=>typeof matchMedia==`function`?matchMedia(`(max-width: 600px)`):null),[t,n]=(0,X.useState)(!!e?.matches);return(0,X.useEffect)(()=>{if(!e)return;let t=()=>n(e.matches);return e.addEventListener(`change`,t),()=>e.removeEventListener(`change`,t)},[e]),t}function Hh({pipeline:e,connections:n,connectionProfiles:r,resolve:i,sources:a,joined:o,targetCap:s,protectedTerms:c,edit:l,offer:u}){let d=Y(),f=Om(e),p=d.stepNames(e),m=d.stepFaults(e),h=f.find(e=>e.type===`request`)?.id,[g,_]=(0,X.useState)({}),v=e=>g[e]??e===h,y=e=>_(t=>({...t,[e]:!v(e)})),[b,x]=(0,X.useState)(null),[S,C]=(0,X.useState)(null),[w,E]=(0,X.useState)(null),[D,O]=(0,X.useState)(null),[k,A]=(0,X.useState)(null),[j,M]=(0,X.useState)(null),N=n.filter(e=>d.listedConnection(e)),P=qi(),{list:F}=Ji(),I=ml(),[,L]=(0,X.useState)(0);(0,X.useEffect)(()=>I.subscribe(()=>L(e=>e+1)),[I]);let R=()=>{let t=d.contentOf(e),n=t?.type===`source`?t.ref.id:null,r=n?a.find(e=>e.id===n)?.platform:void 0;return r&&d.WORKFLOW_PLATFORMS[r]||null},te=(t,n)=>{let r=e;l(n),u({label:t,restore:()=>l(r)})},ne=e=>{let t=i(d.answerKey(e.connection.id,e.profile?.id));return t?d.CONNECTION_TYPES[d.typeOf(t)]?.answers??[`prompt`]:void 0},z=e=>r.find(t=>t.id===e)?.fromProfile,re=t=>{if(t.type===`getItems`)return Um(t.content,a);let n=jm(e,t.type===`request`?t.id:t.request),r=d.jobsOf(e)[n];if(t.type===`request`){let t=nh(e,n),r=d.targetStepOf(e,t,n),i=r?.from?F?.find(e=>e.id===r.from.id):void 0;return[r?.from?i?Vi(i):r.from.name:Dh(r?.prompt??``),d.targetAnswerOf(e,t,n)?.connection.name??(r&&d.STEP_TYPES[r.type]?.local?d.STEP_TYPES[r.type]?.label:void 0)].filter(Boolean).join(`, `)}if(!r)return``;if(t.type===`readResponse`){let e=d.outOf(r),t=Je().find(t=>t.id===e.kind)?.label??e.kind,n=e.modifiers.map(e=>Xt().find(t=>t.id===e.type)?.label??e.type);return[...d.readAsOf(r)==null?[]:[`Read as`],t,...n].join(`, `)}let i=d.filterSetsOf(r),o=i.flatMap(e=>e.set?[e.set.name||e.set.id]:[]),s=i.reduce((e,t)=>e+(t.own?.filters.length??0),0);return[...o,...s?[`${s} ${s===1?`filter`:`filters`}`]:[]].join(`, `)||`(No filters)`},B=(t,n)=>{let r=p[t.id]??t.type,i=t.type===`filter`?jm(e,t.request):-1;return[{label:`Move up`,icon:J.moveUp,disabled:n===0,onSelect:()=>l(Mm(e,t.id,-1))},{label:`Move down`,icon:J.moveDown,disabled:n===f.length-1,onSelect:()=>l(Mm(e,t.id,1))},{label:`Clone`,icon:J.clone,disabled:!Fm(e,t.id),onSelect:()=>l(Im(e,t.id))},...t.type===`filter`?[{label:`Move all to filter set…`,icon:wr,disabled:!Dm(e,i),onSelect:()=>{_(e=>({...e,[t.id]:!0})),A(i)}}]:[],...Nm(e,t.id)?[{label:`Remove`,icon:J.remove,destructive:!0,onSelect:()=>te(`Removed ${r}`,Pm(e,t.id))}]:[]]},V=f.filter(e=>e.type===`request`).length,ae=t=>{let n=Rm(e,t);n&&(l(n.next),_(e=>({...e,[n.id]:!0})))},H=[{label:`Send request`,icon:oi,description:`Adds Request ${V+1}`,onSelect:()=>ae(`request`)},{label:`Read response`,icon:Mr,description:`Read as, Response Format`,disabled:!Lm(e,`readResponse`),onSelect:()=>ae(`readResponse`)},{label:`Filter`,icon:be,description:`A filter set, or filters of its own`,disabled:!Lm(e,`filter`),onSelect:()=>ae(`filter`)},{label:`Get items`,icon:K,description:`Adds more items, before Request 1`,onSelect:()=>ae(`getItems`)}],U=t=>{if(t.type===`getItems`)return(0,$.jsx)(Bm,{stepId:t.id,pipeline:e,sources:a,edit:l});let n=jm(e,t.type===`request`?t.id:t.request),s=d.jobsOf(e)[n];if(!s)return null;let m=f.some(e=>e.type===`filter`&&e.request===s.id),h=d.formatReadsItems(d.outOf(s).kind);if(t.type===`request`){let a=p[t.id],c=nh(e,n),f=Be(e,c,n),m=(Pt(f?.type).actions?.({pipeline:e,i:c,k:n,say:M,onSelectPrompt:()=>C({i:c,k:n}),onClearPrompt:()=>{},onCopyRequest:()=>O({i:c,k:n})})??[]).filter(e=>![`Select prompt…`,`Save to library…`,`Clear prompt`,`Revert to default`].includes(e.label));return(0,$.jsx)(Eh,{pipeline:e,k:n,name:a,connections:d.flowStepOf(s)?N:N.filter(jc),connectionProfiles:r,resolve:i,prompts:F,joined:o?.(c,n)??!1,edit:l,offer:u,onConnection:t=>l(yh(e,n,`connection`,(e,r)=>je(e,r,n,t,ne,z))),onProfile:t=>l(yh(e,n,`profile`,(e,r)=>Ne(e,r,n,t,ne))),onEcho:()=>l(yh(e,n,`connection`,(e,t)=>Oe(e,t))),onSelectPrompt:()=>C({i:c,k:n}),onSaveToLibrary:()=>E({i:c,k:n}),extra:m})}return t.type===`readResponse`?(0,$.jsx)(tn,{id:`step-${t.id}-read`,bare:!0,out:d.outOf(s),readAs:d.flowStepOf(s)?d.readAsOf(s):void 0,outputKinds:Je(),modifiers:Xt(),onFormat:t=>l(T(e,n,t)),onSetting:(t,r)=>l(Uh(e,n,e=>({...e,[t]:r}))),onReadAs:t=>t==null?te(`Removed Read as`,Vt(e,n,null)):l(Vt(e,n,t)),...c?{protectedTerms:c}:{},offer:u,onModifier:(t,r)=>l(Wh(e,n,t,r)),onAddModifier:t=>l(Uh(e,n,e=>({...e,modifiers:[...e.modifiers,t]}))),onRemoveModifier:t=>te(`Removed a modifier`,Uh(e,n,e=>({...e,modifiers:e.modifiers.filter((e,n)=>n!==t)}))),formatInFilters:h&&m}):(0,$.jsx)(Em,{pipeline:e,job:n,edit:l,offer:u,format:h?(0,$.jsx)(nt,{out:d.outOf(s),outputKinds:Je(),onFormat:t=>l(T(e,n,t)),onSetting:(t,r)=>l(Uh(e,n,e=>({...e,[t]:r})))}):void 0,moveAll:k===n,onMoveAllClose:()=>A(null)})};return(0,$.jsxs)(`div`,{className:`jobs`,children:[(0,$.jsxs)(rn,{id:`steps`,title:`Steps`,note:String(f.length),children:[j&&(0,$.jsx)(`p`,{className:`note`,role:`status`,children:j}),(0,$.jsx)(`ol`,{className:`steps`,"aria-label":`Steps, in run order`,children:f.map((e,n)=>{let r=p[e.id]??e.type,i=v(e.id),a=m[e.id];return(0,$.jsxs)(`li`,{id:`step-${e.id}`,className:`step${i?` open`:``}${a?` out-of-order`:``}`,children:[(0,$.jsxs)(`div`,{className:`step-row`,children:[(0,$.jsxs)(`button`,{type:`button`,className:`step-toggle`,"aria-expanded":i,"aria-controls":`step-${e.id}-body`,onClick:()=>y(e.id),children:[(0,$.jsx)(t,{className:`step-caret`,size:14,"aria-hidden":`true`}),(0,$.jsx)(`span`,{className:`step-num`,children:n+1}),(0,$.jsx)(`span`,{className:`step-name`,children:r}),!i&&(0,$.jsx)(`span`,{className:`step-sum`,children:re(e)})]}),(0,$.jsx)(it,{actions:B(e,n),label:`${r} actions`})]}),a&&(0,$.jsx)(`p`,{className:`step-fault`,children:a}),i&&(0,$.jsx)(`div`,{className:`step-body`,id:`step-${e.id}-body`,children:U(e)})]},e.id)})}),(0,$.jsx)(`span`,{className:`add-btn`,children:(0,$.jsx)(it,{actions:H,label:`Add step`,trigger:(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(J.add,{size:14,"aria-hidden":`true`}),`Add step`]})})})]}),(0,$.jsx)(Fh,{pipeline:e,connections:N,connectionProfiles:r,resolve:i,answers:ne,fromProfile:z,prompts:F,targetCap:s,names:p,edit:l,undoable:te,onRename:x,onCopyRequest:(e,t)=>O({i:e,k:t}),say:M}),b!==null&&(0,$.jsx)($e,{title:`Rename ${W(e,b)}`,value:d.targetsOf(e)[b]?.name??``,onCommit:t=>l(le(e,b,t)),onClose:()=>x(null)}),S&&(0,$.jsx)(hm,{onClose:()=>C(null),used:{byScenario:vt(e,S.i),byAll:ee(e)},onPick:t=>{let n=e,r=S.k;l(yh(n,r,`prompt`,(e,n)=>ie(e,n,r,t.text,{id:t.id,name:Vi(t)}))),C(null),u({label:`Picked ${Vi(t)}`,restore:()=>l(n)})}}),w&&(()=>{let{i:t,k:n}=w,r=d.targetStepOf(e,t,n)?.prompt??``;return(0,$.jsx)($e,{title:`Save to library`,value:r.split(`
10
+ `)[0]?.trim()??``,onCommit:t=>void(async()=>{let i=await P.create({name:t,text:r});l(yh(e,n,`prompt`,(e,t)=>ie(e,t,n,r,{id:i.id,name:Vi(i)}))),M(`Saved ${Vi(i)} to the library.`)})(),onClose:()=>E(null)})})(),D&&(()=>{let t=Be(e,D.i,D.k);if(!t)return null;let{text:n,writtenFor:r}=mt(t,R());return(0,$.jsx)(Oh,{text:n,writtenFor:r,say:M,onClose:()=>O(null)})})()]})}var Uh=(e,t,n)=>Y().withJobs(e,Y().jobsOf(e).map((e,r)=>r===t?Y().withOut(e,n(Y().outOf(e))):e)),Wh=(e,t,n,r)=>Uh(e,t,e=>({...e,modifiers:e.modifiers.map((e,t)=>t===n?r:e)}));function Gh({pipeline:e,sourceFiles:t,graded:n,openCaseEditor:r}){let[i,a]=(0,X.useState)({graded:!1,todo:!0,missing:!0});if((Y().evalsDataset(e)?.id??null)===null)return null;let o=t??[],s=new Set(n.map(e=>e.item)),c=new Set(o),l=[{key:`graded`,label:`Graded`,tone:`ok`,files:o.filter(e=>s.has(e))},{key:`todo`,label:`To do`,tone:`todo`,files:o.filter(e=>!s.has(e))},{key:`missing`,label:`Missing`,tone:`missing`,files:n.filter(e=>!c.has(e.item)).map(e=>e.item)}];l[0].files.length;let u=l[1].files.length+l[2].files.length,d=l.filter(e=>i[e.key]).flatMap(e=>e.files.map(t=>({file:t,tone:e.tone})));return(0,$.jsx)(rn,{id:`mapping`,title:`Mapping`,level:3,note:f(),about:`Items with an eval case are graded.`,children:o.length?(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(B,{className:`mkey`,label:`Show`,options:l.filter(e=>e.files.length).map(e=>({value:e.key,label:`${e.label} ${e.files.length}`})),on:new Set(l.filter(e=>i[e.key]).map(e=>e.key)),onToggle:e=>a({...i,[e]:!i[e]})}),d.length?(0,$.jsx)(`div`,{className:`mchips`,children:d.map(({file:e,tone:t})=>(0,$.jsx)(`button`,{type:`button`,className:`badge${t===`ok`?``:` rust`} mchip ${t}`,onClick:()=>r(e),children:e},`${t}-${e}`))}):u?(0,$.jsx)(`p`,{className:`unset`,children:`(No matches)`}):null]}):(0,$.jsx)(`p`,{className:`note`,children:`(No items)`})});function f(){let r=Y().contentOf(e),i=r?Y().CONTENT_TYPES[r.type]:void 0;if(i?.inline)return i.label;let a=t??[],o=new Set(n.map(e=>e.item)),s=a.filter(e=>o.has(e)).length;return`${Qa(n.length,`eval case`)}, ${s} of ${a.length} matched`}}function Kh({pipeline:e,edit:t,comment:n,setComment:r,onClear:i,onCopyFailures:a}){let o=[{label:`Clear comment`,icon:M,destructive:!0,onSelect:i},{label:`Copy last run's failures`,icon:Pe,onSelect:a}],s=Y().contentOf(e),c=s?.type===`source`?[{key:`first`,label:`Run first`,width:`quarter`,control:{type:`text`,value:s.first==null?``:String(s.first),placeholder:`all`,clearable:!0,onChange:n=>t(Y().withContent(e,{...s,first:n.trim()?qh(n):null}))}},{key:`loops`,label:`Loop`,width:`quarter`,control:{type:`text`,value:String(s.loops),placeholder:`1`,onChange:n=>t(Y().withContent(e,{...s,loops:Math.max(1,qh(n)??1)}))}}]:[];return(0,$.jsx)(rn,{id:`control`,title:`Run settings`,level:2,actions:o,children:(0,$.jsx)(F,{label:`Run settings`,rows:[...c,{key:`comment`,label:`Comment`,width:`full`,control:{type:`text`,value:n,placeholder:`Add a note`,onChange:e=>r(e)}}]})})}var qh=e=>{let t=Number.parseInt(e,10);return Number.isNaN(t)?null:t};function Jh({pipelineId:e=null}){let t=bi(),n=Z(),r=on(),i=cc(),a=mc(),{openRun:o}=za(),{openCaseEditor:s}=Yc(),[c,l]=xi(`promptlab.workflows`),[u]=xi(`promptlab.connections`),[d]=xi(`promptlab.connectionProfiles`),f=(0,X.useMemo)(()=>Y().answersOf(Y().withSlugs(u.list),d.list,d.default??null),[u.list,d.list,d.default]),p=(0,X.useRef)(f);p.current=f;let[m,g]=xi(`promptlab.comment`),[_]=xi(`promptlab.versions`),[v,y]=(0,X.useState)([]),{list:b,error:x}=zi(),{list:S,error:C}=Ji(),{list:w}=hl(),T=S?.find(e=>e.default)??null,E=Ri(),D=(0,X.useMemo)(()=>(b??[]).map(e=>Tt(e.id,e.name)),[b]),O=(0,X.useCallback)(()=>(b??[]).map(e=>{let t=E.entry(e.id)?.doc?.body;return{id:e.id,name:e.name,grader:t?t.grader??null:e.grader??null}}),[b,E]),[k,A]=(0,X.useState)(4),[j,M]=(0,X.useState)(void 0),[N,P]=(0,X.useState)({}),[F,I]=(0,X.useState)(null),[L,R]=(0,X.useState)(null),ee=(0,X.useRef)(L);ee.current=L;let[te,ne]=(0,X.useState)(!1),[z,re]=(0,X.useState)(!1),[B,ie]=(0,X.useState)(null),V=(0,X.useRef)(null),[ae,H]=(0,X.useState)(null),[U,oe]=(0,X.useState)(!1),[W,se]=(0,X.useState)(!1),ce=(0,X.useRef)(null);(0,X.useEffect)(()=>{let e=!0;return n.sources().then(t=>{e&&y(t.sources)}).catch(()=>{}),n.config().then(t=>{e&&A(t.targetCap)}).catch(()=>{}),()=>{e=!1}},[n]),(0,X.useEffect)(()=>{let e=!0,t,r=async()=>{let i=5e3;try{let t=(await n.queue({limit:1})).runs[0]??null;if(!e)return;!V.current&&t&&!wo(t.status)&&(V.current=t.id),t&&t.id===V.current&&(ie(t),wo(t.status)||(i=1e3))}catch{}e&&(t=setTimeout(()=>void r(),i))};return r(),()=>{e=!1,t&&clearTimeout(t)}},[n]);let le=(0,X.useMemo)(()=>c.list.filter(e=>e.work?.version===20),[c.list]),ue=e?le.find(t=>t.id===e):void 0,de=ue??le.find(e=>e.id===c.at)??le[0],fe=de?.work,G=de?.id??``,pe=m&&(m.pipeline??G)===G?m.text:``,me=(0,X.useCallback)(e=>g({text:e,pipeline:G}),[g,G]);(0,X.useEffect)(()=>{m&&m.pipeline===void 0&&G&&g({...m,pipeline:G})},[m,G,g]);let he=!!e&&!ue&&le.length>0,ge=(0,X.useRef)(new Set);(0,X.useEffect)(()=>{ue&&ge.current.add(ue.id)},[ue]),(0,X.useEffect)(()=>{he&&e&&(pa({tab:`runs`,id:null}),ge.current.has(e)||r.notify({label:nc(`experiment`,e,i.current)}))},[he,e,r.notify,i.current]);let _e=(0,X.useCallback)(e=>fa({tab:`runs`,id:e}),[]),ve=fe?Y().evalsDataset(fe)?.id??null:null,ye=Bi(ve),be=ye?.doc?.body.cases,xe=(0,X.useMemo)(()=>(be??[]).map(e=>({id:e.id??``,item:Y().caseItem(e)})),[be]),Se=ye?.doc?.body.cases,Ce=(0,X.useMemo)(()=>[...new Set((Se??[]).flatMap(e=>(e.metrics??[]).filter(e=>!e.not&&e.weight!==0&&(e.type===`contains-all`||e.type===`contains-any`)).flatMap(e=>Y().metricLines(e.values))))],[Se]),we=(0,X.useRef)(u.list);we.current=u.list;let Te=(0,X.useRef)(d.list);Te.current=d.list;let Ee=(0,X.useRef)(d.default);Ee.current=d.default;let De=le.length?null:b?.[0]??null,Oe=b!==null||x!==null,ke=S!==null||C!==null,Ae=T?.text??``;(0,X.useEffect)(()=>{if(le.length||!Oe||!ke)return;let e=Xh(we.current,p.current.split,De?{id:De.id,name:De.name}:void 0,Ae);l({list:[e],at:e.id})},[le.length,l,Oe,ke,De,Ae]);let je=()=>{let e=E.list().list?.[0];return e?{id:e.id,name:e.name}:void 0},K=(0,X.useRef)(c);K.current=c;let Me=(0,X.useRef)(de);Me.current=de;let Ne=(0,X.useRef)(fe);Ne.current=fe;let Pe=(0,X.useRef)(null),Ie=(0,X.useRef)(null),Le=(0,X.useCallback)(()=>{Ie.current&&clearTimeout(Ie.current);let e=Me.current?.id,n=Ne.current;e&&n&&(Pe.current={id:e,doc:n},Ie.current=setTimeout(()=>{let e=Pe.current;e&&Ni(t,`pipeline`,e.id,e.doc,`idle`)},ki))},[t]);(0,X.useEffect)(()=>()=>{Ie.current&&clearTimeout(Ie.current)},[]);let Re=(0,X.useCallback)(e=>{let t=K.current,n=Me.current.id,r={...t,list:t.list.filter(e=>e.work?.version===20).map(t=>t.id===n?{...t,work:e}:t)};K.current=r,l(r),Le(),I(null)},[l,Le]),ze=u.list.find(e=>Y().listedConnection(e))?.id??``;(0,X.useEffect)(()=>{let e=Ne.current,t=Me.current?.id;if(!e||!t||!ze)return;let n=yn(e,Ue(we.current,p.current.split));if(n===e)return;let r=K.current,i={...r,list:r.list.map(e=>e.id===t?{...e,work:n}:e)};K.current=i,l(i)},[ze,G,l]);let Be=(0,X.useCallback)((e,t,n)=>{let r=K.current,i=r.list.find(t=>t.id===e);if(!n?.length||!i?.work)return;let a=h(i.work,t,n);if(a===i.work)return;let o={...r,list:r.list.map(t=>t.id===e?{...t,work:a}:t)};K.current=o,l(o)},[l]);(0,X.useEffect)(()=>{let e=Pe.current;e&&e.id!==G&&(Ni(t,`pipeline`,e.id,e.doc,`idle`),Pe.current=null,Ie.current&&=(clearTimeout(Ie.current),null))},[G,t]);let Ve=fe?Y().contentOf(fe):null,q=Ve?.type===`source`?Ve.ref.id:null;(0,X.useEffect)(()=>{if(q===null){M(void 0);return}let e=!0;return n.source(q).then(t=>{e&&M(t.files.map(e=>e.name))}).catch(()=>{}),()=>{e=!1}},[q,n]);let He=(fe?Y().itemContents(fe).slice(1):[]).flatMap(({content:e})=>e.type===`source`&&e.ref.id!==q?[e.ref.id]:[]),J=[...new Set(He)].join(`
11
+ `);(0,X.useEffect)(()=>{let e=J?J.split(`
12
+ `):[],t=!0;return Promise.all(e.map(e=>n.source(e).then(t=>[e,t.files.map(e=>e.name)]).catch(()=>null))).then(e=>{t&&P(Object.fromEntries(e.filter(e=>e!==null)))}),()=>{t=!1}},[J,n]);let We=(0,X.useCallback)(e=>{let t=v.find(t=>t.id===e);return t?{name:t.name,type:t.type,files:e===q&&j?j:N[e]??[]}:null},[v,q,j,N]),Ge=Mc(),Ke=(0,X.useMemo)(()=>{if(!fe)return[];if(!u.list.length&&Dt(fe))return[`add a connection first`];let e={profiles:f.resolve,connections:f.connection,sources:We,grader:Ge,...b?{groups:b}:{}};return Y().validatePipeline(fe,e)},[fe,u.list,f,We,b,Ge]),qe=G?_.pipeline?.[G]??[]:[],Je=(0,X.useCallback)(async()=>{let e=Ne.current,r=Me.current.id;Ni(t,`pipeline`,r,e,`run`);let i=Y().resolvePipeline(e,{profiles:f.resolve,grader:Ge,groups:O(),...q!==null&&j!==void 0?{files:j}:{},filesOf:e=>e===q?j:N[e],comment:pe});ne(!0),I(null),R(null);try{let t=await n.submit(i);Be(r,e,t.prompts),V.current=t.run.id,ie(t.run),o(t.run.id,{at:t.run.submittedAt,from:`runs`})}catch(e){I(e instanceof Error?e.message:String(e));let t=e instanceof Nn&&e.status===403&&e.body?.unshared;R(Array.isArray(t)?t:null),V.current=null,ie(null)}finally{ne(!1)}},[n,pe,q,o,f,j,N,t,Ge,O,Be]),Xe=(0,X.useCallback)(async()=>{let e=ee.current;if(e?.length)try{for(let t of e)await n.shareConnection(t.kind,t.id);R(null),I(null);let t=e.map(e=>e.name).join(`, `);r.offer({label:`Shared ${t} with this workspace`,restore:()=>void(async()=>{for(let t of e)try{await n.shareConnection(t.kind,t.id,!0)}catch{}})()})}catch(e){I(e instanceof Error?e.message:String(e))}},[n,r]),[Ze,Qe]=(0,X.useState)(null),$e=(0,X.useCallback)(async()=>{let e=V.current;if(e){Qe(e);try{ie((await n.cancel(e)).run)}catch{Qe(null)}}},[n]);(0,X.useEffect)(()=>{B&&wo(B.status)&&Qe(null)},[B]);let et=(0,X.useCallback)(async()=>{try{let e=(await n.queue({limit:1})).runs[0];if(!e)return;let t=(e.results??[]).filter(e=>(e.scenarios??[]).some(e=>Object.values(e?.scores??{}).some(Y().failedScore))).map(e=>e.name??`an item`);t.length&&await navigator.clipboard?.writeText(t.join(`
13
+ `))}catch{}},[n]),tt=(0,X.useCallback)(async e=>{let r=Ne.current,i=Me.current.id;Ni(t,`pipeline`,i,r,`run`);let a=Y().itemContents(r)[0]?.step,o=r.steps?{...r,steps:r.steps.filter(e=>e.type!==`getItems`||e.id===a)}:r,s=Y().resolvePipeline(o,{profiles:f.resolve,grader:Ge,groups:O(),files:[e],comment:pe}),c=await n.submit(s);Be(i,r,c.prompts);let l=c.run;for(;l.status===`queued`||l.status===`running`;)await new Promise(e=>setTimeout(e,500)),l=await n.run(c.run.id);return((l.results??[]).find(t=>t.name===e)?.scenarios??[]).map(e=>e.res??null)},[n,pe,f,t,Ge,O,Be]),nt=(0,X.useCallback)(e=>{ve&&s(e,{dataset:ve,files:j??[],run:tt})},[s,j,tt,ve]),rt=(0,X.useCallback)(()=>{let e={text:pe,pipeline:G};me(``),r.offer({label:`Cleared the comment`,restore:()=>g(e)})},[pe,me,g,G,r]),it=(0,X.useCallback)(()=>{let e=Y().pipelineToYaml(Ne.current,{profiles:we.current});Zs(new Blob([e],{type:`text/yaml`}),Xs(`experiment`,Ne.current.name||`experiment`,20,`yml`))},[]),at=(0,X.useCallback)(async e=>{let t=Ne.current,r={};for(let e of Y().evalsOf(t)){let t=Y().casesRef(e)?.id??null;if(t&&!r[t]){let e=await n.dataset(t);r[t]={name:e.name,body:e.body}}}let i=Y().exportBundle(t,{connections:we.current,connectionProfiles:Te.current,profileDefault:Ee.current??null,grader:Ge,datasets:r});if(`error`in i)throw Error(i.error);Zs(await n.bundle({files:i.files,source:q,items:e}),Xs(`ci`,t.name||`experiment`,20,`zip`))},[n,q,Ge]),ot=(0,X.useCallback)(async e=>{let t=await n.archivedRules().then(e=>e.rules,()=>({})),r=Y().yamlToPipeline(e,{profiles:we.current,connectionProfiles:Te.current,profileType:e=>p.current.connection(e)?.type,connectionSplit:p.current.split,sources:v,groups:D,rulesFor:e=>t[e]??null});if(`error`in r){H(r);return}let{doc:i,missing:a}=r,o={id:Zh(),name:i.name||`Imported`,work:i},s={...K.current,at:o.id,list:[...le,o]};K.current=s,l(s),_e(o.id),H({doc:i,missing:a})},[n,le,l,v,D,_e]);if(!de||!fe)return(0,$.jsx)(`div`,{className:`runs`,children:(0,$.jsx)(Ot,{label:`Experiments`})});let st=e=>{let n=Me.current.id;Ni(t,`pipeline`,n,Ne.current,`restore`),Re(e.doc),re(!1)};return(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(im,{list:le,at:G,canRestore:qe.length>0,used:Object.fromEntries(le.map(e=>[e.id,_.pipeline?.[e.id]?.[0]?.at??null])),onSelect:e=>{l({...K.current,at:e}),_e(e)},onNew:()=>{let e=Yh(le.map(e=>e.name));l({...K.current,list:[...le,e],at:e.id}),_e(e.id)},onClone:()=>{let e={id:Zh(),name:`${de.name} copy`,work:structuredClone(fe)};l({...K.current,list:[...le,e],at:e.id}),_e(e.id)},link:a({tab:`runs`,id:G}),onCopyMove:()=>se(!0),onRename:e=>{let t=e.trim(),n=K.current,r=Me.current.id,i={...n,list:n.list.filter(e=>e.work?.version===20).map(e=>e.id===r?{...e,name:t,work:{...e.work,name:t}}:e)};K.current=i,l(i),Le()},onDelete:()=>{let t=K.current,n=G,i=le.filter(e=>e.id!==n),a=i.length?i:[Xh(u.list,f.split,je(),Ae)],o=a.some(e=>e.id===t.at)?t.at:a[0].id;l({...K.current,list:a,at:o}),e&&pa({tab:`runs`,id:null}),r.offer({label:`Deleted ${de.name||`the experiment`}`,restore:()=>{K.current=t,l(t),_e(n)}})},onRestore:()=>re(!0),onExport:it,onExportCi:()=>oe(!0),onImport:()=>ce.current?.click()}),(0,$.jsx)(cm,{problems:Ke,error:F,run:B,submitting:te,stopping:!!B&&Ze===B.id,onRun:()=>void Je(),onStop:()=>void $e(),onOpen:()=>{B&&o(B.id,{at:B.submittedAt,from:`runs`})},...L?.length?{onShare:()=>void Xe()}:{}}),(0,$.jsxs)(`div`,{className:`runs`,onKeyDown:Qh,children:[(0,$.jsx)(`input`,{ref:ce,type:`file`,accept:`.yml,.yaml`,hidden:!0,"aria-hidden":`true`,onChange:e=>{let t=e.target.files?.[0];e.target.value=``,t&&t.text().then(ot).catch(()=>H({error:`the file could not be read`}))}}),(0,$.jsx)(Kh,{pipeline:fe,edit:Re,comment:pe,setComment:me,onClear:rt,onCopyFailures:()=>void et()}),(0,$.jsx)(Hh,{pipeline:fe,connections:u.list,connectionProfiles:d.list,resolve:f.resolve,sources:v,joined:(e,t)=>(q===null||j!==void 0)&&Y().contentJoined(fe,e,t,{sources:We}),targetCap:k,protectedTerms:Ce,edit:Re,offer:r.offer}),(0,$.jsx)(ym,{contentFiles:j,pipeline:fe,edit:Re,offer:r.offer,children:(0,$.jsx)(Gh,{pipeline:fe,sourceFiles:j,graded:xe,openCaseEditor:nt})}),W&&de&&(0,$.jsx)(yc,{subject:{kind:`pipeline`,id:de.id,name:de.name},scan:{pipelines:le,groups:b??[],prompts:(S??[]).map(e=>({id:e.id,name:Vi(e)})),filterSets:w??[],sources:v},undo:r,onClose:()=>se(!1),onChanged:()=>void t.refresh()}),(0,$.jsx)(Ye,{undo:r.undo,notice:r.notice,onUndo:r.undoNow,onDismiss:r.dismiss}),z&&(0,$.jsx)(Bt,{noun:`experiment`,versions:qe,at:e=>e.at,reason:e=>e.reason,onRestore:st,onClose:()=>re(!1)}),U&&(0,$.jsx)(sm,{hasItems:q!==null,onExport:at,onClose:()=>oe(!1)}),ae&&(`doc`in ae?(0,$.jsx)(Fe,{title:`Imported ${ae.doc.name||`Untitled`}`,onClose:()=>H(null),dismiss:`Close`,children:ae.missing.length>0?(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`p`,{className:`note`,children:`Missing in this workspace:`}),(0,$.jsx)(`ul`,{className:`import-missing`,children:ae.missing.map(e=>{let t=e.replace(/ not found$/,``),n=dm(e);return(0,$.jsx)(`li`,{children:n?(0,$.jsx)(`a`,{href:n,onClick:()=>H(null),children:t}):t},e)})})]}):(0,$.jsx)(`p`,{className:`note`,children:`Ready to run.`})}):(0,$.jsx)(Fe,{title:`Nothing imported`,onClose:()=>H(null),dismiss:`Close`,children:(0,$.jsx)(`p`,{className:`note`,children:ae.error})}))]})]})}var Yh=e=>{let t=hn(e),n=Y().blankPipeline({name:t});return{id:Zh(),name:t,work:Y().withJobs(n,Y().jobsOf(n).map(e=>({...e,steps:[]})))}},Xh=(e,t,n,r)=>({id:Zh(),name:hn([]),work:ut(Ue(e,t),n,r)}),Zh=()=>`w${Date.now().toString(36)}${Math.random().toString(36).slice(2,8)}`;function Qh(e){if(e.key!==`Enter`||e.defaultPrevented||e.nativeEvent.isComposing)return;let t=e.target;!t.closest(`.modal`)&&ce(t)&&(e.preventDefault(),t.blur())}var $h=3e3,eg=10,tg=10,ng=20,rg=e=>ks.some(t=>t.value===e),ig={pass:`% passed`,score:`score`,time:`avg time`},ag=(e,t)=>e===`time`?oo(t):`${Math.round(t)}%`,og=e=>e==null?`none`:e?`pass`:`fail`,sg=e=>e==null?`not graded`:e?`passed`:`failed`,cg=e=>e.length>eg?`${e.slice(0,eg).join(`; `)}; and ${e.length-eg} more`:e.join(`; `);function lg({pipeline:e}){let t=Z(),{openRun:n}=za(),[r]=xi(`promptlab.workflows`),i=(0,X.useMemo)(()=>Ps(r.list.filter(e=>e.work?.version===20)),[r.list]),[a,o]=(0,X.useState)(null),s=e||a||``,c=i.find(e=>e.id===s)??i.find(e=>e.doc===s),l=c?.id??s,u=c?.doc??s,d=c?.only??null,[f,p]=(0,X.useState)(As[0]),[m,h]=(0,X.useState)(`pass`),[g,_]=(0,X.useState)(!1),[v,y]=(0,X.useState)(null),[b,x]=(0,X.useState)(null),[S,C]=(0,X.useState)(0),w=(0,X.useRef)(v);w.current=v,(0,X.useEffect)(()=>{if(e)return;let n=!0;return t.queue({limit:1}).then(e=>{let t=e.runs[0],r=i.filter(e=>e.doc===t?.snapshot?.id).length>1,a=t?Fs(i,t)?.id??(r?void 0:t.snapshot?.id):void 0;n&&o(a||i[0]?.id||``)},()=>{n&&o(i[0]?.id||``)}),()=>{n=!1}},[t,e,i]),(0,X.useEffect)(()=>{if(!u)return;let e=!0,n;y(null),x(null);let r=async()=>{try{let i=await t.queue({pipeline:u,limit:Math.min(100,f+10)});if(!e)return;y(d?i.runs.filter(e=>e.snapshot?.name===d):i.runs),x(null),i.runs.some(e=>e.status===`queued`||e.status===`running`)&&(n=setTimeout(()=>void r(),$h))}catch{e&&!w.current&&x(`Runs not loaded: server unreachable.`)}};return r(),()=>{e=!1,n&&clearTimeout(n)}},[t,u,d,f,S]);let T=(0,X.useMemo)(()=>v?Ls(v,f):null,[v,f]),E=(0,X.useMemo)(()=>T?zs(T.targets,m):[],[T,m]),D=(0,X.useMemo)(()=>Hs(E,m),[E,m]),O=(0,X.useMemo)(()=>{if(!T)return[];let e=new Set(E.map(e=>e.id));return[...E.map(e=>({id:e.id,name:e.name})),...T.rows.filter(t=>!e.has(t.id))]},[T,E]),k=da({tab:`runs`,id:c?.saved??null}),A=(e,t)=>({href:da({tab:`results`,id:e.id}),onOpen:()=>n(e.id,{at:e.at,from:`history`,...t==null?{}:{item:t}})}),j=(e,t)=>{let n=A(e);return(0,$.jsx)(`a`,{className:`ov-run`,href:n.href,title:Za(e.at),onClick:e=>{e.preventDefault(),n.onOpen()},children:t?`${ze(e.at)}, ${pt(e.at)}`:un(e.at)})},M=!T&&(0,$.jsx)(Ot,{label:`Runs`,error:b,onRetry:()=>{x(null),C(e=>e+1)}});return(0,$.jsxs)(`div`,{className:`history-overview`,children:[(0,$.jsxs)(`div`,{className:`ov-controls`,children:[(0,$.jsx)(`span`,{id:`ov-pipeline`,className:`sr-only`,children:`Experiment`}),(0,$.jsx)(Me,{kind:`Experiment`,labelledBy:`ov-pipeline`,value:l,placeholder:`(No experiment)`,options:i.map(e=>({id:e.id,label:e.label})),onChange:e=>{location.hash=da({tab:`history`,section:`overview`,pipeline:e})}}),(0,$.jsx)(`select`,{"aria-label":`Runs shown`,value:f,onChange:e=>p(Number(e.target.value)),children:As.map(e=>(0,$.jsxs)(`option`,{value:e,children:[`Last `,e,` runs`]},e))})]}),(0,$.jsxs)(`div`,{className:`ov-sheet`,children:[(0,$.jsxs)(`section`,{className:`ov-frame ov-latest`,"aria-labelledby":`ov-latest`,children:[(0,$.jsxs)(`h2`,{className:`ov-rebate`,id:`ov-latest`,children:[`Latest run`,T?.latest&&(0,$.jsxs)(`span`,{className:`ov-rebate-end`,children:[j(T.latest),`, `,Qa(T.latest.items.length,`item`)]})]}),(0,$.jsx)(`div`,{className:`ov-body`,children:M||(T.latest?(0,$.jsx)(ug,{run:T.latest,previous:T.previous,targets:E,metric:m,onMetric:h,pipelineHref:k,runAt:A(T.latest),cellAt:e=>A(T.latest,e)}):(0,$.jsxs)(`div`,{className:`ov-empty`,children:[(0,$.jsx)(`span`,{className:`unset`,children:`(No runs)`}),(0,$.jsx)(`a`,{className:`ghost button`,href:k,children:`Open in Experiments`})]}))})]}),T?.latest&&T.previous&&(0,$.jsx)(dg,{ov:T,prev:T.previous,runLink:j,cellAt:e=>A(T.latest,e)}),T?.latest&&T.previous&&(0,$.jsxs)(`section`,{className:`ov-frame ov-time`,"aria-labelledby":`ov-time`,children:[(0,$.jsx)(`h2`,{className:`ov-rebate`,id:`ov-time`,children:`Previous performance`}),(0,$.jsxs)(`div`,{className:`ov-body`,children:[(0,$.jsx)(`div`,{className:`ov-time-head`,children:(0,$.jsx)(`select`,{"aria-label":`Previous performance shows`,value:m,onChange:e=>{rg(e.target.value)&&h(e.target.value)},children:ks.map(e=>(0,$.jsx)(`option`,{value:e.value,children:e.label},e.value))})}),(0,$.jsx)(pg,{ov:T,rows:O,metric:m,best:D})]})]}),T?.latest&&T.previous&&(0,$.jsxs)(`section`,{className:`ov-frame ov-items`,"aria-labelledby":`ov-items`,children:[(0,$.jsx)(`h2`,{className:`ov-rebate`,id:`ov-items`,children:`Items`}),(0,$.jsx)(`div`,{className:`ov-body`,children:(0,$.jsx)(mg,{ov:T,rows:O,allPass:g,onAllPass:_})})]})]})]})}function ug({run:e,previous:t,targets:n,metric:r,onMetric:i,pipelineHref:a,runAt:o,cellAt:s}){let c=e=>[e.connection,e.model].filter(Boolean).join(`, `),l=new Set(n.map(c)).size>1,u=e=>{let n=t?.targets.get(e.id)?.version;return!!n&&!!e.version&&n!==e.version},d=n[0]?.evals??[],f=e=>r===e?`num ov-on`:`num`,p=[{key:`name`,header:`Variant`,role:`title`,sort:null,cell:e=>(0,$.jsxs)(`div`,{className:`ov-target`,children:[(0,$.jsx)(`a`,{href:a,title:e.name,children:e.name}),u(e)&&(0,$.jsxs)(`span`,{className:`note`,title:e.prompt,children:[t.targets.get(e.id).version,` → `,e.version]}),l&&c(e)&&(0,$.jsx)(`span`,{className:`note`,children:c(e)})]})},{key:`items`,header:(0,$.jsx)(`span`,{className:`sr-only`,children:`Items`}),label:``,className:`ov-strip`,sort:null,cell:t=>{let n=e.items.filter(e=>t.verdicts.get(e.key)===!1).map(e=>e.name);return(0,$.jsx)(Yt,{className:`fit`,label:`${t.name}: ${t.passed} of ${t.cases} passed${n.length?`; failed: ${cg(n)}`:``}`,...o,cells:e.items.map(e=>{let n=t.verdicts.get(e.key)??null;return{state:og(n),title:`${e.name}, ${sg(n)}`,...s(e.x)}})})}},{key:`pass`,header:`Passed Items`,className:f(`pass`),sort:e=>e.pct,cell:e=>e.cases?(0,$.jsx)(Xi,{n:e.passed,of:e.cases}):`—`},{key:`score`,header:`Score`,className:f(`score`),sort:e=>e.score,cell:e=>e.score==null?`—`:`${e.score}%`},...d.map((e,t)=>({key:`eval-${e.id}`,header:e.label,className:`num`,sort:null,cell:e=>{let n=e.evals[t];return n?n.mark==null?n.ran?(0,$.jsx)(`span`,{className:n.passed===n.ran?`ov-full`:void 0,title:`${n.passed} of ${n.ran}`,children:n.passed}):`—`:(0,$.jsx)(qe,{pass:n.mark}):`—`}})),{key:`time`,header:`Avg Time`,className:f(`time`),sort:e=>e.avgTime,cell:e=>e.avgTime==null?`—`:oo(e.avgTime)}];return(0,$.jsx)(x,{className:`ov-table`,label:`Latest run`,cards:!0,rows:n,rowKey:e=>e.id,columns:p,sort:{key:r,dir:r===`time`?`asc`:`desc`},onSort:e=>{rg(e?.key)&&i(e.key)}})}function dg({ov:e,prev:t,runLink:n,cellAt:r}){let i=Us(e),[a,o]=(0,X.useState)(new Set),s=(e,t,n)=>(0,$.jsxs)(`div`,{className:`ov-change`,children:[(0,$.jsxs)(`h3`,{children:[(0,$.jsx)(qe,{pass:e,decorative:!0}),t,(0,$.jsx)(`span`,{className:`ov-count`,children:n.length})]}),n.length?(0,$.jsxs)(`ul`,{children:[(a.has(e)?n:n.slice(0,tg)).map(({item:e,target:t})=>{let n=r(e.x);return(0,$.jsx)(`li`,{children:(0,$.jsxs)(`a`,{href:n.href,onClick:e=>{e.preventDefault(),n.onOpen()},children:[(0,$.jsx)(`span`,{className:`ov-item`,title:e.name,children:e.name}),(0,$.jsx)(`span`,{className:`note`,children:t.name})]})},`${t.id} ${e.key}`)}),!a.has(e)&&n.length>tg&&(0,$.jsx)(`li`,{children:(0,$.jsxs)(`button`,{type:`button`,className:`ghost ov-more`,onClick:()=>o(new Set(a).add(e)),children:[n.length-tg,` more`]})})]}):(0,$.jsx)(`p`,{className:`unset`,children:`(None)`})]});return(0,$.jsxs)(`section`,{className:`ov-frame ov-changed`,"aria-labelledby":`ov-changed`,children:[(0,$.jsxs)(`h2`,{className:`ov-rebate`,id:`ov-changed`,children:[`Changed since `,n(t,!0)]}),(0,$.jsxs)(`div`,{className:`ov-body`,children:[s(!1,`New failures`,i.failing),s(!0,`New passing`,i.passing)]})]})}function fg({runs:e}){let{openRun:t}=za(),n=e.length>12,r=Math.ceil(e.length/7),i=-1/0;return(0,$.jsx)(`div`,{className:n?`ov-heads crowded`:`ov-heads`,children:e.map((a,o)=>{let s=ze(a.at),c=(o===0||s!==ze(e[o-1].at))&&(!n||o-i>=r);c&&(i=o);let l=o===0||o===e.length-1;return(0,$.jsxs)(`a`,{className:l?`ov-head ov-end`:`ov-head`,href:da({tab:`results`,id:a.id}),title:`${un(a.at)}, ${Za(a.at)}`,onClick:e=>{e.preventDefault(),t(a.id,{at:a.at,from:`history`})},children:[(0,$.jsx)(`span`,{className:c?`ov-day`:`ov-day same`,children:s}),!n&&(0,$.jsx)(`span`,{className:`ov-clock`,children:pt(a.at)}),!a.finished&&io(a.status)]},a.id)})})}function pg({ov:e,rows:t,metric:n,best:r}){let i=Gs(e,n),a=[i,i/2,0].map(e=>ag(n,e)),o=t.map(t=>{let r=Ws(e,t.id,n);return{row:t,points:r,last:[...r].reverse().find(e=>e.value!=null)}});return(0,$.jsxs)(`div`,{className:`ov-grid ov-lines`,style:{"--n":e.runs.length},children:[(0,$.jsx)(`span`,{}),(0,$.jsx)(`span`,{}),(0,$.jsx)(fg,{runs:e.runs}),(0,$.jsx)(`span`,{}),o.map(({row:e,points:t,last:o})=>{let s=r.has(e.id),c=t.map(e=>`${ze(e.run.at)} ${e.value==null?e.gap===`unfinished`?e.run.status:e.gap===`absent`?`not in this run`:`not graded`:ag(n,e.value)}`);return(0,$.jsxs)(`div`,{className:`ov-line-row`,children:[(0,$.jsxs)(`span`,{className:`ov-line-name`,title:e.name,children:[(0,$.jsx)(`span`,{className:`ov-line-label`,children:e.name}),s&&(0,$.jsx)(wt,{tone:`sage`,children:`Best`})]}),(0,$.jsx)(`span`,{className:`ov-axis`,"aria-hidden":`true`,children:a.map((e,t)=>(0,$.jsx)(`span`,{children:e},t))}),(0,$.jsx)(Ft,{label:`${e.name}${s?`, best`:``}, ${ig[n]} by run: ${c.join(`, `)}`,max:i,...r.size?{className:s?`best`:`quiet`}:{},points:t.map(t=>{let r=t.run.targets.get(e.id),i=n===`pass`&&r?.cases?` (${r.passed} of ${r.cases})`:``;return{value:t.value,break:t.version,title:`${un(t.run.at)}: ${t.value==null?t.gap===`unfinished`?t.run.status:t.gap===`absent`?`not in this run`:`not graded`:`${ag(n,t.value)}${i}`}`}})}),(0,$.jsx)(`span`,{className:`ov-last`,title:o?un(o.run.at):void 0,children:o?.value==null?`—`:ag(n,o.value)})]},e.id)})]})}function mg({ov:e,rows:n,allPass:r,onAllPass:i}){let a=(0,X.useMemo)(()=>Ks(e,n.map(e=>e.id)),[e,n]),[o,s]=(0,X.useState)(!1),c=a.filter(e=>e.failed>0),l=a.filter(e=>e.failed===0),u=[...o?c:c.slice(0,ng),...r?l:[]],d=[{key:`item`,header:`Item`,role:`title`,sort:e=>e.name,cell:e=>(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`span`,{className:`ov-item`,title:e.name,children:e.name}),e.source&&(0,$.jsx)(`span`,{className:`ov-source note`,children:e.source})]})},...n.map((t,n)=>({key:`t-${t.id}`,header:t.name,label:t.name,className:`ov-cell`,sort:e=>{let t=e.cells[n];return t?t.passed/(t.passed+t.failed):2},cell:r=>{let i=r.cells[n];return i?(0,$.jsxs)(`span`,{className:`ov-cell-in`,children:[(0,$.jsx)(Yt,{className:e.runs.length>25?`xs tight`:`xs`,label:`${r.name}, ${t.name}: passed ${i.passed} of ${i.passed+i.failed} runs`,cells:i.cells.map((t,n)=>({state:og(t),title:`${un(e.runs[n].at)}, ${t==null?`not in this run`:sg(t)}`}))}),(0,$.jsx)(`span`,{className:i.failed?`ov-n`:`ov-n ov-full`,children:(0,$.jsx)(Xi,{n:i.passed,of:i.passed+i.failed})})]}):(0,$.jsx)(`span`,{className:`note`,children:`—`})}}))],f=r?en:t;return(0,$.jsxs)($.Fragment,{children:[u.length>0&&(0,$.jsx)(`div`,{className:`scrollx`,children:(0,$.jsx)(x,{className:`ov-matrix`,label:`Items`,cards:!0,rows:u,rowKey:e=>e.key,columns:d,defaultSort:null})}),(0,$.jsxs)(`div`,{className:`ov-items-foot`,children:[!o&&c.length>ng&&(0,$.jsxs)(`button`,{type:`button`,className:`ghost ov-more`,onClick:()=>s(!0),children:[c.length-ng,` more`]}),l.length>0&&(0,$.jsxs)(`button`,{type:`button`,className:`ghost ov-more`,"aria-expanded":r,onClick:()=>i(!r),children:[l.length,` passed every run`,(0,$.jsx)(f,{size:14,"aria-hidden":`true`})]})]})]})}var hg=e=>!!e.id&&wo(e.status),gg=e=>`Queued ${Za(e.submittedAt)}`;async function _g(e,t){try{(await e.run(t)).status===`queued`&&await e.cancel(t)}catch{}}var vg=[``,`queued`,`running`,`done`,`cancelled`,`failed`,`incomplete`,`interrupted`],yg=e=>e.numeric?`hnum num`:void 0,bg=e=>[...new Map(e.map(e=>[e.id,e])).values()].sort((e,t)=>String(t.submittedAt).localeCompare(String(e.submittedAt))||(e.id<t.id?1:e.id>t.id?-1:0)),xg=(e,t)=>{let n=new Set(e);return n.delete(t),n},Sg=(e,t,n=t)=>!t||e.some(e=>e.value===t)?e:[...e,{value:t,label:n}],Cg=e=>e&&{before:e.submittedAt,beforeId:e.id},wg=[{id:`overview`,label:`Overview`,icon:Qn},{id:`runs`,label:`All runs`,icon:Pr}];function Tg({section:e=`overview`,pipeline:t=``,content:n=``}){return(0,$.jsxs)(`div`,{className:`history`,children:[(0,$.jsx)(jt,{label:`History`,level:`section`,className:`history-sections`,current:e,items:wg.map(({id:r,label:i,icon:a})=>({key:r,label:i,icon:a,href:da({tab:`history`,section:r,...t&&(r===e||e===`overview`)?{pipeline:t}:{},...r===`runs`&&n?{content:n}:{}})}))}),e===`overview`?(0,$.jsx)(lg,{pipeline:t}):(0,$.jsx)(Eg,{pipeline:t,content:n})]})}function Eg({pipeline:e,content:t}){let n=Z(),r=on(),{openRun:i}=za(),a=mc(),[o,s]=xi(`promptlab.history.columns`),[c,l]=(0,X.useState)([]),[u,d]=(0,X.useState)(!1),[f,m]=(0,X.useState)(``),[h,g]=(0,X.useState)(!1),[_,v]=(0,X.useState)(null),[y,b]=(0,X.useState)(null),[S,C]=(0,X.useState)(null),[w,T]=(0,X.useState)(null),[E,D]=(0,X.useState)(!1),[O,A]=(0,X.useState)(!1),[j,N]=(0,X.useState)(!1),[P,F]=(0,X.useState)(!1),[I,L]=(0,X.useState)(null),[R,ee]=(0,X.useState)(0),te=(0,X.useRef)(P);te.current=P;let[z,re]=(0,X.useState)(null),[B,ie]=(0,X.useState)(0),[V,ae]=(0,X.useState)(new Set),H=(0,X.useRef)(c);H.current=c;let[U]=xi(`promptlab.workflows`),[oe,W]=(0,X.useState)(new Set);(0,X.useEffect)(()=>{let e=!0;return n.sources().then(t=>{e&&W(new Set(t.sources.map(e=>e.id)))},()=>{}),()=>{e=!1}},[n]);let se=(0,X.useMemo)(()=>c.map(e=>{let t=eo(is(e),e),n=t.pipelineId?U?.list.find(e=>e.id===t.pipelineId||e.work?.id===t.pipelineId):void 0;return{...t,...n?{pipelineHref:da({tab:`runs`,id:n.id})}:{},...t.sourceId&&oe.has(t.sourceId)?{contentHref:da({tab:`library`,section:`sources`,id:t.sourceId})}:{}}}),[c,U,oe]),ce=(0,X.useMemo)(()=>kg(o),[o]),le=(0,X.useCallback)(async(e,t=!1)=>{try{return await n.queue({limit:25,...e,...t?{full:t}:{}})}catch{return null}},[n]),ue=(0,X.useCallback)(e=>{let t=new Set(e.runs.map(e=>e.id));l(n=>bg([...n.filter(e=>!t.has(e.id)),...e.runs])),d(e.more)},[]);(0,X.useEffect)(()=>{let e=!0,t,n=async()=>{let r=await le();e&&(r?(ue(r),F(!0),L(null)):te.current||L(`Runs not loaded: server unreachable.`),H.current.some(e=>[`queued`,`running`].includes(e.status))&&(t=setTimeout(()=>void n(),3e3)))};return n(),()=>{e=!1,t&&clearTimeout(t)}},[le,ue,R,B]);let de=(0,X.useMemo)(()=>se.filter(n=>(!f||(n.status||`done`)===f)&&(!e||n.setup===e||n.pipelineId===e)&&(!t||n.sourceId===t)),[se,f,e,t]),fe=(e,t)=>{let n=new Map;for(let r of se)e(r)&&!n.has(e(r))&&n.set(e(r),t(r)||e(r));return[{value:``,label:`All`},...[...n].map(([e,t])=>({value:e,label:t})).sort((e,t)=>e.label.localeCompare(t.label))]},G=n=>{let r={pipeline:e,content:t,...n};pa({tab:`history`,section:`runs`,...r.pipeline?{pipeline:r.pipeline}:{},...r.content?{content:r.content}:{}})},pe=(e=>({Runs:vo.filter(t=>e.Runs.has(t.key)),"Run Scenarios":yo.filter(t=>e[`Run Scenarios`].has(t.key))}))(ce),me=(0,X.useCallback)((e,t)=>{i(e,{at:t,from:`history`})},[i]),he=(0,X.useCallback)(async e=>{ae(t=>xg(t,e));try{let t=await n.resume(e),r={runs:[t.run],more:H.current.length>25};ue(r),me(e,t.run.submittedAt)}catch{}},[n,ue,me]),ge=(0,X.useCallback)(async e=>{T(null);try{let{run:t}=await n.rerunRun(e);ue({runs:[t],more:H.current.length>25}),re(t.id),ie(e=>e+1),r.offer({label:gg(t),restore:()=>void _g(n,t.id).then(()=>ie(e=>e+1))})}catch(e){T(`Not re-run: ${e instanceof Error?e.message:`server unreachable`}.`)}},[n,ue,r]),_e=(0,X.useCallback)(async e=>{ae(t=>new Set(t).add(e));try{let{run:t}=await n.cancel(e);ue({runs:[t],more:H.current.length>25})}catch{ae(t=>xg(t,e))}},[n,ue]),ve=e=>{let t=e.run?H.current.find(t=>t.id===e.run):void 0,n=[];if(t&&!wo(t.status)){let e=V.has(t.id)||To(t);n.push({label:e?`Stopping…`:`Stop`,icon:p,busy:e,onSelect:()=>void _e(t.id)})}return go(e)&&n.push({label:`Resume`,icon:k,onSelect:()=>void he(e.run)}),t&&hg(t)&&n.push({label:`Re-run`,icon:ei,onSelect:()=>void ge(t.id)}),e.run&&n.push(a({tab:`results`,id:e.run})),n},ye=(0,X.useCallback)(async()=>{let e=H.current;N(!0);try{await n.clear()}catch{T(`Not cleared: server unreachable.`);return}finally{N(!1)}l([]),d(!1),r.offer({label:`Cleared ${Qa(e.length,`run`)}`,restore:()=>{for(let t of e)n.submit(Y().upgradePipeline(t.snapshot)).catch(()=>{})}})},[n,r]),be=(0,X.useCallback)(async()=>{A(!0);let e=[],t=!1,n;for(let r=0;;r++){let i=await le(n,!0);if(!i){t=!0;break}if(e=bg([...e,...i.runs]),n=Cg(i.runs.at(-1)),!i.more||!n||r>100)break}if(t){let t=new Set(e.map(e=>e.id));e=bg([...e,...H.current.filter(e=>!t.has(e.id))])}A(!1),e.length?(Zs(new Blob([JSON.stringify({exported:new Date().toISOString(),runs:e},null,2)],{type:`application/json`}),Xs(`runs`,`all`,20,`json`)),T(t?`Exported ${Qa(e.length,`run`)}. Server unreachable, so only those this browser had.`:`Exported ${Qa(e.length,`run`)}.`)):T(`Nothing to export yet.`)},[n,le]),xe=[{label:`Select Columns`,icon:ir,onSelect:()=>g(!0)},{label:`Export JSON`,icon:K,busy:O,onSelect:()=>void be()},{label:`Clear`,icon:M,destructive:!0,busy:j,disabled:!P,onSelect:()=>void ye()}],Se=(0,X.useCallback)(e=>{let t=e.target.closest(`[data-openrun]`);if(t){e.stopPropagation();let n=t.closest(`tr[data-run]`),r=n?de[Number(n.getAttribute(`data-run`))]:null;r?.run&&me(r.run,r.at);return}let n=e.target.closest(`[data-editcomment]`);if(n){e.stopPropagation();let t=n.closest(`tr[data-run]`),r=t?de[Number(t.getAttribute(`data-run`))]:null;r?.run&&b({id:r.run,comment:r.comment});return}let r=e.target.closest(`[data-scenario]`);if(r){e.stopPropagation();let t=r.closest(`tr[data-scen]`)?.previousElementSibling,n=t?de[Number(t.getAttribute(`data-run`))]:null,i=n?.run?H.current.find(e=>e.id===n.run):null;i?.snapshot&&C({run:i.snapshot,i:Number(r.getAttribute(`data-scenario`))});return}let i=e.target.closest(`[data-prof]`);if(i){e.stopPropagation();let t=i.closest(`tr[data-scen]`)?.previousElementSibling,n=t?de[Number(t.getAttribute(`data-run`))]:null,r=i.getAttribute(`data-prof`);if(n&&r!=null){let e=n.scenarios[Number(r)];e&&v({name:uo(e),connection:e.connection,settings:{...e.setupProfile?.settings||{}},images:Xa(n)===!0})}}},[de,me]),Ce=(0,X.useCallback)((e,t)=>{l(n=>n.map(n=>n.id===e?{...n,snapshot:{...n.snapshot,comment:t}}:n)),b(null)},[]),we=(e,t)=>e.image&&Xa(t)!==!0?(0,$.jsx)(`span`,{className:`note`,children:`—`}):e.get(t),Te=(e,t,n,r)=>n?e.image&&Xa(t)!==!0?(0,$.jsx)(`span`,{className:`note`,children:`—`}):e.get(t,n,r):`—`;return(0,$.jsxs)(`div`,{className:`history-runs`,children:[(0,$.jsxs)(rn,{id:`history`,title:`History`,actions:xe,children:[!P&&(0,$.jsx)(Ot,{label:`Runs`,error:I,onRetry:()=>{L(null),ee(e=>e+1)}}),P&&(se.length>0||f||e||t)&&(0,$.jsx)(ne,{noun:`runs`,lead:de.length>0&&(0,$.jsx)(`p`,{className:`note hstatus`,role:`status`,children:Qa(de.length,`run`)}),filters:[{key:`show`,label:`Show`,value:f,onChange:m,options:vg.map(e=>({value:e,label:e?no(e):`All`}))},{key:`pipeline`,label:`Experiment`,value:e,onChange:e=>G({pipeline:e}),options:Sg(fe(e=>e.setup,e=>e.setup),e,se.find(t=>t.pipelineId===e)?.setup)},{key:`content`,label:`Content`,value:t,onChange:e=>G({content:e}),options:Sg(fe(e=>e.sourceId,e=>e.content),t)}]}),w&&(0,$.jsx)(`p`,{className:`note hstatus`,role:`status`,children:w}),P?de.length?(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`div`,{className:`scrollx`,onClick:Se,children:(0,$.jsx)(x,{className:`htable`,label:`Runs`,busy:E,defaultSort:null,rows:de,rowKey:e=>e.at,rowProps:(e,t)=>({className:`runrow${e.run&&e.run===z?` fresh`:``}`,"data-run":t}),columns:[...pe.Runs.map(e=>({key:e.key,header:e.label,className:[yg(e),e.key===`runid`&&`hrunid`].filter(Boolean).join(` `)||void 0,sort:e.sort??(t=>Tn(e.get(t))),cell:t=>(0,$.jsx)(`span`,{className:`hval`,children:we(e,t)})})),{key:`actions`,header:(0,$.jsx)(`span`,{className:`sr-only`,children:`Actions`}),label:``,className:`hactions`,sort:null,cell:e=>{let t=ve(e);return t.length?(0,$.jsx)(it,{actions:t,label:`${Za(e.at)} actions`}):null}}],expand:{label:(e,t)=>`${t?`Collapse`:`Expand`} run ${Za(e.at)}`,detailProps:(e,t)=>({className:`scenrows`,"data-run":t,"data-scen":e.at}),detail:e=>(0,$.jsx)(x,{className:`scen-table`,label:`Variants`,defaultSort:null,rows:((e.scenarios||[]).length?e.scenarios:[null]).map((e,t)=>({sc:e,n:t})),rowKey:({sc:e,n:t})=>e?.id??String(t),columns:pe[`Run Scenarios`].map(t=>({key:t.key,header:t.label,className:yg(t),sort:({sc:n,n:r})=>{if(!n)return null;if(t.sort)return t.sort(n,r);let i=t.get(e,n,r);return Tn(i)},cell:({sc:n,n:r})=>(0,$.jsx)(`span`,{className:`hval`,children:Te(t,e,n,r)})}))})}})}),u&&(0,$.jsxs)(`button`,{type:`button`,className:`ghost add-btn`,disabled:E,"aria-busy":E||void 0,onClick:async()=>{D(!0);let e=await le(Cg(H.current.at(-1)));D(!1),e?ue(e):T(`Server unreachable.`)},children:[E&&(0,$.jsx)(dt,{}),`Older`]})]}):w?(0,$.jsx)(`p`,{className:`note`,children:w}):(0,$.jsx)(`p`,{className:`unset`,children:se.length?`(No matches)`:`(No runs)`}):null]}),(0,$.jsx)(Ye,{undo:r.undo,onUndo:r.undoNow,onDismiss:r.dismiss}),h&&(0,$.jsx)(jg,{cols:ce,onSave:e=>{s(Ag(e)),g(!1)},onClose:()=>g(!1)}),S&&(0,$.jsx)(Qt,{run:S.run,i:S.i,onClose:()=>C(null)}),_&&(0,$.jsx)(Fe,{title:_.name||`Settings`,onClose:()=>v(null),dismiss:`Close`,children:(0,$.jsx)(Dg,{connection:_.connection,settings:_.settings,images:_.images})}),y&&(0,$.jsx)(Og,{runId:y.id,comment:y.comment,onSaved:e=>Ce(y.id,e),onClose:()=>b(null)})]})}function Dg({connection:e,settings:t,images:n}){let r=e=>e.filter(e=>String(t[e]??``)!==``).map(e=>({key:e,label:qa(e),control:{type:`static`,text:Ja(e,t[e])}})),i=[...e?[{key:`connection`,label:`Connection`,control:{type:`static`,text:e}}]:[],...r(Ua)],a=n?r(Wa):[],o=r(Ha.filter(e=>!Ua.includes(e)&&!Wa.includes(e)));return!i.length&&!o.length&&!a.length?(0,$.jsx)(`p`,{className:`note`,children:`(No settings)`}):(0,$.jsxs)(Ae,{children:[i.length>0&&(0,$.jsx)(F,{label:e?`Connection`:`Connection Profile`,rows:i}),o.length>0&&(0,$.jsx)(rn,{id:`profile-settings`,title:`Settings`,level:3,children:(0,$.jsx)(F,{label:`Settings`,rows:o})}),a.length>0&&(0,$.jsx)(rn,{id:`profile-vision`,title:`Vision Capabilities`,level:3,children:(0,$.jsx)(F,{label:`Vision Capabilities`,rows:a})})]})}function Og({runId:e,comment:t,onSaved:n,onClose:r}){let i=Z(),[a,o]=(0,X.useState)(t),[s,c]=(0,X.useState)(null),[l,u]=(0,X.useState)(!1);return(0,$.jsx)(w,{title:`Run comment`,...s?{status:s,statusBad:!0}:{},sections:[{key:`comment`,rows:[{key:`comment`,label:`Comment`,control:{type:`text`,value:a,onChange:o,placeholder:`Add a note`}}]}],onSave:async()=>{u(!0),c(null);try{await i.setComment(e,a),n(a)}catch{c(`Not saved: the server is unreachable.`),u(!1)}},saving:l,focusRow:`comment`,onClose:r})}function kg(e){let t=()=>({Runs:new Set(vo.filter(e=>e.on).map(e=>e.key)),"Run Scenarios":new Set(yo.filter(e=>e.on).map(e=>e.key))});if(!e)return t();let n=t();for(let t of Co){let r=t[0],i=e[r],a=new Set(t[1].map(e=>e.key)),o=e=>xo[e]??e,s=new Set(i?.seen?.map(o)??[...a]),c=(i?.on??[]).map(o);for(let[e,t]of Object.entries(So))a.has(e)&&!s.has(e)&&s.has(t)&&(s.add(e),c.includes(t)&&c.push(e));let l=[...c.filter(e=>a.has(e)),...t[1].filter(e=>e.on&&!s.has(e.key)).map(e=>e.key)];l.length&&(n[r]=new Set(l))}return n}function Ag(e){return{Runs:{on:[...e.Runs],seen:vo.map(e=>e.key)},"Run Scenarios":{on:[...e[`Run Scenarios`]],seen:yo.map(e=>e.key)}}}function jg({cols:e,onSave:t,onClose:n}){let[r,i]=(0,X.useState)(()=>({Runs:new Set(e.Runs),"Run Scenarios":new Set(e[`Run Scenarios`])})),[a,o]=(0,X.useState)(null),s=(e,t)=>e.size===t.size&&[...e].every(e=>t.has(e)),c=!s(r.Runs,e.Runs)||!s(r[`Run Scenarios`],e[`Run Scenarios`]);return(0,$.jsx)(w,{title:`Select Columns`,dirty:c,refusal:a??void 0,onSave:()=>{r.Runs.size?t(r):o(`The Runs group needs at least one column.`)},onClose:n,sections:[{key:`cols`,children:(0,$.jsx)(`div`,{className:`hcols`,children:Co.map(([e,t])=>(0,$.jsxs)(`div`,{className:`groups`,children:[(0,$.jsx)(`h3`,{children:bo[e]??e}),t.map(t=>(0,$.jsxs)(`label`,{children:[(0,$.jsx)(`input`,{type:`checkbox`,checked:r[e].has(t.key),onChange:n=>{let a=new Set(r[e]);n.target.checked?a.add(t.key):a.delete(t.key),i({...r,[e]:a}),o(null)}}),` `,t.label]},t.key))]},e))})}]})}var Mg=e=>!!e&&e.startsWith(`•held:`),Ng={"promptlab.workflows":{list:[],at:``},"promptlab.connections":{list:[],at:``},"promptlab.connectionProfiles":{list:[]},"promptlab.comment":null,"promptlab.versions":Pg(),"promptlab.history.columns":null,"promptlab.wizard":null,"promptlab.guidesDismissed":!1,"promptlab.tokens":null};function Pg(){return{pipeline:{},profile:{},dataset:{}}}var Fg=[`promptlab.workflows`,`promptlab.connections`,`promptlab.connectionProfiles`,`promptlab.versions`,`promptlab.tokens`],Ig=[`px`,`format`,`quality`],Lg=[{value:`200704`,label:`448 square`},{value:`edge448`,label:`448 edge`},{value:`409920`,label:`480p`},{value:`518400`,label:`540p`},{value:`921600`,label:`720p`},{value:`1440000`,label:`900p`},{value:`2073600`,label:`1080p`},{value:`3686400`,label:`1440p`}],Rg={"image/jpeg":`JPEG`,"image/webp":`WebP`,"image/png":`PNG`},zg=e=>Rg[e]??e.replace(`image/`,``).toUpperCase(),Bg={px:`921600`,quality:`0.92`};function Vg(e,t,{inherit:n=!1}={}){let r=Y().connectionImage({}).format,i=String(e.px??``),a=String(e.format??``),o=String(e.quality??``),s=Lg.some(e=>e.value===i)||!i?Lg:[...Lg,{value:i,label:Y().budgetLabel(i)}],c={value:``,label:`(From connection)`},l=n?[c,...s]:s.map(e=>e.value===Bg.px?{value:``,label:e.label}:e),u=n?[c,...Y().IMAGE_FORMATS.map(e=>({value:e,label:zg(e)}))]:Y().IMAGE_FORMATS.map(e=>e===r?{value:``,label:zg(e)}:{value:e,label:zg(e)}),d=(a||r)===`image/png`,f=n?`(From connection)`:Bg.quality,p={type:`text`,value:o,onChange:t(`quality`),...d||o?{}:{placeholder:f}};return[{key:`px`,label:`Resolution`,control:{type:`select`,value:!n&&i===Bg.px?``:i,options:l,onChange:t(`px`)}},{key:`format`,label:`Format`,control:{type:`select`,value:!n&&a===r?``:a,options:u,onChange:t(`format`)}},{key:`quality`,label:n?`Image quality`:`Quality`,width:`quarter`,...d?{hint:`Unused for PNG`}:{},control:p}]}function Hg(e,t){return e===`px`?Lg.find(e=>e.value===t)?.label??Y().budgetLabel(t):e===`format`?zg(t):t}function Ug(e){let{px:t,format:n,quality:r}=Y().connectionImage(e),i=n===`image/png`?``:` q${r??Bg.quality}`;return`${Y().budgetLabel(t??Number(Bg.px))}, ${zg(n)}${i}`}var Wg=e=>({kind:`pipeline`,id:e.id,name:e.name||`Untitled experiment`}),Gg=e=>({kind:`group`,id:e.id,name:e.name||`Untitled eval`});function Kg(e,t,n,r){let i=new Set(r.filter(t=>t.connection?.id===e).map(e=>e.id)),a=[];for(let n of t)(Y().profileIds(n.work).includes(e)||Y().answerKeys(n.work).some(e=>{let t=Y().answerOfKey(e);return!!t.profile&&i.has(t.profile)}))&&a.push(Wg(n));for(let t of n)t.grader?.id===e&&a.push(Gg(t));return a}function qg(e,t,n){let r=[];for(let n of t)Y().answerKeys(n.work).some(t=>{let n=Y().answerOfKey(t);return n.bare?!!e.fromProfile&&n.connection===e.fromProfile:n.profile===e.id})&&r.push(Wg(n));if(e.fromProfile)for(let t of n)t.grader?.id===e.fromProfile&&r.push(Gg(t));return r}function Jg(e,t,n){let r=new Set(e.map(e=>e.fromProfile).filter(Boolean)),i=[];for(let e of t)Y().answerKeys(e.work).some(e=>{let t=Y().answerOfKey(e);return t.bare?!r.has(t.connection):t.profile===null})&&i.push(Wg(e));for(let e of n)e.grader?.id&&!r.has(e.grader.id)&&i.push(Gg(e));return i}function Yg(e){if(!e.length)return`Not used`;let t=(t,n)=>{let r=e.filter(e=>e.kind===t);return r.length===0?null:r.length===1?r[0].name:`${r.length} ${n}`};return[t(`pipeline`,`experiments`),t(`group`,`evals`)].filter(Boolean).join(`, `)}function Xg({uses:e}){return e.length?(0,$.jsx)(`span`,{className:`setup-used`,children:Yg(e)}):(0,$.jsx)(`span`,{className:`unset`,children:`Not used`})}function Zg({uses:e}){return(0,$.jsxs)(`div`,{className:`setup-usedby`,children:[(0,$.jsx)(`span`,{className:`setup-usedby-label`,children:`Used by`}),e.length===0?(0,$.jsx)(`span`,{className:`unset`,children:`Not used`}):(0,$.jsx)(`ul`,{className:`setup-usedby-list`,children:e.map(e=>(0,$.jsxs)(`li`,{children:[(0,$.jsx)(`a`,{href:da(e.kind===`group`?{tab:`library`,section:`datasets`,id:e.id}:{tab:`runs`,id:e.id}),children:e.name}),(0,$.jsx)(`span`,{className:`setup-usedby-kind`,children:e.kind===`group`?`eval`:`experiment`})]},`${e.kind}-${e.id}`))})]})}var Qg={tab:`setup`,section:`connections`,id:null},$g=e=>({tab:`setup`,section:`connections`,id:e,kind:`profile`}),e_=`(Default)`,t_=e=>({tab:`setup`,section:`connections`,id:e}),n_=()=>{let e=ma();e.tab===`setup`&&e.id&&fa(Qg)},r_=[`id`,`name`,`connection`,`fromProfile`];function i_({profileId:e,connections:t,workflows:n,groups:r,presets:i,offer:a}){let o=mc(),[s,c]=xi(`promptlab.connectionProfiles`),l=(0,X.useRef)(s);l.current=s;let[u,d]=(0,X.useState)(null),f=(0,X.useRef)(u);f.current=u;let[p,m]=(0,X.useState)(void 0),[h,g]=(0,X.useState)(`all`),_=(0,X.useCallback)(e=>{let t={...l.current,list:e};l.current=t,c(t)},[c]),v=(0,X.useCallback)(e=>{let{default:t,...n}=l.current,r=Object.keys(e).length?{...n,default:e}:n;l.current=r,c(r)},[c]),y=(0,X.useCallback)((e,t)=>{let n=e===`(Default)`?v_(l.current.default):l.current.list.find(t=>t.id===e);n&&(d({p:structuredClone(n),was:n,start:n}),m(t))},[]),b=(0,X.useCallback)((e,t)=>{y(e,t),fa($g(e))},[y]),S=(0,X.useCallback)(()=>{d(null),m(void 0)},[]),C=(0,X.useCallback)(()=>{S(),n_()},[S]);(0,X.useEffect)(()=>{e?f.current?.p.id!==e&&(e===`(Default)`||l.current.list.some(t=>t.id===e)?y(e):pa(Qg)):f.current?.was&&S()},[e,y,S]);let w=(0,X.useCallback)(()=>{let e={id:b_(),name:`New profile`};d({p:e,was:null,start:e}),m(`name`)},[]),T=(0,X.useCallback)(e=>{let t=f.current;if(!t)return;let n={...t,p:e,refused:!1};f.current=n,d(n)},[]),E=(0,X.useCallback)(()=>{let e=f.current;if(e){if(e.p.id===`(Default)`){let{id:t,name:n,...r}=y_(e.p);v(r)}else{if(!e.p.connection?.id){d({...e,refused:!0});return}let t=y_(e.p),n=l.current.list;_(e.was?n.map(e=>e.id===t.id?t:e):[...n,t])}S(),n_()}},[_,v,S]),D=(0,X.useCallback)(e=>{let t=l.current.list,n=t.filter(t=>e.includes(t.id)).map(e=>{let{fromProfile:t,...n}=structuredClone(e);return{...n,id:b_(),name:`${e.name||`Profile`} copy`}});n.length&&_([...t,...n])},[_]),O=(0,X.useCallback)(e=>{let t=l.current.list,n=t.filter(t=>e.includes(t.id));n.length&&(_(t.filter(t=>!e.includes(t.id))),S(),n_(),a({label:n.length===1?`Deleted ${n[0].name||`the profile`}`:`Removed ${n.length} profiles`,restore:()=>_(t)}))},[_,S,a]),k=(0,X.useMemo)(()=>{let e=new Map;for(let t of s.list)e.set(t.id,qg(t,n,r));return e},[s.list,n,r]),A=(0,X.useMemo)(()=>Jg(s.list,n,r),[s.list,n,r]),j=(0,X.useMemo)(()=>v_(s.default),[s.default]),M=s.list.filter(e=>h===`all`||h_(e,t)),N=e=>e.name||`Unnamed profile`,P=e=>[{label:`Edit…`,icon:J.edit,onSelect:()=>b(e.id)},{label:`Rename…`,icon:J.rename,onSelect:()=>b(e.id,`name`)},{label:`Clone`,icon:J.clone,onSelect:()=>D([e.id])},o($g(e.id)),{label:`Remove`,icon:J.remove,destructive:!0,onSelect:()=>O([e.id])}],F=e=>e===j,I=[{key:`name`,header:`Profile`,role:`title`,sort:N,cell:e=>(0,$.jsx)(`button`,{type:`button`,className:`link-btn setup-open${F(e)?` unset`:``}`,onClick:()=>b(e.id),children:N(e)})},{key:`connection`,header:`Connection`,sort:e=>m_(e,t),cell:e=>{if(F(e))return(0,$.jsx)(`span`,{className:`unset`,children:`(Any)`});let n=e.connection?.id?t.find(t=>t.id===e.connection.id):void 0;return n?(0,$.jsx)(`button`,{type:`button`,className:`link-btn setup-open setup-conn`,onClick:()=>fa(t_(n.id)),children:m_(e,t)}):(0,$.jsx)(`span`,{className:`setup-attention`,children:m_(e,t)})}},{key:`settings`,header:`Settings`,sort:e=>__(e,t),cell:e=>{let n=__(e,t);return n?(0,$.jsx)(`span`,{className:`setup-sets`,children:n}):(0,$.jsx)(`span`,{className:`unset`,children:`(No settings)`})}},{key:`used`,header:`Used by`,sort:e=>Yg(k.get(e.id)??[]),cell:e=>(0,$.jsx)(Xg,{uses:F(e)?A:k.get(e.id)??[]})},{key:`menu`,header:``,label:``,className:`setup-menu`,role:`menu`,sort:null,cell:e=>F(e)?null:(0,$.jsx)(it,{actions:P(e),label:`${N(e)} actions`})}],L=u;return(0,$.jsxs)(rn,{id:`setup-connection-profiles`,title:`Connection Profiles`,children:[(0,$.jsx)(`div`,{className:`setup-intro`,children:(0,$.jsx)(`p`,{className:`note`,children:`Overrides the AI Connection settings`})}),s.list.length>0&&(0,$.jsx)(ne,{noun:`profiles`,filters:[],quick:{label:`Show`,value:h,onChange:e=>g(e),options:g_}}),h!==`all`&&M.length===0?(0,$.jsx)(`p`,{className:`unset`,children:`(No matches)`}):(0,$.jsx)(x,{className:`setup-table`,cards:!0,label:`Connection Profiles`,rows:M,rowKey:e=>e.id,select:{noun:`profile`,label:N,actions:e=>[{label:`Clone`,icon:J.clone,onSelect:()=>D(e.map(e=>e.id))},{label:`Remove`,icon:J.remove,destructive:!0,onSelect:()=>O(e.map(e=>e.id))}]},rowProps:e=>({className:F(e)?`setup-row setup-default`:`setup-row`,...F(e)?{"data-default":``}:{},onClick:t=>{t.target.closest(`button, a, .menu`)||b(e.id)}}),pinnedRow:h===`all`?j:void 0,columns:I}),(0,$.jsxs)(`button`,{type:`button`,className:`ghost add-btn`,onClick:w,children:[(0,$.jsx)(U,{size:14,"aria-hidden":`true`}),`Add profile`]}),L&&(0,$.jsx)(a_,{profile:L.p,connections:t,presets:i,uses:L.p.id===`(Default)`?A:k.get(L.p.id)??[],refused:!!L.refused,...p?{focus:p}:{},dirty:JSON.stringify(L.p)!==JSON.stringify(L.start),adding:!L.was,...L.was?{link:o($g(L.p.id))}:{},onEdit:T,onSave:E,onClose:C})]})}function a_({profile:e,connections:t,presets:n,uses:r,refused:i,focus:a,dirty:o,adding:s,link:c,onEdit:l,onSave:u,onClose:d}){let f=e.id===e_,p=f?null:o_(e,t),m=t=>n=>{let r={...e};for(let e of t)r[e]=n;l(r)},h=e=>m([e]),g=e.connection??null,[_]=xi(`promptlab.versions`),{options:v,recent:y}=Ec(t.filter(e=>Y().listedConnection(e)||e.id===g?.id).map(e=>({id:e.id,name:e.name||`Unnamed connection`})),e=>_.profile?.[e]?.[0]?.at??null),b=[...v,...g&&!t.some(e=>e.id===g.id)?[{id:g.id,label:`${g.name||g.id} (missing)`,missing:!0}]:[]],x=[{key:`name`,label:`Name`,width:`full`,required:!0,control:{type:`text`,value:e.name,onChange:h(`name`)}},{key:`connection`,label:`Connection`,required:!0,hint:`Overrides the AI Connection settings`,...i?{error:`Choose a connection`}:{},control:{type:`picker`,kind:`Connection`,value:g?.id??``,options:b,recent:y,usedLabel:`Last changed`,placeholder:`(No connection)`,onChange:n=>{let r=t.find(e=>e.id===n);r&&l({...e,connection:{id:r.id,name:r.name}})}}}],S=l_(e,p).map(t=>p_(e,t,m(t.keys))),C=p?Y().CONNECTION_TYPES[p.type]:void 0,T=!C||(C.answers??[`prompt`]).includes(`prompt`)&&!C.local,E=[...f?[]:[{key:`identity`,rows:x}],...S.length?[{key:`model`,title:`Model settings`,rows:S}]:[],...T?[{key:`image`,title:`Image settings`,rows:Vg(e,h,{inherit:!0})}]:[],{key:`use`,title:`Use`,rows:[],children:(0,$.jsx)(Zg,{uses:r})}],D=p?n.filter(e=>(e.type??`llama.cpp`)===p.type):[],O=t=>{let n={...e};for(let e of C?.settings??[])e.key!==`temperature`&&e.scope!==`connection`&&delete n[e.key];l({...n,...t.opts})},k=[...c?[c]:[],...D.map(e=>({label:`Apply preset: ${e.label}${e.packName?` · ${e.packName}`:``}`,icon:J.preset,onSelect:()=>O(e)}))];return(0,$.jsx)(w,{title:f?e_:e.name||`Unnamed profile`,...a?{focusRow:a}:{},sections:E,...k.length?{menu:k}:{},dirty:o,adding:s,onSave:u,onClose:d})}function o_(e,t){let n=e.connection?.id??e.fromProfile;return n&&t.find(e=>e.id===n)||null}function s_(){let e=Object.values(Y().CONNECTION_TYPES).filter(e=>e.picker!==!1&&!e.local&&(e.answers??[`prompt`]).includes(`prompt`)),t=new Map;for(let n of e)for(let e of n.settings){if(e.scope===`connection`)continue;let n=t.get(e.label)??{label:e.label,keys:[],setting:e,n:0};n.keys.includes(e.key)||n.keys.push(e.key),n.n+=1,t.set(e.label,n)}return[...t.values()].filter(t=>t.n*2>e.length).sort((e,t)=>t.n-e.n).map(({n:e,...t})=>t)}function c_(){let e=s_().map(e=>e.label);for(let t of Object.values(Y().CONNECTION_TYPES))for(let n of t.settings)n.scope!==`connection`&&!e.includes(n.label)&&e.push(n.label);return e}function l_(e,t){let n;if(t){let r=Y().mergeAnswer(t,e);n=(Y().CONNECTION_TYPES[t.type]?.settings??[]).filter(e=>e.scope!==`connection`&&(!e.appliesTo||e.appliesTo(r))).map(e=>({label:e.label,keys:[e.key],setting:e}))}else n=s_();let r=new Set(n.flatMap(e=>e.keys));for(let[t,i]of Object.entries(e)){if(r_.includes(t)||Ig.includes(t)||r.has(t)||i==null||i===``)continue;let e=f_(t),a=e?.label??d_(t);n.push({label:a,keys:[t],setting:e??{key:t,label:a,control:`text`,default:``,hint:``}})}let i=c_(),a=e=>{let t=i.indexOf(e.label);return t<0?i.length:t};return n.sort((e,t)=>a(e)-a(t)||(a(e)===i.length?e.label.localeCompare(t.label):0))}var u_={caseMode:`Case`};function d_(e){let t=u_[e]??e.replace(/([a-z\d])([A-Z])/g,`$1 $2`).replace(/[_-]+/g,` `).toLowerCase();return t.charAt(0).toUpperCase()+t.slice(1)}function f_(e){for(let t of Object.values(Y().CONNECTION_TYPES)){let n=t.settings.find(t=>t.key===e);if(n)return n}}function p_(e,t,n){let r=String(t.keys.map(t=>e[t]).find(e=>e!=null&&e!==``)??``),i=t.setting;return i.control===`select`&&i.choices?{key:t.keys[0],label:t.label,control:{type:`select`,value:r,onChange:n,options:[{value:``,label:`(From connection)`},...i.choices.filter(e=>e.value!==``)]}}:i.key===`grammar`?{key:t.keys[0],label:t.label,control:{type:`textarea`,value:r,onChange:n}}:{key:t.keys[0],label:t.label,width:`quarter`,control:{type:`text`,value:r,onChange:n,...r?{}:{placeholder:`(From connection)`}}}}function m_(e,t){if(!e.connection?.id)return`(No connection)`;let n=t.find(t=>t.id===e.connection.id);return n?n.name||`Unnamed connection`:`${e.connection.name||e.connection.id} (missing)`}function h_(e,t){return!e.connection?.id||!t.some(t=>t.id===e.connection.id)}var g_=[{value:`all`,label:`All`},{value:`attention`,label:`Needs attention`}];function __(e,t){let n=[],r=o_(e,t),i=new Set;for(let t of l_(e,r)){let r=t.keys.map(t=>e[t]).find(e=>e!=null&&e!==``);r==null||i.has(t.label)||(i.add(t.label),n.push(`${t.label} ${String(r)}`))}let a={px:`Resolution`,format:`Format`,quality:`Image quality`};for(let t of Ig){let r=e[t];r!=null&&r!==``&&n.push(`${a[t]} ${Hg(t,String(r))}`)}return n.join(` · `)}function v_(e){return{...e,id:e_,name:e_}}function y_(e){let t={id:e.id,name:e.name};for(let[n,r]of Object.entries(e))n!==`id`&&n!==`name`&&r!=null&&r!==``&&(t[n]=r);return t}var b_=()=>`cp${Date.now().toString(36)}${Math.random().toString(36).slice(2,6)}`;function x_(e){return!e||e.length===0||e.includes(`*all`)?``:[...e].sort().join(`,`)}function S_(e){let[t,n]=(0,X.useState)({});return(0,X.useEffect)(()=>{let t=!0;return e.connectionShares().then(e=>{t&&n(e.shares)}).catch(()=>{}),()=>{t=!1}},[e]),{sharesFor:(0,X.useCallback)((e,n)=>t[Pn(e,n)],[t]),setFor:(0,X.useCallback)((t,r,i)=>{e.setConnectionShares(t,r,i).then(e=>n(e.shares)).catch(()=>{})},[e]),setForEach:(0,X.useCallback)(async(t,r)=>{let i=null;for(let{id:n,workspaces:a}of r)try{i=(await e.setConnectionShares(t,n,a)).shares}catch{}i&&n(i)},[e])}}function C_({offer:e}){let t=Z(),n=bi(),r=Ri(),i=qi(),[a,o]=(0,X.useState)(null),[s,c]=(0,X.useState)(null),[l,u]=(0,X.useState)(null),[d,f]=(0,X.useState)(!1),p=(0,X.useRef)(null),m=e=>c({text:e instanceof Error?e.message:String(e),bad:!0}),h=(0,X.useCallback)(()=>{u(null),t.packs().then(e=>o(e.packs),e=>u(e instanceof Error?e.message:String(e)))},[t]);(0,X.useEffect)(h,[h]);let g=async()=>{await Promise.all([n.refresh(),r.refresh(),i.refresh()]),h()},_=async e=>{c({text:`Installing ${e.name}…`,bad:!1}),f(!0);try{let n=await t.installPack(e);await g();let r=(await t.packs()).packs.find(e=>e.id===n.pack),i=r?`${r.name} ${r.version}`:n.pack;c({text:n.installed?`Installed ${i}.`:`${i} is up to date.`,bad:!1})}catch(e){m(e)}finally{f(!1)}},v=async n=>{let r=[];try{for(let e of n)r.push((await t.removePack(e.id)).trash)}catch(e){m(e)}r.length&&(await g(),e({label:n.length===1?`Removed ${n[0].name}`:`Removed ${r.length} packs`,restore:()=>{(async()=>{for(let e of r)await t.restorePack(e);await g()})()}}))};return(0,$.jsxs)(rn,{id:`setup-packs`,title:`Packs`,note:a?w_(a.length,`pack`):``,actions:[{label:`Install pack…`,icon:fn,busy:d,onSelect:()=>p.current?.click()}],children:[a===null&&(0,$.jsx)(Ot,{label:`Packs`,error:l,onRetry:h}),a&&!a.length&&(0,$.jsx)(`p`,{className:`unset`,children:`(No packs)`}),a&&a.length>0&&(0,$.jsx)(x,{className:`setup-table`,cards:!0,label:`Packs`,rows:a,rowKey:e=>e.id,select:{noun:`pack`,actions:e=>[{label:`Remove`,icon:J.remove,destructive:!0,onSelect:()=>void v(e)}]},columns:[{key:`name`,header:`Pack`,role:`title`,cell:e=>e.name},{key:`version`,header:`Version`,cell:e=>e.version},{key:`made`,header:`Made`,sort:e=>e.datasets.length+e.pipelines.length+e.sources.length+e.presets,cell:e=>T_(e)},{key:`menu`,header:``,className:`ds-menu`,role:`menu`,sort:null,cell:e=>(0,$.jsx)(Ze,{label:`${e.name} actions`,actions:[{label:`Remove`,icon:J.remove,destructive:!0,onSelect:()=>void v([e])}]})}]}),s&&(0,$.jsx)(st,{tone:s.bad?`error`:`info`,children:s.text}),(0,$.jsx)(`input`,{ref:p,type:`file`,accept:`.labpack,.zip,application/zip`,hidden:!0,"aria-label":`Install pack file`,onChange:e=>{let t=e.target.files?.[0];e.target.value=``,t&&_(t)}})]})}var w_=(e,t)=>`${e} ${t}${e===1?``:`s`}`,T_=e=>[[e.datasets.length,`eval`],[e.pipelines.length,`experiment`],[e.sources.length,`source`],[e.presets,`preset`]].filter(([e])=>e>0).map(([e,t])=>w_(e,t)).join(`, `);function E_({offer:e}){let t=Z(),[n,r]=(0,X.useState)(null),[i,a]=(0,X.useState)(null),[o,s]=(0,X.useState)(null),[c,l]=(0,X.useState)(!1),u=(0,X.useRef)(null),d=(0,X.useCallback)(()=>{s(null),t.plugins().then(e=>r(e.plugins),e=>s(e instanceof Error?e.message:String(e)))},[t]);(0,X.useEffect)(d,[d]);let f=async e=>{a(null),l(!0);try{let n=await t.installPlugin(e),i=(await t.plugins()).plugins;r(i);let o=i.find(e=>e.id===n.plugin);o&&n.installed&&await jn(o),a({text:n.installed?On[n.plugin]?`Installed ${n.plugin}, and it did not load: ${On[n.plugin]}`:`Installed ${n.plugin}.`:`${n.plugin} is up to date.`,bad:!!On[n.plugin]})}catch(e){a({text:e instanceof Error?e.message:String(e),bad:!0})}finally{l(!1)}},p=async n=>{let r=[];try{for(let e of n)r.push((await t.removePlugin(e.id)).trash)}catch(e){a({text:e instanceof Error?e.message:String(e),bad:!0})}d(),r.length&&e({label:n.length===1?`Removed ${n[0].id}`:`Removed ${r.length} plugins`,restore:()=>{Promise.all(r.map(e=>t.restorePlugin(e))).then(d)}})};return(0,$.jsxs)(rn,{id:`setup-plugins`,title:`Plugins`,note:n?`${n.length} ${n.length===1?`plugin`:`plugins`}`:``,actions:[{label:`Install plugin…`,icon:fn,busy:c,onSelect:()=>u.current?.click()}],children:[n===null&&(0,$.jsx)(Ot,{label:`Plugins`,error:o,onRetry:d}),n&&!n.length&&(0,$.jsx)(`p`,{className:`note`,children:`(No plugins)`}),n&&n.length>0&&(0,$.jsx)(x,{className:`setup-table`,cards:!0,label:`Plugins`,rows:n,rowKey:e=>e.id,select:{noun:`plugin`,actions:e=>[{label:`Remove`,icon:J.remove,destructive:!0,onSelect:()=>void p(e)}]},columns:[{key:`id`,header:`Plugin`,role:`title`,cell:e=>e.id},{key:`version`,header:`Version`,cell:e=>e.version},{key:`sha`,header:`SHA-256`,sort:e=>e.sha256,cell:e=>(0,$.jsx)(`code`,{title:e.sha256,children:e.sha256.slice(0,12)})},{key:`registers`,header:`Registers`,sort:e=>D_(e),cell:e=>D_(e)||(0,$.jsx)(`span`,{className:`unset`,children:`(No registrations)`})},{key:`state`,header:`State`,cell:e=>O_(e)},{key:`menu`,header:``,className:`ds-menu`,role:`menu`,sort:null,cell:e=>(0,$.jsx)(Ze,{label:`${e.id} actions`,actions:[{label:`Remove`,icon:J.remove,destructive:!0,onSelect:()=>void p([e])}]})}]}),i&&(0,$.jsx)(st,{tone:i.bad?`error`:`info`,children:i.text}),(0,$.jsx)(`input`,{ref:u,type:`file`,accept:`.labplugin,.zip,application/zip`,hidden:!0,"aria-label":`Install plugin file`,onChange:e=>{let t=e.target.files?.[0];e.target.value=``,t&&f(t)}})]})}var D_=e=>[...e.registers.outputKinds??[],...e.registers.modifiers??[],...e.registers.evalTypes??[],...(e.registers.connectionTypes??[]).map(e=>e.id)].join(`, `),O_=e=>On[e.id]?`Failed: ${On[e.id]}`:kn.has(e.id)?`Loaded`:`Not Loaded`,k_={env:`Deployment`,lab:`Own`,default:`Default`};function A_({cfg:e,editable:t,onClose:n}){let r=Z(),i=e?.from===`lab`?e:null,[a,o]=(0,X.useState)(i?.clientId??``),[s,c]=(0,X.useState)(i?.tenant??``),[l,u]=(0,X.useState)(null),[d,f]=(0,X.useState)(!1),p=a!==(i?.clientId??``)||s!==(i?.tenant??``),m=async()=>{if(!p)n();else{f(!0);try{await r.setMicrosoft(a,s),xd(),n()}catch(e){u(e instanceof Error?e.message:String(e)),f(!1)}}},h=e=>t=>{u(null),e(t)},g=!t,_=new URL(`/`,hd()??window.location.href).href,v=cd(g?e?.tenant??``:s||`organizations`),y=[g?{key:`client`,label:`Client ID`,control:e?.clientId?{type:`code`,text:e.clientId}:{type:`static`,text:`(Not set)`,none:!0}}:{key:`client`,label:`Client ID`,control:{type:`text`,value:a,onChange:h(o),placeholder:e?.from==="default"?e.clientId:`00000000-0000-0000-0000-000000000000`}},g?{key:`tenant`,label:`Tenant`,control:e?.tenant?{type:`code`,text:e.tenant}:{type:`static`,text:`(Not set)`,none:!0}}:{key:`tenant`,label:`Tenant`,control:{type:`text`,value:s,onChange:h(c),placeholder:`00000000-0000-0000-0000-000000000000`}},{key:`signin`,label:`Sign-in`,control:{type:`static`,text:v}},{key:`redirect`,label:`Redirect URI`,control:{type:`code`,text:_}},{key:`app`,label:`App`,control:e?.from?{type:`static`,text:k_[e.from]}:{type:`static`,text:`(No app)`,none:!0}}];return(0,$.jsx)(w,{title:`Microsoft 365`,status:l??void 0,statusBad:!!l,focusRow:g?void 0:`client`,sections:[{key:`app`,rows:y}],...g?{}:{onSave:()=>void m(),saving:d,dirty:p},onClose:n})}var j_={env:`Deployment`,lab:`Own`,default:`Default`},M_=`https://console.cloud.google.com/apis/credentials`,N_=[{value:`installed`,label:`Desktop app`},{value:`web`,label:`Web application`}],P_={installed:`For a lab on this machine; Google needs no redirect registered.`,web:`For a lab at its own address; register the redirect below with the client.`},F_=`/api/connections/google/callback`,I_=()=>/^(localhost|127\.|\[::1\])/.test(window.location.hostname);function L_(e){let t;try{t=JSON.parse(e)}catch{return`that file is not JSON`}let n=t??{},r=n.installed?`installed`:n.web?`web`:null,i=r?n[r]:void 0;return!r||typeof i?.client_id!=`string`||typeof i.client_secret!=`string`?`that is not a client file from Google Cloud`:{clientId:i.client_id,clientSecret:i.client_secret,apiKey:``,clientType:r}}function R_({onClose:e,onSaved:t}){let n=Z(),[r,i]=(0,X.useState)(void 0),[a,o]=(0,X.useState)(!0),[s,c]=(0,X.useState)(``),[l,u]=(0,X.useState)(``),[d,f]=(0,X.useState)(``),[p,m]=(0,X.useState)(I_()?`installed`:`web`),[h,g]=(0,X.useState)({clientId:``,apiKey:``,kind:``}),[_,v]=(0,X.useState)(null),[y,b]=(0,X.useState)(null),[x,S]=(0,X.useState)(!1);(0,X.useEffect)(()=>{n.google().then(e=>{i(e.google),o(e.editable);let t=e.google?.from===`lab`?e.google:null;t&&(c(t.clientId),f(t.apiKey??``),m(t.clientType)),g({clientId:t?.clientId??``,apiKey:t?.apiKey??``,kind:t?.clientType??(I_()?`installed`:`web`)})},e=>{i(null),v(e instanceof Error?e.message:String(e))})},[n]);let C=s!==h.clientId||d!==h.apiKey||p!==h.kind||!!l,T=async()=>{if(!C)e();else{S(!0);try{await n.setGoogle({clientId:s,apiKey:d,clientType:p,...l?{clientSecret:l}:{}}),t(),e()}catch(e){v(e instanceof Error?e.message:String(e)),S(!1)}}},E=e=>t=>{v(null),b(null),e(t)},D=()=>{let e=document.createElement(`input`);e.type=`file`,e.accept=`.json,application/json`,e.onchange=()=>{let t=e.files?.[0];t&&O(t)},e.click()},O=async e=>{let t=L_(await e.text());typeof t==`string`?v(t):(c(t.clientId),m(t.clientType),u(t.clientSecret??``),b(`Loaded the client file`))};if(r===void 0)return null;let k=!a,A=!!r?.hasSecret&&r.from!=="default",j=k?r?.clientType??`web`:p,M=k?[{key:`client`,label:`Client ID`,control:r?.clientId?{type:`code`,text:r.clientId}:{type:`static`,text:`(Not set)`,none:!0}},{key:`secret`,label:`Client secret`,control:r?.hasSecret?{type:`static`,text:`Held`}:{type:`static`,text:`(Not set)`,none:!0}},{key:`key`,label:`API key`,control:r?.apiKey?{type:`code`,text:r.apiKey}:{type:`static`,text:`(Not set)`,none:!0}},{key:`type`,label:`Type`,control:{type:`static`,text:N_.find(e=>e.value===j).label}}]:[{key:`client`,label:`Client ID`,control:{type:`text`,value:s,onChange:E(c),placeholder:r?.from==="default"?r.clientId:`000000000000-….apps.googleusercontent.com`}},{key:`secret`,label:`Client secret`,control:{type:`secret`,value:l,onChange:E(e=>u(e??``)),...A?{placeholder:`Saved`}:{}}},{key:`key`,label:`API key`,control:{type:`text`,value:d,onChange:E(f),placeholder:`AIza…`}},{key:`type`,label:`Type`,hint:P_[p],control:{type:`select`,value:p,options:N_,onChange:e=>E(m)(e)}}];return M.push({key:`redirect`,label:`Redirect URI`,control:j===`web`?{type:`code`,text:new URL(F_,window.location.href).href}:{type:`static`,text:`Not Needed`}},{key:`app`,label:`App`,control:r?.from?{type:`static`,text:j_[r.from]}:{type:`static`,text:`(No app)`,none:!0}}),(0,$.jsx)(w,{title:`Google Drive`,status:_??y??void 0,statusBad:!!_,focusRow:k?void 0:`client`,sections:[{key:`app`,rows:M}],actions:[{label:`Google Cloud`,icon:or,onSelect:()=>{window.open(M_,`_blank`,`noopener`)}},...k?[]:[{label:`Load client file…`,icon:mr,onSelect:D}]],...k?{}:{onSave:()=>void T(),saving:x,dirty:C},onClose:e})}var z_=`microsoft`,B_=`google`;function V_(){let e=Z(),{list:t}=cc(),n=t.filter(e=>!e.archived).map(e=>({id:e.id,name:e.name})),{sharesFor:r,setFor:i}=S_(e),{cfg:a,editable:o}=Sd(),[s,c]=(0,X.useState)(null),[l,u]=(0,X.useState)(null),[d,f]=(0,X.useState)(void 0),[p,m]=(0,X.useState)(null),[h,g]=(0,X.useState)(null),_=(0,X.useCallback)(()=>{g(null),e.connections().then(e=>u(e.connections),e=>{e instanceof Nn&&e.status===404?u([]):g(Q(e))})},[e]);(0,X.useEffect)(_,[_]),(0,X.useEffect)(()=>{a?pd(a).then(f,()=>f(null)):f(null)},[a]);let v=[...l??[],...a||o?[{id:z_,label:`Microsoft 365`,configured:!!a,signedIn:!!d,account:d??null,problem:null}]:[]],y=async t=>{m(null);try{t.id===z_&&a?await _d(a):window.location.assign((await e.signIn(t.id)).url)}catch(e){m(e instanceof Error?e.message:String(e))}},b=async t=>{m(null);try{t.id===z_&&a?(await vd(a),f(null)):u((await e.signOut(t.id)).connections)}catch(e){m(e instanceof Error?e.message:String(e))}};if(l===null)return(0,$.jsx)(rn,{id:`setup-connections`,title:`Accounts`,children:(0,$.jsx)(Ot,{label:`Accounts`,error:h,onRetry:_})});if(!v.length)return null;let S=v.filter(e=>e.problem);return(0,$.jsxs)(rn,{id:`setup-connections`,title:`Accounts`,note:`${v.filter(e=>e.signedIn).length} of ${v.length}`,children:[(0,$.jsx)(x,{className:`setup-table`,cards:!0,label:`Accounts`,rows:v,rowKey:e=>e.id,columns:[{key:`label`,header:`Account`,role:`title`,cell:e=>e.label},{key:`status`,header:`Status`,cell:e=>e.id===z_&&a&&d===void 0?(0,$.jsx)(Ot,{inline:!0,label:`Checking…`}):H_(e)},{key:`account`,header:`Signed in as`,cell:e=>e.account||(0,$.jsx)(`span`,{className:`unset`,children:`(No one)`})},{key:`workspaces`,header:`Workspaces`,sort:e=>x_(r(`account`,e.id)),cell:e=>(0,$.jsx)(mn,{label:e.label,workspaces:n,shares:r(`account`,e.id),onChange:t=>i(`account`,e.id,t)})},{key:`menu`,header:``,className:`ds-menu`,role:`menu`,sort:null,cell:e=>(0,$.jsx)(Ze,{label:`${e.label} actions`,actions:[e.signedIn?{label:`Sign out`,icon:Rr,onSelect:()=>void b(e)}:{label:`Sign in`,icon:Ir,disabled:!e.configured,onSelect:()=>void y(e)},...e.id===z_||e.id===B_?[{label:`Configure…`,icon:yt,onSelect:()=>c(e.id)}]:[]]})}]}),S.map(e=>(0,$.jsxs)(st,{tone:`error`,children:[e.label,`: `,e.problem]},e.id)),p&&(0,$.jsx)(st,{tone:`error`,children:p}),s===z_&&a!==void 0&&(0,$.jsx)(A_,{cfg:a,editable:o,onClose:()=>c(null)}),s===B_&&(0,$.jsx)(R_,{onClose:()=>c(null),onSaved:_})]})}var H_=e=>e.configured?e.signedIn?`Signed In`:`Signed Out`:`Not Configured`,U_={google:`Google Drive`,microsoft:`Microsoft 365`},W_=e=>`/w/${e}`,G_=e=>Y().slugOf(e),K_=e=>{let t=G_(e.name);return!!t&&t!==e.slug&&t!==e.slug.replace(/-\d+$/,``)};function q_(){let e=Z(),t=on(),{current:n,switchTo:r}=cc(),[i,a]=(0,X.useState)(null),[o,s]=(0,X.useState)(null),[c,l]=(0,X.useState)(null),[u,d]=(0,X.useState)(!1),[f,p]=(0,X.useState)(!1),[m,h]=(0,X.useState)(null),[g,_]=(0,X.useState)(null),v=e=>l({text:e instanceof Error?e.message:String(e),bad:!0}),y=(0,X.useCallback)(()=>{s(null),e.workspaces().then(e=>a(e.workspaces),e=>s(e instanceof Error?e.message:String(e)))},[e]);(0,X.useEffect)(y,[y]);let b=(i??[]).filter(e=>!e.archived).length,S=(0,X.useCallback)(async t=>{try{let n=await e.createWorkspace(t);if(n.workspace)return r(n.workspace.slug);a(n.workspaces),l(null)}catch(e){v(e)}},[e,r]),C=(0,X.useCallback)(async(t,n)=>{try{a((await e.renameWorkspace(t.id,n)).workspaces)}catch(e){v(e)}},[e]),w=(0,X.useCallback)(async t=>{try{a((await e.regenerateWorkspace(t.id)).workspaces),l(null)}catch(e){v(e)}},[e]),T=(0,X.useCallback)(async r=>{try{let i=await e.archiveWorkspace(r.id);if(r.slug===n?.slug){let e=oc(i.workspaces);if(e){ic({id:r.id,slug:r.slug,name:r.name}),location.assign(tc(e.slug));return}}a(i.workspaces),t.offer({label:`Archived ${r.name}`,restore:()=>void(async()=>{try{a((await e.unarchiveWorkspace(r.id)).workspaces)}catch(e){v(e)}})()})}catch(e){v(e)}},[e,t,n]),E=(0,X.useCallback)(async t=>{try{a((await e.unarchiveWorkspace(t.id)).workspaces)}catch(e){v(e)}},[e]),D=(0,X.useCallback)(async t=>{try{a((await e.setDefaultWorkspace(t.id)).workspaces)}catch(e){v(e)}},[e]),O=(0,X.useCallback)(async n=>{try{let{trash:r}=await e.deleteWorkspace(n.id);a(e=>(e??[]).filter(e=>e.id!==n.id)),t.offer({label:`Deleted ${n.name}`,restore:()=>void(async()=>{try{a((await e.restoreWorkspace(r)).workspaces)}catch(e){v(e)}})()})}catch(e){v(e)}},[e,t]),k=(i??[]).filter(e=>e.archived),A=(i??[]).filter(e=>u||!e.archived);return(0,$.jsxs)(rn,{id:`setup-workspaces`,title:`Workspaces`,note:i?Z_(i.length):``,children:[(0,$.jsx)(`p`,{className:`note`,children:`Each has its own experiments, runs and library.`}),i===null&&(0,$.jsx)(Ot,{label:`Workspaces`,error:o,onRetry:y}),i&&(0,$.jsxs)($.Fragment,{children:[k.length>0&&(0,$.jsx)(`div`,{className:`ws-archived`,children:(0,$.jsx)(Ut,{label:`Show archived`,checked:u,onChange:d})}),(0,$.jsx)(x,{className:`setup-table ws-table`,cards:!0,label:`Workspaces`,rows:A,rowKey:e=>e.id,columns:J_({onlyActive:b<=1,currentSlug:n?.slug??null,onRename:h,onRegenerate:_,onArchive:e=>void T(e),onUnarchive:e=>void E(e),onDelete:e=>void O(e),onSetDefault:e=>void D(e)})}),(0,$.jsxs)(`button`,{type:`button`,className:`ghost add-btn`,onClick:()=>p(!0),children:[(0,$.jsx)(U,{size:14,"aria-hidden":`true`}),`Add workspace`]})]}),c&&(0,$.jsx)(st,{tone:c.bad?`error`:`info`,children:c.text}),(0,$.jsx)(Ye,{undo:t.undo,onUndo:t.undoNow,onDismiss:t.dismiss}),f&&(0,$.jsx)(Y_,{onCreate:e=>void S(e),onClose:()=>p(!1)}),m&&(0,$.jsx)($e,{title:`Rename ${m.name}`,value:m.name,onCommit:e=>void C(m,e),onClose:()=>h(null)}),g&&(0,$.jsx)(X_,{workspace:g,onRegenerate:()=>void w(g),onClose:()=>_(null)})]})}function J_(e){let t=t=>t.archived?[{label:`Rename…`,icon:J.rename,onSelect:()=>e.onRename(t)},{label:`Unarchive`,icon:Hn,onSelect:()=>e.onUnarchive(t)},{label:`Delete permanently`,icon:J.remove,destructive:!0,onSelect:()=>e.onDelete(t)}]:[{label:`Rename…`,icon:J.rename,onSelect:()=>e.onRename(t)},...t.isDefault?[]:[{label:`Set as default`,icon:mi,onSelect:()=>e.onSetDefault(t)}],...e.onlyActive?[]:[{label:`Archive`,icon:Wn,onSelect:()=>e.onArchive(t)}]];return[{key:`name`,header:`Workspace`,role:`title`,sort:e=>e.name,cell:e=>e.name},{key:`slug`,header:`Address`,sort:e=>e.slug,cell:t=>(0,$.jsxs)(`span`,{className:`ws-address`,children:[(0,$.jsx)(`a`,{className:`link-btn ws-addr`,href:W_(t.slug),children:(0,$.jsx)(`code`,{children:W_(t.slug)})}),!t.archived&&K_(t)&&(0,$.jsxs)(`button`,{type:`button`,className:`link-btn ws-regen`,onClick:()=>e.onRegenerate(t),children:[(0,$.jsx)(Jr,{size:12,"aria-hidden":`true`}),`Regenerate…`]})]})},{key:`pipelines`,header:`Experiments`,sort:e=>e.pipelines,cell:e=>e.pipelines},{key:`runs`,header:`Runs`,sort:e=>e.runs,cell:e=>e.runs},{key:`lastUsed`,header:`Last used`,sort:e=>e.lastUsed??``,cell:e=>e.lastUsed?$_(e.lastUsed):(0,$.jsx)(`span`,{className:`unset`,children:`(Never)`})},{key:`status`,header:`Status`,sort:t=>Q_(t,e.currentSlug),cell:t=>{if(t.archived)return(0,$.jsx)(`span`,{className:`unset`,children:`Archived`});let n=[t.slug===e.currentSlug?`Current`:``,t.isDefault?`Default`:``].filter(Boolean);return n.length?(0,$.jsx)(wt,{children:n.join(`, `)}):(0,$.jsx)(`span`,{className:`unset`,children:`—`})}},{key:`menu`,header:``,label:``,className:`setup-menu`,role:`menu`,sort:null,cell:e=>(0,$.jsx)(it,{actions:t(e),label:`${e.name} actions`})}]}function Y_({onCreate:e,onClose:t}){let n=Z(),[r]=xi(`promptlab.connections`),i=(0,X.useMemo)(()=>r.list.filter(e=>Y().listedConnection(e)),[r.list]),[a,o]=(0,X.useState)(``),[s,c]=(0,X.useState)(``),[l,u]=(0,X.useState)(`nothing`),[d,f]=(0,X.useState)(null),[p,m]=(0,X.useState)({});(0,X.useEffect)(()=>{let e=!0;return n.connectionShares().then(t=>{e&&f(t.shares)}).catch(()=>{e&&f({})}),()=>{e=!1}},[n]);let h=(0,X.useMemo)(()=>{let e=[];for(let[t,n]of Object.entries(d??{})){if(n.includes(`*all`))continue;let r=t.indexOf(`:`),a=t.slice(0,r),o=t.slice(r+1),s=a===`profile`?i.find(e=>e.id===o)?.name:U_[o];s&&e.push({key:t,kind:a,id:o,label:s,prefill:n.includes(me)})}return e.sort((e,t)=>e.label.localeCompare(t.label))},[d,i]),g=i.filter(e=>!d?.[`profile:${e.id}`]||d[`profile:${e.id}`].includes(`*all`)).length,_=e=>e.key in p?p[e.key]:e.prefill,v=[{key:`new`,rows:[{key:`name`,label:`Name`,width:`full`,required:!0,control:{type:`text`,value:a,onChange:o}},{key:`slug`,label:`Address`,width:`full`,control:{type:`text`,value:s,placeholder:W_(G_(a)||`workspace`),onChange:e=>c(e.toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+/,``).slice(0,Y().SLUG_MAX))}},{key:`content`,label:`Starting content`,control:{type:`select`,value:l,onChange:e=>u(e),options:[{value:`nothing`,label:`Nothing`},{value:`demo`,label:`Demo pack`}]}}]}];return h.length&&v.push({key:`connections`,title:`Also share`,rows:h.map(e=>({key:e.key,label:e.label,control:{type:`checkbox`,checked:_(e),onChange:t=>m(n=>({...n,[e.key]:t}))}})),...g?{children:(0,$.jsxs)(`p`,{className:`note`,children:[g===1?`1 connection is`:`${g} connections are`,` shared with every workspace.`]})}:{}}),d===null?null:(0,$.jsx)(w,{title:`New workspace`,focusRow:`name`,sections:v,dirty:!!a.trim()||!!s.trim()||l!==`nothing`,adding:!0,onSave:()=>{let n=h.filter(_).map(e=>({kind:e.kind,id:e.id}));e({name:a.trim(),...s.trim()?{slug:s.trim()}:{},content:l,...h.length?{connections:n}:{}}),t()},onClose:t})}function X_({workspace:e,onRegenerate:t,onClose:n}){let r=W_(G_(e.name)||`workspace`);return(0,$.jsx)(Fe,{title:`Regenerate address`,onClose:n,footer:(0,$.jsxs)(`div`,{className:`edit-actions`,children:[(0,$.jsx)(`button`,{type:`button`,className:`ghost`,onClick:n,children:`Cancel`}),(0,$.jsx)(`button`,{type:`button`,onClick:()=>{t(),n()},children:`Regenerate`})]}),children:(0,$.jsxs)(`div`,{className:`ws-regen-dialog`,children:[(0,$.jsxs)(`dl`,{className:`ws-regen-rows`,children:[(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`dt`,{children:`Now`}),(0,$.jsx)(`dd`,{children:(0,$.jsx)(`code`,{children:W_(e.slug)})})]}),(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`dt`,{children:`New`}),(0,$.jsx)(`dd`,{children:(0,$.jsx)(`code`,{children:r})})]})]}),(0,$.jsx)(st,{tone:`error`,children:`The old address stops working. Bookmarks and links to it break, and the lab will not redirect them.`})]})})}var Z_=e=>e===1?`1 workspace`:`${e} workspaces`,Q_=(e,t)=>e.archived?`Archived`:[e.slug===t?`Current`:``,e.isDefault?`Default`:``].filter(Boolean).join(`, `),$_=e=>lt(e)||e,ev=[{id:`connections`,label:`Connections`,icon:b},{id:`workspaces`,label:`Workspaces`,icon:Xn}];function tv({section:e=`connections`,id:t=null,kind:n}){return(0,$.jsxs)(`div`,{className:`setup`,children:[(0,$.jsx)(jt,{label:`Setup`,level:`section`,className:`setup-sections`,current:e,items:ev.map(({id:e,label:t,icon:n})=>({key:e,label:t,href:da({tab:`setup`,section:e,id:null}),icon:n}))}),(0,$.jsx)(`section`,{className:`setup-section`,"data-section":e,children:e===`workspaces`?(0,$.jsx)(q_,{}):(0,$.jsx)(av,{connectionId:n===`profile`?null:t,profileId:n===`profile`?t:null})})]})}var nv={tab:`setup`,section:`connections`,id:null},rv=e=>({tab:`setup`,section:`connections`,id:e}),iv=()=>{let e=ma();e.tab===`setup`&&e.id&&fa(nv)};function av({connectionId:e=null,profileId:t=null}){let n=bi(),r=mc(),i=Z(),a=on(),{list:o}=cc(),s=o.filter(e=>!e.archived).map(e=>({id:e.id,name:e.name})),{sharesFor:c,setFor:l,setForEach:u}=S_(i),[d,f]=xi(`promptlab.connections`),p=(0,X.useMemo)(()=>d.list.filter(e=>Y().listedConnection(e)),[d.list]),[m]=xi(`promptlab.connectionProfiles`),[h]=xi(`promptlab.versions`),[g]=xi(`promptlab.workflows`),{list:_}=zi(),v=_??[],[y,S]=(0,X.useState)(null),[C,w]=(0,X.useState)(null),T=(0,X.useRef)(C);T.current=C;let[E,D]=(0,X.useState)(null),[O,k]=(0,X.useState)(null),[A,j]=(0,X.useState)({}),[M,N]=(0,X.useState)(``),[P,F]=(0,X.useState)(`all`),[I,L]=(0,X.useState)({key:`name`,dir:`asc`}),[R,ee]=(0,X.useState)([]),[te,z]=(0,X.useState)(``),[re,B]=(0,X.useState)({}),ie=(0,X.useRef)(re);ie.current=re;let[V,ae]=(0,X.useState)(()=>new Set),H=(0,X.useRef)(null);(0,X.useEffect)(()=>{let e=!0;return i.presets().then(t=>{e&&ee(t)}).catch(()=>{}),i.config().then(t=>{e&&z(t.ollama??``)}).catch(()=>{}),()=>{e=!1}},[i]);let W=(0,X.useRef)(d);W.current=d;let se=(0,X.useRef)(!0);(0,X.useEffect)(()=>()=>{se.current=!1},[]);let ce=[...V].sort().join(`,`);(0,X.useEffect)(()=>{H.current=null},[ce]);let le=(0,X.useCallback)(e=>{let t=T.current;return t?.p.id===e?t.p:W.current.list.find(t=>t.id===e)},[]),ue=(0,X.useCallback)((e,t)=>{B(n=>({...n,[e.id]:{at:Dv(e),...t}}))},[]),de=(0,X.useCallback)(e=>{let t=T.current;if(t?.p.id!==e.id)return;let n={...t,p:e};T.current=n,w(n)},[]),fe=(0,X.useCallback)(()=>{let e=T.current;if(!e)return;let t=W.current,r=e.was?e:{...e,p:{...e.p,name:e.p.name.trim()?e.p.name:jv,slug:Av(e.p.name.trim()||jv,t.list)}},i=r.was?{...t,list:t.list.map(e=>e.id===r.p.id?r.p:e)}:{...t,list:[...t.list,r.p],at:r.p.id};W.current=i,f(i),Ni(n,`profile`,r.p.id,r.p,`idle`),w(null),S(null),iv()},[f,n]),G=(0,X.useCallback)(()=>{w(null),S(null)},[]),pe=(0,X.useCallback)(()=>{G(),iv()},[G]),me=(0,X.useCallback)(()=>{let e=Mv();w({p:e,was:null,start:e}),S({id:``,focus:`name`})},[]),he=(0,X.useCallback)(e=>{let t=W.current.list.find(t=>t.id===e);if(!t)return;let n=`${t.name||`Connection`} copy`,r={...structuredClone(t),id:kv(),name:n,slug:Av(n,W.current.list),key:t.key},i={...W.current,list:[...W.current.list,r]};W.current=i,f(i)},[f]),ge=(0,X.useCallback)(e=>{let t=W.current,n=new Set(e),r=t.list.filter(e=>!n.has(e.id));if(!r.length||r.length===t.list.length)return;let i=n.has(t.at)?r[0].id:t.at,o={...t,list:r,at:i,...t.grader&&n.has(t.grader)?{grader:``}:{}};W.current=o,f(o),S(null),w(null),iv(),ae(new Set);let s=t.list.filter(e=>n.has(e.id));a.offer({label:s.length===1?`Deleted ${s[0].name||`the connection`}`:`Removed ${s.length} connections`,restore:()=>{W.current=t,f(t)}})},[f,a]),_e=(0,X.useCallback)(e=>ge([e]),[ge]),ve=(0,X.useCallback)(e=>{let t=e.doc.id,r=W.current.list.find(e=>e.id===t);r&&Ni(n,`profile`,t,r,`restore`);let i=Y().splitProfile(e.doc).connection,a=W.current,o={...a,list:a.list.map(e=>e.id===t?i:e)};W.current=o,f(o),ye()},[n,f]),ye=(0,X.useCallback)(()=>{D(e=>(e?.back&&ke(e.id),null))},[]),be=(0,X.useCallback)(async e=>{let t=le(e);if(!t)return;let n=Y().CONNECTION_TYPES[t.type];if(n?.local){j(t=>({...t,[e]:{phase:`connected`,ms:0,lines:[`${n.label} answers each text item with its own text, and sends nothing anywhere.`]}}));return}let r=n?.keyless?``:t.key,a=xv(t,n,te)||`Ollama`,o=performance.now(),s=()=>Math.round(performance.now()-o),c=[];j(t=>({...t,[e]:{phase:`checking`,lines:[`Checking…`]}}));try{let o=((await i.models({url:Y().addressOf(t),key:r,type:t.type,settings:Sv(t,n)})).data||[]).map(e=>e.id).sort();if(ue(t,{ids:o}),c.push(`Reached ${a}.`,`${o.length} ${o.length===1?`model`:`models`}: ${o.join(`, `)||`none`}.`),(n?.answers??[`prompt`]).includes(`prompt`)){if(t.model.trim()){let e=Y().apiBase(t.url||n?.url||``),a=Y().connectionRequest(t,`hi`,null,e,r),o=await i.modelsAsk({url:Y().addressOf(t),key:r,type:t.type,body:a.body}),{raw:s}=Y().connectionReply(t,o);c.push(``,`Asked ${t.model} “hi”; it replied:`,s||`(an empty response)`)}else c.push(``,`No model is picked, so nothing was asked.`)}j(t=>({...t,[e]:{phase:`connected`,lines:c,ms:s()}}))}catch(t){c.push(...c.length?[``]:[],t instanceof Error?t.message:String(t)),j(t=>({...t,[e]:{phase:`error`,lines:c,ms:s()}}))}},[i,le,te,ue]),xe=(0,X.useCallback)(async e=>{let t=Y().CONNECTION_TYPES[e.type],n=t?.keyless?``:e.key,r=xv(e,t,te)||`Ollama`,a=performance.now(),o=()=>Math.round(performance.now()-a);try{let a=await i.models({url:Y().addressOf(e),key:n,type:e.type,settings:Sv(e,t),quiet:!0});if(a.error)return{state:{phase:`error`,lines:[a.error],ms:o()}};let s=(a.data||[]).map(e=>e.id).sort();return{models:s,state:{phase:`connected`,ms:o(),lines:[`Reached ${r}.`,`${s.length} ${s.length===1?`model`:`models`}: ${s.join(`, `)||`none`}.`]}}}catch(e){return{state:{phase:`error`,lines:[e instanceof Error?e.message:String(e)],ms:o()}}}},[i,te]),Se=(0,X.useCallback)((e,t=!1)=>{let n=le(e);if(!n)return;let r=ie.current[e];if(!t&&r?.at===Dv(n)&&(r.ids||r.loading))return;let i=Dv(n);ue(n,{loading:!0}),(async()=>{let{state:t,models:r}=await xe(n);se.current&&ie.current[e]?.at===i&&ue(n,r?{ids:r}:{error:t.lines[t.lines.length-1]??``})})()},[le,xe,ue]),Ce=(0,X.useCallback)(e=>{let t=new Set(e),n=W.current.list.filter(e=>t.has(e.id)&&yv(e));if(n.length){j(e=>{let t={...e};for(let e of n)t[e.id]={phase:`checking`,lines:[`Checking…`]};return t});for(let e of n)(async()=>{let{state:t,models:n}=await xe(e);se.current&&(n&&ue(e,{ids:n}),j(n=>({...n,[e.id]:t})))})()}},[xe,ue]),we=(0,X.useCallback)((e,t)=>{if(!e.length)return;H.current||=new Map(e.map(e=>[e,c(`profile`,e)]));let n=H.current;u(`profile`,e.map(e=>({id:e,workspaces:t})));let r=e.length===1?W.current.list.find(t=>t.id===e[0])?.name||`the connection`:`${e.length} connections`;a.offer({label:`Workspaces for ${r}`,restore:()=>{u(`profile`,[...n].map(([e,t])=>({id:e,workspaces:t&&t.length?[...t]:[vn]}))),H.current=null}})},[c,u,a]),Te=(0,X.useCallback)((e,t)=>{let n=le(e);if(!n)return;let r={...n};for(let e of Ov(n.type))r[e]=``;for(let[e,n]of Object.entries(t))r[e]=n;de(r)},[le,de]),Ee=(0,X.useCallback)(e=>{j(t=>{if(!(e in t))return t;let{[e]:n,...r}=t;return r})},[]),De=(0,X.useCallback)((e,t,n)=>{let r=le(e);if(r){if([`url`,`key`,`model`].includes(t)&&Ee(e),t===`name`){let t=W.current.list.filter(t=>t.id!==e);if(!r.slug||r.slug===Av(r.name,t)){de({...r,name:n,slug:Av(n,t)});return}}t===`slug`&&(n=n.toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+/,``).slice(0,Y().SLUG_MAX)),de({...r,[t]:n})}},[le,de,Ee]),Oe=(0,X.useCallback)((e,t)=>{let n=le(e);if(!n)return;let r={...n,type:t};Ee(e);let i=Y().CONNECTION_TYPES[t];i?.keyless&&(r.key=``);let a=Y().CONNECTION_TYPES[n.type]?.url;(i?.url||a&&r.url.trim()===a)&&(r.url=``);for(let e of Object.keys(r))[`id`,`name`,`slug`,`url`,`model`,`key`,`type`].includes(e)||r[e]===``||Ov(t).includes(e)||delete r[e];de(r)},[le,de,Ee]),ke=(0,X.useCallback)((e,t)=>{let n=W.current.list.find(t=>t.id===e);n&&(w({p:structuredClone(n),was:n,start:n}),S(t?{id:e,focus:t}:{id:e}))},[]),Ae=(0,X.useCallback)((e,t)=>{ke(e,t),fa(rv(e))},[ke]);(0,X.useEffect)(()=>{e?T.current?.p.id!==e&&(W.current.list.some(t=>t.id===e)?ke(e):pa(nv)):T.current?.was&&G()},[e,ke,G]);let je=(0,X.useCallback)(e=>h.profile?.[e]??[],[h]),K=y?C?.p??null:null,Me=C?C.was?d.list.map(e=>e.id===C.p.id?C.p:e):[...d.list,C.p]:d.list,Ne=d.grader??null,Pe=(0,X.useMemo)(()=>{let e=new Map;for(let t of d.list)e.set(t.id,Kg(t.id,g.list,v,m.list));return e},[d.list,g.list,v,m.list]),Fe=M.trim().toLowerCase(),Ie=p.filter(e=>sv(P,e,A[e.id])&&(!Fe||[e.name,e.model].some(e=>String(e??``).toLowerCase().includes(Fe)))),Le=new Set(Ie.map(e=>e.id)),Re=Ie.filter(e=>V.has(e.id)),ze=[...V].filter(e=>!Le.has(e)).length,Be=[{label:`Test connection`,icon:b,disabled:!Re.some(yv),onSelect:()=>Ce(Re.map(e=>e.id))},{label:`Remove`,icon:J.remove,destructive:!0,disabled:!Re.length||Re.length>=p.length,onSelect:()=>ge(Re.map(e=>e.id))}],Ve=V.size>0?(0,$.jsx)(oe,{count:V.size,noun:`connection`,hidden:ze,actions:Be,onClear:()=>ae(new Set),children:Re.length>0&&(0,$.jsx)(mn,{label:Re.length===1?`1 connection`:`${Re.length} connections`,workspaces:s,shares:bv(Re.map(e=>c(`profile`,e.id))),onChange:e=>we(Re.map(e=>e.id),e)})}):null;return(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(rn,{id:`setup-ai-connections`,title:`AI Connections`,children:[(0,$.jsx)(`div`,{className:`setup-intro`,children:(0,$.jsx)(`p`,{className:`note`,children:`Where the lab sends prompts.`})}),p.length>0&&(0,$.jsx)(ne,{noun:`connections`,search:{label:`Search connections`,placeholder:`Name or model`,value:M,onChange:N},filters:[],quick:{label:`Show`,value:P,onChange:e=>F(e),options:ov}}),Ve,(0,$.jsx)(x,{className:`setup-table`,total:p.length,empty:`(No connections)`,cards:!0,label:`AI Connections`,sort:I,onSort:L,rows:Ie,rowKey:e=>e.id,select:{noun:`connection`,label:e=>e.name||`Unnamed connection`,selected:V,onChange:ae},rowProps:e=>({className:`setup-row`,onClick:t=>{t.target.closest(`button, a, .menu`)||Ae(e.id)}}),columns:cv({tests:A,only:p.length===1,grader:Ne,labOllama:te,uses:e=>Pe.get(e)??[],onGrader:e=>{let t=W.current,n={...t,grader:t.grader===e?``:e};W.current=n,f(n)},onOpen:Ae,onClone:he,link:e=>r(rv(e)),onRemove:_e,onTest:be,onProbe:e=>Ce([e]),onResult:e=>k({id:e,back:!1}),workspaces:s,sharesFor:e=>c(`profile`,e),onShare:(e,t)=>l(`profile`,e,t)})}),(0,$.jsxs)(`button`,{type:`button`,className:`ghost add-btn`,onClick:me,children:[(0,$.jsx)(U,{size:14,"aria-hidden":`true`}),`Add connection`]})]}),(0,$.jsx)(i_,{profileId:t,connections:d.list,workflows:g.list,groups:v,presets:R,offer:a.offer}),(0,$.jsx)(V_,{}),(0,$.jsx)(E_,{offer:a.offer}),(0,$.jsx)(C_,{offer:a.offer}),(0,$.jsx)(Ye,{undo:a.undo,onUndo:a.undoNow,onDismiss:a.dismiss}),K&&(0,$.jsx)(fv,{connection:K,slug:Y().withSlugs(Me).find(e=>e.id===K.id)?.slug??``,...y?.focus?{focus:y.focus}:{},test:A[K.id],list:re[K.id]?.at===Dv(K)?re[K.id]:void 0,onList:e=>Se(K.id,e),canRestore:!!C?.was&&!!je(K.id).length,uses:Pe.get(K.id)??[],isNew:!C?.was,labOllama:te,dirty:!!C&&JSON.stringify(C.p)!==JSON.stringify(C.start),onSave:fe,onClose:pe,...C?.was?{link:r(rv(K.id))}:{},onSetting:De,onType:Oe,onTest:be,onResult:()=>{S(null),k({id:K.id,back:!0})},onRestore:()=>{G(),D({id:K.id,back:!0})},onApplyTemplate:e=>Te(K.id,e)}),O&&A[O.id]&&(0,$.jsx)(Cv,{test:A[O.id],onClose:()=>{O.back&&T.current?.p.id===O.id&&S({id:O.id}),k(null)}}),E&&(0,$.jsx)(Bt,{noun:`connection`,versions:je(E.id),at:e=>e.at,reason:e=>e.reason,onClose:ye,onRestore:ve})]})}var ov=[{value:`all`,label:`All`},{value:`connected`,label:`Connected`},{value:`attention`,label:`Needs attention`}];function sv(e,t,n){if(e===`all`)return!0;let r=vv(t,n)?.kind;return e===`connected`?r===`connected`:r===`key-needed`||r===`unreachable`}function cv({tests:e,only:t,grader:n,labOllama:r,onGrader:i,onOpen:a,onClone:o,link:s,onRemove:c,onTest:l,onProbe:u,onResult:d,uses:f,workspaces:p,sharesFor:m,onShare:h}){let g=e=>e.name||`Unnamed connection`,_=e=>Y().CONNECTION_TYPES[e.type]?.label??e.type,v=r=>[{label:`Edit…`,icon:J.edit,onSelect:()=>a(r.id)},{label:`Rename…`,icon:J.rename,onSelect:()=>a(r.id,`name`)},{label:`Clone`,icon:J.clone,onSelect:()=>o(r.id)},s(r.id),{label:`Test connection`,icon:b,busy:e[r.id]?.phase===`checking`,onSelect:()=>void l(r.id)},...(Y().CONNECTION_TYPES[r.type]?.answers??[`prompt`]).includes(`prompt`)&&!Y().CONNECTION_TYPES[r.type]?.local?[{label:n===r.id?`Stop grading`:`Make grader`,icon:Or,onSelect:()=>i(r.id)}]:[],...t?[]:[{label:`Remove`,icon:J.remove,destructive:!0,onSelect:()=>c(r.id)}]];return[{key:`name`,header:`Connection`,role:`title`,sort:g,cell:t=>{let n=vv(t,e[t.id]);return(0,$.jsxs)(`div`,{className:`setup-profile`,children:[n&&(0,$.jsx)(`button`,{type:`button`,className:`setup-dot ${n.kind}`,title:n.title,"aria-label":`Connection status: ${n.label}`,onClick:()=>{e[t.id]?d(t.id):u(t.id)},children:(0,$.jsx)(`span`,{className:`setup-dot-mark`,"aria-hidden":`true`})}),(0,$.jsxs)(`span`,{className:`setup-profile-main`,children:[(0,$.jsx)(`span`,{className:`setup-profile-name`,children:(0,$.jsx)(`button`,{type:`button`,className:`link-btn setup-open`,onClick:()=>a(t.id),children:g(t)})}),(0,$.jsx)(`span`,{className:`setup-sub`,children:_(t)})]})]})}},{key:`endpoint`,header:`Endpoint`,label:``,sort:e=>uv(e,r),cell:e=>{let t=uv(e,r);return t?(0,$.jsx)(`span`,{className:`setup-endpoint`,children:dv(t)}):(0,$.jsx)(`span`,{className:`unset`,children:`—`})}},{key:`model`,header:`Model`,label:``,sort:e=>e.model.trim(),cell:e=>(0,$.jsx)(lv,{p:e})},{key:`used`,header:`Used by`,label:``,sort:e=>Yg(f(e.id)),cell:e=>(0,$.jsx)(Xg,{uses:f(e.id)})},{key:`workspaces`,header:`Workspaces`,sort:e=>x_(m(e.id)),cell:e=>(0,$.jsx)(mn,{label:g(e),workspaces:p,shares:m(e.id),onChange:t=>h(e.id,t)})},{key:`menu`,header:``,label:``,className:`setup-menu`,role:`menu`,sort:null,cell:e=>(0,$.jsx)(it,{actions:v(e),label:`${g(e)} actions`})}]}function lv({p:e}){let t=Y().CONNECTION_TYPES[e.type];return t?.local?(0,$.jsx)(`span`,{className:`unset`,children:`—`}):(t?.answers??[`prompt`]).includes(`prompt`)?e.model.trim()?(0,$.jsx)($.Fragment,{children:e.model.trim()}):(0,$.jsx)(`span`,{className:`unset`,children:`(No model)`}):(0,$.jsx)(`span`,{className:`unset`,children:`(From request)`})}function uv(e,t){let n=Y().CONNECTION_TYPES[e.type];return n?.local?``:xv(e,n,t).replace(/^https?:\/\//,``).replace(/\/+$/,``)}function dv(e){return e.split(/(?=[.:])|(?<=\/)/).flatMap((e,t)=>t?[(0,$.jsx)(`wbr`,{},t),e]:[e])}function fv({connection:e,slug:t,focus:n,test:r,list:i,onList:a,canRestore:o,uses:s,isNew:c,labOllama:l,dirty:u,link:d,onSave:f,onClose:p,onSetting:m,onType:h,onTest:g,onResult:_,onRestore:v,onApplyTemplate:y}){let x=Y().CONNECTION_TYPES[e.type],S=(x?.answers??[`prompt`]).includes(`prompt`),C=(0,X.useMemo)(()=>mv(e),[e]),T=t=>n=>m(e.id,t,n),E=[{key:`name`,label:`Name`,width:`full`,required:!0,control:{type:`text`,value:e.name,onChange:T(`name`),...c?{placeholder:jv}:{}}},...c?[]:[{key:`slug`,label:`Slug`,width:`full`,required:!0,...e.slug&&Y().slugOf(e.slug)!==t?{hint:`Taken`}:{},control:{type:`text`,value:e.slug??``,placeholder:t,onChange:T(`slug`)}}],{key:`type`,label:`Type`,required:!0,hint:x?.description,control:{type:`select`,value:e.type,onChange:t=>h(e.id,t),options:bt(Object.entries(Y().CONNECTION_TYPES).filter(([t,n])=>n.picker!==!1||t===e.type).map(([e,t])=>({value:e,label:t.label})))}},...x?.local?[]:[...x?.url?[]:[{key:`url`,label:`Address`,width:`full`,control:{type:`text`,value:e.url,placeholder:l,onChange:T(`url`)}}],...x?.keyless?[]:[{key:`key`,label:`Key`,control:{type:`secret`,value:Mg(e.key)?``:e.key,held:Mg(e.key),onChange:T(`key`)}}],...S?[{key:`model`,label:`Model`,width:`full`,control:Ev(e.model,x,i,T(`model`),a)}]:[]]],D={...e},O=(x?.settings??[]).filter(e=>e.scope===`connection`&&(!e.appliesTo||e.appliesTo(D))).map(t=>pv(e,t,T(t.key))),[k]=(0,X.useState)(()=>({address:!!e.url.trim()})),A=!x?.local&&!x?.keyless?[{key:`ci`,label:`CI secret`,hint:`Read during CI runs`,control:{type:`code`,text:Y().keyVar(e.id,t)}}]:[],j=[{key:`identity`,rows:E},...O.length?[{key:`settings`,title:`Settings`,rows:O}]:[],...c?[]:[{key:`use`,title:`Use`,rows:A,children:(0,$.jsx)(Zg,{uses:s})}],...x?.url&&!x.local?[{key:`advanced`,title:`Advanced`,folded:!k.address,rows:[{key:`url`,label:`Address`,width:`full`,hint:`For a proxy or gateway`,control:{type:`text`,value:e.url,placeholder:x.url,onChange:T(`url`)}}]}]:[],...x?.local||!S?[]:[{key:`debug`,title:`Debug`,rows:C,folded:!0}]],M=[{label:`Restore…`,icon:re,disabled:!o,onSelect:v},...d?[d]:[],...(x?.templates??[]).map(e=>({label:`Apply template: ${e.label}`,icon:J.preset,onSelect:()=>y(e.settings)}))];return(0,$.jsx)(w,{title:e.name||(c?jv:`Unnamed connection`),...n?{focusRow:n}:{},sections:j,menu:M,actions:x?.tests===!1?[]:[{label:`Test connection`,icon:b,busy:r?.phase===`checking`,onSelect:()=>g(e.id),outcome:r?{label:hv[r.phase],bad:r.phase===`error`,onOpen:_}:void 0}],dirty:u,adding:c,onSave:f,onClose:p})}function pv(e,t,n){let r=e[t.key]??t.default??``;return t.control===`select`&&t.choices?{key:t.key,label:t.label,control:{type:`select`,value:r,options:t.choices,onChange:n}}:{key:t.key,label:t.label,width:`full`,control:{type:`text`,value:r,onChange:n}}}function mv(e){let t=Y().apiBase(e.url),n=[];try{let{url:r,body:i}=Y().connectionRequest(e,`(prompt)`,null,t);n.push({key:`endpoint`,label:`Endpoint`,required:!0,control:{type:`code`,text:r}});let a=i,o=a.messages,s=Array.isArray(o?.[0]?.content)?o[0].content.find(e=>e.type===`text`)?.text??``:o?.[0]?.content??``;n.push({key:`prompt`,label:`Prompt`,required:!0,control:{type:`static`,text:String(s).slice(0,40)}}),n.push({key:`image`,label:`Image`,required:!0,control:{type:`code`,text:Ug(e)}});for(let[e,t]of Object.entries(a))e!==`messages`&&n.push({key:e,label:e,control:{type:`code`,text:typeof t==`object`?JSON.stringify(t):String(t)}})}catch(e){n.push({key:`error`,label:`Error`,required:!0,control:{type:`static`,text:e instanceof Error?e.message:String(e)}})}return n}var hv={checking:`Checking…`,connected:`Connected`,error:`Error`},gv={untested:`Not tested`,connected:`Connected`,"key-needed":`Key needed`,unreachable:`Unreachable`},_v=(e,t)=>!t?.keyless&&!e.key&&!t?.keyOptional?.(e);function vv(e,t){let n=Y().CONNECTION_TYPES[e.type];if(n?.local||n?.tests===!1)return null;let r=(e,t)=>({kind:e,label:gv[e],title:t?`${gv[e]} — ${t}`:gv[e]});return _v(e,n)?r(`key-needed`,`no key is set`):!t||t.phase===`checking`?r(`untested`):t.phase===`error`?r(`unreachable`,t.lines[t.lines.length-1]):r(`connected`)}function yv(e){let t=Y().CONNECTION_TYPES[e.type];return t?.local||t?.tests===!1?!1:!_v(e,t)}function bv(e){if(!e.length)return;let t=x_(e[0]);return e.every(e=>x_(e)===t)?e[0]:void 0}var xv=(e,t,n)=>e.url.trim()||t?.url||n;function Sv(e,t){let n=Object.fromEntries((t?.settings??[]).map(t=>[t.key,String(e[t.key]??``)]));if(`testPath`in n&&!n.testPath.trim()){let r=t?.templates?.find(t=>wv(t.settings.url,e.url));r?.settings.testPath&&(n.testPath=r.settings.testPath)}return n}function Cv({test:e,onClose:t}){return(0,$.jsx)(w,{title:`Test connection`,sections:[{key:`result`,rows:[{key:`time`,label:`Time`,required:!0,control:{type:`static`,text:e.ms==null?`—`:Tv(e.ms)}},{key:`result`,label:`Result`,required:!0,control:{type:`textarea`,value:e.lines.join(`
14
+ `)}}]}],onClose:t})}function wv(e,t){let n=e=>{let t=String(e??``).trim();if(!t)return``;try{return new URL(/^https?:\/\//.test(t)?t:`https://${t}`).origin}catch{return``}},r=n(e);return!!r&&r===n(t)}var Tv=e=>e<1e3?`${e} ms`:`${(e/1e3).toFixed(1)}s`;function Ev(e,t,n,r,i){return t?.lists===!1?{type:`text`,value:e,placeholder:`model name`,onChange:r}:{type:`picker`,kind:`Model`,value:e,onChange:r,placeholder:`Pick a model`,options:(n?.ids??[]).map(e=>({id:e,label:e})),onOpen:()=>i(),loading:!n?.ids&&!n?.error,error:n?.error,onRetry:()=>i(!0),entry:{label:`Model`,placeholder:`Model name`}}}var Dv=e=>JSON.stringify([e.url,e.key,e.type]);function Ov(e){return Y().CONNECTION_TYPES[e]?.settings.filter(e=>e.scope===`connection`).map(e=>e.key)??[]}var kv=()=>`p${Date.now().toString(36)}${Math.random().toString(36).slice(2,6)}`,Av=(e,t)=>Y().uniqueSlug(Y().slugOf(e),new Set(Y().withSlugs(t).map(e=>e.slug))),jv=`New connection`,Mv=()=>({id:kv(),name:``,slug:``,url:``,model:``,key:``,nPredict:``,maxTokens:``,type:`ollama`}),Nv=[];function Pv(e,t){let n=Z(),[r,i]=(0,X.useState)(null);(0,X.useEffect)(()=>{if(t===null)return;let r=!0,a=Ci(n);return a.runDataset(e).then(n=>{if(n)r&&i({run:e,cases:Y().upgradeDatasetBody(n).cases,current:!1});else return a.dataset(t).then(t=>{r&&i({run:e,cases:Y().upgradeDatasetBody(t.body).cases,current:!0})}).catch(()=>{})}).catch(()=>{}),()=>{r=!1}},[n,e,t]);let a=t!==null&&r?.run===e?r:null;return{cases:a?a.cases:Nv,current:a?.current??!1}}var Fv={};function Iv(e){let t=Z(),[n,r]=(0,X.useState)(null);return(0,X.useEffect)(()=>{let n=!0;return t.runGroups(e).then(t=>{if(!n)return;let i={};for(let[e,n]of Object.entries(t??{}))i[e]=Y().upgradeDatasetBody(n);r({run:e,groups:i})}).catch(()=>{}),()=>{n=!1}},[t,e]),n?.run===e?n.groups:Fv}var Lv={};function Rv(e,t){let n=Z(),[r,i]=(0,X.useState)(null),a=(0,X.useMemo)(()=>{let t=new Set;for(let n of e?.evals??[]){let e=Y().casesRef(n);e&&t.add(e.id),n.group?.id&&t.add(n.group.id)}return[...t]},[e?.evals]),o=a.join(`,`);(0,X.useEffect)(()=>{if(!t||!e)return;let r=!0,o=Ci(n);return Promise.all(a.map(e=>o.dataset(e).then(t=>[e,Y().upgradeDatasetBody(t.body)],()=>null))).then(async t=>{if(!r)return;let n={};for(let e of t)e&&(n[e[0]]=e[1]);let a=await Y().rescoreResults(e.snapshot,e.results,{group:e=>n[e.id]});r&&i({run:e.id,bodies:n,results:a})}),()=>{r=!1}},[n,t,e?.id,e?.results,o]);let s=t&&e&&r?.run===e.id?r:null;return{ready:!!s,bodies:s?.bodies??Lv,results:s?.results??null}}function zv(e){let t=(e.metrics??[]).filter(e=>e.weight!==0);return{wanted:t.filter(e=>!e.not&&(e.type===`contains-all`||e.type===`contains-any`)).flatMap(e=>Y().metricLines(e.values)),forbidden:t.filter(e=>e.not&&e.type===`contains`).map(e=>({value:String(e.value??``),except:Y().metricLines(e.except)}))}}var Bv=e=>e==null?`—`:oo(e);function Vv(e,t){return t.flatMap((t,n)=>{let r=t.replays?[]:e?.scenarios?.[n]?.res?.transcript||[];return r.filter(e=>e.sent).map(e=>({...e,target:t.name,stages:r.length,at:n}))})}function Hv(e){let t=e.trim();if(!/^[[{]/.test(t))return null;try{return{value:JSON.parse(t)}}catch{return null}}function Uv({text:e}){let t=Hv(e);if(t)return(0,$.jsx)(Ve,{value:t.value});let n=/^([A-Z]+ \S+)\n\n([\s\S]*)$/.exec(e),r=n?Hv(n[2]):null;return n&&r?(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`pre`,{className:`tx-line`,children:n[1]}),(0,$.jsx)(Ve,{value:r.value})]}):(0,$.jsx)(`pre`,{className:`mono-block tx-text`,children:e||(0,$.jsx)(`span`,{className:`unset`,children:`(Empty)`})})}function Wv({label:e,text:t,bad:n}){return(0,$.jsxs)(`div`,{className:`tx-part`,children:[(0,$.jsx)(`span`,{className:`tx-label`,children:e}),n?(0,$.jsx)(`pre`,{className:`mono-block tx-text err`,children:t}):(0,$.jsx)(Uv,{text:t})]})}function Gv({stages:e,graders:t}){if(!e.length&&!t.length)return null;let n=[...new Set([...e.map(e=>e.at),...t.map(e=>e.at)])].sort((e,t)=>e-t),r=e=>[e.target,e.stages>1?`job ${e.n}`:``,Bv(e.ms)].filter(Boolean).join(`, `);return(0,$.jsx)(`div`,{className:`transcript`,children:n.flatMap(n=>[...e.filter(e=>e.at===n).map(e=>{let t=e.body??e.said??e.got;return(0,$.jsxs)(`section`,{className:`tx-block`,children:[(0,$.jsx)(`h4`,{className:`tx-head`,children:r(e)}),(0,$.jsx)(Wv,{label:`Sent`,text:e.sent??``}),t!=null&&(e.body!=null||!e.error)&&(0,$.jsx)(Wv,{label:`Returned`,text:t}),e.error&&(0,$.jsx)(Wv,{label:`Error`,text:e.error,bad:!0})]},`s-${n}-${e.n}`)}),...t.filter(e=>e.at===n).map(e=>(0,$.jsxs)(`section`,{className:`tx-block`,id:e.id,tabIndex:-1,children:[(0,$.jsx)(`h4`,{className:`tx-head`,children:e.ms==null?e.head:`${e.head}, ${Bv(e.ms)}`}),e.calls.map((e,t)=>(0,$.jsxs)(`div`,{className:`tx-call`,children:[(0,$.jsx)(Wv,{label:`Sent`,text:e.sent}),e.error==null?(0,$.jsx)(Wv,{label:`Returned`,text:e.got??``}):(0,$.jsx)(Wv,{label:`Error`,text:e.error,bad:!0})]},t))]},e.id))])})}function Kv({text:e,kind:t}){return(0,$.jsx)(wt,{className:`term${t?` ${t}`:``}`,children:e})}function qv({res:e,kase:t}){let n=e?.dropped||[];if(!n.length)return null;let r=e=>t?zv(t).wanted.some(t=>Y().termIn([e],t)):!1;return(0,$.jsxs)(`details`,{className:`dropped`,children:[(0,$.jsxs)(`summary`,{children:[`Dropped `,n.length]}),n.map((e,t)=>(0,$.jsxs)(`div`,{className:`droppedrow`,children:[(0,$.jsx)(Kv,{text:e.item,kind:`no`}),(0,$.jsxs)(`span`,{className:`note`,children:[e.by,r(e.item)&&(0,$.jsx)(`b`,{className:`fault`,children:`, wanted`})]})]},t))]})}var Jv=e=>e?.transcript?.at(-1)?.kind===`text`;function Yv(e){return new Set((e?.transcript||[]).map(e=>e.n)).size>1?`Job ${e.filteredBy.job}`:null}function Xv({res:e}){let t=e?.filteredBy,n=t&&Yv(e);return t&&!t.rejected?(0,$.jsxs)(`div`,{className:`meta`,children:[`Emptied by `,t.filter,n?`, ${n.toLowerCase()}`:``]}):null}function Zv({res:e}){let t=e?.filteredBy;if(!t?.rejected)return(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`span`,{className:`err`,children:e?.error}),(0,$.jsx)(Xv,{res:e})]});let n=Yv(e);return(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(`span`,{className:`err`,children:[`Discarded by `,t.filter]}),n&&(0,$.jsx)(`div`,{className:`meta`,children:n})]})}function Qv({res:e}){let t=e?.transcript?.at(-1);return t?.filtered?(0,$.jsxs)(`details`,{className:`dropped`,children:[(0,$.jsxs)(`summary`,{children:[`Filtered by `,t.filtered.by.join(`, `)]}),(0,$.jsx)(`pre`,{children:t.got||(0,$.jsx)(`span`,{className:`unset`,children:`(Empty)`})})]}):null}function $v({res:e}){if(e?.error)return(0,$.jsx)(Zv,{res:e});if(Jv(e)){let t=Y().gradedText(e);return(0,$.jsxs)($.Fragment,{children:[t?(0,$.jsx)(`pre`,{children:t}):(0,$.jsx)(`div`,{className:`note`,children:`(Empty response)`}),(0,$.jsx)(ey,{res:e}),(0,$.jsx)(Qv,{res:e})]})}return(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`div`,{className:`chips`,children:(e?.terms||[]).map((e,t)=>(0,$.jsx)(Kv,{text:String(e)},t))}),(0,$.jsx)(qv,{res:e,kase:null}),(0,$.jsx)(`div`,{className:`meta`,children:Qa((e?.terms||[]).length,`item`)}),(0,$.jsx)(ey,{res:e}),(0,$.jsx)(Qv,{res:e}),(0,$.jsx)(Xv,{res:e})]})}function ey({res:e}){let t=e?.transcript?.at(-1)?.stopped;if(!t)return null;let n=t.limit==null?``:`${t.limit.toLocaleString(`en-US`)} `;return(0,$.jsxs)(`div`,{className:`reply-stopped`,children:[`Stopped at the `,n,`response-token limit`]})}function ty({name:e,asked:t}){return(0,$.jsxs)(`span`,{className:`rr-target`,children:[(0,$.jsxs)(`span`,{children:[e,t&&(0,$.jsx)(`span`,{className:`sr-only`,children:`,`})]}),t&&(0,$.jsx)(`span`,{className:`rr-asked`,children:t})]})}var ny=e=>e?{"data-asked":e}:{},ry=(e,t)=>`${Y().targetLetter(t)} ${e.scenarios[t]?.name??``}`.trim(),iy=e=>e?`${e.passed}/${e.ran}`:(0,$.jsx)(`span`,{className:`unset`,children:`(n/a)`});function ay({id:e,view:t,pinned:n}){let r=Uo(t),i=t.evals.flatMap((e,n)=>{let i=r.rows[n],a={kind:`group`,key:e.id,name:i?.name??``,verdict:(i?.cells??[]).map(e=>e.pass)},o=i?.whole?[{kind:`whole`,key:`${e.id}:whole`,verdict:i.whole.map((e,t)=>i.cells[t]?.skipped?null:e)}]:[],s=Yo(t,e.id).map(t=>({kind:`metric`,key:`${e.id}:${t.key}`,label:t.label,cells:t.cells}));return[a,...o,...s]});return(0,$.jsx)(`div`,{className:`scrollx`,style:{"--scenarios":t.scenarios.length},children:(0,$.jsx)(x,{className:`egtable recorded`,label:`Evals Summary`,rows:i,rowKey:e=>e.key,defaultSort:null,pinned:n,rowProps:e=>e.kind===`group`?{className:`eg-group`,"data-group":e.key}:e.kind===`whole`?{className:`eg-metric`,"data-group":e.key}:{className:`eg-metric`},columns:[{key:`eval`,header:`Eval`,label:``,role:`title`,sort:null,className:`col-eg`,cell:e=>e.kind===`group`?(0,$.jsx)(`span`,{className:`eg-name`,children:e.name}):(0,$.jsx)(`span`,{className:`eg-metric-name`,children:e.kind===`whole`?`Whole run`:e.label})},...t.scenarios.map((e,n)=>({key:`t-${n}`,header:(0,$.jsx)(ty,{name:ry(t,n),asked:t.scenarios[n]?.asked??null}),label:ry(t,n),tdProps:()=>ny(t.scenarios[n]?.asked??null),sort:null,cell:e=>e.kind===`metric`?iy(e.cells[n]):e.verdict[n]==null?(0,$.jsx)(`span`,{className:`eg-none`,children:`—`}):(0,$.jsx)(qe,{pass:e.verdict[n]})}))]})})}function oy({view:e,x:t,evalId:n,onClose:r}){let i=e.items[t]??e.results[t]?.name??`Item`;return(0,$.jsx)(Fe,{title:i,wide:!0,onClose:r,dismiss:`Close`,children:(0,$.jsx)(`div`,{className:`rec-compare`,style:{"--scenarios":e.scenarios.length},children:e.scenarios.map((r,i)=>{let a=Ko(e.results[t]?.scenarios?.[i]?.res),o=n?qo(e,t,i,n):[];return(0,$.jsxs)(`div`,{className:`rec-side`,children:[(0,$.jsx)(`h3`,{className:`rec-side-title`,children:ry(e,i)}),(0,$.jsx)(`pre`,{className:`mono-block`,children:a??`(no response)`}),o.length>0&&(0,$.jsx)(`ul`,{className:`rec-checks`,"aria-label":`${ry(e,i)} checks`,children:o.map((e,t)=>(0,$.jsxs)(`li`,{children:[(0,$.jsx)(`span`,{className:`eval-name`,children:e.label}),(0,$.jsx)(qe,{pass:e.pass})]},t))})]},r.id)})})})}function sy({tab:e,undo:t}){let n=Z(),r=on(),i=t??r,{setShow:a,openRun:o,closeRun:s}=za(),{openCaseEditor:c}=Yc(),[l,u]=(0,X.useState)(null),[d,f]=(0,X.useState)(!1),[m,h]=(0,X.useState)(null),[g,_]=(0,X.useState)(new Set),[v,y]=(0,X.useState)(null);(0,X.useEffect)(()=>{if(!v)return;let e=document.getElementById(v);e&&(Pp(e,{preventScroll:!0}),e.scrollIntoView?.({block:`nearest`,behavior:`smooth`}),y(null))},[v,g]);let b=fc(),S=mc(),[C,w]=(0,X.useState)(null),[T,E]=(0,X.useState)(null),[D,O]=(0,X.useState)(0),[A,j]=(0,X.useState)(null),[M,N]=(0,X.useState)(null),[P,F]=(0,X.useState)(new Set),[I,L]=(0,X.useState)(null),[R,ee]=(0,X.useState)(`submitted`),te=Ri();(0,X.useEffect)(()=>{let t=!0,r=!1,i,a=async()=>{try{let o=await n.run(e.id);if(!t)return;r=!0,u(o),E(null),wo(o.status)?f(!1):i=setTimeout(()=>void a(),1e3)}catch(e){if(!t)return;r?i=setTimeout(()=>void a(),1e3):E(e instanceof Nn?e.message:`Run not loaded: server unreachable.`)}};return a(),()=>{t=!1,i&&clearTimeout(i)}},[n,e.id,D]);let z=Iv(e.id),re=(0,X.useMemo)(()=>l?$o(l,e=>z[Xo(e)]??z[e.id]):null,[l,z]),B=Rv(re,R===`latest`),ie=R===`latest`&&B.ready&&!!B.results,V=(0,X.useMemo)(()=>ie&&l&&B.results?$o({...l,results:B.results},e=>B.bodies[e.id]):re,[ie,l,B.results,B.bodies,re]),H=(0,X.useRef)(null);(0,X.useEffect)(()=>{if(e.item==null||!V||H.current===e.last)return;H.current=e.last;let t=`${V.items[e.item]}-${e.item}`;_(e=>e.has(t)?e:new Set(e).add(t)),requestAnimationFrame(()=>{let t=document.querySelector(`#run-${CSS.escape(e.id)}-results tr[data-item="${e.item}"]`);t&&(t.tabIndex=-1,t.scrollIntoView?.({block:`center`}),Pp(t,{preventScroll:!0}))})},[e.item,e.last,e.id,V]);let U=V?Y().evalsDataset(V.snapshot)?.id??null:null,oe=(0,X.useMemo)(()=>{let e=[],t=new Set;for(let n of V?.evals??[]){let r=Y().casesRef(n);r&&!t.has(r.id)&&(t.add(r.id),e.push({id:r.id,name:r.name}))}return e},[V]),W=V?Wo(V):[],se=W.some(Boolean),ce=Go(W),le=Bi(se?U:null),ue=Pv(e.id,U),de=(0,X.useMemo)(()=>U&&B.bodies[U]?B.bodies[U].cases:[],[B.bodies,U]),fe=(0,X.useMemo)(()=>{let e={};for(let t of V?.evals??[]){let n=t.group?.id?B.bodies[t.group.id]:void 0;t.group&&n&&(e[Xo(t.group)]=n)}return e},[B.bodies,V]),G=ie?de:ue.cases,pe=ie?fe:z,me=(0,X.useMemo)(()=>new Map(G.map(e=>[Y().caseItem(e),e])),[G]),he=(0,X.useMemo)(()=>{let e=new Set;if(!ie||!re||!V)return e;let t=No(re.results,re.outcomes),n=No(V.results,V.outcomes);for(let r=0;r<V.items.length;r++)V.scenarios.some((e,i)=>(t[i]?.[r]??null)!==(n[i]?.[r]??null))&&e.add(r);return e},[ie,re,V]),ge=(0,X.useCallback)(async()=>{j(null);try{let{run:t}=await n.rerunRun(e.id);o(t.id,{at:t.submittedAt,from:e.from}),i.offer({label:gg(t),restore:()=>{_g(n,t.id),s(t.id)}})}catch(e){j(`Not re-run: ${e instanceof Error?e.message:`server unreachable`}.`)}},[n,e.id,e.from,o,s,i]),_e=(0,X.useCallback)(async()=>{f(!0);try{u((await n.cancel(e.id)).run)}catch{f(!1)}},[n,e.id]);if(!V)return(0,$.jsx)(rn,{id:`run-${e.id}`,title:Za(e.at)||`Run`,children:(0,$.jsx)(Ot,{label:`Run`,error:T,onRetry:()=>{E(null),O(e=>e+1)}})});let ve=V.progress,ye=ve.n??ve.total??0,be=!wo(V.status),xe=ve.total&&ye!=null&&be?Math.round(ye/ve.total*100):null,Se=Es(V,G),Ce=V.scenarios.map((e,t)=>Os(V,G,t)),we=be&&(d||To(l)),Te=fs(V,we),Ee=V.status===`running`&&V.progress.at!=null?V.progress.at:null,De=e=>`${V.items[e]}-${e}`,Oe=(e,t,n)=>{let r=Math.max(0,V.scenarios.findIndex((t,n)=>Fo(V,e,n))),i=(t.scenarios??[])[r]?.res;i&&b(Cs(V.snapshot,n,i,r))},ke=()=>{let e=Se.map(e=>Cs(V.snapshot,e.kase,e.res,e.scenarioIndex)).join(`
15
+
16
+ `+`-`.repeat(60)+`
17
+
18
+ `);b(e)},Ae=[S({tab:`results`,id:e.id}),...Se.length?[{label:`Copy all failures`,icon:Pe,onSelect:()=>void ke()}]:[],...l&&hg(l)?[{label:`Re-run`,icon:ei,onSelect:()=>void ge()}]:[],...l?[{label:`Export JSON`,icon:J.export,onSelect:()=>Zs(new Blob([JSON.stringify({exported:new Date().toISOString(),runs:[l]},null,2)],{type:`application/json`}),Xs(`run`,Za(e.at)||e.id,20,`json`))}]:[],{label:`Export PDF…`,icon:Kr,onSelect:()=>window.print()}],je={label:`Show`,value:e.show,onChange:t=>a(e.id,t),options:[{value:`all`,label:`All`},{value:`failed`,label:`Failed`}]},K=wo(V.status)&&!ue.current&&V.evals.some(e=>!!Y().casesRef(e)||!!e.group),Me={label:`Score`,value:R,onChange:e=>ee(e),options:[{value:`submitted`,label:`Submitted`},{value:`latest`,label:`Latest eval`}]},Ne=V.evals.find(e=>Y().casesRef(e))?.id??null,Fe=!!(V.content&&Y().CONTENT_TYPES[V.content.type]?.inline),Ie=V.scenarios.map((e,t)=>se?ry(V,t):e.name),Le=Ie.map((e,t)=>({name:e,replays:!!W[t]})),Re=e=>{let t=V.results[e]?.name;return t?me.get(t):void 0},ze=(e,t)=>{let n=V.evals.find(t=>t.id===e);return n?Zo(n,V.results[t]?.name,pe,G,U):[]},Be=V.scenarios.length>1&&(0,$.jsxs)(`tr`,{className:`scenstats`,children:[(0,$.jsx)(`td`,{className:`scenstats-label`,children:`Statistics`}),V.scenarios.map((e,t)=>(0,X.createElement)(`td`,{className:`scenstat`,"data-label":Ie[t],...ny(e.asked),key:e.id},(0,$.jsx)(ea,{dense:!0,label:`${e.name} statistics`,...us(V,t)})))]}),Ve=(e,t)=>{let n=le?.doc?.body;if(!U||!n||ce<0)return;let{body:r,taken:a}=Y().takeAsExpected(n,{[e]:Ko(V.results[t]?.scenarios?.[ce]?.res)});a.length?(j(null),te.edit(U,()=>r),i.offer({label:`Took ${e} as expected`,restore:()=>te.edit(U,()=>n)})):j(`Not taken: ${e} has no Variant B response to take.`)},q=(t,n,r,i)=>`run-${e.id}-grader-${t}-${n}-${r}-${i}`,He=e=>V.scenarios.flatMap((t,n)=>(V.outcomes[n]??[]).filter(e=>!e.whole).flatMap(t=>{let r=t.items[e];if(!r||Y().isSkipped(r)||!r.metrics?.length)return[];let i=Qo(r.metrics,ze(t.id,e));return r.metrics.flatMap((r,a)=>r.calls?.length?[{id:q(e,n,t.id,a),at:n,head:[`${r.label}${i[a]?` ${i[a]}`:``}`,Ie[n]??``].filter(Boolean).join(`, `),ms:r.asked??null,calls:r.calls}]:[])})),Ue=(e,t,n,r)=>{g.has(De(e))||_(new Set(g).add(De(e))),y(q(e,t,n,r))},We=(e,t)=>({dataset:t,resultFor:t=>V.results[e]?.scenarios?.[t]?.res??null,scenarioCount:V.scenarios.length,files:V.results.filter(e=>e.kind!==`text`).map(e=>e.name??``),onSaved:e=>F(t=>t.has(e)?t:new Set(t).add(e))}),Ge=e=>{if(oe.length>1){L(e);return}let t=oe[0]?.id;t&&c(V.results[e]?.name??``,We(e,t))},Ke=t=>{let r=V.results[t],i=Re(t),a=!!r&&!r.unrun&&wo(V.status),o=!!i||!!r?.name&&P.has(r.name),s=Io({done:a,name:r?.name,hasCase:o,caseDatasets:oe.length}),l=[];if(s===`edit`&&U?l.push({label:`Edit eval case`,icon:J.edit,onSelect:()=>c(r.name,We(t,U))}):s===`add`&&l.push({label:`Add eval case`,icon:J.add,onSelect:()=>Ge(t)}),a&&se&&ce>=0&&r?.name){let e=r.name;l.push({label:`Take B as expected`,icon:Mt,onSelect:()=>Ve(e,t)})}return a&&V.id&&l.push({label:`Re-run row`,icon:k,onSelect:()=>void n.rerun(e.id,t).then(e=>u(e.run)).catch(()=>{})}),a&&i&&cy(V,t)&&l.push({label:`Copy as AI prompt`,icon:Pe,onSelect:()=>void Oe(t,r,i)}),l};return(0,$.jsxs)(`div`,{className:`runview`,children:[(0,$.jsxs)(rn,{id:`run-${e.id}`,title:V.name||Za(e.at),actions:Ae,children:[(0,$.jsxs)(`div`,{className:`runhead`,children:[Te&&(0,$.jsxs)(`span`,{className:`note run-queue`,children:[(0,$.jsx)(`span`,{className:`run-state`,children:Te.state}),Te.detail&&(Ee==null?(0,$.jsx)(`span`,{className:`run-item`,children:Te.detail}):(0,$.jsx)(`button`,{type:`button`,className:`link-btn run-item`,onClick:()=>document.querySelector(`#run-${e.id}-results tr[data-item="${Ee}"]`)?.scrollIntoView({block:`nearest`}),children:Te.detail}))]}),be&&(0,$.jsx)(`button`,{type:`button`,className:`ghost stop-btn`,disabled:we,"aria-busy":we||void 0,onClick:()=>void _e(),children:we?(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(dt,{}),`Stopping…`]}):(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(p,{size:14,"aria-hidden":`true`}),`Stop`]})})]}),be&&(0,$.jsx)(`div`,{className:`rrbar`,children:xe==null?(0,$.jsx)(`span`,{className:`rrprogress`,children:`Waiting`}):(0,$.jsxs)(`div`,{className:`rrmeter`,role:`progressbar`,"aria-valuenow":xe,"aria-valuemin":0,"aria-valuemax":100,children:[(0,$.jsx)(`div`,{className:`rrbarfill`,style:{width:`${xe}%`}}),(0,$.jsxs)(`span`,{className:`rrpct`,style:{"--pct":`${xe}%`},children:[xe,`%`]})]})}),l?.rerunOf&&(0,$.jsxs)(`p`,{className:`note rrorigin`,children:[`Re-run of`,` `,l.rerunOfAt?(0,$.jsx)(`a`,{href:`#`,onClick:t=>{t.preventDefault(),o(l.rerunOf,{at:l.rerunOfAt,from:e.from})},children:Za(l.rerunOfAt)}):`a cleared run`]}),V.error&&(0,$.jsx)(st,{tone:`error`,className:`rrstatus`,children:V.error}),A&&(0,$.jsx)(st,{tone:`error`,className:`rrstatus`,children:A}),(0,$.jsx)(`div`,{id:`run-${e.id}-stats`,className:`runstats`,children:(0,$.jsx)(ea,{label:`Run Statistics`,...cs(V,we)})})]}),se?(0,$.jsx)(rn,{id:`run-${e.id}-evals`,title:`Evals Summary`,children:(0,$.jsx)(ay,{id:`run-${e.id}-evals-t`,view:V,pinned:Be})}):(0,$.jsx)(uy,{id:`run-${e.id}-evals`,summary:Uo(V),scenarios:V.scenarios,pinned:Be,onScenario:w}),(0,$.jsxs)(rn,{id:`run-${e.id}-results`,title:`Results`,children:[(0,$.jsx)(ne,{noun:`results`,filters:[],quick:K?[je,Me]:je}),ue.current&&(0,$.jsx)(`p`,{className:`note`,children:`Graded against today's evals.`}),K&&R===`latest`&&!B.ready&&(0,$.jsxs)(`p`,{className:`note rrscoring`,children:[(0,$.jsx)(dt,{}),` Scoring…`]}),(0,$.jsx)(`div`,{className:`scrollx`,style:{"--scenarios":V.scenarios.length},children:(0,$.jsx)(x,{className:[se?`recorded`:``,`rrtable`].filter(Boolean).join(` `),defaultSort:null,label:`Results`,rows:V.items.map((e,t)=>t),rowKey:De,pinned:Ce.some(e=>e.length>0)&&U&&(0,$.jsx)(ly,{from:Za(e.at)||V.name,datasetId:U,failing:Ce,scenarios:V.scenarios,heads:Ie,items:V.items.length}),group:V.groups.length?{of:e=>V.rowStep[e]??``,cell:(e,t)=>{let n=V.groups.find(t=>t.step===e),r=Po(V,e);if(t.key===`item`)return(0,$.jsxs)(`span`,{className:`rrband`,children:[n?.source?(0,$.jsx)(`a`,{className:`rrband-name`,href:da({tab:`library`,section:`sources`,id:n.source}),children:n.name}):(0,$.jsx)(`span`,{className:`rrband-name`,children:n?.name}),(0,$.jsx)(`span`,{children:Qa(r.items,`item`)})]});let i=V.scenarios.findIndex((e,n)=>t.key===`scenario-${n}`),a=r.passed[i];return a?.ran?`${a.passed} of ${a.ran} passed`:null},after:t=>e.show===`failed`&&!V.rowStep.some((e,n)=>e===t&&cy(V,n))?(0,$.jsx)(`tr`,{className:`rrband-none`,children:(0,$.jsx)(`td`,{colSpan:1+V.scenarios.length,children:`(None failed)`})}):null}:void 0,rowProps:t=>({"data-item":t,"aria-busy":t===Ee||void 0,className:g.has(De(t))?`hasdetail`:void 0,hidden:e.show===`failed`&&!cy(V,t)}),expand:{placed:!0,open:g,onChange:_,can:e=>!!Vv(V.results[e],Le).length||!!He(e).length,label:(e,t)=>t?`Hide details`:`Show details`,detailProps:t=>({className:`rrdetail`,"data-detail":t,hidden:e.show===`failed`&&!cy(V,t)}),detail:e=>(0,$.jsx)(`div`,{className:`pane rrdetail-panel`,children:(0,$.jsx)(Gv,{stages:Vv(V.results[e],Le),graders:He(e)})})},columns:[{key:`item`,header:Fe?`Text`:`Item`,label:``,className:`col-item`,sort:e=>V.items[e]||``,cell:(e,t,n)=>{let r=V.results[e],i=V.items[e],a=my(V.items,e);return(0,$.jsxs)($.Fragment,{children:[r?.name&&!Fe&&Rc(r.name)?(0,$.jsx)(`button`,{type:`button`,className:`thumb`,"aria-label":`Open ${r.name}`,onClick:()=>h({name:r.name,at:e}),children:(0,$.jsx)(`img`,{src:gs(V,r.name,e),alt:``,loading:`lazy`,"data-name":r.name})}):null,(0,$.jsxs)(`div`,{className:`rritem`,children:[se&&r?.name?(0,$.jsx)(`button`,{type:`button`,className:`link-btn rrcall`,title:i||void 0,onClick:()=>N(e),children:i||``}):(0,$.jsx)(`div`,{className:`meta rrname`,title:i||void 0,children:i||``}),a&&(0,$.jsx)(`span`,{className:`rrloop`,children:a}),he.has(e)&&(0,$.jsx)(`span`,{className:`rrchanged`,role:`img`,"aria-label":`Verdict changed from submitted`,title:`Verdict changed from submitted`}),n,(0,$.jsx)(it,{actions:Ke(e),label:`${i||`row`} actions`})]})]})}},...V.scenarios.map((e,t)=>({key:`scenario-${t}`,header:(0,$.jsx)(ty,{name:Ie[t]??e.name,asked:e.asked}),label:Ie[t]??e.name,tdProps:()=>ny(e.asked),onHeader:()=>w(t),cell:e=>(0,$.jsx)(dy,{item:V.results[e],i:t,state:ps(V,e),readings:(V.outcomes[t]??[]).filter(e=>!e.whole).map(n=>({label:n.label,dataset:n.id===Ne,score:n.items[e]??null,metrics:ze(n.id,e),open:r=>Ue(e,t,n.id,r)}))})}))]})})]}),C!=null&&(0,$.jsx)(Qt,{run:V.snapshot,i:C,onClose:()=>w(null)}),M!=null&&(0,$.jsx)(oy,{view:V,x:M,evalId:Ne,onClose:()=>N(null)}),m&&(0,$.jsx)(gy,{src:_s(V,m.name,m.at),name:m.name,onClose:()=>h(null)}),I!=null&&(0,$.jsx)(ae,{kind:`Eval`,value:``,options:oe.map(e=>({id:e.id,label:e.name})),onPick:e=>c(V.results[I]?.name??``,We(I,e)),onClose:()=>L(null)})]})}var cy=(e,t)=>{let n=e.results[t];return!!n&&(!!n.unrun||(n.scenarios??[]).some((n,r)=>Fo(e,t,r)||!!n?.res?.error))};function ly({from:e,datasetId:t,failing:n,scenarios:r,heads:i,items:a}){let{showCases:o}=Ia(),{list:s}=zi(),c=s!==null&&!s.some(e=>e.id===t),l=r.length>1;return(0,$.jsxs)(`tr`,{className:`reasons`,children:[(0,$.jsx)(`td`,{className:`scenstats-label`,children:`Reasons`}),r.map((r,s)=>{let u=r.name,d=n[s]??[];return(0,$.jsx)(`td`,{className:`reasons-cell`,"data-label":i[s]??u,children:d.length===0?(0,$.jsx)(`span`,{className:`reasons-none`,children:`No failures`}):(0,$.jsx)(`ul`,{className:`reasons-list`,"aria-label":`${u} reasons`,children:d.map(n=>{let r=n.files.length,i=(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`span`,{className:`reason-n`,children:r}),(0,$.jsxs)(`span`,{className:`reason-t`,children:[n.label,n.note&&(0,$.jsxs)(`span`,{className:`reason-note`,children:[` `,n.note]})]})]});return(0,$.jsx)(`li`,{"data-group":n.key,style:{"--share":`${Math.round(r/Math.max(a,1)*100)}%`},children:c?(0,$.jsx)(`span`,{className:`reason`,children:i}):(0,$.jsx)(`a`,{className:`reason`,href:`#/library/datasets`,title:`${n.label}${n.note?` (${n.note})`:``}: open ${Qa(r,`eval case`)} in the Library`,"aria-label":`${n.label}: open ${Qa(r,`eval case`)} in the Library`,onClick:r=>{r.preventDefault(),o(t,n.files,`${e}${l?`, ${u}`:``}, ${n.label}`)},children:i})},n.key)})})},r.id)})]})}function uy({id:e,summary:t,scenarios:n,pinned:r,onScenario:i}){let a=[...t.rows.flatMap(e=>[{kind:`group`,group:e},...e.whole?[{kind:`whole`,group:e,pass:e.whole}]:[]]),...t.overall?[{kind:`overall`,...t.overall}]:[]],o=(e,t)=>e==null&&t==null?(0,$.jsx)(`span`,{className:`eg-none`,children:`—`}):(0,$.jsxs)(`span`,{className:`eg-cell`,children:[e!=null&&(0,$.jsx)(qe,{pass:e}),t!=null&&(0,$.jsxs)(`span`,{className:`eg-pct`,children:[t,`%`]})]});return(0,$.jsx)(rn,{id:e,title:`Evals Summary`,children:(0,$.jsx)(`div`,{className:`scrollx`,style:{"--scenarios":n.length},children:(0,$.jsx)(x,{className:`egtable`,label:`Evals Summary`,rows:a,rowKey:e=>e.kind===`group`?e.group.key:e.kind===`whole`?`${e.group.key}:whole`:`overall`,defaultSort:null,pinned:r,rowProps:e=>e.kind===`overall`?{className:`eg-overall`,"data-group":`overall`}:e.kind===`whole`?{className:`eg-metric`,"data-group":`${e.group.key}:whole`}:{"data-group":e.group.key},columns:[{key:`group`,header:`Eval`,label:``,role:`title`,sort:null,className:`col-eg`,cell:e=>e.kind===`group`?(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`span`,{className:`eg-name`,children:e.group.name}),e.group.version&&(0,$.jsxs)(`span`,{className:`eg-ver`,children:[` `,e.group.version]})]}):e.kind===`whole`?(0,$.jsx)(`span`,{className:`eg-metric-name`,children:`Whole run`}):(0,$.jsxs)(`span`,{className:`eg-overall-name`,children:[(0,$.jsx)(`span`,{className:`eg-name`,children:`Overall`}),` `,(0,$.jsx)(`span`,{className:`eg-rule`,children:e.label})]})},...n.map((e,t)=>({key:`scenario-${t}`,header:(0,$.jsx)(ty,{name:e.name,asked:e.asked}),label:e.name,tdProps:()=>ny(e.asked),onHeader:()=>i(t),cell:e=>{if(e.kind===`overall`)return o(e.pass[t]??null,e.pct[t]??null);let n=e.group.cells[t];return n?n.skipped?(0,$.jsx)(`span`,{className:`eg-none`,children:`Skipped`}):e.kind===`whole`?o(e.pass[t]??null):o(n.pass,n.pct):null}}))]})})})}function dy({item:e,i:t,state:n,readings:r}){if(n===`busy`)return(0,$.jsx)(dt,{});let i=e?.scenarios?.[t]?.res;return e?.unrun?(0,$.jsx)(`span`,{className:`err`,children:e.unrun}):i?(0,$.jsxs)($.Fragment,{children:[r.map((e,t)=>e.score&&(0,$.jsx)(fy,{reading:e,score:e.score},t)),(0,$.jsx)($v,{res:i})]}):n===`unreached`?(0,$.jsx)(`span`,{className:`note`,children:`(Not run)`}):null}function fy({reading:e,score:t}){let n=Y().isSkipped(t),r=!n&&t.metrics?.length?t:null,i=r?Qo(r.metrics,e.metrics):[],a=(r?.metrics??[]).map((t,n)=>({m:t,want:i[n]??null,open:t.calls?.length?()=>e.open(n):null})),o=a.filter(({m:e})=>e.weight!==0),s=a.filter(({m:e})=>e.weight===0),c=!n&&!!t.points&&t.pass,l=n?`Skipped`:t.pass?`Pass`:`Fail`;return(0,$.jsxs)(`div`,{className:`eval-block`,children:[(0,$.jsxs)(`div`,{className:`eval-head`,children:[(0,$.jsx)(`span`,{className:`eval-group`,children:e.label}),(0,$.jsx)(`span`,{className:`verdict ${l.toLowerCase()}`,children:l}),!n&&t.score!=null&&r&&(0,$.jsx)(`span`,{className:`metric-score`,children:hy(t.score,!!t.points)})]}),o.length>0&&(0,$.jsx)(py,{lines:o,spared:c}),s.length>0&&(0,$.jsxs)(`div`,{className:`watched`,children:[(0,$.jsx)(`b`,{children:`Watch`}),(0,$.jsx)(py,{lines:s,spared:!1})]})]})}function py({lines:e,spared:t}){return(0,$.jsx)(`ul`,{children:e.map(({m:e,want:n,open:r},i)=>{let a=(0,$.jsxs)($.Fragment,{children:[e.label,n&&` ${n}`]}),o=!r&&!e.pass&&!!Y().METRICS[e.type]?.graded,s=t&&!e.pass;return(0,$.jsxs)(`li`,{className:e.pass?`pass`:s?`nil`:`fail`,children:[s?(0,$.jsx)(`span`,{className:`mark nil`,role:`img`,"aria-label":`No points`,children:`–`}):(0,$.jsx)(qe,{pass:e.pass}),(0,$.jsxs)(`span`,{className:`metric-line`,children:[r?(0,$.jsx)(`button`,{type:`button`,className:`link-btn metric-open`,onClick:r,children:a}):(0,$.jsx)(`span`,{className:`metric-words`,children:a}),(r||o)&&e.reason&&(0,$.jsx)(`span`,{className:o?`metric-reason err`:`metric-reason`,children:e.reason})]})]},i)})})}function my(e,t){let n=e[t];if(n==null)return null;let r=0,i=0;return e.forEach((e,a)=>{e===n&&(r++,a<=t&&i++)}),r>1?`${i} of ${r}`:null}var hy=(e,t)=>{let n=Math.round(e*100)/100;return t?`${n} ${n===1?`point`:`points`}`:`${Math.round(e*100)}%`};function gy({src:e,name:t,onClose:n}){return(0,$.jsx)(Fe,{title:t||`Image`,onClose:n,dismiss:`Close`,children:(0,$.jsx)(`img`,{className:`lightbox-img`,src:e,alt:t})})}function _y(){let{tabs:e,focusedId:t,closeRun:n,focusRun:r,goBack:i}=za(),a=on(),o=(0,X.useId)(),s=e=>`${o}-tab-${e}`,c=`${o}-panel`,l=(0,X.useRef)(!1);(0,X.useEffect)(()=>{l.current&&t&&(l.current=!1,document.getElementById(s(t))?.focus())});let u=e.find(e=>e.id===t);if(!u)return null;let d=(t,i)=>{let a=e.length-1,o=t.key===`ArrowRight`?i===a?0:i+1:t.key===`ArrowLeft`?i===0?a:i-1:t.key===`Home`?0:t.key===`End`?a:null;if(o!==null){t.preventDefault();let n=e[o];r(n.id),document.getElementById(s(n.id))?.focus()}else t.key===`Delete`&&(t.preventDefault(),l.current=!0,n(e[i].id))};return(0,$.jsxs)(`div`,{className:`results`,role:`region`,"aria-label":`Open runs`,children:[(0,$.jsxs)(`div`,{className:`results-bar`,children:[(0,$.jsx)(`button`,{type:`button`,className:`ghost icon-btn rrback`,onClick:i,"aria-label":`Back`,children:(0,$.jsx)(tt,{size:18,"aria-hidden":`true`})}),(0,$.jsx)(`code`,{className:`rrcode`,children:Za(u.at)||`…`}),(0,$.jsx)(`div`,{className:`rtabs`,role:`tablist`,"aria-label":`Open runs`,children:e.map((e,i)=>{let a=e.id===t,o=Za(e.at)||`…`;return(0,$.jsxs)(`div`,{role:`presentation`,className:`rtab${a?` on`:``}`,children:[(0,$.jsx)(`button`,{type:`button`,role:`tab`,id:s(e.id),"aria-selected":a,"aria-controls":c,"aria-keyshortcuts":`Delete`,tabIndex:a?0:-1,className:`rname`,title:Za(e.at)||`run`,onClick:()=>r(e.id),onKeyDown:e=>d(e,i),children:o}),(0,$.jsx)(`button`,{type:`button`,className:`rx`,tabIndex:a?0:-1,"aria-label":`Close run ${o}`,onClick:()=>n(e.id),children:(0,$.jsx)(G,{size:14,"aria-hidden":`true`})})]},e.id)})})]}),(0,$.jsx)(`div`,{role:`tabpanel`,id:c,"aria-labelledby":s(u.id),children:(0,$.jsx)(sy,{tab:u,undo:a})}),(0,$.jsx)(Ye,{undo:a.undo,onUndo:a.undoNow,onDismiss:a.dismiss})]})}function vy(){return(0,$.jsx)(_t,{store:Ri()})}function yy(){return(0,$.jsx)(_t,{store:ml()})}var by=`promptlab.theme`,xy=typeof matchMedia==`function`?matchMedia(`(prefers-color-scheme: light)`):null;function Sy(){try{let e=JSON.parse(localStorage.getItem(by)||`null`)?.choice;return e===`light`||e===`dark`?e:null}catch{return null}}var Cy=()=>Sy()??`system`,wy=()=>Sy()??(xy?.matches?`light`:`dark`),Ty=()=>{let e=wy();return document.documentElement.setAttribute(`data-theme`,e),e};Ty();function Ey(e){try{e===`system`?localStorage.removeItem(by):localStorage.setItem(by,JSON.stringify({choice:e}))}catch{}Ty()}function Dy(){let[e,t]=(0,X.useState)(Cy);return(0,X.useEffect)(()=>{let e=()=>{Ty(),t(Cy())};return xy?.addEventListener?.(`change`,e),()=>xy?.removeEventListener?.(`change`,e)},[]),[e,e=>{Ey(e),t(e)}]}var Oy=()=>{let{route:e,rewrite:t}=la(location.hash);return t&&history.replaceState(null,``,t),ca(e),e};function ky(){return(0,$.jsx)(Et,{children:(0,$.jsx)(Li,{children:(0,$.jsx)(pl,{children:(0,$.jsx)(Ki,{children:(0,$.jsx)(Ra,{children:(0,$.jsx)(Fa,{children:(0,$.jsx)(Jc,{children:(0,$.jsx)(zp,{children:(0,$.jsx)(dc,{children:(0,$.jsx)(Ay,{})})})})})})})})})})}function Ay(){let[e,t]=(0,X.useState)(Oy),n=(0,X.useRef)(e);n.current=e;let{hide:r,tabs:i,focusedId:a,openRun:o,focusRun:s}=za(),c=(0,X.useRef)(i);c.current=i;let l=cc(),u=Z(),d=on();(0,X.useEffect)(()=>{let e=()=>{let e=Oy();t(e),e.tab!==`results`&&r()};return window.addEventListener(`hashchange`,e),()=>window.removeEventListener(`hashchange`,e)},[r]);let f=e.tab===`results`?e.id:null;if((0,X.useEffect)(()=>{if(!f)return;if(c.current.some(e=>e.id===f)){s(f);return}let e=!0;return u.run(f).then(t=>{e&&o(f,{at:t.submittedAt,from:`history`})},t=>{e&&(t instanceof Nn&&t.status===404?(pa({tab:`history`}),d.notify({label:nc(`run`,f,l.current)})):o(f,{from:`history`}))}),()=>{e=!1}},[f,u,o,s,d.notify,l.current]),(0,X.useEffect)(()=>{let e=n.current;a&&(e.tab!==`results`||e.id!==a)&&fa({tab:`results`,id:a})},[a]),(0,X.useEffect)(()=>{document.title=l.current?`${l.current.name}, Evals Lab`:`No workspace, Evals Lab`},[l.current]),(0,X.useEffect)(()=>{let e=ac();e&&d.offer({label:`Archived ${e.name}`,restore:()=>u.unarchiveWorkspace(e.id).then(()=>{location.assign(tc(e.slug))})})},[]),!l.current)return(0,$.jsx)(Py,{ws:l});let p=e.tab===`results`?i.find(t=>t.id===e.id)?.from??`history`:e.tab,m=qs.find(e=>e.id===p),h=l.current.archived;return(0,$.jsxs)(`div`,{className:`app`,children:[(0,$.jsxs)(`header`,{className:`app-head`,children:[(0,$.jsx)(`h1`,{children:(0,$.jsx)(`a`,{className:`app-home`,href:da({tab:`home`}),children:`Evals Lab`})}),(0,$.jsx)(Iy,{}),(0,$.jsx)(vy,{}),(0,$.jsx)(yy,{}),(0,$.jsx)(jy,{}),(0,$.jsx)(It,{}),(0,$.jsx)(My,{ws:l})]}),(0,$.jsx)(Zt,{}),(0,$.jsx)(Ye,{undo:d.undo,notice:d.notice,onUndo:d.undoNow,onDismiss:d.dismiss}),h&&(0,$.jsx)(Ny,{id:l.current.id}),(0,$.jsx)(jt,{label:`Lab`,className:`app-tabs`,current:p,items:qs.map(e=>({key:e.id,label:e.label,href:`#/${e.id}`,icon:e.icon}))}),(0,$.jsx)(Fy,{tab:m,route:e,readOnly:h})]})}function jy(){let{cancel:e}=Bp(),t=Vp();return t?(0,$.jsx)(Gt,{name:t.entry.title,done:t.done,total:t.total,current:t.current,steps:t.entry.steps.map((e,n)=>({title:e.title,done:t.ticks[n]})),onOpen:()=>fa({tab:`home`,guide:t.entry.id}),onCancel:e}):null}function My({ws:e}){let t=Z(),[n,r]=Dy(),[i,a]=(0,X.useState)(!1),o=e.list.filter(e=>!e.archived).map(e=>({id:e.id,slug:e.slug,name:e.name})),s=async e=>{try{let n=await t.createWorkspace(e);n.workspace&&location.assign(tc(n.workspace.slug))}catch{}};return(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(ve,{current:e.current?{id:e.current.id,slug:e.current.slug,name:e.current.name}:null,workspaces:o,onSwitch:e.switchTo,onNew:()=>a(!0),onManage:()=>fa({tab:`setup`,section:`workspaces`,id:null}),theme:n,onTheme:r}),i&&(0,$.jsx)(Y_,{onCreate:e=>void s(e),onClose:()=>a(!1)})]})}function Ny({id:e}){let t=Z(),[n,r]=(0,X.useState)(!1),i=async()=>{r(!0);try{await t.unarchiveWorkspace(e),location.reload()}catch{r(!1)}};return(0,$.jsxs)(`div`,{className:`pane ws-archived-bar`,role:`status`,children:[(0,$.jsx)(`span`,{children:`This workspace is archived — read-only until you unarchive it.`}),(0,$.jsxs)(`button`,{type:`button`,className:`ghost`,disabled:n,onClick:()=>void i(),children:[(0,$.jsx)(Hn,{size:14,"aria-hidden":`true`}),`Unarchive`]})]})}function Py({ws:e}){let t=oc(e.list);return(0,$.jsxs)(`div`,{className:`app`,children:[(0,$.jsxs)(`header`,{className:`app-head`,children:[(0,$.jsx)(`h1`,{children:`Evals Lab`}),(0,$.jsx)(My,{ws:e})]}),(0,$.jsxs)(`main`,{className:`ws-gone`,children:[(0,$.jsxs)(st,{tone:`error`,children:[`No workspace at `,(0,$.jsxs)(`code`,{children:[`/w/`,e.requestedSlug]}),`.`]}),t&&(0,$.jsxs)(`button`,{type:`button`,onClick:()=>e.switchTo(t.slug),children:[`Open `,t.name]})]})]})}function Fy({tab:e,route:t,readOnly:n}){let{focusedId:r}=za(),i=r?(0,$.jsx)(_y,{}):e.id===`home`?(0,$.jsx)(em,{guide:t.tab===`home`?t.guide??null:null}):e.id===`runs`?(0,$.jsx)(Jh,{pipelineId:t.tab===`runs`?t.id:null}):e.id===`history`?(0,$.jsx)(Tg,{...t.tab===`history`?{section:t.section,pipeline:t.pipeline,content:t.content}:{}}):t.tab===`library`?(0,$.jsx)(Np,{section:t.section,id:t.id}):t.tab===`setup`?(0,$.jsx)(tv,{section:t.section,id:t.id,...t.kind?{kind:t.kind}:{}}):null,a=n&&e.id!==`setup`;return(0,$.jsx)(`main`,{"data-tab":e.id,inert:a,children:i})}function Iy(){let{sync:e,resolve:t}=Si();return(0,$.jsx)(He,{lines:e.state===`offline`?[{key:`offline`,text:`Not saved to the server: ${e.message}. Kept in this browser.`}]:e.state===`superseded`?[{key:`superseded`,text:`Data conflict: ${e.keys.map(Ry).join(`, `)}.`,actions:[{label:`Keep this tab's data`,onSelect:()=>void t(`mine`)}]}]:[]})}var Ly={"promptlab.connections":`Connections`,"promptlab.connectionProfiles":`Connection profiles`,"promptlab.tokens":`Tokens`,"promptlab.workflows":`Experiments`,"promptlab.versions":`Change history`},Ry=e=>Ly[e]??e,zy=`promptlab.sync`,By=new Set([`promptlab.workflows`,`promptlab.versions`,zy]),Vy=e=>typeof e==`object`&&!!e&&!Array.isArray(e),Hy=(e,t)=>{let n=Ng[e];return Vy(n)&&Vy(t)?{...n,...t}:t};function Uy({api:e,storage:t,server:n,workspace:r,pause:i=800}){let a=e=>r&&By.has(e)?`${e}@${r}`:e,o=e=>{try{return t.getItem(a(e))}catch{return null}},s=new Map,c=(e,n)=>{s.delete(e);try{n==null?t.removeItem(a(e)):t.setItem(a(e),JSON.stringify(n))}catch{}s.set(e,n??null)},l=e=>{try{return JSON.parse(o(e)??`null`)}catch{return null}},u=(e,t)=>o(e)===(t==null?null:JSON.stringify(t)),d=n!==null,f=l(zy)??{},p={},m=new Set,h=()=>c(zy,{versions:p,dirty:[...m]}),g=new Set,_=()=>g.forEach(e=>e()),v=d?{state:`saved`}:{state:`local`},y=null,b=null,x=e=>{v=e,_()};if(n){for(let e of Fg){let t=n[e];t&&u(e,t.body)?p[e]=t.version:f.dirty?.includes(e)?(p[e]=f.versions?.[e]??0,m.add(e)):t?(p[e]=t.version,c(e,t.body)):(p[e]=0,o(e)!=null&&m.add(e))}h()}async function S(t=!1){if(!d)return;if(!m.size){v.state===`saving`&&x({state:`saved`});return}let n=[...m],r=Object.fromEntries(n.map(e=>[e,{version:p[e]??0,body:l(e)}]));x({state:`saving`});try{let{versions:i}=await e.writeState(r,t);Object.assign(p,i);for(let e of n)u(e,r[e].body)&&m.delete(e);if(h(),x({state:`saved`}),m.size)return S(t)}catch(e){if(e instanceof Nn&&e.status===409){let n=e.body?.stale??{};for(let[e,t]of Object.entries(n))p[e]=t.version;let r=Object.keys(n).filter(e=>!u(e,n[e].body));for(let e of Object.keys(n))r.includes(e)||m.delete(e);for(let e of r)C[e]=l(e),c(e,n[e].body),m.delete(e);h(),m.size&&await S(t),r.length?x({state:`superseded`,keys:r}):v.state===`saving`&&x({state:`saved`});return}x({state:`offline`,message:e instanceof Error?e.message:String(e)})}}let C={};function w(e=!1){return y&&=(clearTimeout(y),null),b??=S(e).finally(()=>{b=null}),b}return m.size&&(y=setTimeout(()=>{w()},0)),{get(e){return s.has(e)||s.set(e,Hy(e,l(e))),s.get(e)??Ng[e]},set(e,t){c(e,t),d&&Fg.includes(e)&&(v.state===`superseded`&&(C={},x({state:`saved`})),m.add(e),h(),y&&clearTimeout(y),y=setTimeout(()=>{w()},i)),_()},subscribe(e){return g.add(e),()=>{g.delete(e)}},sync:()=>v,async resolve(e){if(v.state!==`superseded`)return;let t=v.keys;if(e===`mine`){for(let e of t)c(e,C[e]??null),m.add(e);h()}C={},x({state:`saved`}),await w()},flush:w,async refresh(){if(!d)return;await w();let{docs:t}=await e.state(),n=!1;for(let e of Fg){let r=t[e];!r||m.has(e)||r.version<=(p[e]??0)||(p[e]=r.version,c(e,r.body),n=!0)}n&&(h(),_())}}}var Wy=e=>[1,2,3,4,5,6,7,8,9,10].includes(e?.version)||Y().fatProfileRef(e),Gy=e=>e?.version===1||e?.version===2;function Ky(e){let t=[...e.get(`promptlab.workflows`).list.map(e=>e.work),...Object.values(e.get(`promptlab.versions`).pipeline??{}).flat().map(e=>e.doc)].filter(Gy).map(e=>e?.tests?.type===`graded`?e.tests.dataset?.id:void 0);return[...new Set(t.filter(e=>!!e))]}function qy(e){let t=[...e.get(`promptlab.workflows`).list.map(e=>e.work),...Object.values(e.get(`promptlab.versions`).pipeline??{}).flat().map(e=>e.doc)].filter(e=>e?.version===17).map(e=>{let t=Y().contentOf(e);return t?.type===`source`&&t.live!==!0&&t.pin==null?t.ref.id:void 0});return[...new Set(t.filter(e=>!!e))]}function Jy(e,t={},n){let r=Y().answersOf(e.get(`promptlab.connections`).list,e.get(`promptlab.connectionProfiles`).list),i={rulesFor:e=>t[e]??null,profileType:e=>r.connection(e)?.type,connectionSplit:r.split,...n?{pinFor:n}:{}},a=e=>Y().upgradePipeline(e,i),o=e=>Wy(e)||a(e)!==e,s=e.get(`promptlab.workflows`);s.list.some(e=>o(e.work))&&e.set(`promptlab.workflows`,{...s,list:s.list.map(e=>({...e,work:a(e.work)}))});let c=e.get(`promptlab.versions`),l=c.pipeline??{};Object.values(l).some(e=>e.some(e=>o(e.doc)))&&e.set(`promptlab.versions`,{...c,pipeline:Object.fromEntries(Object.entries(l).map(([e,t])=>[e,t.map(e=>({...e,doc:a(e.doc)}))]))})}function Yy(e,t){let n=e=>t.list.find(t=>t.fromProfile===e)??null;return{...e,list:e.list.map(e=>Y().mergeAnswer(e,n(e.id)))}}function Xy(e,t){let n=Y(),r=new Map(e.list.map(e=>[e.id,n.splitProfile(e)])),i=e=>{let{id:t,name:n,fromProfile:i,...a}=r.get(e)?.profile??{};return a},a=[],o=new Set;for(let n of t.list){if(!n.fromProfile){a.push(n);continue}let t=e.list.find(e=>e.id===n.fromProfile);t&&(o.add(n.fromProfile),a.push({id:n.id,name:t.name,fromProfile:n.fromProfile,...n.connection?{connection:n.connection}:{},...i(t.id)}))}for(let t of e.list){let e=r.get(t.id)?.profile;!o.has(t.id)&&e&&a.push(e)}let{list:s,split:c,...l}=e;return{connections:{...l,list:e.list.map(e=>r.get(e.id).connection)},connectionProfiles:{list:a}}}var Zy=e=>Yy(e.get(`promptlab.connections`),e.get(`promptlab.connectionProfiles`));function Qy(e,t){let n=e.get(`promptlab.connectionProfiles`),r=Xy(t,n);e.set(`promptlab.connections`,r.connections),JSON.stringify(r.connectionProfiles)!==JSON.stringify(n)&&e.set(`promptlab.connectionProfiles`,r.connectionProfiles)}function $y(e,t){let n=Y();if(t)try{let r=JSON.parse(t);Array.isArray(r?.list)&&Qy(e,{list:r.list.map(e=>n.pinReplyTokens(`profile`in e?n.convertProfile(e):e)),at:r.at??``,...r.grader?{grader:r.grader}:{}})}catch{}let r=Zy(e),i=e=>n.splitOllama(`profile`in e?n.convertProfile(e):e);r.list.some(e=>i(e)!==e)&&Qy(e,{...r,list:r.list.map(i)});let a=e.get(`promptlab.connections`),o=Y().withSlugs(a.list);o!==a.list&&e.set(`promptlab.connections`,{...a,list:o})}async function eb(e){let t=document.getElementById(`labstate`)?.textContent;if(t)try{return JSON.parse(t).docs??null}catch{return null}try{return(await e.state()).docs}catch{return null}}function tb(){let e=location.pathname.match(/^\/w\/([^/]+)/);return e?decodeURIComponent(e[1]):null}async function nb(){if(Y(),new URLSearchParams(location.search).has(`resetGuides`)){try{localStorage.removeItem(`promptlab.guidesDismissed`)}catch{}history.replaceState(history.state,``,location.pathname+location.hash)}let e=tb(),t=Rn(void 0,e?`/w/${encodeURIComponent(e)}`:``),n=()=>{},r=new Promise(e=>{n=e});if(/^#\/?history\/?$/.test(location.hash)&&t.askQueue({limit:25},r),dd())try{let e=(await t.config()).microsoft;e&&await fd(e)}catch{}if(gd())try{let e=(await t.config()).microsoft;if(e){await _d(e);return}}catch{}await Mn(t),n();let i=await t.workspaces().then(e=>e.workspaces,()=>[]),a=i.find(e=>e.isDefault)?.slug??`default`,o=e?i.find(t=>t.slug===e):i.find(e=>e.isDefault),s=o?{id:o.id,slug:o.slug,name:o.name,archived:o.archived,isDefault:o.isDefault}:null,c={current:s,requestedSlug:e,list:i,switchTo:e=>{location.assign(tc(e))}};document.title=s?`${s.name}, Evals Lab`:`No workspace, Evals Lab`;let l=await eb(t),u=Uy({api:t,storage:localStorage,server:l,workspace:s?.slug??a});$y(u,l||localStorage.getItem(`promptlab.connections`)?null:localStorage.getItem(`promptlab.profiles`));let d={};if(Ky(u).length)try{d=(await t.archivedRules()).rules}catch{}let f=new Map,p=qy(u);if(p.length)try{let{sources:e}=await t.sources();await Promise.all(e.filter(e=>p.includes(e.id)&&e.type===`dynamic`&&Y().DYNAMIC_PROVIDERS[e.provider??``]?.tier!==`supplied`).map(async e=>{let{responses:n}=await t.sourceResponses(e.id);f.set(e.id,{holds:e.files>0,pin:Rf(n)})}))}catch{}Jy(u,d,(e,t)=>{let n=f.get(e);return n&&(t??!n.holds)===!1?n.pin:void 0}),addEventListener(`pagehide`,()=>{u.flush(!0)}),(0,En.createRoot)(document.getElementById(`root`)).render((0,$.jsx)(X.StrictMode,{children:(0,$.jsx)(yi.Provider,{value:u,children:(0,$.jsx)(Dn.Provider,{value:t,children:(0,$.jsx)(sc.Provider,{value:c,children:(0,$.jsx)(ky,{})})})})}))}nb();