@llmops/app 0.1.5 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.vite/manifest.json +337 -298
- package/dist/assets/{Form-B1rZ0Hvr.js → Form-Bh6BPtQ_.js} +1 -1
- package/dist/assets/{InternalBackdrop-CXjGP6a9.js → InternalBackdrop-Za9lpJi7.js} +1 -1
- package/dist/assets/_environment-COxSWJ9w.js +1 -0
- package/dist/assets/_observability-C8wSXZk2.js +1 -0
- package/dist/assets/{_observability-DPSeR4-h.css → _observability-CBX-o26D.css} +1 -1
- package/dist/assets/{_settings-Bv8acMq8.js → _settings-DOmj1R7I.js} +1 -1
- package/dist/assets/{_tabs-Bi-rsAVV.js → _tabs-D9USU0yw.js} +1 -1
- package/dist/assets/{_tabs-oKfgxR5m.js → _tabs-DaucGqpx.js} +1 -1
- package/dist/assets/{_variant-Zg5HjNSN.js → _variant-DxME2BL0.js} +2 -2
- package/dist/assets/{_variants-B36Lo8m_.js → _variants-Bjp8ZEvO.js} +1 -1
- package/dist/assets/{area.css-DTnbbu5M.js → area.css-CSjofvHM.js} +1 -1
- package/dist/assets/{button-DftzA6-1.js → button-CMZqhyXB.js} +1 -1
- package/dist/assets/check-D9E8RKB4.js +1 -0
- package/dist/assets/{chevron-down-BjDiaa62.js → chevron-down-BJFxhYkh.js} +1 -1
- package/dist/assets/{chevron-right-Dz77YeP_.js → chevron-right-fMWRsRLZ.js} +1 -1
- package/dist/assets/combobox-iSbUYz0A.js +1 -0
- package/dist/assets/configs-BflhBVlY.js +1 -0
- package/dist/assets/{copy-D-DZB-6Z.js → copy-DADLeZ69.js} +1 -1
- package/dist/assets/costs-Fh0OPnEw.js +1 -0
- package/dist/assets/environments-ChldQPyq.js +1 -0
- package/dist/assets/{getDisabledMountTransitionStyles-CKUvhO4q.js → getDisabledMountTransitionStyles-TZFYxPIU.js} +1 -1
- package/dist/assets/{index-BS3B2BG5.js → index-BDsrc1Q7.js} +1 -1
- package/dist/assets/{index-BiCR_Kj2.css → index-BFe2NM3q.css} +1 -1
- package/dist/assets/{index-D841new6.js → index-BWU02PnY.js} +1 -1
- package/dist/assets/{index-xdhK5tU9.js → index-Cns5MLjo.js} +1 -1
- package/dist/assets/{index-CnOYeKc1.js → index-DW-cTzEh.js} +1 -1
- package/dist/assets/{index-CpAxLUl2.js → index-DYoud8po.js} +1 -1
- package/dist/assets/{index-DvzXLQL6.js → index-DeuSY0Yv.js} +1 -1
- package/dist/assets/{index-BCY9aD4r.js → index-FrTQ7TcS.js} +3 -3
- package/dist/assets/index.esm-oCSEvUVx.js +1 -0
- package/dist/assets/info-box.css-DuVI9M9-.js +1 -0
- package/dist/assets/{llmops-C5uyvq6E.js → llmops-CdOQq40D.js} +1 -1
- package/dist/assets/{observability-C5jdcUSg.css → observability-DEEfw22p.css} +1 -1
- package/dist/assets/observability.css-wgjHtY3p.js +1 -0
- package/dist/assets/overview-D1QIYPBL.js +33 -0
- package/dist/assets/{plus-C_L0BpbU.js → plus-JQ0TORpd.js} +1 -1
- package/dist/assets/{popover-CSR0ctop.js → popover-DXj4s-ni.js} +1 -1
- package/dist/assets/popupStateMapping-DolkyTT3.js +1 -0
- package/dist/assets/requests-CzvYwfwV.js +1 -0
- package/dist/assets/reselect-DVmmTZGf.js +1 -0
- package/dist/assets/{route-vfMzB8KR.js → route-CjAw8hSU.js} +1 -1
- package/dist/assets/{route-CI77gokb.js → route-Df57lqxl.js} +1 -1
- package/dist/assets/{route-wrnLt3bn.js → route-DmWZbVk6.js} +1 -1
- package/dist/assets/{route-CZ2yCnzN.js → route-timDYxX2.js} +1 -1
- package/dist/assets/{secrets-B9u5jvFm.js → secrets-BxFGEuKj.js} +1 -1
- package/dist/assets/settings-DpSRw7LL.js +1 -0
- package/dist/assets/settings-pgWZnVf6.js +1 -0
- package/dist/assets/{table-xLf4iXV8.js → table-DggTSlPh.js} +1 -1
- package/dist/assets/{tabs.css-fttLH8Xj.js → tabs.css-CG5ugi0p.js} +1 -1
- package/dist/assets/{targeting-DZIwwaYV.js → targeting-CkqRTjnZ.js} +1 -1
- package/dist/assets/{tooltip-BKoDpdAC.js → tooltip-BuSsMQ8P.js} +1 -1
- package/dist/assets/{update-or-create-name-ChWLK2jI.js → update-or-create-name-B-M46wHl.js} +1 -1
- package/dist/assets/useAnalytics-DTf81POS.js +1 -0
- package/dist/assets/useButton-CsZ8hBM8.js +1 -0
- package/dist/assets/{useConfigList-Du__Gu7q.js → useConfigList-CAf01_dV.js} +1 -1
- package/dist/assets/{useConfigVariants-C8frrCcZ.js → useConfigVariants-CLc_hPw1.js} +1 -1
- package/dist/assets/{useEnvironments-CYkrqAdO.js → useEnvironments-Bu_0SIUj.js} +1 -1
- package/dist/assets/{useFocus-Du1aH2j1.js → useFocus-9TCY0h5x.js} +1 -1
- package/dist/assets/{useMutation-VUB-GXkv.js → useMutation-D4JglXWk.js} +1 -1
- package/dist/assets/{usePopupAutoResize-ddPHogUJ.js → usePopupAutoResize-D6RSlB-m.js} +1 -1
- package/dist/assets/{useRole-DP91D1OX.js → useRole-CiSaVva3.js} +1 -1
- package/dist/assets/useSetTargeting-bk0Ixhqq.js +1 -0
- package/dist/assets/{useSyncedFloatingRootContext-BzuhbdSw.js → useSyncedFloatingRootContext-BKbVh8Gq.js} +1 -1
- package/dist/assets/{useTargetingRules-DS57orU0.js → useTargetingRules-BrgaEdxR.js} +1 -1
- package/dist/assets/{useValueChanged-vz8uKgCk.js → useValueChanged-CTjBqaGs.js} +1 -1
- package/dist/assets/{user-profile-Bt3_D9Gr.js → user-profile-BB3dPOc5.js} +1 -1
- package/dist/assets/{variants-CYXSNKzX.js → variants-BH682hHM.js} +1 -1
- package/dist/assets/variants.css-rCWHZycz.js +1 -0
- package/dist/assets/{workspace-general-BRMpUqb-.js → workspace-general-DYXfOF9H.js} +1 -1
- package/dist/index.cjs +82 -14
- package/dist/index.mjs +82 -14
- package/package.json +4 -3
- package/dist/assets/_environment-zVjmOhBI.js +0 -1
- package/dist/assets/_observability-CQ4Ll_WT.js +0 -1
- package/dist/assets/check-PaWYhFn6.js +0 -1
- package/dist/assets/configs-CtNuMmVR.js +0 -1
- package/dist/assets/costs-DwVSRTwW.js +0 -1
- package/dist/assets/environments-BB95BiC0.js +0 -1
- package/dist/assets/index.esm-COTq2pHX.js +0 -1
- package/dist/assets/info-box.css-HIaMvhbC.js +0 -1
- package/dist/assets/observability.css-dztiak5K.js +0 -1
- package/dist/assets/overview-BwCF8A1G.js +0 -1
- package/dist/assets/popupStateMapping-DkOpwBhG.js +0 -1
- package/dist/assets/requests-D8wE_E2M.js +0 -1
- package/dist/assets/settings-24qWHZEq.js +0 -1
- package/dist/assets/settings-BLt538aO.js +0 -1
- package/dist/assets/useButton-Ct8hIyjz.js +0 -1
- package/dist/assets/useSetTargeting-D1rPM8vz.js +0 -1
- package/dist/assets/variants.css-BjGKD3Nv.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as n}from"./index-
|
|
1
|
+
import{r as n}from"./index-FrTQ7TcS.js";import{J as T,ah as W,I as C}from"./popupStateMapping-DolkyTT3.js";import{E as F}from"./useButton-CsZ8hBM8.js";const R="ArrowUp",E="ArrowDown",S="ArrowLeft",I="ArrowRight",A="Home",w="End",H=new Set([S,I]),N=new Set([R,E]),Y=new Set([...H,...N]);[...Y];const J=new Set([R,E,S,I,A,w]),h=new Map([["select","listbox"],["combobox","listbox"],["label",!1]]);function U(c,O={}){const s="rootStore"in c?c.rootStore:c,a=s.useState("open"),u=s.useState("floatingId"),M=s.useState("domReferenceElement"),d=s.useState("floatingElement"),{enabled:m=!0,role:o="dialog"}=O,x=T(),l=M?.id||x,t=n.useMemo(()=>W(d)?.id||u,[d,u]),e=h.get(o)??o,p=C()!=null,i=n.useMemo(()=>e==="tooltip"||o==="label"?F:{"aria-haspopup":e==="alertdialog"?"dialog":e,"aria-expanded":"false",...e==="listbox"&&{role:"combobox"},...e==="menu"&&p&&{role:"menuitem"},...o==="select"&&{"aria-autocomplete":"none"},...o==="combobox"&&{"aria-autocomplete":"list"}},[e,p,o]),f=n.useMemo(()=>e==="tooltip"||o==="label"?{[`aria-${o==="label"?"labelledby":"describedby"}`]:a?t:void 0}:{...i,"aria-expanded":a?"true":"false","aria-controls":a?t:void 0,...e==="menu"&&{id:l}},[e,t,a,l,o,i]),b=n.useMemo(()=>{const r={id:t,...e&&{role:e}};return e==="tooltip"||o==="label"?r:{...r,...e==="menu"&&{"aria-labelledby":l}}},[e,t,l,o]),g=n.useCallback(({active:r,selected:_})=>{const P={role:"option",...r&&{id:`${t}-fui-option`}};switch(o){case"select":case"combobox":return{...P,"aria-selected":_}}return{}},[t,o]);return n.useMemo(()=>m?{reference:f,floating:b,item:g,trigger:i}:{},[m,f,b,i,g])}export{S as A,J as C,w as E,A as H,E as a,I as b,R as c,U as u};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{l as o,a as n,t as i,H as c,i as r,g as u}from"./index-FrTQ7TcS.js";import{u as v}from"./useMutation-D4JglXWk.js";import{g as p}from"./useTargetingRules-BrgaEdxR.js";const y=[["path",{d:"M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z",key:"1c8476"}],["path",{d:"M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7",key:"1ydtos"}],["path",{d:"M7 3v4a1 1 0 0 0 1 1h7",key:"t51u73"}]],V=o("save",y);var w="_1oq6p8e0",h="_1oq6p8e1",I="_1oq6p8e3",Q="_1oq6p8e4",k="_1oq6p8e5",C="_1oq6p8e6",H="_1oq6p8e7",$="_1oq6p8e8",b="_1oq6p8e9";const d=e=>["variant-versions",e],m=e=>c({queryKey:d(e),queryFn:async()=>{const a=await(await r.v1.variants[":id"].versions.$get({param:{id:e}})).json();return"data"in a?a.data:[]},enabled:!!e,staleTime:1e3*60*5}),F=e=>{const t=n.c(2);let a;return t[0]!==e?(a=m(e),t[0]=e,t[1]=a):a=t[1],i(a)},K=()=>{const e=n.c(2),t=u();let a;return e[0]!==t?(a={mutationFn:g,onSuccess:(l,s)=>{t.invalidateQueries({queryKey:p(s.configId)})}},e[0]=t,e[1]=a):a=e[1],v(a)};async function g(e){const t=await r.v1.targeting.set.$post({json:{environmentId:e.environmentId,configId:e.configId,configVariantId:e.configVariantId,variantVersionId:e.variantVersionId}}),a=await t.json();if(!t.ok||!("data"in a))throw new Error("message"in a?a.message:"Failed to set targeting");return a.data}export{V as S,k as a,b,C as c,Q as d,F as e,w as f,d as g,h,I as i,$ as m,K as u,H as v};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as f}from"./index-
|
|
1
|
+
import{r as f}from"./index-FrTQ7TcS.js";import{a as T,u as m,E as p,b as S,n as C}from"./useButton-CsZ8hBM8.js";import{ai as x,s as I,aj as E,P as O,d as i,J as P,I as R}from"./popupStateMapping-DolkyTT3.js";function y(e,n){const t=f.useRef(null);return f.useCallback(o=>{e!==void 0&&(t.current!==null&&(n.context.triggerElements.delete(t.current),t.current=null),o!==null&&(t.current=e,n.context.triggerElements.add(e,o)))},[n,e])}function F(e,n,t,o){const r=t.useState("isMountedByTrigger",e),l=y(e,t),s=T(a=>{l(a),a!==null&&t.select("open")&&t.select("activeTriggerId")==null&&t.update({activeTriggerId:e,activeTriggerElement:a,...o})});return m(()=>{r&&t.update({activeTriggerElement:n.current,...o})},[r,t,n,...Object.values(o)]),{registerTrigger:s,isMountedByThisTrigger:r}}function w(e){const n=e.useState("open");m(()=>{if(n&&!e.select("activeTriggerId")&&e.context.triggerElements.size===1){const t=e.context.triggerElements.entries().next();if(!t.done){const[o,r]=t.value;e.update({activeTriggerId:o,activeTriggerElement:r})}}},[n,e])}function U(e,n,t){const{mounted:o,setMounted:r,transitionStatus:l}=x(e);n.useSyncedValues({mounted:o,transitionStatus:l});const s=T(()=>{r(!1),n.update({activeTriggerId:null,activeTriggerElement:null,mounted:!1}),t?.(),n.context.onOpenChangeComplete?.(!1)}),a=n.useState("preventUnmountingOnClose");return I({enabled:!a,open:e,ref:n.context.popupRef,onComplete(){e||s()}}),{forceUnmount:s,transitionStatus:l}}function b(){return new E({open:!1,floatingElement:null,referenceElement:null,triggerElements:new O,floatingId:"",nested:!1,noEmit:!1,onOpenChange:void 0})}function A(){return{open:!1,mounted:!1,transitionStatus:"idle",floatingRootContext:b(),preventUnmountingOnClose:!1,payload:void 0,activeTriggerId:null,activeTriggerElement:null,popupElement:null,positionerElement:null,activeTriggerProps:p,inactiveTriggerProps:p,popupProps:p}}const j={open:i(e=>e.open),mounted:i(e=>e.mounted),transitionStatus:i(e=>e.transitionStatus),floatingRootContext:i(e=>e.floatingRootContext),preventUnmountingOnClose:i(e=>e.preventUnmountingOnClose),payload:i(e=>e.payload),activeTriggerId:i(e=>e.activeTriggerId),activeTriggerElement:i(e=>e.mounted?e.activeTriggerElement:null),isTriggerActive:i((e,n)=>n!==void 0&&e.activeTriggerId===n),isOpenedByTrigger:i((e,n)=>n!==void 0&&e.activeTriggerId===n&&e.open),isMountedByTrigger:i((e,n)=>n!==void 0&&e.activeTriggerId===n&&e.mounted),triggerProps:i((e,n)=>n?e.activeTriggerProps:e.inactiveTriggerProps),popupProps:i(e=>e.popupProps),popupElement:i(e=>e.popupElement),positionerElement:i(e=>e.positionerElement)};function k(e){const{popupStore:n,noEmit:t=!1,treatPopupAsFloatingElement:o=!1,onOpenChange:r}=e,l=P(),s=R()!=null,a=n.useState("open"),g=n.useState("activeTriggerElement"),c=n.useState(o?"popupElement":"positionerElement"),v=n.context.triggerElements,u=S(()=>new E({open:a,referenceElement:g,floatingElement:c,triggerElements:v,onOpenChange:r,floatingId:l,nested:s,noEmit:t})).current;return m(()=>{const d={open:a,floatingId:l,referenceElement:g,floatingElement:c};C(g)&&(d.domReferenceElement=g),u.update(d)},[a,l,g,c,u]),u.context.onOpenChange=r,u.context.nested=s,u.context.noEmit=t,u}export{w as a,U as b,A as c,F as d,y as e,j as p,k as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as l,t as o,i}from"./index-
|
|
1
|
+
import{a as l,t as o,i}from"./index-FrTQ7TcS.js";const p=t=>["targeting-rules",t],g=t=>{const e=l.c(8);let s;e[0]!==t?(s=p(t),e[0]=t,e[1]=s):s=e[1];let a;e[2]!==t?(a=async()=>{const u=await(await i.v1.targeting.config[":configId"].$get({param:{configId:t}})).json();return"data"in u?u.data:[]},e[2]=t,e[3]=a):a=e[3];const n=!!t;let r;return e[4]!==s||e[5]!==a||e[6]!==n?(r={queryKey:s,queryFn:a,enabled:n},e[4]=s,e[5]=a,e[6]=n,e[7]=r):r=e[7],o(r)};export{p as g,g as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r}from"./index-
|
|
1
|
+
import{r}from"./index-FrTQ7TcS.js";import{N as a,a as u,u as n}from"./useButton-CsZ8hBM8.js";const c=r.createContext({formRef:{current:{fields:new Map}},errors:{},clearErrors:a,validationMode:"onSubmit",submitAttemptedRef:{current:!1}});function m(){return r.useContext(c)}function C(e,s){const t=r.useRef(e),o=u(s);n(()=>{t.current!==e&&o(t.current)},[e,o]),n(()=>{t.current=e},[e])}export{c as F,m as a,C as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{l as n,a as s,j as t}from"./index-
|
|
1
|
+
import{l as n,a as s,j as t}from"./index-FrTQ7TcS.js";import{i as c}from"./info-box.css-DuVI9M9-.js";/* empty css */const a=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 16v-4",key:"1dtifu"}],["path",{d:"M12 8h.01",key:"e9boi3"}]],r=n("info",a);function p(){const e=s.c(2);if((window.bootstrapData?.authType||"basic")==="basic"){let i;return e[0]===Symbol.for("react.memo_cache_sentinel")?(i=t.jsx("div",{children:t.jsxs("div",{className:c,children:[t.jsx(r,{size:16}),t.jsx("span",{children:"You are using basic authentication. Profile settings cannot be changed in this mode."})]})}),e[0]=i):i=e[0],i}let o;return e[1]===Symbol.for("react.memo_cache_sentinel")?(o=t.jsx("div",{children:t.jsx("h2",{children:"Profile"})}),e[1]=o):o=e[1],o}export{p as component};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as v,
|
|
1
|
+
import{a as v,K as g,g as C,d as y,j as s,M as b,I as V}from"./index-FrTQ7TcS.js";import{B as I}from"./button-CMZqhyXB.js";import{b as p,e as c,a as T,c as x,T as N,d as _}from"./table-DggTSlPh.js";import{u as $}from"./useConfigVariants-CLc_hPw1.js";import{v as k,a as R}from"./variants.css-rCWHZycz.js";import{P as w}from"./plus-JQ0TORpd.js";/* empty css */import"./useButton-CsZ8hBM8.js";function U(){const e=v.c(18),{id:a}=g.useParams(),j=C(),{data:d,isLoading:u}=$(a),i=y();if(u){let n;return e[0]===Symbol.for("react.memo_cache_sentinel")?(n=s.jsx("div",{children:"Loading variants..."}),e[0]=n):n=e[0],n}let t;e[1]!==a||e[2]!==i?(t=()=>{i({to:"/configs/$id/variants/$variant",params:{id:a,variant:"new"}})},e[1]=a,e[2]=i,e[3]=t):t=e[3];let m;e[4]===Symbol.for("react.memo_cache_sentinel")?(m=s.jsx(V,{icon:w}),e[4]=m):m=e[4];let r;e[5]!==t?(r=s.jsx("div",{className:k,children:s.jsxs(I,{variant:"ghost",onClick:t,children:[m,"Add Variant"]})}),e[5]=t,e[6]=r):r=e[6];let f;e[7]===Symbol.for("react.memo_cache_sentinel")?(f=s.jsx(T,{children:s.jsxs(p,{children:[s.jsx(x,{children:"Name"}),s.jsx(x,{children:"Provider"}),s.jsx(x,{children:"Model"}),s.jsx(x,{children:"Current Version"})]})}),e[7]=f):f=e[7];let o;e[8]!==a||e[9]!==d||e[10]!==i||e[11]!==j?(o=d&&d.length>0?d.map(n=>s.jsxs(p,{interactive:!0,onMouseEnter:()=>{j.prefetchQuery(b(n.variantId))},onClick:()=>i({to:"/configs/$id/variants/$variant",params:{id:a,variant:n.variantId}}),children:[s.jsx(c,{children:n.name||"Unnamed Variant"}),s.jsx(c,{children:n.provider||"Unknown"}),s.jsx(c,{children:n.modelName||"Unknown"}),s.jsx(c,{children:n.latestVersion?.version?`v${n.latestVersion.version}`:"-"})]},n.variantId)):s.jsx(p,{children:s.jsx(c,{colSpan:4,style:{textAlign:"center",padding:"2rem"},children:'No variants added yet. Click "Add Variant" to get started.'})}),e[8]=a,e[9]=d,e[10]=i,e[11]=j,e[12]=o):o=e[12];let l;e[13]!==o?(l=s.jsxs(N,{children:[f,s.jsx(_,{children:o})]}),e[13]=o,e[14]=l):l=e[14];let h;return e[15]!==r||e[16]!==l?(h=s.jsxs("div",{className:R,children:[r,l]}),e[15]=r,e[16]=l,e[17]=h):h=e[17],h}export{U as component};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./index-FrTQ7TcS.js";var r="tye0o0",t="tye0o1";export{r as a,t as v};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as g,t as w,i as h,g as x,r as _,j as a}from"./index-
|
|
1
|
+
import{a as g,t as w,i as h,g as x,r as _,j as a}from"./index-FrTQ7TcS.js";import{u as S}from"./useMutation-D4JglXWk.js";/* empty css */const k=()=>["workspace-settings"],N=()=>{const e=g.c(1);let t;return e[0]===Symbol.for("react.memo_cache_sentinel")?(t={queryKey:k(),queryFn:$},e[0]=t):t=e[0],w(t)};async function $(){const t=await(await h.v1["workspace-settings"].$get()).json();return"data"in t?t.data:null}const E=()=>{const e=g.c(2),t=x();let s;return e[0]!==t?(s={mutationFn:C,onSuccess:()=>{t.invalidateQueries({queryKey:k()})}},e[0]=t,e[1]=s):s=e[1],S(s)};async function C(e){const t=await h.v1["workspace-settings"].$patch({json:{name:e.name}}),s=await t.json();if(!t.ok||!("data"in s))throw new Error("message"in s?s.message:"Failed to update workspace settings");return s.data}var y="_1ervu4v0",F="_1ervu4v1",K="_1ervu4v2",q="_1ervu4v5",Q="_1ervu4v7 _1ervu4v6 _1lg22bkv0 _1lg22bkuc _1lg22bk26 _1lg22bk2u _1lg22bkbc _1lg22bkj9";function B(){const e=g.c(14),{data:t,isLoading:s}=N(),p=E(),[r,f]=_.useState("");let o;e[0]!==t?(o=()=>{t?.name!==void 0&&f(t.name??"")},e[0]=t,e[1]=o):o=e[1];const d=t?.name;let i;e[2]!==d?(i=[d],e[2]=d,e[3]=i):i=e[3],_.useEffect(o,i);let c;e[4]!==r||e[5]!==t?.name||e[6]!==p?(c=()=>{const n=r.trim(),j=t?.name??"";n!==j&&p.mutate({name:n||null})},e[4]=r,e[5]=t?.name,e[6]=p,e[7]=c):c=e[7],t?.name;const v=c,b=L;if(s){let n;return e[8]===Symbol.for("react.memo_cache_sentinel")?(n=a.jsx("div",{className:y,children:"Loading..."}),e[8]=n):n=e[8],n}let l;e[9]===Symbol.for("react.memo_cache_sentinel")?(l=a.jsx("label",{className:q,children:"Name of your workspace"}),e[9]=l):l=e[9];let u;e[10]===Symbol.for("react.memo_cache_sentinel")?(u=n=>f(n.target.value),e[10]=u):u=e[10];let m;return e[11]!==v||e[12]!==r?(m=a.jsx("div",{className:y,children:a.jsx("div",{className:F,children:a.jsx("div",{className:K,children:a.jsxs("div",{children:[l,a.jsx("input",{type:"text",className:Q,value:r,onChange:u,onBlur:v,onKeyDown:b,placeholder:"Workspace name"})]})})})}),e[11]=v,e[12]=r,e[13]=m):m=e[13],m}function L(e){e.key==="Enter"&&e.currentTarget.blur()}export{B as component};
|
package/dist/index.cjs
CHANGED
|
@@ -63,7 +63,7 @@ let node_process = require("node:process");
|
|
|
63
63
|
let __llmops_core_db = require("@llmops/core/db");
|
|
64
64
|
|
|
65
65
|
//#region src/client/index.tsx?url
|
|
66
|
-
var client_default = "/assets/index-
|
|
66
|
+
var client_default = "/assets/index-FrTQ7TcS.js";
|
|
67
67
|
|
|
68
68
|
//#endregion
|
|
69
69
|
//#region src/client/styles/styles.css?url
|
|
@@ -12793,28 +12793,65 @@ const dateRangeSchema = zod_default.object({
|
|
|
12793
12793
|
endDate: isoDateString.transform(parseEndDate)
|
|
12794
12794
|
});
|
|
12795
12795
|
/**
|
|
12796
|
+
* Date range query schema with optional filters
|
|
12797
|
+
*/
|
|
12798
|
+
const dateRangeWithFiltersSchema = dateRangeSchema.extend({
|
|
12799
|
+
configId: zod_default.string().uuid().optional(),
|
|
12800
|
+
variantId: zod_default.string().uuid().optional(),
|
|
12801
|
+
environmentId: zod_default.string().uuid().optional(),
|
|
12802
|
+
tags: zod_default.string().optional()
|
|
12803
|
+
});
|
|
12804
|
+
/**
|
|
12805
|
+
* Parse tags JSON string to Record<string, string[]>
|
|
12806
|
+
*/
|
|
12807
|
+
function parseTags(tagsJson) {
|
|
12808
|
+
if (!tagsJson) return void 0;
|
|
12809
|
+
try {
|
|
12810
|
+
return JSON.parse(tagsJson);
|
|
12811
|
+
} catch {
|
|
12812
|
+
return;
|
|
12813
|
+
}
|
|
12814
|
+
}
|
|
12815
|
+
/**
|
|
12796
12816
|
* Analytics API routes for cost and usage tracking
|
|
12797
12817
|
*/
|
|
12798
12818
|
const app$10 = new hono.Hono().get("/requests", zv("query", zod_default.object({
|
|
12799
12819
|
limit: zod_default.string().transform(Number).optional(),
|
|
12800
12820
|
offset: zod_default.string().transform(Number).optional(),
|
|
12801
12821
|
configId: zod_default.string().uuid().optional(),
|
|
12822
|
+
variantId: zod_default.string().uuid().optional(),
|
|
12823
|
+
environmentId: zod_default.string().uuid().optional(),
|
|
12802
12824
|
provider: zod_default.string().optional(),
|
|
12803
12825
|
model: zod_default.string().optional(),
|
|
12804
12826
|
startDate: isoDateString.optional(),
|
|
12805
|
-
endDate: isoDateString.optional()
|
|
12827
|
+
endDate: isoDateString.optional(),
|
|
12828
|
+
tags: zod_default.string().optional()
|
|
12806
12829
|
})), async (c) => {
|
|
12807
12830
|
const db = c.get("db");
|
|
12808
12831
|
const query = c.req.valid("query");
|
|
12832
|
+
console.log("[Analytics] Request filters:", {
|
|
12833
|
+
configId: query.configId,
|
|
12834
|
+
variantId: query.variantId,
|
|
12835
|
+
environmentId: query.environmentId,
|
|
12836
|
+
startDate: query.startDate,
|
|
12837
|
+
endDate: query.endDate
|
|
12838
|
+
});
|
|
12839
|
+
let parsedTags;
|
|
12840
|
+
if (query.tags) try {
|
|
12841
|
+
parsedTags = JSON.parse(query.tags);
|
|
12842
|
+
} catch {}
|
|
12809
12843
|
try {
|
|
12810
12844
|
const requests = await db.listRequests({
|
|
12811
12845
|
limit: query.limit,
|
|
12812
12846
|
offset: query.offset,
|
|
12813
12847
|
configId: query.configId,
|
|
12848
|
+
variantId: query.variantId,
|
|
12849
|
+
environmentId: query.environmentId,
|
|
12814
12850
|
provider: query.provider,
|
|
12815
12851
|
model: query.model,
|
|
12816
12852
|
startDate: query.startDate ? parseStartDate(query.startDate) : void 0,
|
|
12817
|
-
endDate: query.endDate ? parseEndDate(query.endDate) : void 0
|
|
12853
|
+
endDate: query.endDate ? parseEndDate(query.endDate) : void 0,
|
|
12854
|
+
tags: parsedTags
|
|
12818
12855
|
});
|
|
12819
12856
|
return c.json(successResponse(requests, 200));
|
|
12820
12857
|
} catch (error$45) {
|
|
@@ -12832,13 +12869,17 @@ const app$10 = new hono.Hono().get("/requests", zv("query", zod_default.object({
|
|
|
12832
12869
|
console.error("Error fetching request:", error$45);
|
|
12833
12870
|
return c.json(internalServerError("Failed to fetch request", 500), 500);
|
|
12834
12871
|
}
|
|
12835
|
-
}).get("/costs/total", zv("query",
|
|
12872
|
+
}).get("/costs/total", zv("query", dateRangeWithFiltersSchema), async (c) => {
|
|
12836
12873
|
const db = c.get("db");
|
|
12837
|
-
const { startDate, endDate } = c.req.valid("query");
|
|
12874
|
+
const { startDate, endDate, configId, variantId, environmentId, tags } = c.req.valid("query");
|
|
12838
12875
|
try {
|
|
12839
12876
|
const data = await db.getTotalCost({
|
|
12840
12877
|
startDate,
|
|
12841
|
-
endDate
|
|
12878
|
+
endDate,
|
|
12879
|
+
configId,
|
|
12880
|
+
variantId,
|
|
12881
|
+
environmentId,
|
|
12882
|
+
tags: parseTags(tags)
|
|
12842
12883
|
});
|
|
12843
12884
|
if (!data) return c.json(successResponse({
|
|
12844
12885
|
totalCost: 0,
|
|
@@ -12912,7 +12953,7 @@ const app$10 = new hono.Hono().get("/requests", zv("query", zod_default.object({
|
|
|
12912
12953
|
console.error("Error fetching daily costs:", error$45);
|
|
12913
12954
|
return c.json(internalServerError("Failed to fetch daily costs", 500), 500);
|
|
12914
12955
|
}
|
|
12915
|
-
}).get("/costs/summary", zv("query",
|
|
12956
|
+
}).get("/costs/summary", zv("query", dateRangeWithFiltersSchema.extend({ groupBy: zod_default.enum([
|
|
12916
12957
|
"day",
|
|
12917
12958
|
"hour",
|
|
12918
12959
|
"model",
|
|
@@ -12920,25 +12961,33 @@ const app$10 = new hono.Hono().get("/requests", zv("query", zod_default.object({
|
|
|
12920
12961
|
"config"
|
|
12921
12962
|
]).optional() })), async (c) => {
|
|
12922
12963
|
const db = c.get("db");
|
|
12923
|
-
const { startDate, endDate, groupBy } = c.req.valid("query");
|
|
12964
|
+
const { startDate, endDate, groupBy, configId, variantId, environmentId, tags } = c.req.valid("query");
|
|
12924
12965
|
try {
|
|
12925
12966
|
const data = await db.getCostSummary({
|
|
12926
12967
|
startDate,
|
|
12927
12968
|
endDate,
|
|
12928
|
-
groupBy
|
|
12969
|
+
groupBy,
|
|
12970
|
+
configId,
|
|
12971
|
+
variantId,
|
|
12972
|
+
environmentId,
|
|
12973
|
+
tags: parseTags(tags)
|
|
12929
12974
|
});
|
|
12930
12975
|
return c.json(successResponse(data, 200));
|
|
12931
12976
|
} catch (error$45) {
|
|
12932
12977
|
console.error("Error fetching cost summary:", error$45);
|
|
12933
12978
|
return c.json(internalServerError("Failed to fetch cost summary", 500), 500);
|
|
12934
12979
|
}
|
|
12935
|
-
}).get("/stats", zv("query",
|
|
12980
|
+
}).get("/stats", zv("query", dateRangeWithFiltersSchema), async (c) => {
|
|
12936
12981
|
const db = c.get("db");
|
|
12937
|
-
const { startDate, endDate } = c.req.valid("query");
|
|
12982
|
+
const { startDate, endDate, configId, variantId, environmentId, tags } = c.req.valid("query");
|
|
12938
12983
|
try {
|
|
12939
12984
|
const data = await db.getRequestStats({
|
|
12940
12985
|
startDate,
|
|
12941
|
-
endDate
|
|
12986
|
+
endDate,
|
|
12987
|
+
configId,
|
|
12988
|
+
variantId,
|
|
12989
|
+
environmentId,
|
|
12990
|
+
tags: parseTags(tags)
|
|
12942
12991
|
});
|
|
12943
12992
|
if (!data) return c.json(successResponse({
|
|
12944
12993
|
totalRequests: 0,
|
|
@@ -12958,6 +13007,15 @@ const app$10 = new hono.Hono().get("/requests", zv("query", zod_default.object({
|
|
|
12958
13007
|
console.error("Error fetching request stats:", error$45);
|
|
12959
13008
|
return c.json(internalServerError("Failed to fetch request stats", 500), 500);
|
|
12960
13009
|
}
|
|
13010
|
+
}).get("/tags", async (c) => {
|
|
13011
|
+
const db = c.get("db");
|
|
13012
|
+
try {
|
|
13013
|
+
const tags = await db.getDistinctTags();
|
|
13014
|
+
return c.json(successResponse(tags, 200));
|
|
13015
|
+
} catch (error$45) {
|
|
13016
|
+
console.error("Error fetching distinct tags:", error$45);
|
|
13017
|
+
return c.json(internalServerError("Failed to fetch tags", 500), 500);
|
|
13018
|
+
}
|
|
12961
13019
|
});
|
|
12962
13020
|
var analytics_default = app$10;
|
|
12963
13021
|
|
|
@@ -13806,6 +13864,9 @@ const createGatewayAdapterMiddleware = () => {
|
|
|
13806
13864
|
c.set("variantModel", variantConfig.model || data.modelName);
|
|
13807
13865
|
c.set("configId", data.configId);
|
|
13808
13866
|
c.set("variantId", data.variantId);
|
|
13867
|
+
c.set("environmentId", data.environmentId);
|
|
13868
|
+
c.set("environmentId", data.environmentId);
|
|
13869
|
+
c.set("environmentId", data.environmentId);
|
|
13809
13870
|
await next();
|
|
13810
13871
|
} catch (error$45) {
|
|
13811
13872
|
console.error("Gateway adapter error:", error$45);
|
|
@@ -14189,6 +14250,8 @@ function createCostTrackingMiddleware(config$1 = {}) {
|
|
|
14189
14250
|
if (llmopsConfigHeader) try {
|
|
14190
14251
|
provider = JSON.parse(llmopsConfigHeader).provider || provider;
|
|
14191
14252
|
} catch {}
|
|
14253
|
+
let customTags = {};
|
|
14254
|
+
if (body.metadata && typeof body.metadata === "object") customTags = Object.fromEntries(Object.entries(body.metadata).filter(([k, v]) => typeof k === "string" && typeof v === "string"));
|
|
14192
14255
|
if (!variantModel) {
|
|
14193
14256
|
log(`Skipping request tracking - no model info`);
|
|
14194
14257
|
return;
|
|
@@ -14208,6 +14271,7 @@ function createCostTrackingMiddleware(config$1 = {}) {
|
|
|
14208
14271
|
model: variantModel,
|
|
14209
14272
|
configId: c.get("configId"),
|
|
14210
14273
|
variantId: c.get("variantId"),
|
|
14274
|
+
environmentId: c.get("environmentId"),
|
|
14211
14275
|
endpoint: context.endpoint,
|
|
14212
14276
|
statusCode,
|
|
14213
14277
|
latencyMs,
|
|
@@ -14218,6 +14282,7 @@ function createCostTrackingMiddleware(config$1 = {}) {
|
|
|
14218
14282
|
totalTokens: usage.totalTokens,
|
|
14219
14283
|
cachedTokens: usage.cachedTokens
|
|
14220
14284
|
} : null,
|
|
14285
|
+
tags: customTags,
|
|
14221
14286
|
batchWriter,
|
|
14222
14287
|
trackErrors,
|
|
14223
14288
|
log
|
|
@@ -14244,11 +14309,13 @@ function createCostTrackingMiddleware(config$1 = {}) {
|
|
|
14244
14309
|
model: variantModel,
|
|
14245
14310
|
configId: c.get("configId"),
|
|
14246
14311
|
variantId: c.get("variantId"),
|
|
14312
|
+
environmentId: c.get("environmentId"),
|
|
14247
14313
|
endpoint: context.endpoint,
|
|
14248
14314
|
statusCode,
|
|
14249
14315
|
latencyMs,
|
|
14250
14316
|
isStreaming: false,
|
|
14251
14317
|
usage,
|
|
14318
|
+
tags: customTags,
|
|
14252
14319
|
batchWriter,
|
|
14253
14320
|
trackErrors,
|
|
14254
14321
|
log
|
|
@@ -14260,7 +14327,7 @@ function createCostTrackingMiddleware(config$1 = {}) {
|
|
|
14260
14327
|
* Process usage data and log to batch writer
|
|
14261
14328
|
*/
|
|
14262
14329
|
async function processUsageAndLog(params) {
|
|
14263
|
-
const { requestId, provider, model, configId, variantId, endpoint, statusCode, latencyMs, isStreaming, usage, batchWriter, trackErrors, log } = params;
|
|
14330
|
+
const { requestId, provider, model, configId, variantId, environmentId, endpoint, statusCode, latencyMs, isStreaming, usage, tags = {}, batchWriter, trackErrors, log } = params;
|
|
14264
14331
|
if (!trackErrors && statusCode >= 400) {
|
|
14265
14332
|
log(`Skipping error response (${statusCode})`);
|
|
14266
14333
|
return;
|
|
@@ -14287,6 +14354,7 @@ async function processUsageAndLog(params) {
|
|
|
14287
14354
|
requestId,
|
|
14288
14355
|
configId: configId || null,
|
|
14289
14356
|
variantId: variantId || null,
|
|
14357
|
+
environmentId: environmentId || null,
|
|
14290
14358
|
provider,
|
|
14291
14359
|
model,
|
|
14292
14360
|
promptTokens: usage?.promptTokens || 0,
|
|
@@ -14300,7 +14368,7 @@ async function processUsageAndLog(params) {
|
|
|
14300
14368
|
statusCode,
|
|
14301
14369
|
latencyMs,
|
|
14302
14370
|
isStreaming,
|
|
14303
|
-
tags
|
|
14371
|
+
tags
|
|
14304
14372
|
};
|
|
14305
14373
|
batchWriter.enqueue(requestData);
|
|
14306
14374
|
log(`Enqueued request ${requestId} for logging`);
|
package/dist/index.mjs
CHANGED
|
@@ -37,7 +37,7 @@ var __export = (all, symbols) => {
|
|
|
37
37
|
|
|
38
38
|
//#endregion
|
|
39
39
|
//#region src/client/index.tsx?url
|
|
40
|
-
var client_default = "/assets/index-
|
|
40
|
+
var client_default = "/assets/index-FrTQ7TcS.js";
|
|
41
41
|
|
|
42
42
|
//#endregion
|
|
43
43
|
//#region src/client/styles/styles.css?url
|
|
@@ -12767,28 +12767,65 @@ const dateRangeSchema = zod_default.object({
|
|
|
12767
12767
|
endDate: isoDateString.transform(parseEndDate)
|
|
12768
12768
|
});
|
|
12769
12769
|
/**
|
|
12770
|
+
* Date range query schema with optional filters
|
|
12771
|
+
*/
|
|
12772
|
+
const dateRangeWithFiltersSchema = dateRangeSchema.extend({
|
|
12773
|
+
configId: zod_default.string().uuid().optional(),
|
|
12774
|
+
variantId: zod_default.string().uuid().optional(),
|
|
12775
|
+
environmentId: zod_default.string().uuid().optional(),
|
|
12776
|
+
tags: zod_default.string().optional()
|
|
12777
|
+
});
|
|
12778
|
+
/**
|
|
12779
|
+
* Parse tags JSON string to Record<string, string[]>
|
|
12780
|
+
*/
|
|
12781
|
+
function parseTags(tagsJson) {
|
|
12782
|
+
if (!tagsJson) return void 0;
|
|
12783
|
+
try {
|
|
12784
|
+
return JSON.parse(tagsJson);
|
|
12785
|
+
} catch {
|
|
12786
|
+
return;
|
|
12787
|
+
}
|
|
12788
|
+
}
|
|
12789
|
+
/**
|
|
12770
12790
|
* Analytics API routes for cost and usage tracking
|
|
12771
12791
|
*/
|
|
12772
12792
|
const app$10 = new Hono().get("/requests", zv("query", zod_default.object({
|
|
12773
12793
|
limit: zod_default.string().transform(Number).optional(),
|
|
12774
12794
|
offset: zod_default.string().transform(Number).optional(),
|
|
12775
12795
|
configId: zod_default.string().uuid().optional(),
|
|
12796
|
+
variantId: zod_default.string().uuid().optional(),
|
|
12797
|
+
environmentId: zod_default.string().uuid().optional(),
|
|
12776
12798
|
provider: zod_default.string().optional(),
|
|
12777
12799
|
model: zod_default.string().optional(),
|
|
12778
12800
|
startDate: isoDateString.optional(),
|
|
12779
|
-
endDate: isoDateString.optional()
|
|
12801
|
+
endDate: isoDateString.optional(),
|
|
12802
|
+
tags: zod_default.string().optional()
|
|
12780
12803
|
})), async (c) => {
|
|
12781
12804
|
const db = c.get("db");
|
|
12782
12805
|
const query = c.req.valid("query");
|
|
12806
|
+
console.log("[Analytics] Request filters:", {
|
|
12807
|
+
configId: query.configId,
|
|
12808
|
+
variantId: query.variantId,
|
|
12809
|
+
environmentId: query.environmentId,
|
|
12810
|
+
startDate: query.startDate,
|
|
12811
|
+
endDate: query.endDate
|
|
12812
|
+
});
|
|
12813
|
+
let parsedTags;
|
|
12814
|
+
if (query.tags) try {
|
|
12815
|
+
parsedTags = JSON.parse(query.tags);
|
|
12816
|
+
} catch {}
|
|
12783
12817
|
try {
|
|
12784
12818
|
const requests = await db.listRequests({
|
|
12785
12819
|
limit: query.limit,
|
|
12786
12820
|
offset: query.offset,
|
|
12787
12821
|
configId: query.configId,
|
|
12822
|
+
variantId: query.variantId,
|
|
12823
|
+
environmentId: query.environmentId,
|
|
12788
12824
|
provider: query.provider,
|
|
12789
12825
|
model: query.model,
|
|
12790
12826
|
startDate: query.startDate ? parseStartDate(query.startDate) : void 0,
|
|
12791
|
-
endDate: query.endDate ? parseEndDate(query.endDate) : void 0
|
|
12827
|
+
endDate: query.endDate ? parseEndDate(query.endDate) : void 0,
|
|
12828
|
+
tags: parsedTags
|
|
12792
12829
|
});
|
|
12793
12830
|
return c.json(successResponse(requests, 200));
|
|
12794
12831
|
} catch (error$45) {
|
|
@@ -12806,13 +12843,17 @@ const app$10 = new Hono().get("/requests", zv("query", zod_default.object({
|
|
|
12806
12843
|
console.error("Error fetching request:", error$45);
|
|
12807
12844
|
return c.json(internalServerError("Failed to fetch request", 500), 500);
|
|
12808
12845
|
}
|
|
12809
|
-
}).get("/costs/total", zv("query",
|
|
12846
|
+
}).get("/costs/total", zv("query", dateRangeWithFiltersSchema), async (c) => {
|
|
12810
12847
|
const db = c.get("db");
|
|
12811
|
-
const { startDate, endDate } = c.req.valid("query");
|
|
12848
|
+
const { startDate, endDate, configId, variantId, environmentId, tags } = c.req.valid("query");
|
|
12812
12849
|
try {
|
|
12813
12850
|
const data = await db.getTotalCost({
|
|
12814
12851
|
startDate,
|
|
12815
|
-
endDate
|
|
12852
|
+
endDate,
|
|
12853
|
+
configId,
|
|
12854
|
+
variantId,
|
|
12855
|
+
environmentId,
|
|
12856
|
+
tags: parseTags(tags)
|
|
12816
12857
|
});
|
|
12817
12858
|
if (!data) return c.json(successResponse({
|
|
12818
12859
|
totalCost: 0,
|
|
@@ -12886,7 +12927,7 @@ const app$10 = new Hono().get("/requests", zv("query", zod_default.object({
|
|
|
12886
12927
|
console.error("Error fetching daily costs:", error$45);
|
|
12887
12928
|
return c.json(internalServerError("Failed to fetch daily costs", 500), 500);
|
|
12888
12929
|
}
|
|
12889
|
-
}).get("/costs/summary", zv("query",
|
|
12930
|
+
}).get("/costs/summary", zv("query", dateRangeWithFiltersSchema.extend({ groupBy: zod_default.enum([
|
|
12890
12931
|
"day",
|
|
12891
12932
|
"hour",
|
|
12892
12933
|
"model",
|
|
@@ -12894,25 +12935,33 @@ const app$10 = new Hono().get("/requests", zv("query", zod_default.object({
|
|
|
12894
12935
|
"config"
|
|
12895
12936
|
]).optional() })), async (c) => {
|
|
12896
12937
|
const db = c.get("db");
|
|
12897
|
-
const { startDate, endDate, groupBy } = c.req.valid("query");
|
|
12938
|
+
const { startDate, endDate, groupBy, configId, variantId, environmentId, tags } = c.req.valid("query");
|
|
12898
12939
|
try {
|
|
12899
12940
|
const data = await db.getCostSummary({
|
|
12900
12941
|
startDate,
|
|
12901
12942
|
endDate,
|
|
12902
|
-
groupBy
|
|
12943
|
+
groupBy,
|
|
12944
|
+
configId,
|
|
12945
|
+
variantId,
|
|
12946
|
+
environmentId,
|
|
12947
|
+
tags: parseTags(tags)
|
|
12903
12948
|
});
|
|
12904
12949
|
return c.json(successResponse(data, 200));
|
|
12905
12950
|
} catch (error$45) {
|
|
12906
12951
|
console.error("Error fetching cost summary:", error$45);
|
|
12907
12952
|
return c.json(internalServerError("Failed to fetch cost summary", 500), 500);
|
|
12908
12953
|
}
|
|
12909
|
-
}).get("/stats", zv("query",
|
|
12954
|
+
}).get("/stats", zv("query", dateRangeWithFiltersSchema), async (c) => {
|
|
12910
12955
|
const db = c.get("db");
|
|
12911
|
-
const { startDate, endDate } = c.req.valid("query");
|
|
12956
|
+
const { startDate, endDate, configId, variantId, environmentId, tags } = c.req.valid("query");
|
|
12912
12957
|
try {
|
|
12913
12958
|
const data = await db.getRequestStats({
|
|
12914
12959
|
startDate,
|
|
12915
|
-
endDate
|
|
12960
|
+
endDate,
|
|
12961
|
+
configId,
|
|
12962
|
+
variantId,
|
|
12963
|
+
environmentId,
|
|
12964
|
+
tags: parseTags(tags)
|
|
12916
12965
|
});
|
|
12917
12966
|
if (!data) return c.json(successResponse({
|
|
12918
12967
|
totalRequests: 0,
|
|
@@ -12932,6 +12981,15 @@ const app$10 = new Hono().get("/requests", zv("query", zod_default.object({
|
|
|
12932
12981
|
console.error("Error fetching request stats:", error$45);
|
|
12933
12982
|
return c.json(internalServerError("Failed to fetch request stats", 500), 500);
|
|
12934
12983
|
}
|
|
12984
|
+
}).get("/tags", async (c) => {
|
|
12985
|
+
const db = c.get("db");
|
|
12986
|
+
try {
|
|
12987
|
+
const tags = await db.getDistinctTags();
|
|
12988
|
+
return c.json(successResponse(tags, 200));
|
|
12989
|
+
} catch (error$45) {
|
|
12990
|
+
console.error("Error fetching distinct tags:", error$45);
|
|
12991
|
+
return c.json(internalServerError("Failed to fetch tags", 500), 500);
|
|
12992
|
+
}
|
|
12935
12993
|
});
|
|
12936
12994
|
var analytics_default = app$10;
|
|
12937
12995
|
|
|
@@ -13780,6 +13838,9 @@ const createGatewayAdapterMiddleware = () => {
|
|
|
13780
13838
|
c.set("variantModel", variantConfig.model || data.modelName);
|
|
13781
13839
|
c.set("configId", data.configId);
|
|
13782
13840
|
c.set("variantId", data.variantId);
|
|
13841
|
+
c.set("environmentId", data.environmentId);
|
|
13842
|
+
c.set("environmentId", data.environmentId);
|
|
13843
|
+
c.set("environmentId", data.environmentId);
|
|
13783
13844
|
await next();
|
|
13784
13845
|
} catch (error$45) {
|
|
13785
13846
|
console.error("Gateway adapter error:", error$45);
|
|
@@ -14163,6 +14224,8 @@ function createCostTrackingMiddleware(config$1 = {}) {
|
|
|
14163
14224
|
if (llmopsConfigHeader) try {
|
|
14164
14225
|
provider = JSON.parse(llmopsConfigHeader).provider || provider;
|
|
14165
14226
|
} catch {}
|
|
14227
|
+
let customTags = {};
|
|
14228
|
+
if (body.metadata && typeof body.metadata === "object") customTags = Object.fromEntries(Object.entries(body.metadata).filter(([k, v]) => typeof k === "string" && typeof v === "string"));
|
|
14166
14229
|
if (!variantModel) {
|
|
14167
14230
|
log(`Skipping request tracking - no model info`);
|
|
14168
14231
|
return;
|
|
@@ -14182,6 +14245,7 @@ function createCostTrackingMiddleware(config$1 = {}) {
|
|
|
14182
14245
|
model: variantModel,
|
|
14183
14246
|
configId: c.get("configId"),
|
|
14184
14247
|
variantId: c.get("variantId"),
|
|
14248
|
+
environmentId: c.get("environmentId"),
|
|
14185
14249
|
endpoint: context.endpoint,
|
|
14186
14250
|
statusCode,
|
|
14187
14251
|
latencyMs,
|
|
@@ -14192,6 +14256,7 @@ function createCostTrackingMiddleware(config$1 = {}) {
|
|
|
14192
14256
|
totalTokens: usage.totalTokens,
|
|
14193
14257
|
cachedTokens: usage.cachedTokens
|
|
14194
14258
|
} : null,
|
|
14259
|
+
tags: customTags,
|
|
14195
14260
|
batchWriter,
|
|
14196
14261
|
trackErrors,
|
|
14197
14262
|
log
|
|
@@ -14218,11 +14283,13 @@ function createCostTrackingMiddleware(config$1 = {}) {
|
|
|
14218
14283
|
model: variantModel,
|
|
14219
14284
|
configId: c.get("configId"),
|
|
14220
14285
|
variantId: c.get("variantId"),
|
|
14286
|
+
environmentId: c.get("environmentId"),
|
|
14221
14287
|
endpoint: context.endpoint,
|
|
14222
14288
|
statusCode,
|
|
14223
14289
|
latencyMs,
|
|
14224
14290
|
isStreaming: false,
|
|
14225
14291
|
usage,
|
|
14292
|
+
tags: customTags,
|
|
14226
14293
|
batchWriter,
|
|
14227
14294
|
trackErrors,
|
|
14228
14295
|
log
|
|
@@ -14234,7 +14301,7 @@ function createCostTrackingMiddleware(config$1 = {}) {
|
|
|
14234
14301
|
* Process usage data and log to batch writer
|
|
14235
14302
|
*/
|
|
14236
14303
|
async function processUsageAndLog(params) {
|
|
14237
|
-
const { requestId, provider, model, configId, variantId, endpoint, statusCode, latencyMs, isStreaming, usage, batchWriter, trackErrors, log } = params;
|
|
14304
|
+
const { requestId, provider, model, configId, variantId, environmentId, endpoint, statusCode, latencyMs, isStreaming, usage, tags = {}, batchWriter, trackErrors, log } = params;
|
|
14238
14305
|
if (!trackErrors && statusCode >= 400) {
|
|
14239
14306
|
log(`Skipping error response (${statusCode})`);
|
|
14240
14307
|
return;
|
|
@@ -14261,6 +14328,7 @@ async function processUsageAndLog(params) {
|
|
|
14261
14328
|
requestId,
|
|
14262
14329
|
configId: configId || null,
|
|
14263
14330
|
variantId: variantId || null,
|
|
14331
|
+
environmentId: environmentId || null,
|
|
14264
14332
|
provider,
|
|
14265
14333
|
model,
|
|
14266
14334
|
promptTokens: usage?.promptTokens || 0,
|
|
@@ -14274,7 +14342,7 @@ async function processUsageAndLog(params) {
|
|
|
14274
14342
|
statusCode,
|
|
14275
14343
|
latencyMs,
|
|
14276
14344
|
isStreaming,
|
|
14277
|
-
tags
|
|
14345
|
+
tags
|
|
14278
14346
|
};
|
|
14279
14347
|
batchWriter.enqueue(requestData);
|
|
14280
14348
|
log(`Enqueued request ${requestId} for logging`);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@llmops/app",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.6",
|
|
4
4
|
"description": "LLMOps application with server and client",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -64,8 +64,9 @@
|
|
|
64
64
|
"motion": "^12.23.25",
|
|
65
65
|
"react-aria-components": "^1.13.0",
|
|
66
66
|
"react-hook-form": "^7.68.0",
|
|
67
|
-
"
|
|
68
|
-
"@llmops/
|
|
67
|
+
"recharts": "^3.6.0",
|
|
68
|
+
"@llmops/core": "^0.1.6",
|
|
69
|
+
"@llmops/gateway": "^0.1.6"
|
|
69
70
|
},
|
|
70
71
|
"peerDependencies": {
|
|
71
72
|
"react": "^19.2.1",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as Q,a0 as X,j as i,d as Y,r as D,I as Z}from"./index-BCY9aD4r.js";import{B as ee}from"./button-DftzA6-1.js";import{p as te,q as ne,j as G,v as J,k as K,i as M,S as ie,r as se,t as ae}from"./useSetTargeting-D1rPM8vz.js";import{u as re}from"./useEnvironments-CYkrqAdO.js";import{u as oe}from"./useConfigVariants-C8frrCcZ.js";import{u as le}from"./useTargetingRules-DS57orU0.js";import{i as ce,a as de}from"./info-box.css-HIaMvhbC.js";/* empty css */import"./useButton-Ct8hIyjz.js";import"./popupStateMapping-DkOpwBhG.js";import"./getDisabledMountTransitionStyles-CKUvhO4q.js";import"./InternalBackdrop-CXjGP6a9.js";import"./useValueChanged-vz8uKgCk.js";import"./useMutation-VUB-GXkv.js";function Le(){const t=Q.c(17),{id:e,environment:a}=X.useParams(),{data:c,isLoading:j}=re(),{data:o,isLoading:y}=oe(e),{data:L,isLoading:I}=le(e);if(j||y||I){let s;return t[0]===Symbol.for("react.memo_cache_sentinel")?(s=i.jsx("div",{children:"Loading..."}),t[0]=s):s=t[0],s}let n;t[1]!==a||t[2]!==c?(n=c?.find(s=>s.id===a),t[1]=a,t[2]=c,t[3]=n):n=t[3];const S=n;if(!S){let s;return t[4]===Symbol.for("react.memo_cache_sentinel")?(s=i.jsx("div",{children:"Environment not found"}),t[4]=s):s=t[4],s}let r;t[5]!==a||t[6]!==L?(r=L?.find(s=>s.environmentId===a),t[5]=a,t[6]=L,t[7]=r):r=t[7];const R=r;let l;t[8]!==o?(l=o??[],t[8]=o,t[9]=l):l=t[9];const B=R?.configVariantId??null,E=R?.variantVersionId??null;let g;return t[10]!==e||t[11]!==S||t[12]!==a||t[13]!==l||t[14]!==B||t[15]!==E?(g=i.jsx(me,{configId:e,environmentId:a,environment:S,variants:l,initialVariantId:B,initialVariantVersionId:E}),t[10]=e,t[11]=S,t[12]=a,t[13]=l,t[14]=B,t[15]=E,t[16]=g):g=t[16],g}function me(t){const e=Q.c(67),{configId:a,environmentId:c,environment:j,variants:o,initialVariantId:y,initialVariantVersionId:L}=t,I=Y(),v=te(),[n,S]=D.useState(y),[r,R]=D.useState(L??null);let l;if(e[0]!==n||e[1]!==o){let m;e[3]!==n?(m=P=>P.id===n,e[3]=n,e[4]=m):m=e[4],l=o.find(m),e[0]=n,e[1]=o,e[2]=l}else l=e[2];const E=l?.variantId??"",{data:g,isLoading:s}=ne(E);let $,w;e[5]!==y||e[6]!==n?($=()=>{n!==y&&R(null)},w=[n,y],e[5]=y,e[6]=n,e[7]=$,e[8]=w):($=e[7],w=e[8]),D.useEffect($,w);let k;e[9]!==o?(k=o.map(ge),e[9]=o,e[10]=k):k=e[10];const u=k;let p,b,h,x,V,N,d;if(e[11]!==a||e[12]!==j.name||e[13]!==c||e[14]!==s||e[15]!==I||e[16]!==n||e[17]!==r||e[18]!==v||e[19]!==u||e[20]!==o||e[21]!==g){d=g?.map(ve)??[];let m;e[29]!==a||e[30]!==c||e[31]!==I||e[32]!==n||e[33]!==r||e[34]!==v?(m=async()=>{if(!(!n||!r))try{await v.mutateAsync({environmentId:c,configId:a,configVariantId:n,variantVersionId:r}),I({to:"/configs/$id/targeting",params:{id:a}})}catch(f){console.error("Error setting targeting:",f)}},e[29]=a,e[30]=c,e[31]=I,e[32]=n,e[33]=r,e[34]=v,e[35]=m):m=e[35];const P=m;let z;e[36]===Symbol.for("react.memo_cache_sentinel")?(z={justifyContent:"flex-end"},e[36]=z):z=e[36];const W=!n||!r||v.isPending;let F;e[37]===Symbol.for("react.memo_cache_sentinel")?(F=i.jsx(Z,{icon:ie,size:"sm"}),e[37]=F):F=e[37];const A=v.isPending?"Saving...":"Save";e[38]!==P||e[39]!==W||e[40]!==A?(p=i.jsx("div",{className:se,style:z,children:i.jsxs(ee,{variant:"primary",onClick:P,disabled:W,children:[F,A]})}),e[38]=P,e[39]=W,e[40]=A,e[41]=p):p=e[41],b=ae,e[42]!==j.name?(h=i.jsxs("div",{className:ce,children:["The selected variant will be served to all requests in the"," ",i.jsx("span",{className:de,children:j.name})," ","environment"]}),e[42]=j.name,e[43]=h):h=e[43];let H;e[44]===Symbol.for("react.memo_cache_sentinel")?(H=i.jsx("div",{className:J,style:{minWidth:"120px"},children:"Variant"}),e[44]=H):H=e[44];let T;e[45]!==o?(T=f=>{if(!f)return"";const O=o.find(U=>U.id===f);return O?O.name:f},e[45]=o,e[46]=T):T=e[46],e[47]!==n||e[48]!==T||e[49]!==u?(x=i.jsxs("div",{className:G,children:[H,i.jsx("div",{className:K,children:i.jsx(M,{items:u,value:n,onValueChange:S,placeholder:"Select a variant...",itemToString:T})})]}),e[47]=n,e[48]=T,e[49]=u,e[50]=x):x=e[50],e[51]!==u.length?(V=u.length===0&&i.jsx("div",{style:{marginTop:"1rem",opacity:.6},children:"No variants available. Create a variant first to configure targeting."}),e[51]=u.length,e[52]=V):V=e[52],N=n&&i.jsxs("div",{className:G,children:[i.jsx("div",{className:J,style:{minWidth:"120px"},children:"Version"}),i.jsx("div",{className:K,children:s?i.jsx("span",{style:{opacity:.6},children:"Loading versions..."}):d.length===0?i.jsx("span",{style:{opacity:.6},children:"No versions available"}):i.jsx(M,{items:d,value:d.find(f=>f.id===r)??null,onValueChange:f=>R(f?.id??null),placeholder:"Select version...",itemToString:fe})})]}),e[11]=a,e[12]=j.name,e[13]=c,e[14]=s,e[15]=I,e[16]=n,e[17]=r,e[18]=v,e[19]=u,e[20]=o,e[21]=g,e[22]=p,e[23]=b,e[24]=h,e[25]=x,e[26]=V,e[27]=N,e[28]=d}else p=e[22],b=e[23],h=e[24],x=e[25],V=e[26],N=e[27],d=e[28];let C;e[53]!==n||e[54]!==r||e[55]!==d?(C=n&&!r&&d.length>0&&i.jsx("div",{style:{marginTop:"0.5rem",fontSize:"0.75rem",color:"var(--gray9)"},children:"Select a version to deploy to this environment."}),e[53]=n,e[54]=r,e[55]=d,e[56]=C):C=e[56];let _;e[57]!==C||e[58]!==b||e[59]!==h||e[60]!==x||e[61]!==V||e[62]!==N?(_=i.jsxs("div",{className:b,children:[h,x,V,N,C]}),e[57]=C,e[58]=b,e[59]=h,e[60]=x,e[61]=V,e[62]=N,e[63]=_):_=e[63];let q;return e[64]!==p||e[65]!==_?(q=i.jsxs("div",{children:[p,_]}),e[64]=p,e[65]=_,e[66]=q):q=e[66],q}function fe(t){return t?.label??""}function ve(t){return{id:t.id,label:`Version ${t.version}`,version:t.version}}function ge(t){return t.id}export{Le as component};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{l as ue,a as le,j as t,L as ae,I as U,C as ve,D as ke,p as ye,q as fe,d as ge,r as se,u as xe,b as Se,e as je,O as we}from"./index-BCY9aD4r.js";import{w as De,b as Ne,C as Ce,c as Te,B as Pe,h as Le,H as Ie,a as Oe,g as Re}from"./area.css-DTnbbu5M.js";import{B as Ee}from"./button-DftzA6-1.js";import{P as Be,a as $e,b as Me}from"./popover-CSR0ctop.js";import{C as Ae}from"./chevron-down-BjDiaa62.js";import{C as qe}from"./chevron-right-Dz77YeP_.js";/* empty css */import"./useButton-Ct8hIyjz.js";import"./InternalBackdrop-CXjGP6a9.js";import"./popupStateMapping-DkOpwBhG.js";import"./useSyncedFloatingRootContext-BzuhbdSw.js";import"./useRole-DP91D1OX.js";import"./usePopupAutoResize-ddPHogUJ.js";import"./getDisabledMountTransitionStyles-CKUvhO4q.js";const ze=[["path",{d:"M8 2v4",key:"1cmpym"}],["path",{d:"M16 2v4",key:"4m81vk"}],["rect",{width:"18",height:"18",x:"3",y:"4",rx:"2",key:"1hopcy"}],["path",{d:"M3 10h18",key:"8toen8"}]],Fe=ue("calendar",ze);const He=[["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"}]],Ue=ue("refresh-cw",He);var Ge="_5mtmrw0",We="_5mtmrw2 _5mtmrw1 _1lg22bks0 _1lg22bksi _1lg22bktr _1lg22bk6 _1lg22bkpr",ie="_5mtmrw4 _5mtmrw3 _1lg22bks0 _1lg22bksi _1lg22bkto",ce="_5mtmrw6 _5mtmrw5 _1lg22bkux _1lg22bkw0 _1lg22bkj3 _1lg22bk3",ne="_5mtmrw8 _5mtmrw7 _1lg22bks0 _1lg22bk3 _1lg22bkv0 _1lg22bkj9 _1lg22bkw0",Ye="_5mtmrwa _5mtmrw9 _1lg22bk9";function Je(){const e=le.c(5);let s;e[0]===Symbol.for("react.memo_cache_sentinel")?(s=t.jsx("span",{className:ce,children:"Analytics"}),e[0]=s):s=e[0];let a;e[1]===Symbol.for("react.memo_cache_sentinel")?(a=t.jsxs(ae,{to:"/observability/overview",className:ne,children:[t.jsx(U,{icon:ve}),"Overview"]}),e[1]=a):a=e[1];let l;e[2]===Symbol.for("react.memo_cache_sentinel")?(l=t.jsxs("div",{className:ie,children:[s,a,t.jsxs(ae,{to:"/observability/costs",className:ne,children:[t.jsx(U,{icon:ke}),"Costs"]})]}),e[2]=l):l=e[2];let m;e[3]===Symbol.for("react.memo_cache_sentinel")?(m=t.jsx("span",{className:ce,children:"Logs"}),e[3]=m):m=e[3];let i;return e[4]===Symbol.for("react.memo_cache_sentinel")?(i=t.jsxs("nav",{className:We,children:[l,t.jsxs("div",{className:ie,children:[m,t.jsxs(ae,{to:"/observability/requests",className:ne,children:[t.jsx(U,{icon:ye}),"Requests"]})]})]}),e[4]=i):i=e[4],i}var Ke="_1ey9mxp0",Qe="_1ey9mxp2 _1ey9mxp1 _1lg22bks0 _1lg22bkto _1lg22bkv0 _1lg22bkw0 _1lg22bk3 _1lg22bkuc",me="_1ey9mxp3",Ve="_1ey9mxp4",Xe="_1ey9mxp6 _1ey9mxp5 _1lg22bkuf",Ze="_1ey9mxp8 _1ey9mxp7 _1lg22bk6 _1lg22bkux _1lg22bkw0",et="_1ey9mxp9",tt="_1ey9mxpb _1ey9mxpa _1lg22bkv0 _1lg22bkw0 _1lg22bk3 _1lg22bkuc",at="_1ey9mxpd",st="_1ey9mxpf _1ey9mxpe _1lg22bkux _1lg22bkw0 _1lg22bkj3",lt="_1ey9mxpg",be="_1ey9mxpi _1ey9mxph _1lg22bkv0 _1lg22bkw0 _1lg22bk3 _1lg22bkuc",rt="_1ey9mxpk _1ey9mxpj _1lg22bkv0 _1lg22bkw0 _1lg22bkj3",ot="_1ey9mxpm _1ey9mxpl _1lg22bkv0 _1lg22bkw0 _1lg22bk3 _1lg22bkuc",nt="_1ey9mxpo _1ey9mxpn _1lg22bk3 _1lg22bkuc",it="_1ey9mxpq";const de=[{label:"Last 15 minutes",value:"15m"},{label:"Last 1 hour",value:"1h"},{label:"Last 3 hours",value:"3h"},{label:"Last 6 hours",value:"6h"},{label:"Last 12 hours",value:"12h"},{label:"Last 24 hours",value:"24h"},{label:"Last 2 days",value:"2d"},{label:"Last 7 days",value:"7d"},{label:"Last 30 days",value:"30d"},{label:"Last 90 days",value:"90d"}],he=e=>{const s=new Date;let a=new Date;switch(e){case"15m":a=new Date(s.getTime()-900*1e3);break;case"1h":a=new Date(s.getTime()-3600*1e3);break;case"3h":a=new Date(s.getTime()-10800*1e3);break;case"6h":a=new Date(s.getTime()-360*60*1e3);break;case"12h":a=new Date(s.getTime()-720*60*1e3);break;case"24h":a=new Date(s.getTime()-1440*60*1e3);break;case"2d":a=new Date(s.getTime()-2880*60*1e3);break;case"7d":a=new Date(s.getTime()-10080*60*1e3);break;case"30d":a=new Date(s.getTime()-720*60*60*1e3);break;case"90d":a=new Date(s.getTime()-2160*60*60*1e3);break;default:a=new Date(s.getTime()-10080*60*1e3)}return{from:a.toISOString(),to:s.toISOString()}},_e=e=>e?new Date(e).toISOString().split("T")[0]:"",ct=e=>new Date(e+"T00:00:00").toISOString(),mt=e=>new Date(e+"T23:59:59.999").toISOString();function bt(){const e=le.c(83);let s;e[0]===Symbol.for("react.memo_cache_sentinel")?(s={from:"/(app)/observability"},e[0]=s):s=e[0];const a=fe(s),l=ge(),[m,i]=se.useState(!1);let c;e[1]!==a.from?(c=_e(a.from),e[1]=a.from,e[2]=c):c=e[2];const[o,_]=se.useState(c);let n;e[3]!==a.to?(n=_e(a.to),e[3]=a.to,e[4]=n):n=e[4];const[r,u]=se.useState(n),b=a.range??"7d";let d,f,g,k,y,x,S,j,w,D,N,C,v,T;if(e[5]!==r||e[6]!==o||e[7]!==m||e[8]!==l||e[9]!==a.from||e[10]!==a.to||e[11]!==b){const h=de.find(p=>p.value===b)?.label??"Custom";let Z;e[26]!==l?(Z=p=>{const F=he(p);l({to:".",search:H=>({...H,range:p,from:F.from,to:F.to}),replace:!0}),i(!1)},e[26]=l,e[27]=Z):Z=e[27],k=Z;let ee;e[28]!==r||e[29]!==o||e[30]!==l?(ee=()=>{o&&r&&(l({to:".",search:p=>({...p,range:"custom",from:ct(o),to:mt(r)}),replace:!0}),i(!1))},e[28]=r,e[29]=o,e[30]=l,e[31]=ee):ee=e[31],g=ee;const pe=()=>{if(b!=="custom")return h;const p=a.from,F=a.to;if(!p||!F)return"Custom";const H=new Date(p),oe=new Date(F),te={month:"short",day:"numeric"};return H.getFullYear()!==oe.getFullYear()?`${H.toLocaleDateString("en-US",{...te,year:"numeric"})} - ${oe.toLocaleDateString("en-US",{...te,year:"numeric"})}`:`${H.toLocaleDateString("en-US",te)} - ${oe.toLocaleDateString("en-US",te)}`};S=Ke,f=Be,y=m,x=i,d=$e,T=!0,D="button",N=Qe,C=m?"open":"closed",e[32]===Symbol.for("react.memo_cache_sentinel")?(v=t.jsx(Fe,{size:14,className:me}),e[32]=v):v=e[32],j=Ve,w=pe(),e[5]=r,e[6]=o,e[7]=m,e[8]=l,e[9]=a.from,e[10]=a.to,e[11]=b,e[12]=d,e[13]=f,e[14]=g,e[15]=k,e[16]=y,e[17]=x,e[18]=S,e[19]=j,e[20]=w,e[21]=D,e[22]=N,e[23]=C,e[24]=v,e[25]=T}else d=e[12],f=e[13],g=e[14],k=e[15],y=e[16],x=e[17],S=e[18],j=e[19],w=e[20],D=e[21],N=e[22],C=e[23],v=e[24],T=e[25];let P;e[33]!==j||e[34]!==w?(P=t.jsx("span",{className:j,children:w}),e[33]=j,e[34]=w,e[35]=P):P=e[35];let G;e[36]===Symbol.for("react.memo_cache_sentinel")?(G=t.jsx(Ae,{size:14,className:me}),e[36]=G):G=e[36];let L;e[37]!==P||e[38]!==D||e[39]!==N||e[40]!==C||e[41]!==v?(L=t.jsxs("button",{type:D,className:N,"data-state":C,children:[v,P,G]}),e[37]=P,e[38]=D,e[39]=N,e[40]=C,e[41]=v,e[42]=L):L=e[42];let I;e[43]!==d||e[44]!==L||e[45]!==T?(I=t.jsx(d,{asChild:T,children:L}),e[43]=d,e[44]=L,e[45]=T,e[46]=I):I=e[46];let W;e[47]===Symbol.for("react.memo_cache_sentinel")?(W=t.jsx("div",{className:Ze,children:"Time range"}),e[47]=W):W=e[47];let O;e[48]!==k||e[49]!==b?(O=de.map(h=>t.jsx("button",{type:"button",className:tt,"data-selected":b===h.value,onClick:()=>k(h.value),children:h.label},h.value)),e[48]=k,e[49]=b,e[50]=O):O=e[50];let R;e[51]!==O?(R=t.jsx("div",{className:et,children:O}),e[51]=O,e[52]=R):R=e[52];let Y;e[53]===Symbol.for("react.memo_cache_sentinel")?(Y=t.jsx("span",{className:st,children:"Custom range"}),e[53]=Y):Y=e[53];let J;e[54]===Symbol.for("react.memo_cache_sentinel")?(J=h=>_(h.target.value),e[54]=J):J=e[54];let E;e[55]!==o?(E=t.jsx("input",{type:"date",className:be,value:o,onChange:J}),e[55]=o,e[56]=E):E=e[56];let K;e[57]===Symbol.for("react.memo_cache_sentinel")?(K=t.jsx("span",{className:rt,children:"to"}),e[57]=K):K=e[57];let Q;e[58]===Symbol.for("react.memo_cache_sentinel")?(Q=h=>u(h.target.value),e[58]=Q):Q=e[58];let B;e[59]!==r?(B=t.jsx("input",{type:"date",className:be,value:r,onChange:Q}),e[59]=r,e[60]=B):B=e[60];let $;e[61]!==E||e[62]!==B?($=t.jsxs("div",{className:lt,children:[E,K,B]}),e[61]=E,e[62]=B,e[63]=$):$=e[63];const re=!o||!r;let M;e[64]!==g||e[65]!==re?(M=t.jsx("button",{type:"button",className:ot,onClick:g,disabled:re,children:"Apply"}),e[64]=g,e[65]=re,e[66]=M):M=e[66];let A;e[67]!==$||e[68]!==M?(A=t.jsxs("div",{className:at,children:[Y,$,M]}),e[67]=$,e[68]=M,e[69]=A):A=e[69];let q;e[70]!==R||e[71]!==A?(q=t.jsxs(Me,{align:"end",sideOffset:4,className:Xe,children:[W,R,A]}),e[70]=R,e[71]=A,e[72]=q):q=e[72];let z;e[73]!==f||e[74]!==y||e[75]!==x||e[76]!==I||e[77]!==q?(z=t.jsxs(f,{open:y,onOpenChange:x,children:[I,q]}),e[73]=f,e[74]=y,e[75]=x,e[76]=I,e[77]=q,e[78]=z):z=e[78];let V;e[79]===Symbol.for("react.memo_cache_sentinel")?(V=t.jsx(dt,{}),e[79]=V):V=e[79];let X;return e[80]!==S||e[81]!==z?(X=t.jsxs("div",{className:S,children:[z,V]}),e[80]=S,e[81]=z,e[82]=X):X=e[82],X}function dt(){const e=le.c(9);let s;e[0]===Symbol.for("react.memo_cache_sentinel")?(s={from:"/(app)/observability"},e[0]=s):s=e[0];const a=fe(s),l=ge(),[m,i]=se.useState(!1);let c;e[1]!==l||e[2]!==a.range?(c=()=>{i(!0);const u=a.range??"7d";if(u!=="custom"){const b=he(u);l({to:".",search:d=>({...d,from:b.from,to:b.to}),replace:!0})}setTimeout(()=>i(!1),500)},e[1]=l,e[2]=a.range,e[3]=c):c=e[3];const o=c,_=m?it:void 0;let n;e[4]!==_?(n=t.jsx(Ue,{size:14,className:_}),e[4]=_,e[5]=n):n=e[5];let r;return e[6]!==o||e[7]!==n?(r=t.jsx("button",{type:"button",className:nt,onClick:o,title:"Refresh data",children:n}),e[6]=o,e[7]=n,e[8]=r):r=e[8],r}function Tt(){const e=le.c(19),{toggleSidebar:s}=xe(),a=Se();let l;e[0]!==a?(l=a.filter(ut).map(_t),e[0]=a,e[1]=l):l=e[1];const m=l;let i;e[2]===Symbol.for("react.memo_cache_sentinel")?(i=t.jsx(U,{icon:Ce}),e[2]=i):i=e[2];let c;e[3]!==s?(c=t.jsx(Ee,{onClick:s,size:"icon",variant:"ghost",scheme:"gray",children:i}),e[3]=s,e[4]=c):c=e[4];let o;e[5]===Symbol.for("react.memo_cache_sentinel")?(o=t.jsx(U,{icon:qe,className:Te}),e[5]=o):o=e[5];let _;e[6]!==m?(_=t.jsx(Pe,{items:m}),e[6]=m,e[7]=_):_=e[7];let n;e[8]!==c||e[9]!==_?(n=t.jsxs("div",{className:Le,children:[c,o,_]}),e[8]=c,e[9]=_,e[10]=n):n=e[10];let r;e[11]===Symbol.for("react.memo_cache_sentinel")?(r=t.jsx(bt,{}),e[11]=r):r=e[11];let u;e[12]!==n?(u=t.jsxs(Ie,{className:Oe,children:[n,r]}),e[12]=n,e[13]=u):u=e[13];let b,d;e[14]===Symbol.for("react.memo_cache_sentinel")?(b=je(De,Ge),d=t.jsx(Je,{}),e[14]=b,e[15]=d):(b=e[14],d=e[15]);let f;e[16]===Symbol.for("react.memo_cache_sentinel")?(f=t.jsx("div",{className:Re,children:t.jsxs("div",{className:b,children:[d,t.jsx("div",{className:Ye,children:t.jsx(we,{})})]})}),e[16]=f):f=e[16];let g;return e[17]!==u?(g=t.jsxs(t.Fragment,{children:[u,f]}),e[17]=u,e[18]=g):g=e[18],g}function _t(e){const s=e.loaderData?.title,a=e.staticData.customData?.title,l=s??a;return{key:e.id,label:t.jsx(ae,{to:e.pathname,className:Ne,children:l}),prefix:e.staticData.customData?.icon}}function ut(e){return!!e.staticData.customData?.title||!!e.loaderData?.title}export{Tt as component};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{l as c}from"./index-BCY9aD4r.js";const e=[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]],t=c("check",e);export{t as C};
|