arize-phoenix 12.3.0__py3-none-any.whl → 12.4.0__py3-none-any.whl

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.

Potentially problematic release.


This version of arize-phoenix might be problematic. Click here for more details.

Files changed (37) hide show
  1. {arize_phoenix-12.3.0.dist-info → arize_phoenix-12.4.0.dist-info}/METADATA +2 -1
  2. {arize_phoenix-12.3.0.dist-info → arize_phoenix-12.4.0.dist-info}/RECORD +37 -37
  3. phoenix/auth.py +19 -0
  4. phoenix/config.py +302 -53
  5. phoenix/db/README.md +546 -28
  6. phoenix/server/api/routers/auth.py +21 -30
  7. phoenix/server/api/routers/oauth2.py +213 -24
  8. phoenix/server/api/routers/v1/__init__.py +2 -3
  9. phoenix/server/api/routers/v1/annotation_configs.py +12 -29
  10. phoenix/server/api/routers/v1/annotations.py +21 -22
  11. phoenix/server/api/routers/v1/datasets.py +38 -56
  12. phoenix/server/api/routers/v1/documents.py +2 -3
  13. phoenix/server/api/routers/v1/evaluations.py +12 -24
  14. phoenix/server/api/routers/v1/experiment_evaluations.py +2 -3
  15. phoenix/server/api/routers/v1/experiment_runs.py +9 -10
  16. phoenix/server/api/routers/v1/experiments.py +16 -17
  17. phoenix/server/api/routers/v1/projects.py +15 -21
  18. phoenix/server/api/routers/v1/prompts.py +30 -31
  19. phoenix/server/api/routers/v1/sessions.py +2 -5
  20. phoenix/server/api/routers/v1/spans.py +35 -26
  21. phoenix/server/api/routers/v1/traces.py +11 -19
  22. phoenix/server/api/routers/v1/users.py +14 -23
  23. phoenix/server/api/routers/v1/utils.py +3 -7
  24. phoenix/server/app.py +1 -2
  25. phoenix/server/authorization.py +2 -3
  26. phoenix/server/bearer_auth.py +4 -5
  27. phoenix/server/oauth2.py +172 -5
  28. phoenix/server/static/.vite/manifest.json +9 -9
  29. phoenix/server/static/assets/{components-Bs8eJEpU.js → components-BvsExS75.js} +110 -120
  30. phoenix/server/static/assets/{index-C6WEu5UP.js → index-iq8WDxat.js} +1 -1
  31. phoenix/server/static/assets/{pages-D-n2pkoG.js → pages-Ckg4SLQ9.js} +4 -4
  32. phoenix/trace/attributes.py +80 -13
  33. phoenix/version.py +1 -1
  34. {arize_phoenix-12.3.0.dist-info → arize_phoenix-12.4.0.dist-info}/WHEEL +0 -0
  35. {arize_phoenix-12.3.0.dist-info → arize_phoenix-12.4.0.dist-info}/entry_points.txt +0 -0
  36. {arize_phoenix-12.3.0.dist-info → arize_phoenix-12.4.0.dist-info}/licenses/IP_NOTICE +0 -0
  37. {arize_phoenix-12.3.0.dist-info → arize_phoenix-12.4.0.dist-info}/licenses/LICENSE +0 -0
@@ -1,4 +1,4 @@
1
- import{U as g,j as o,db as y,eO as x,eP as z,eQ as w,V as c,cB as P,eR as a,r as k,o as S,eS as L}from"./vendor-D2eEI-6h.js";import{u as R,q as C}from"./vendor-arizeai-kfOei7nf.js";import{L as E,h as I,r as j,i as D,j as A,F,k as T,P as M,l as G,M as t,n as O,D as _,o as V,E as W,p as q,q as N,s as B,t as U,v as d,w as $,x as K,y as Q,z as H,B as J,C as X,G as Y,H as Z,I as oo,J as ao,K as lo,N as m,O as p,Q as ro,U as co,V as go,W as eo,X as bo,Y as no,Z as io,_ as so,$ as to,a0 as mo,a1 as po,a2 as uo,a3 as fo,a4 as vo,a5 as ho,a6 as yo,a7 as u,a8 as xo,a9 as zo,aa as wo,ab as Po,ac as ko,ad as f,ae as v,af as So,ag as Lo,ah as Ro,ai as Co,aj as Eo,ak as Io,al as jo,am as Do,an as Ao,ao as Fo,ap as To,aq as Mo,ar as Go,as as Oo,at as _o,au as Vo,av as n,aw as Wo,ax as qo,ay as No,az as Bo,aA as Uo,aB as $o,aC as Ko,aD as Qo}from"./pages-D-n2pkoG.js";import{g3 as Ho,cW as Jo,W as Xo,g4 as Yo}from"./components-Bs8eJEpU.js";import"./vendor-three-BLWp5bic.js";import"./vendor-codemirror-1bq_t1Ec.js";import"./vendor-shiki-GGmcIQxA.js";import"./vendor-recharts-DQ4xfrf4.js";(function(){const b=document.createElement("link").relList;if(b&&b.supports&&b.supports("modulepreload"))return;for(const r of document.querySelectorAll('link[rel="modulepreload"]'))s(r);new MutationObserver(r=>{for(const e of r)if(e.type==="childList")for(const i of e.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&s(i)}).observe(document,{childList:!0,subtree:!0});function h(r){const e={};return r.integrity&&(e.integrity=r.integrity),r.referrerPolicy&&(e.referrerPolicy=r.referrerPolicy),r.crossOrigin==="use-credentials"?e.credentials="include":r.crossOrigin==="anonymous"?e.credentials="omit":e.credentials="same-origin",e}function s(r){if(r.ep)return;r.ep=!0;const e=h(r);fetch(r.href,e)}})();const Zo=g`
1
+ import{U as g,j as o,db as y,eO as x,eP as z,eQ as w,V as c,cB as P,eR as a,r as k,o as S,eS as L}from"./vendor-D2eEI-6h.js";import{u as R,q as C}from"./vendor-arizeai-kfOei7nf.js";import{L as E,h as I,r as j,i as D,j as A,F,k as T,P as M,l as G,M as t,n as O,D as _,o as V,E as W,p as q,q as N,s as B,t as U,v as d,w as $,x as K,y as Q,z as H,B as J,C as X,G as Y,H as Z,I as oo,J as ao,K as lo,N as m,O as p,Q as ro,U as co,V as go,W as eo,X as bo,Y as no,Z as io,_ as so,$ as to,a0 as mo,a1 as po,a2 as uo,a3 as fo,a4 as vo,a5 as ho,a6 as yo,a7 as u,a8 as xo,a9 as zo,aa as wo,ab as Po,ac as ko,ad as f,ae as v,af as So,ag as Lo,ah as Ro,ai as Co,aj as Eo,ak as Io,al as jo,am as Do,an as Ao,ao as Fo,ap as To,aq as Mo,ar as Go,as as Oo,at as _o,au as Vo,av as n,aw as Wo,ax as qo,ay as No,az as Bo,aA as Uo,aB as $o,aC as Ko,aD as Qo}from"./pages-Ckg4SLQ9.js";import{g3 as Ho,cW as Jo,W as Xo,g4 as Yo}from"./components-BvsExS75.js";import"./vendor-three-BLWp5bic.js";import"./vendor-codemirror-1bq_t1Ec.js";import"./vendor-shiki-GGmcIQxA.js";import"./vendor-recharts-DQ4xfrf4.js";(function(){const b=document.createElement("link").relList;if(b&&b.supports&&b.supports("modulepreload"))return;for(const r of document.querySelectorAll('link[rel="modulepreload"]'))s(r);new MutationObserver(r=>{for(const e of r)if(e.type==="childList")for(const i of e.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&s(i)}).observe(document,{childList:!0,subtree:!0});function h(r){const e={};return r.integrity&&(e.integrity=r.integrity),r.referrerPolicy&&(e.referrerPolicy=r.referrerPolicy),r.crossOrigin==="use-credentials"?e.credentials="include":r.crossOrigin==="anonymous"?e.credentials="omit":e.credentials="same-origin",e}function s(r){if(r.ep)return;r.ep=!0;const e=h(r);fetch(r.href,e)}})();const Zo=g`
2
2
  :root,
3
3
  .ac-theme {
4
4
  --ac-global-dimension-scale-factor: 1;
@@ -1,4 +1,4 @@
1
- import{K as oe,D as Fe,bX as Oe,I as Fn,B as vr,bY as Pn,J as pt,P as Fr,bZ as In,M as Ql,E as Ho,H as Go,b_ as Aa,b$ as wa,c0 as Ot,N as Ha,O as Bl,r as y,j as e,u as bt,bw as Sa,V as s,a7 as ie,R as da,c1 as xe,o as T,au as ee,bf as Ne,bg as xn,bi as $e,bj as re,aC as Ln,a9 as Y,c2 as Dn,q as kn,ax as ln,c3 as lr,aB as X,aa as de,ab as De,be as ja,U as K,X as fe,c4 as St,c5 as bh,c6 as Sh,c7 as vh,bV as on,ay as ql,c8 as As,aD as Wo,az as Jo,aA as Zo,c9 as Fh,ca as Cr,b7 as oi,cb as Ye,bU as Le,aq as Kr,bD as Rl,a8 as el,cc as Ch,Q as Kh,bk as Wn,cd as Th,bm as Ph,ce as Ih,a0 as Ri,bE as Ul,bW as ca,by as dn,bx as va,cf as tn,m as Xo,W as ws,bu as Yo,Z as xh,cg as Lh,ch as Mi,ci as Vi,cj as it,aW as Zt,ck as Dh,t as vt,cl as Tr,bC as Pr,cm as _h,cn as Eh,ak as Xt,co as Ah,cp as Rs,cq as wh,cr as Rh,cs as Mh,ct as Vh,cu as zh,cv as Nh,cw as $h,cx as jh,cy as Oh,cz as nl,T as Qh,g as ed,cA as Bh,bc as di,cB as nd,cC as ad,cD as qh,cE as Uh,cF as Hh,n as Gh}from"./vendor-D2eEI-6h.js";import{s as Wh,l as Jh,j as Ir,a as Cn,i as Sl,b as Zh,c as Xh,d as ha,e as Fa,f as ld,D as td,g as Za,h as wl,C as Qt,k as Yh,m as Be,T as Hn,n as ek,o as xr,p as Ms,q as nk,r as Vs,t as ak,u as lk,v as tk,P as Ft,w as ik,_ as ne,x as ae,y as ce,z as ue,A as me,B as he,E as ke,F as C,G as ol,H as te,I as rk,J as al,K as b,L as F,M as Lr,N as M,O as x,Q as Kl,R as mn,S as Z,U as id,V as rd,W as we,X as Ie,Y as Te,Z as Se,$ as zs,a0 as Ns,a1 as Ra,a2 as gn,a3 as $n,a4 as Kn,a5 as Tn,a6 as zn,a7 as Ca,a8 as ci,a9 as un,aa as pn,ab as jn,ac as Ee,ad as He,ae as ze,af as ve,ag as be,ah as ea,ai as Hl,aj as sd,ak as bn,al as od,am as yn,an as We,ao as Dr,ap as Ta,aq as dd,ar as cd,as as An,at as ge,au as Ke,av as wn,aw as yt,ax as Pe,ay as en,az as sk,aA as ok,aB as ud,aC as tr,aD as _r,aE as ui,aF as dk,aG as ck,aH as Yt,aI as wt,aJ as md,aK as Ae,aL as Ue,aM as vl,aN as ga,aO as fl,aP as uk,aQ as mk,aR as gd,aS as _e,aT as pd,aU as $s,aV as ei,aW as fn,aX as Jn,aY as Je,aZ as gk,a_ as Ct,a$ as ll,b0 as Zn,b1 as sa,b2 as hn,b3 as pk,b4 as yk,b5 as fk,b6 as Rn,b7 as oa,b8 as hk,b9 as Ea,ba as kk,bb as yd,bc as Er,bd as Pa,be as Ar,bf as wr,bg as bk,bh as Rr,bi as Sk,bj as vk,bk as Fk,bl as Ck,bm as Kk,bn as Tk,bo as Pk,bp as Ik,bq as xk,br as Lk,bs as ft,bt as Dk,bu as Tl,bv as _k,bw as Gl,bx as Qn,by as _n,bz as Ek,bA as mi,bB as gi,bC as Re,bD as ir,bE as Me,bF as Ve,bG as Ma,bH as Ak,bI as wk,bJ as Rk,bK as Xn,bL as Mk,bM as Vk,bN as zk,bO as pi,bP as yi,bQ as fd,bR as Nk,bS as $k,bT as jk,bU as Ok,bV as Qk,bW as Kt,bX as Bk,bY as hd,bZ as ua,b_ as qk,b$ as Uk,c0 as Hk,c1 as Va,c2 as kd,c3 as En,c4 as dl,c5 as Sn,c6 as Gk,c7 as Wl,c8 as Tt,c9 as Jl,ca as ni,cb as bd,cc as Sd,cd as vd,ce as ma,cf as Wk,cg as Jk,ch as Zk,ci as Mr,cj as El,ck as kl,cl as Xk,cm as Vr,cn as fi,co as Xe,cp as hi,cq as ki,cr as rr,cs as Pt,ct as sr,cu as bi,cv as Mn,cw as zr,cx as It,cy as Yk,cz as Fd,cA as Cd,cB as js,cC as Os,cD as e0,cE as Fl,cF as or,cG as Si,cH as zl,cI as Nr,cJ as n0,cK as a0,cL as Na,cM as l0,cN as t0,cO as Zl,cP as Kd,cQ as i0,cR as r0,cS as ka,cT as Td,cU as Xl,cV as vi,cW as na,cX as s0,cY as o0,cZ as Yn,c_ as Ka,c$ as tl,d0 as za,d1 as Pd,d2 as $r,d3 as d0,d4 as c0,d5 as u0,d6 as Id,d7 as xd,d8 as Ld,d9 as m0,da as Dd,db as g0,dc as _d,dd as jr,de as Ed,df as p0,dg as Nl,dh as Or,di as Qr,dj as Ad,dk as wd,dl as $l,dm as vn,dn as Rd,dp as dr,dq as Bt,dr as zi,ds as Ni,dt as y0,du as f0,dv as Br,dw as h0,dx as k0,dy as b0,dz as Fi,dA as S0,dB as Md,dC as v0,dD as F0,dE as C0,dF as K0,dG as T0,dH as P0,dI as I0,dJ as x0,dK as L0,dL as qt,dM as Qs,dN as ht,dO as Ia,dP as Oa,dQ as qr,dR as Vd,dS as zd,dT as Bs,dU as qs,dV as D0,dW as _0,dX as Ce,dY as Ci,dZ as Yl,d_ as Nd,d$ as et,e0 as nt,e1 as $d,e2 as jd,e3 as E0,e4 as A0,e5 as Ur,e6 as w0,e7 as R0,e8 as M0,e9 as V0,ea as z0,eb as Xa,ec as Od,ed as N0,ee as $0,ef as Us,eg as j0,eh as O0,ei as Q0,ej as B0,ek as q0,el as U0,em as Qd,en as H0,eo as G0,ep as W0,eq as J0,er as qe,es as Hr,et as Bd,eu as Ga,ev as Qa,ew as Z0,ex as X0,ey as qd,ez as Y0,eA as Ud,eB as Gr,eC as Ki,eD as pa,eE as ai,eF as eb,eG as cr,eH as nb,eI as ab,eJ as Hd,eK as Gd,eL as lb,eM as ur,eN as Wd,eO as Wr,eP as Jr,eQ as Jd,eR as tb,eS as Hs,eT as ib,eU as aa,eV as la,eW as ta,eX as ia,eY as rb,eZ as sb,e_ as ob,e$ as db,f0 as cb,f1 as xa,f2 as La,f3 as Ba,f4 as xt,f5 as ub,f6 as Ut,f7 as mb,f8 as gb,f9 as pb,fa as yb,fb,fc as Zr,fd as li,fe as hb,ff as kb,fg as bb,fh as Gs,fi as Zd,fj as Sb,fk as Xr,fl as Yr,fm as vb,fn as Ml,fo as Fb,fp as Cb,fq as Kb,fr as Tb,fs as Pb,ft as es,fu as ti,fv as Ib,fw as xb,fx as Xd,fy as Ht,fz as Lb,fA as Db,fB as Yd,fC as _b,fD as Eb,fE as Ab,fF as Pl,fG as wb,fH as Rb,fI as Mb,fJ as Vb,fK as zb,fL as Ws,fM as Gt,fN as Nb,fO as $i,fP as $b,fQ as jb,fR as Js,fS as Zs,fT as Ob,fU as Qb,fV as Bb,fW as qb,fX as Ub,fY as Hb,fZ as ec,f_ as Gb,f$ as Wb,g0 as Jb,g1 as Xs,g2 as Ys}from"./components-Bs8eJEpU.js";import{j as cl,T as ns,k as Zb,f as nc,P as ac,g as ul,h as at,_ as Il,i as Ti,l as Xb,m as lc,D as Yb,n as as,A as eS,o as nS,p as eo}from"./vendor-arizeai-kfOei7nf.js";import{m as ml,n as gl,j as aS,E as tc,R as pl,k as ls,d as lS,p as Lt,q as ic}from"./vendor-codemirror-1bq_t1Ec.js";import{P as ts,C as is,T as nn,a as rs,R as an,b as xl,X as rn,Y as Ge,c as sn,B as Qe,A as kt,d as rc,L as sc,e as Bn,f as ra,g as qn,h as tS}from"./vendor-recharts-DQ4xfrf4.js";const iS=4,rS="Unable to parse span input messages, expected messages which include a role and content.",sS="Unable to parse span output messages, expected messages which include a role and content.",oS="Unable to parse span output expected output.value to be present.",dS="Unable to parse span attributes, attributes must be valid JSON.",cS="Unable to parse model config, expected llm.model_name to be present.",uS="Unable to parse model config, expected llm.invocation_parameters JSON string to be present.",mS="Unable to parse invocation parameters response_format, expected llm.invocation_parameters.response_format to be a well formed json object or undefined.",gS="Unable to parse tools, expected tools to be an array of valid tools.",pS="Unable to parse prompt template variables, expected prompt template variables to be a valid JSON object string.",no={AZURE_OPENAI:[],ANTHROPIC:["claude"],OPENAI:["gpt","o1"],GOOGLE:["gemini"],DEEPSEEK:["deepseek"],XAI:["grok"],OLLAMA:[],AWS:["nova","titan"]},Ya="TOOL_CHOICE",Vl="tool_choice",ba="RESPONSE_FORMAT",ya="response_format",yS=[Ya,ba],fS=oe({tool_call:oe({id:Fe().optional(),function:oe({name:Fe(),arguments:Fe()}).partial()}).partial()}).partial(),oc=oe({[Oe.message]:oe({[Pn.role]:Fe(),[Pn.content]:vr([Fe(),Fn(pt(Fe(),Fr()))]).default(""),[Pn.contents]:Fn(oe({message_content:pt(Fe())})).optional(),[Pn.tool_calls]:Fn(fS).optional(),[Pn.tool_call_id]:Fe().optional()})}),hS=oe({[Oe.llm]:oe({[In.input_messages]:Fn(oc)})}),kS=oe({[Oe.llm]:oe({[In.output_messages]:Fn(oc)})}),bS=oe({[Oe.output]:oe({value:Fe()})}),dc=Wh()(Ql(["user","ai","system","tool"])),SS=oe({id:Ho(),role:dc,content:Fe().optional(),toolCallId:Fe().optional(),toolCalls:Fn(Jh).optional()}),vS=Fn(SS),cc=Go(()=>pt(Ir)),CS=cc,uc=Fe().transform((n,a)=>{const{json:l}=Cn(n);if(!Sl(l))return a.addIssue({code:Aa.custom,message:"The invocation parameters must be a valid JSON object"}),wa;const{success:t,data:i}=CS.safeParse(l);return t?i:(a.addIssue({code:Aa.custom,message:"The invocation parameters must be a valid JSON object"}),wa)}).default("{}"),KS=oe({[Oe.llm]:oe({[In.provider]:Fe().optional(),[In.model_name]:Fe()})}),mc=oe({[Oe.llm]:oe({[In.invocation_parameters]:uc})}),TS=oe({[Oe.llm]:oe({[In.invocation_parameters]:uc.pipe(oe({response_format:cc.optional()}))})}),gc=oe({url:oe({full:Fe(),path:Fe().optional()})}),PS=Fe().transform((n,a)=>{const{json:l}=Cn(n);return l==null||!Sl(l)?(a.addIssue({code:Aa.custom,message:"The tool JSON schema must be a valid JSON object"}),wa):l}).transform((n,a)=>{const{data:l,success:t}=Zh.safeParse(n);return t?l:(a.addIssue({code:Aa.custom,message:"The tool JSON schema must be a valid tool schema"}),wa)}),IS=oe({[Oe.llm]:oe({[In.tools]:Fn(oe({[Oe.tool]:oe({[Ot.json_schema]:PS})}).optional()).optional()}).optional()}).optional(),xS=Go(()=>oe({type:Ha("json_schema"),json_schema:oe({name:Fe().describe("The name of the schema"),schema:Xh.describe("The schema itself in JSON schema format"),strict:Ha(!0).describe("The schema must be strict")})})),LS=Bl(xS,{removeAdditionalStrategy:"passthrough"}),DS=Fe().transform((n,a)=>{const{json:l}=Cn(n);return ha(l)?Object.entries(l).reduce((i,[r,o])=>{if(typeof o=="string")i[r]=o;else{const{json:d}=Fa(o);d!=null&&(i[r]=d)}return i},{}):(a.addIssue({code:Aa.custom,message:"The prompt template variables must be a valid JSON object"}),wa)}),_S=oe({[Oe.llm]:oe({[In.prompt_template]:oe({variables:DS}).optional()}).optional()}).optional();function pc(n){return dc.safeParse(n).success}function Wa(n){const a=n.toLowerCase();if(pc(a))return a;for(const[l,t]of Object.entries(Qt))if(t.includes(a))return l;return Yh}function ES({toolCalls:n,provider:a}){if(n!=null)return n.map(({tool_call:l})=>{var i,r,o,d;if(l==null)return null;let t={};if(((i=l.function)==null?void 0:i.arguments)!=null){const{json:c}=Cn(l.function.arguments);ha(c)&&(t=c)}switch(a){case"OPENAI":case"AZURE_OPENAI":case"DEEPSEEK":case"XAI":case"AWS":case"OLLAMA":return{id:l.id??"",type:"function",function:{name:((r=l.function)==null?void 0:r.name)??"",arguments:t}};case"ANTHROPIC":return{id:l.id??"",type:"tool_use",name:((o=l.function)==null?void 0:o.name)??"",input:t};case"GOOGLE":return{id:l.id??"",function:{name:((d=l.function)==null?void 0:d.name)??"",arguments:t}};default:Be()}}).filter(l=>l!=null)}function yc({messages:n,provider:a}){return n.map(({message:l})=>{var t,i;return{id:Za(),role:l.tool_call_id!=null?Wa("tool"):Wa(l.role),content:Array.isArray(l.contents)?((i=(t=l.contents.find(r=>r.message_content.type==="text"))==null?void 0:t.message_content)==null?void 0:i.text)??void 0:typeof l.content=="string"?l.content:void 0,toolCalls:ES({provider:a,toolCalls:l.tool_calls}),toolCallId:l.tool_call_id}})}function AS({provider:n,parsedAttributes:a}){var t;const l=hS.safeParse(a);if(!l.success)return{messageParsingErrors:[rS],messages:null};if(n==="ANTHROPIC"){const{success:i,data:r}=mc.safeParse(a);if(i){const o=l.data.llm.input_messages,d=(t=r.llm.invocation_parameters)==null?void 0:t.system;typeof d=="string"&&d&&(!o||o[0].message.role!=="system")&&l.data.llm.input_messages.unshift({message:{role:"system",content:d}})}}return{messageParsingErrors:[],messages:yc({provider:n,messages:l.data.llm.input_messages})}}function wS({provider:n,parsedAttributes:a}){const l=[],t=kS.safeParse(a);if(t.success)return{output:yc({provider:n,messages:t.data.llm.output_messages}),outputParsingErrors:l};l.push(sS);const i=bS.safeParse(a);return i.success?{output:i.data.output.value,outputParsingErrors:l}:(l.push(oS),{output:void 0,outputParsingErrors:l})}function fc(n){if(n==null)return null;switch(n.toLowerCase()){case"openai":return"OPENAI";case"anthropic":return"ANTHROPIC";case"aws":return"AWS";case"google":return"GOOGLE";case"azure":return"AZURE_OPENAI";default:return null}}function RS(n){for(const a of Object.keys(no))if(no[a].some(t=>n.includes(t)))return a;return td}function MS(n){const{success:a,data:l}=KS.safeParse(n);if(a){const t=fc(l.llm.provider)||RS(l.llm.model_name),{baseUrl:i}=zS(n),r=t==="AZURE_OPENAI"?VS(n):{deploymentName:null,apiVersion:null,endpoint:null},o=t==="AZURE_OPENAI"&&r.deploymentName?r.deploymentName:l.llm.model_name;return{modelConfig:{...Object.fromEntries(Object.entries({baseUrl:i,endpoint:r.endpoint,apiVersion:r.apiVersion}).filter(([d,c])=>c!==null)),modelName:o,provider:t,invocationParameters:[],supportedInvocationParameters:[]},parsingErrors:[]}}return{modelConfig:null,parsingErrors:[cS]}}function VS(n){var m;const{success:a,data:l}=o1.safeParse(n),t=a&&typeof((m=l==null?void 0:l.metadata)==null?void 0:m.ls_model_name)=="string"&&l.metadata.ls_model_name.trim()?l.metadata.ls_model_name.trim():null,{success:i,data:r}=gc.safeParse(n),{endpoint:o,apiVersion:d,deploymentName:c}=i?d1(r.url.full):{endpoint:null,apiVersion:null,deploymentName:null};return{deploymentName:c??t,apiVersion:d,endpoint:o}}function zS(n){const{success:a,data:l}=gc.safeParse(n);if(a)try{let i=new URL(l.url.full);if(l.url.path)try{i=new URL(l.url.full.split(l.url.path)[0])}catch{}return{baseUrl:`${i.origin}${i.pathname}`}}catch{}return{baseUrl:null}}function NS(n,a=[]){const{success:l,data:t}=mc.safeParse(n),i=[];return l||i.push(uS),{invocationParameters:GS((t==null?void 0:t.llm.invocation_parameters)??{},a),parsingErrors:i}}function $S(n){const{success:a,data:l}=TS.safeParse(n);return a?{responseFormat:l.llm.invocation_parameters.response_format,parsingErrors:[]}:{responseFormat:void 0,parsingErrors:[mS]}}function jS(n){var a;return(((a=n==null?void 0:n.llm)==null?void 0:a.tools)??[]).map(l=>(l==null?void 0:l.tool)==null?null:{id:wl(),definition:l.tool.json_schema}).filter(l=>l!=null)}function OS(n){var t;const{data:a,success:l}=IS.safeParse(n);return l?((t=a==null?void 0:a.llm)==null?void 0:t.tools)==null?{tools:null,parsingErrors:[]}:{tools:jS(a),parsingErrors:[]}:{tools:null,parsingErrors:[gS]}}function QS(n){var t;const{success:a,data:l}=_S.safeParse(n);return a?((t=l==null?void 0:l.llm)==null?void 0:t.prompt_template)==null?{variables:null,parsingErrors:[]}:{variables:l.llm.prompt_template.variables,parsingErrors:[]}:{variables:null,parsingErrors:[pS]}}function BS(n){const{instance:a,instanceMessages:l}=ld(),t={...a,template:{__type:"chat",messages:Object.values(l)}},{json:i,parseError:r}=Cn(n.attributes);if(r)return{playgroundInstance:{...t,spanId:(n==null?void 0:n.id)??null},parsingErrors:[dS]};const o=n.invocationParameters,d=MS(i);let{modelConfig:c}=d;const{parsingErrors:m}=d,{messages:p,messageParsingErrors:g}=AS({provider:(c==null?void 0:c.provider)??t.model.provider,parsedAttributes:i}),{output:u,outputParsingErrors:f}=wS({provider:(c==null?void 0:c.provider)??t.model.provider,parsedAttributes:i}),{invocationParameters:k,parsingErrors:h}=NS(i,o),{variables:S,parsingErrors:v}=QS(i),{parsingErrors:P}=$S(i);c=c!=null?{...c,invocationParameters:P.length>0?k.filter(D=>D.invocationName!==ya&&D.canonicalName!==ba):k}:null;const{tools:I,parsingErrors:A}=OS(i),w=p==null?void 0:p.map(D=>({...D,content:D.role==="tool"?ss(D.content):D.content}));return{playgroundInstance:{...t,model:c??t.model,template:w!=null?{__type:"chat",messages:w}:t.template,output:u,spanId:n.id,tools:I??t.tools},playgroundInput:S!=null?{variablesValueCache:S}:void 0,parsingErrors:[...g,...f,...m,...A,...h,...P,...v]}}const qS=n=>vS.safeParse(n).success,hc=({instance:n,templateFormat:a})=>{if(a==Hn.NONE)return[];const l=new Set,t=n.template.__type,i=ek(a);switch(t){case"chat":{n.template.messages.forEach(r=>{(r.content==null?[]:i.extractVariables(r.content)).forEach(d=>{l.add(d)})});break}case"text_completion":{i.extractVariables(n.template.prompt).forEach(o=>{l.add(o)});break}default:Be()}return Array.from(l)},US=({instances:n,templateFormat:a})=>a==Hn.NONE?[]:Array.from(new Set(n.flatMap(l=>hc({instance:l,templateFormat:a})))),kc=({instances:n,templateFormat:a,input:l})=>{if(a==Hn.NONE)return{variablesMap:{},variableKeys:[]};const t=US({instances:n,templateFormat:a}),i=l.variablesValueCache??{};return{variablesMap:t.reduce((o,d)=>(o[d]=i[d]||"",o),{}),variableKeys:t}};function il(n,a){return n.invocationName===a.invocationName||n.canonicalName!=null&&a.canonicalName!=null&&n.canonicalName===a.canonicalName}const HS=(n,a)=>n.filter(l=>a.some(t=>il(t,l))).map(l=>{var t;return{...l,invocationName:((t=a.find(i=>il(i,l)))==null?void 0:t.invocationName)??l.invocationName}}),lt=n=>n.replace(/_([a-z])/g,(a,l)=>l.toUpperCase()),GS=(n,a)=>Object.entries(n).map(([l,t])=>{const i=a.find(r=>r.canonicalName&&r.canonicalName.toLowerCase()===l.toLowerCase()||r.invocationName&&r.invocationName.toLowerCase()===l.toLowerCase());return i==null||i.invocationInputField==null||i.invocationName==null?null:{canonicalName:i.canonicalName,invocationName:i.invocationName,[lt(i.invocationInputField)]:t}}).filter(l=>l!=null),bc=n=>{const{provider:a,validatedToolDefinition:l}=tk(n.definition);switch(a){case"OPENAI":case"AZURE_OPENAI":return l.function.name;case"ANTHROPIC":return l.name;case"AWS":return l.toolSpec.name;case"UNKNOWN":return null;default:Be()}},WS=({provider:n,toolNumber:a})=>{switch(n){case"OPENAI":case"DEEPSEEK":case"XAI":case"OLLAMA":case"AZURE_OPENAI":return{id:wl(),definition:Vs(a)};case"ANTHROPIC":return{id:wl(),definition:lk(a)};case"AWS":return{id:wl(),definition:ak(a)};case"GOOGLE":return{id:wl(),definition:Vs(a)};default:Be()}},JS=n=>{switch(n){case"OPENAI":case"AZURE_OPENAI":case"DEEPSEEK":case"XAI":case"AWS":case"OLLAMA":return Ms();case"ANTHROPIC":return nk();case"GOOGLE":return Ms();default:Be()}};function ZS(n){return{content:n.content,role:XS(n.role),toolCalls:n.toolCalls,toolCallId:n.toolCallId}}function XS(n){switch(n){case"system":return"SYSTEM";case"user":return"USER";case"tool":return"TOOL";case"ai":return"AI";default:Be()}}const Sc=n=>n.filter(a=>!(a.valueFloat!==null&&typeof a.valueFloat=="number"&&isNaN(a.valueFloat))),vc=({playgroundStore:n,instanceId:a,credentials:l})=>{var u;const{instances:t,allInstanceMessages:i}=n.getState(),r=t.find(f=>f.id===a);if(!r)throw new Error(`No instance found for id ${a}`);if(r.template.__type!=="chat")throw new Error("We only support chat templates for now");const o=r.template.messageIds.map(f=>i[f]).filter(f=>f!=null),d=r.model.supportedInvocationParameters;let c=Sc(r.model.invocationParameters);const m=xr({toolChoice:r.toolChoice,targetProvider:r.model.provider});r.tools.length>0?(c=c.filter(f=>f.invocationName!==Vl&&f.canonicalName!==Ya),c.push({canonicalName:Ya,invocationName:Vl,valueJson:m})):c=c.filter(f=>f.invocationName!==Vl&&f.canonicalName!==Ya),c=d.length?HS(c,d):c;const p=r.model.provider==="AZURE_OPENAI"?{endpoint:r.model.endpoint,apiVersion:r.model.apiVersion}:{},g=r.model.provider==="AWS"?{region:r.model.region}:{};return{messages:o.map(ZS),model:{providerKey:r.model.provider,name:r.model.modelName||"",baseUrl:r.model.baseUrl,customHeaders:r.model.customHeaders,...p,...g},invocationParameters:Cc(c,r.model.provider,r.model.modelName),tools:r.tools.length?r.tools.map(f=>f.definition):void 0,credentials:YS(l,r.model.provider),promptName:(u=r.prompt)==null?void 0:u.name}},Pi=(n,a)=>{if(n.template.__type==="chat"){const{messageIds:l,...t}=n.template;return{...n,template:{...t,messages:n.template.messageIds.map(i=>a[i])}}}return n};function YS(n,a){const l=n[a],t=Ft[a];return l?t.length===0?[]:t.map(i=>({envVarName:i.envVarName,value:l[i.envVarName]??""})):[]}const e1=({playgroundStore:n,instanceId:a,credentials:l})=>{const t=vc({playgroundStore:n,instanceId:a,credentials:l}),{instances:i,templateFormat:r,input:o,allInstanceMessages:d}=n.getState(),c=i.map(p=>Pi(p,d)),{variablesMap:m}=kc({instances:c,input:o,templateFormat:r});return{...t,repetitions:1,template:{variables:m,format:r}}},ao=({playgroundStore:n,instanceId:a,credentials:l,datasetId:t})=>({...vc({playgroundStore:n,instanceId:a,credentials:l}),templateFormat:n.getState().templateFormat,repetitions:n.getState().repetitions,datasetId:t});function ss(n){if(typeof n=="string"){const a=n.startsWith('"{')||n.startsWith('"[')||n.startsWith('"\\"');try{if(a){const t=JSON.parse(n),i=typeof t=="string"?JSON.parse(t):t;return JSON.stringify(i,null,2)}}catch{}if(/^\s*[0-9{[]|true|false|null/.test(n))return n}return JSON.stringify(n,null,2)}function Fc(n,a){return a.filter(l=>l.required).every(l=>n.some(t=>il(t,l)))}const n1=n=>{for(const[a,l]of Object.entries(n))if(a.endsWith("DefaultValue")&&l!=null)return n[a]};function I3(n,a){const l=new Map(n.map(t=>[t.invocationName,t]));return a.forEach(t=>{var c;const i=t.invocationName,r=n1(t),o=lt(t.invocationInputField||"");if(!t.invocationName||!t.invocationInputField||!i||r==null||((c=l.get(i))==null?void 0:c[o])!=null)return;const d={canonicalName:t.canonicalName,invocationName:t.invocationName,[o]:r};l.set(i,d)}),Array.from(l.values())}const a1=oe({type:Ha("enabled")}).passthrough(),l1=oe({type:Ql(["any","tool"])}).passthrough(),t1=(n,a)=>{if(!a)return n;const l=n.some(t=>t.canonicalName==="ANTHROPIC_EXTENDED_THINKING"&&t.valueJson&&a1.safeParse(t.valueJson).success);return n.filter(t=>{if(t.canonicalName==="ANTHROPIC_EXTENDED_THINKING"&&!t.valueJson)return!1;if(l){if(t.canonicalName==="TEMPERATURE"||t.canonicalName==="TOP_P")return!1;if(t.canonicalName===Ya)return!l1.safeParse(t.valueJson).success}return!0})},i1=["frequency_penalty","presence_penalty"],r1=n=>n.filter(l=>l.invocationName&&i1.includes(l.invocationName)?!(l.valueFloat==0||l.valueInt==0):!0),Cc=(n,a,l)=>{const t=r1(n);return a==="ANTHROPIC"?t1(t,l):t},s1=/(?:^|\/)deployments\/([^/]+)(?:\/?|$)/,o1=oe({metadata:oe({ls_model_name:Fe().optional()}).optional()}).passthrough();function d1(n){try{const a=new URL(n),l=a.origin.trim(),t=a.searchParams.get("api-version"),i=t&&t.trim()?t.trim():null,o=(a.pathname||"").toString().match(s1),d=o&&o[1]?o[1].trim():null;return{endpoint:l,apiVersion:i,deploymentName:d}}catch{return{endpoint:null,apiVersion:null,deploymentName:null}}}const Kc=y.createContext(null);function x3({children:n,...a}){const[l]=y.useState(()=>ik(a));return e(Kc.Provider,{value:l,children:n})}function Cl(n,a){const l=y.useContext(Kc);if(!l)throw new Error("Missing CredentialsContext.Provider in the tree");return bt(l,n,a)}const Tc="arize-phoenix-feature-flags",ji={evaluators:!1,datasetSplitsUI:!1,datasetLabel:!1};function c1(){const n=localStorage.getItem(Tc);if(!n)return ji;try{const a=JSON.parse(n);return Object.assign({},ji,a)}catch{return ji}}const Pc=y.createContext(null);function Ic(){const n=da.useContext(Pc);if(n===null)throw new Error("useFeatureFlags must be used within a FeatureFlagsProvider");return n}function jl(n){const{featureFlags:a}=Ic();return a[n]}function L3(n){const[a,l]=y.useState(c1()),t=i=>{localStorage.setItem(Tc,JSON.stringify(i)),l(i)};return e(Pc.Provider,{value:{featureFlags:a,setFeatureFlags:t},children:e(u1,{children:n.children})})}function u1(n){const{children:a}=n,{featureFlags:l,setFeatureFlags:t}=Ic(),[i,r]=y.useState(!1);return Sa("ctrl+shift+f",()=>r(!0)),s(ie,{children:[a,e(te,{isOpen:i,onOpenChange:r,children:e(ne,{size:"S",children:e(ae,{children:s(ce,{children:[s(ue,{children:[e(me,{children:"Feature Flags"}),e(he,{children:e(ke,{slot:"close"})})]}),e(C,{padding:"size-100",children:Object.keys(l).map(o=>e(ol,{isSelected:l[o],onChange:d=>t({...l,[o]:d}),children:o},o))})]})})})})]})}const xc=y.createContext(null);function m1(){const n=y.useContext(xc);if(n===null)throw new Error("useFunctionality must be used within a FunctionalityProvider");return n}function D3(n){return e(xc.Provider,{value:{authenticationEnabled:window.Config.authenticationEnabled},children:n.children})}function _3(){return e("main",{children:"Evaluators Page"})}function E3(){return s(ie,{children:[e(rk,{}),e(xe,{})]})}const Lc={argumentDefinitions:[],kind:"Fragment",metadata:null,name:"GenerativeProvidersCard_data",selections:[{alias:null,args:null,concreteType:"GenerativeProvider",kind:"LinkedField",name:"modelProviders",plural:!0,selections:[{alias:null,args:null,kind:"ScalarField",name:"name",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"key",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"dependenciesInstalled",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"dependencies",storageKey:null},{alias:null,args:null,concreteType:"GenerativeProviderCredentialConfig",kind:"LinkedField",name:"credentialRequirements",plural:!0,selections:[{alias:null,args:null,kind:"ScalarField",name:"envVarName",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"isRequired",storageKey:null}],storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"credentialsSet",storageKey:null}],storageKey:null}],type:"Query",abstractKey:null};Lc.hash="4062531cfa3f77e541172a44101f5331";function g1({query:n}){const a=Cl(d=>d),l=T.useFragment(Lc,n),t=y.useMemo(()=>[...l.modelProviders],[l]),i=y.useMemo(()=>[{header:"Name",accessorKey:"name",cell:({row:d})=>s(b,{direction:"row",alignItems:"center",gap:"size-100",children:[e(al,{provider:d.original.key,height:18}),d.original.name]})},{header:"Environment Variables",accessorKey:"apiKeyEnvVar",cell:({row:d})=>{const c=Ft[d.original.key],m=(c==null?void 0:c.map(p=>p.envVarName).join(", "))||d.original.credentialRequirements.map(p=>p.envVarName).join(", ")||"--";return e(F,{children:m})}},{header:"configuration",accessorKey:"credentialsSet",cell:({row:d})=>{if(!d.original.dependenciesInstalled)return e(F,{color:"warning",children:"missing dependencies"});const c=d.original.credentialRequirements;if(!Lr(d.original.key))return e(F,{color:"warning",children:"unknown provider key"});const m=a[d.original.key];return c.every(({envVarName:g,isRequired:u})=>(m==null?void 0:m[g])!==void 0||!u)?e(F,{color:"success",children:"local"}):d.original.credentialsSet?e(F,{color:"success",children:"configured on the server"}):e(F,{color:"text-700",children:"not configured"})}},{header:"",accessorKey:"id",cell:({row:d})=>e(b,{direction:"row",justifyContent:"end",gap:"size-100",width:"100%",children:s(ee,{children:[e(M,{size:"S",leadingVisual:e(x,{svg:e(Kl,{})})}),e(te,{children:e(ne,{size:"M",children:e(p1,{provider:d.original})})})]})})}],[a]),r=Ne({columns:i,data:t,getCoreRowModel:$e(),getSortedRowModel:xn()}),o=r.getRowModel().rows;return e(Z,{title:"AI Providers",children:s("table",{css:mn,children:[e("thead",{children:r.getHeaderGroups().map(d=>e("tr",{children:d.headers.map(c=>e("th",{colSpan:c.colSpan,children:c.isPlaceholder?null:e("div",{children:re(c.column.columnDef.header,c.getContext())})},c.id))},d.id))}),e("tbody",{children:o.map(d=>e("tr",{children:d.getVisibleCells().map(c=>e("td",{children:re(c.column.columnDef.cell,c.getContext())},c.id))},d.id))})]})})}function p1({provider:n}){return e(ae,{children:s(ce,{children:[s(ue,{children:[s(me,{children:["Configure ",n.name," Credentials"]}),e(he,{children:e(ke,{slot:"close"})})]}),s(C,{padding:"size-200",children:[e(C,{paddingBottom:"size-100",children:s(F,{size:"XS",children:["Set the credentials for the ",n.name," API. These credentials will be stored entirely in your browser and will only be sent to the server during API requests."]})}),s(Ln,{children:[e(y1,{provider:n.key}),e(C,{paddingTop:"size-200",children:s(b,{direction:"row",justifyContent:"end",gap:"size-100",children:[e(M,{variant:"default",size:"S",slot:"close",children:"Cancel"}),e(M,{variant:"primary",size:"S",slot:"close",children:"Save Credentials"})]})})]})]})]})})}function y1({provider:n}){const a=Cl(i=>i.setCredential),l=Ft[n],t=Cl(i=>i[n]);return e(b,{direction:"column",gap:"size-100",children:l.map(i=>s(rd,{isRequired:i.isRequired,onChange:r=>{a({provider:n,envVarName:i.envVarName,value:r})},value:(t==null?void 0:t[i.envVarName])??void 0,children:[e(Y,{children:i.envVarName}),e(id,{})]},i.envVarName))})}function A3(){const n=Dn();return kn(n),e(g1,{query:n})}const Dc={fragment:{argumentDefinitions:[],kind:"Fragment",metadata:null,name:"settingsAIProvidersPageLoaderQuery",selections:[{args:null,kind:"FragmentSpread",name:"GenerativeProvidersCard_data"}],type:"Query",abstractKey:null},kind:"Request",operation:{argumentDefinitions:[],kind:"Operation",name:"settingsAIProvidersPageLoaderQuery",selections:[{alias:null,args:null,concreteType:"GenerativeProvider",kind:"LinkedField",name:"modelProviders",plural:!0,selections:[{alias:null,args:null,kind:"ScalarField",name:"name",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"key",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"dependenciesInstalled",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"dependencies",storageKey:null},{alias:null,args:null,concreteType:"GenerativeProviderCredentialConfig",kind:"LinkedField",name:"credentialRequirements",plural:!0,selections:[{alias:null,args:null,kind:"ScalarField",name:"envVarName",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"isRequired",storageKey:null}],storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"credentialsSet",storageKey:null}],storageKey:null}]},params:{cacheID:"1238ea27e05b70fd2c203ab4be6a1209",id:null,metadata:{},name:"settingsAIProvidersPageLoaderQuery",operationKind:"query",text:`query settingsAIProvidersPageLoaderQuery {
1
+ import{K as oe,D as Fe,bX as Oe,I as Fn,B as vr,bY as Pn,J as pt,P as Fr,bZ as In,M as Ql,E as Ho,H as Go,b_ as Aa,b$ as wa,c0 as Ot,N as Ha,O as Bl,r as y,j as e,u as bt,bw as Sa,V as s,a7 as ie,R as da,c1 as xe,o as T,au as ee,bf as Ne,bg as xn,bi as $e,bj as re,aC as Ln,a9 as Y,c2 as Dn,q as kn,ax as ln,c3 as lr,aB as X,aa as de,ab as De,be as ja,U as K,X as fe,c4 as St,c5 as bh,c6 as Sh,c7 as vh,bV as on,ay as ql,c8 as As,aD as Wo,az as Jo,aA as Zo,c9 as Fh,ca as Cr,b7 as oi,cb as Ye,bU as Le,aq as Kr,bD as Rl,a8 as el,cc as Ch,Q as Kh,bk as Wn,cd as Th,bm as Ph,ce as Ih,a0 as Ri,bE as Ul,bW as ca,by as dn,bx as va,cf as tn,m as Xo,W as ws,bu as Yo,Z as xh,cg as Lh,ch as Mi,ci as Vi,cj as it,aW as Zt,ck as Dh,t as vt,cl as Tr,bC as Pr,cm as _h,cn as Eh,ak as Xt,co as Ah,cp as Rs,cq as wh,cr as Rh,cs as Mh,ct as Vh,cu as zh,cv as Nh,cw as $h,cx as jh,cy as Oh,cz as nl,T as Qh,g as ed,cA as Bh,bc as di,cB as nd,cC as ad,cD as qh,cE as Uh,cF as Hh,n as Gh}from"./vendor-D2eEI-6h.js";import{s as Wh,l as Jh,j as Ir,a as Cn,i as Sl,b as Zh,c as Xh,d as ha,e as Fa,f as ld,D as td,g as Za,h as wl,C as Qt,k as Yh,m as Be,T as Hn,n as ek,o as xr,p as Ms,q as nk,r as Vs,t as ak,u as lk,v as tk,P as Ft,w as ik,_ as ne,x as ae,y as ce,z as ue,A as me,B as he,E as ke,F as C,G as ol,H as te,I as rk,J as al,K as b,L as F,M as Lr,N as M,O as x,Q as Kl,R as mn,S as Z,U as id,V as rd,W as we,X as Ie,Y as Te,Z as Se,$ as zs,a0 as Ns,a1 as Ra,a2 as gn,a3 as $n,a4 as Kn,a5 as Tn,a6 as zn,a7 as Ca,a8 as ci,a9 as un,aa as pn,ab as jn,ac as Ee,ad as He,ae as ze,af as ve,ag as be,ah as ea,ai as Hl,aj as sd,ak as bn,al as od,am as yn,an as We,ao as Dr,ap as Ta,aq as dd,ar as cd,as as An,at as ge,au as Ke,av as wn,aw as yt,ax as Pe,ay as en,az as sk,aA as ok,aB as ud,aC as tr,aD as _r,aE as ui,aF as dk,aG as ck,aH as Yt,aI as wt,aJ as md,aK as Ae,aL as Ue,aM as vl,aN as ga,aO as fl,aP as uk,aQ as mk,aR as gd,aS as _e,aT as pd,aU as $s,aV as ei,aW as fn,aX as Jn,aY as Je,aZ as gk,a_ as Ct,a$ as ll,b0 as Zn,b1 as sa,b2 as hn,b3 as pk,b4 as yk,b5 as fk,b6 as Rn,b7 as oa,b8 as hk,b9 as Ea,ba as kk,bb as yd,bc as Er,bd as Pa,be as Ar,bf as wr,bg as bk,bh as Rr,bi as Sk,bj as vk,bk as Fk,bl as Ck,bm as Kk,bn as Tk,bo as Pk,bp as Ik,bq as xk,br as Lk,bs as ft,bt as Dk,bu as Tl,bv as _k,bw as Gl,bx as Qn,by as _n,bz as Ek,bA as mi,bB as gi,bC as Re,bD as ir,bE as Me,bF as Ve,bG as Ma,bH as Ak,bI as wk,bJ as Rk,bK as Xn,bL as Mk,bM as Vk,bN as zk,bO as pi,bP as yi,bQ as fd,bR as Nk,bS as $k,bT as jk,bU as Ok,bV as Qk,bW as Kt,bX as Bk,bY as hd,bZ as ua,b_ as qk,b$ as Uk,c0 as Hk,c1 as Va,c2 as kd,c3 as En,c4 as dl,c5 as Sn,c6 as Gk,c7 as Wl,c8 as Tt,c9 as Jl,ca as ni,cb as bd,cc as Sd,cd as vd,ce as ma,cf as Wk,cg as Jk,ch as Zk,ci as Mr,cj as El,ck as kl,cl as Xk,cm as Vr,cn as fi,co as Xe,cp as hi,cq as ki,cr as rr,cs as Pt,ct as sr,cu as bi,cv as Mn,cw as zr,cx as It,cy as Yk,cz as Fd,cA as Cd,cB as js,cC as Os,cD as e0,cE as Fl,cF as or,cG as Si,cH as zl,cI as Nr,cJ as n0,cK as a0,cL as Na,cM as l0,cN as t0,cO as Zl,cP as Kd,cQ as i0,cR as r0,cS as ka,cT as Td,cU as Xl,cV as vi,cW as na,cX as s0,cY as o0,cZ as Yn,c_ as Ka,c$ as tl,d0 as za,d1 as Pd,d2 as $r,d3 as d0,d4 as c0,d5 as u0,d6 as Id,d7 as xd,d8 as Ld,d9 as m0,da as Dd,db as g0,dc as _d,dd as jr,de as Ed,df as p0,dg as Nl,dh as Or,di as Qr,dj as Ad,dk as wd,dl as $l,dm as vn,dn as Rd,dp as dr,dq as Bt,dr as zi,ds as Ni,dt as y0,du as f0,dv as Br,dw as h0,dx as k0,dy as b0,dz as Fi,dA as S0,dB as Md,dC as v0,dD as F0,dE as C0,dF as K0,dG as T0,dH as P0,dI as I0,dJ as x0,dK as L0,dL as qt,dM as Qs,dN as ht,dO as Ia,dP as Oa,dQ as qr,dR as Vd,dS as zd,dT as Bs,dU as qs,dV as D0,dW as _0,dX as Ce,dY as Ci,dZ as Yl,d_ as Nd,d$ as et,e0 as nt,e1 as $d,e2 as jd,e3 as E0,e4 as A0,e5 as Ur,e6 as w0,e7 as R0,e8 as M0,e9 as V0,ea as z0,eb as Xa,ec as Od,ed as N0,ee as $0,ef as Us,eg as j0,eh as O0,ei as Q0,ej as B0,ek as q0,el as U0,em as Qd,en as H0,eo as G0,ep as W0,eq as J0,er as qe,es as Hr,et as Bd,eu as Ga,ev as Qa,ew as Z0,ex as X0,ey as qd,ez as Y0,eA as Ud,eB as Gr,eC as Ki,eD as pa,eE as ai,eF as eb,eG as cr,eH as nb,eI as ab,eJ as Hd,eK as Gd,eL as lb,eM as ur,eN as Wd,eO as Wr,eP as Jr,eQ as Jd,eR as tb,eS as Hs,eT as ib,eU as aa,eV as la,eW as ta,eX as ia,eY as rb,eZ as sb,e_ as ob,e$ as db,f0 as cb,f1 as xa,f2 as La,f3 as Ba,f4 as xt,f5 as ub,f6 as Ut,f7 as mb,f8 as gb,f9 as pb,fa as yb,fb,fc as Zr,fd as li,fe as hb,ff as kb,fg as bb,fh as Gs,fi as Zd,fj as Sb,fk as Xr,fl as Yr,fm as vb,fn as Ml,fo as Fb,fp as Cb,fq as Kb,fr as Tb,fs as Pb,ft as es,fu as ti,fv as Ib,fw as xb,fx as Xd,fy as Ht,fz as Lb,fA as Db,fB as Yd,fC as _b,fD as Eb,fE as Ab,fF as Pl,fG as wb,fH as Rb,fI as Mb,fJ as Vb,fK as zb,fL as Ws,fM as Gt,fN as Nb,fO as $i,fP as $b,fQ as jb,fR as Js,fS as Zs,fT as Ob,fU as Qb,fV as Bb,fW as qb,fX as Ub,fY as Hb,fZ as ec,f_ as Gb,f$ as Wb,g0 as Jb,g1 as Xs,g2 as Ys}from"./components-BvsExS75.js";import{j as cl,T as ns,k as Zb,f as nc,P as ac,g as ul,h as at,_ as Il,i as Ti,l as Xb,m as lc,D as Yb,n as as,A as eS,o as nS,p as eo}from"./vendor-arizeai-kfOei7nf.js";import{m as ml,n as gl,j as aS,E as tc,R as pl,k as ls,d as lS,p as Lt,q as ic}from"./vendor-codemirror-1bq_t1Ec.js";import{P as ts,C as is,T as nn,a as rs,R as an,b as xl,X as rn,Y as Ge,c as sn,B as Qe,A as kt,d as rc,L as sc,e as Bn,f as ra,g as qn,h as tS}from"./vendor-recharts-DQ4xfrf4.js";const iS=4,rS="Unable to parse span input messages, expected messages which include a role and content.",sS="Unable to parse span output messages, expected messages which include a role and content.",oS="Unable to parse span output expected output.value to be present.",dS="Unable to parse span attributes, attributes must be valid JSON.",cS="Unable to parse model config, expected llm.model_name to be present.",uS="Unable to parse model config, expected llm.invocation_parameters JSON string to be present.",mS="Unable to parse invocation parameters response_format, expected llm.invocation_parameters.response_format to be a well formed json object or undefined.",gS="Unable to parse tools, expected tools to be an array of valid tools.",pS="Unable to parse prompt template variables, expected prompt template variables to be a valid JSON object string.",no={AZURE_OPENAI:[],ANTHROPIC:["claude"],OPENAI:["gpt","o1"],GOOGLE:["gemini"],DEEPSEEK:["deepseek"],XAI:["grok"],OLLAMA:[],AWS:["nova","titan"]},Ya="TOOL_CHOICE",Vl="tool_choice",ba="RESPONSE_FORMAT",ya="response_format",yS=[Ya,ba],fS=oe({tool_call:oe({id:Fe().optional(),function:oe({name:Fe(),arguments:Fe()}).partial()}).partial()}).partial(),oc=oe({[Oe.message]:oe({[Pn.role]:Fe(),[Pn.content]:vr([Fe(),Fn(pt(Fe(),Fr()))]).default(""),[Pn.contents]:Fn(oe({message_content:pt(Fe())})).optional(),[Pn.tool_calls]:Fn(fS).optional(),[Pn.tool_call_id]:Fe().optional()})}),hS=oe({[Oe.llm]:oe({[In.input_messages]:Fn(oc)})}),kS=oe({[Oe.llm]:oe({[In.output_messages]:Fn(oc)})}),bS=oe({[Oe.output]:oe({value:Fe()})}),dc=Wh()(Ql(["user","ai","system","tool"])),SS=oe({id:Ho(),role:dc,content:Fe().optional(),toolCallId:Fe().optional(),toolCalls:Fn(Jh).optional()}),vS=Fn(SS),cc=Go(()=>pt(Ir)),CS=cc,uc=Fe().transform((n,a)=>{const{json:l}=Cn(n);if(!Sl(l))return a.addIssue({code:Aa.custom,message:"The invocation parameters must be a valid JSON object"}),wa;const{success:t,data:i}=CS.safeParse(l);return t?i:(a.addIssue({code:Aa.custom,message:"The invocation parameters must be a valid JSON object"}),wa)}).default("{}"),KS=oe({[Oe.llm]:oe({[In.provider]:Fe().optional(),[In.model_name]:Fe()})}),mc=oe({[Oe.llm]:oe({[In.invocation_parameters]:uc})}),TS=oe({[Oe.llm]:oe({[In.invocation_parameters]:uc.pipe(oe({response_format:cc.optional()}))})}),gc=oe({url:oe({full:Fe(),path:Fe().optional()})}),PS=Fe().transform((n,a)=>{const{json:l}=Cn(n);return l==null||!Sl(l)?(a.addIssue({code:Aa.custom,message:"The tool JSON schema must be a valid JSON object"}),wa):l}).transform((n,a)=>{const{data:l,success:t}=Zh.safeParse(n);return t?l:(a.addIssue({code:Aa.custom,message:"The tool JSON schema must be a valid tool schema"}),wa)}),IS=oe({[Oe.llm]:oe({[In.tools]:Fn(oe({[Oe.tool]:oe({[Ot.json_schema]:PS})}).optional()).optional()}).optional()}).optional(),xS=Go(()=>oe({type:Ha("json_schema"),json_schema:oe({name:Fe().describe("The name of the schema"),schema:Xh.describe("The schema itself in JSON schema format"),strict:Ha(!0).describe("The schema must be strict")})})),LS=Bl(xS,{removeAdditionalStrategy:"passthrough"}),DS=Fe().transform((n,a)=>{const{json:l}=Cn(n);return ha(l)?Object.entries(l).reduce((i,[r,o])=>{if(typeof o=="string")i[r]=o;else{const{json:d}=Fa(o);d!=null&&(i[r]=d)}return i},{}):(a.addIssue({code:Aa.custom,message:"The prompt template variables must be a valid JSON object"}),wa)}),_S=oe({[Oe.llm]:oe({[In.prompt_template]:oe({variables:DS}).optional()}).optional()}).optional();function pc(n){return dc.safeParse(n).success}function Wa(n){const a=n.toLowerCase();if(pc(a))return a;for(const[l,t]of Object.entries(Qt))if(t.includes(a))return l;return Yh}function ES({toolCalls:n,provider:a}){if(n!=null)return n.map(({tool_call:l})=>{var i,r,o,d;if(l==null)return null;let t={};if(((i=l.function)==null?void 0:i.arguments)!=null){const{json:c}=Cn(l.function.arguments);ha(c)&&(t=c)}switch(a){case"OPENAI":case"AZURE_OPENAI":case"DEEPSEEK":case"XAI":case"AWS":case"OLLAMA":return{id:l.id??"",type:"function",function:{name:((r=l.function)==null?void 0:r.name)??"",arguments:t}};case"ANTHROPIC":return{id:l.id??"",type:"tool_use",name:((o=l.function)==null?void 0:o.name)??"",input:t};case"GOOGLE":return{id:l.id??"",function:{name:((d=l.function)==null?void 0:d.name)??"",arguments:t}};default:Be()}}).filter(l=>l!=null)}function yc({messages:n,provider:a}){return n.map(({message:l})=>{var t,i;return{id:Za(),role:l.tool_call_id!=null?Wa("tool"):Wa(l.role),content:Array.isArray(l.contents)?((i=(t=l.contents.find(r=>r.message_content.type==="text"))==null?void 0:t.message_content)==null?void 0:i.text)??void 0:typeof l.content=="string"?l.content:void 0,toolCalls:ES({provider:a,toolCalls:l.tool_calls}),toolCallId:l.tool_call_id}})}function AS({provider:n,parsedAttributes:a}){var t;const l=hS.safeParse(a);if(!l.success)return{messageParsingErrors:[rS],messages:null};if(n==="ANTHROPIC"){const{success:i,data:r}=mc.safeParse(a);if(i){const o=l.data.llm.input_messages,d=(t=r.llm.invocation_parameters)==null?void 0:t.system;typeof d=="string"&&d&&(!o||o[0].message.role!=="system")&&l.data.llm.input_messages.unshift({message:{role:"system",content:d}})}}return{messageParsingErrors:[],messages:yc({provider:n,messages:l.data.llm.input_messages})}}function wS({provider:n,parsedAttributes:a}){const l=[],t=kS.safeParse(a);if(t.success)return{output:yc({provider:n,messages:t.data.llm.output_messages}),outputParsingErrors:l};l.push(sS);const i=bS.safeParse(a);return i.success?{output:i.data.output.value,outputParsingErrors:l}:(l.push(oS),{output:void 0,outputParsingErrors:l})}function fc(n){if(n==null)return null;switch(n.toLowerCase()){case"openai":return"OPENAI";case"anthropic":return"ANTHROPIC";case"aws":return"AWS";case"google":return"GOOGLE";case"azure":return"AZURE_OPENAI";default:return null}}function RS(n){for(const a of Object.keys(no))if(no[a].some(t=>n.includes(t)))return a;return td}function MS(n){const{success:a,data:l}=KS.safeParse(n);if(a){const t=fc(l.llm.provider)||RS(l.llm.model_name),{baseUrl:i}=zS(n),r=t==="AZURE_OPENAI"?VS(n):{deploymentName:null,apiVersion:null,endpoint:null},o=t==="AZURE_OPENAI"&&r.deploymentName?r.deploymentName:l.llm.model_name;return{modelConfig:{...Object.fromEntries(Object.entries({baseUrl:i,endpoint:r.endpoint,apiVersion:r.apiVersion}).filter(([d,c])=>c!==null)),modelName:o,provider:t,invocationParameters:[],supportedInvocationParameters:[]},parsingErrors:[]}}return{modelConfig:null,parsingErrors:[cS]}}function VS(n){var m;const{success:a,data:l}=o1.safeParse(n),t=a&&typeof((m=l==null?void 0:l.metadata)==null?void 0:m.ls_model_name)=="string"&&l.metadata.ls_model_name.trim()?l.metadata.ls_model_name.trim():null,{success:i,data:r}=gc.safeParse(n),{endpoint:o,apiVersion:d,deploymentName:c}=i?d1(r.url.full):{endpoint:null,apiVersion:null,deploymentName:null};return{deploymentName:c??t,apiVersion:d,endpoint:o}}function zS(n){const{success:a,data:l}=gc.safeParse(n);if(a)try{let i=new URL(l.url.full);if(l.url.path)try{i=new URL(l.url.full.split(l.url.path)[0])}catch{}return{baseUrl:`${i.origin}${i.pathname}`}}catch{}return{baseUrl:null}}function NS(n,a=[]){const{success:l,data:t}=mc.safeParse(n),i=[];return l||i.push(uS),{invocationParameters:GS((t==null?void 0:t.llm.invocation_parameters)??{},a),parsingErrors:i}}function $S(n){const{success:a,data:l}=TS.safeParse(n);return a?{responseFormat:l.llm.invocation_parameters.response_format,parsingErrors:[]}:{responseFormat:void 0,parsingErrors:[mS]}}function jS(n){var a;return(((a=n==null?void 0:n.llm)==null?void 0:a.tools)??[]).map(l=>(l==null?void 0:l.tool)==null?null:{id:wl(),definition:l.tool.json_schema}).filter(l=>l!=null)}function OS(n){var t;const{data:a,success:l}=IS.safeParse(n);return l?((t=a==null?void 0:a.llm)==null?void 0:t.tools)==null?{tools:null,parsingErrors:[]}:{tools:jS(a),parsingErrors:[]}:{tools:null,parsingErrors:[gS]}}function QS(n){var t;const{success:a,data:l}=_S.safeParse(n);return a?((t=l==null?void 0:l.llm)==null?void 0:t.prompt_template)==null?{variables:null,parsingErrors:[]}:{variables:l.llm.prompt_template.variables,parsingErrors:[]}:{variables:null,parsingErrors:[pS]}}function BS(n){const{instance:a,instanceMessages:l}=ld(),t={...a,template:{__type:"chat",messages:Object.values(l)}},{json:i,parseError:r}=Cn(n.attributes);if(r)return{playgroundInstance:{...t,spanId:(n==null?void 0:n.id)??null},parsingErrors:[dS]};const o=n.invocationParameters,d=MS(i);let{modelConfig:c}=d;const{parsingErrors:m}=d,{messages:p,messageParsingErrors:g}=AS({provider:(c==null?void 0:c.provider)??t.model.provider,parsedAttributes:i}),{output:u,outputParsingErrors:f}=wS({provider:(c==null?void 0:c.provider)??t.model.provider,parsedAttributes:i}),{invocationParameters:k,parsingErrors:h}=NS(i,o),{variables:S,parsingErrors:v}=QS(i),{parsingErrors:P}=$S(i);c=c!=null?{...c,invocationParameters:P.length>0?k.filter(D=>D.invocationName!==ya&&D.canonicalName!==ba):k}:null;const{tools:I,parsingErrors:A}=OS(i),w=p==null?void 0:p.map(D=>({...D,content:D.role==="tool"?ss(D.content):D.content}));return{playgroundInstance:{...t,model:c??t.model,template:w!=null?{__type:"chat",messages:w}:t.template,output:u,spanId:n.id,tools:I??t.tools},playgroundInput:S!=null?{variablesValueCache:S}:void 0,parsingErrors:[...g,...f,...m,...A,...h,...P,...v]}}const qS=n=>vS.safeParse(n).success,hc=({instance:n,templateFormat:a})=>{if(a==Hn.NONE)return[];const l=new Set,t=n.template.__type,i=ek(a);switch(t){case"chat":{n.template.messages.forEach(r=>{(r.content==null?[]:i.extractVariables(r.content)).forEach(d=>{l.add(d)})});break}case"text_completion":{i.extractVariables(n.template.prompt).forEach(o=>{l.add(o)});break}default:Be()}return Array.from(l)},US=({instances:n,templateFormat:a})=>a==Hn.NONE?[]:Array.from(new Set(n.flatMap(l=>hc({instance:l,templateFormat:a})))),kc=({instances:n,templateFormat:a,input:l})=>{if(a==Hn.NONE)return{variablesMap:{},variableKeys:[]};const t=US({instances:n,templateFormat:a}),i=l.variablesValueCache??{};return{variablesMap:t.reduce((o,d)=>(o[d]=i[d]||"",o),{}),variableKeys:t}};function il(n,a){return n.invocationName===a.invocationName||n.canonicalName!=null&&a.canonicalName!=null&&n.canonicalName===a.canonicalName}const HS=(n,a)=>n.filter(l=>a.some(t=>il(t,l))).map(l=>{var t;return{...l,invocationName:((t=a.find(i=>il(i,l)))==null?void 0:t.invocationName)??l.invocationName}}),lt=n=>n.replace(/_([a-z])/g,(a,l)=>l.toUpperCase()),GS=(n,a)=>Object.entries(n).map(([l,t])=>{const i=a.find(r=>r.canonicalName&&r.canonicalName.toLowerCase()===l.toLowerCase()||r.invocationName&&r.invocationName.toLowerCase()===l.toLowerCase());return i==null||i.invocationInputField==null||i.invocationName==null?null:{canonicalName:i.canonicalName,invocationName:i.invocationName,[lt(i.invocationInputField)]:t}}).filter(l=>l!=null),bc=n=>{const{provider:a,validatedToolDefinition:l}=tk(n.definition);switch(a){case"OPENAI":case"AZURE_OPENAI":return l.function.name;case"ANTHROPIC":return l.name;case"AWS":return l.toolSpec.name;case"UNKNOWN":return null;default:Be()}},WS=({provider:n,toolNumber:a})=>{switch(n){case"OPENAI":case"DEEPSEEK":case"XAI":case"OLLAMA":case"AZURE_OPENAI":return{id:wl(),definition:Vs(a)};case"ANTHROPIC":return{id:wl(),definition:lk(a)};case"AWS":return{id:wl(),definition:ak(a)};case"GOOGLE":return{id:wl(),definition:Vs(a)};default:Be()}},JS=n=>{switch(n){case"OPENAI":case"AZURE_OPENAI":case"DEEPSEEK":case"XAI":case"AWS":case"OLLAMA":return Ms();case"ANTHROPIC":return nk();case"GOOGLE":return Ms();default:Be()}};function ZS(n){return{content:n.content,role:XS(n.role),toolCalls:n.toolCalls,toolCallId:n.toolCallId}}function XS(n){switch(n){case"system":return"SYSTEM";case"user":return"USER";case"tool":return"TOOL";case"ai":return"AI";default:Be()}}const Sc=n=>n.filter(a=>!(a.valueFloat!==null&&typeof a.valueFloat=="number"&&isNaN(a.valueFloat))),vc=({playgroundStore:n,instanceId:a,credentials:l})=>{var u;const{instances:t,allInstanceMessages:i}=n.getState(),r=t.find(f=>f.id===a);if(!r)throw new Error(`No instance found for id ${a}`);if(r.template.__type!=="chat")throw new Error("We only support chat templates for now");const o=r.template.messageIds.map(f=>i[f]).filter(f=>f!=null),d=r.model.supportedInvocationParameters;let c=Sc(r.model.invocationParameters);const m=xr({toolChoice:r.toolChoice,targetProvider:r.model.provider});r.tools.length>0?(c=c.filter(f=>f.invocationName!==Vl&&f.canonicalName!==Ya),c.push({canonicalName:Ya,invocationName:Vl,valueJson:m})):c=c.filter(f=>f.invocationName!==Vl&&f.canonicalName!==Ya),c=d.length?HS(c,d):c;const p=r.model.provider==="AZURE_OPENAI"?{endpoint:r.model.endpoint,apiVersion:r.model.apiVersion}:{},g=r.model.provider==="AWS"?{region:r.model.region}:{};return{messages:o.map(ZS),model:{providerKey:r.model.provider,name:r.model.modelName||"",baseUrl:r.model.baseUrl,customHeaders:r.model.customHeaders,...p,...g},invocationParameters:Cc(c,r.model.provider,r.model.modelName),tools:r.tools.length?r.tools.map(f=>f.definition):void 0,credentials:YS(l,r.model.provider),promptName:(u=r.prompt)==null?void 0:u.name}},Pi=(n,a)=>{if(n.template.__type==="chat"){const{messageIds:l,...t}=n.template;return{...n,template:{...t,messages:n.template.messageIds.map(i=>a[i])}}}return n};function YS(n,a){const l=n[a],t=Ft[a];return l?t.length===0?[]:t.map(i=>({envVarName:i.envVarName,value:l[i.envVarName]??""})):[]}const e1=({playgroundStore:n,instanceId:a,credentials:l})=>{const t=vc({playgroundStore:n,instanceId:a,credentials:l}),{instances:i,templateFormat:r,input:o,allInstanceMessages:d}=n.getState(),c=i.map(p=>Pi(p,d)),{variablesMap:m}=kc({instances:c,input:o,templateFormat:r});return{...t,repetitions:1,template:{variables:m,format:r}}},ao=({playgroundStore:n,instanceId:a,credentials:l,datasetId:t})=>({...vc({playgroundStore:n,instanceId:a,credentials:l}),templateFormat:n.getState().templateFormat,repetitions:n.getState().repetitions,datasetId:t});function ss(n){if(typeof n=="string"){const a=n.startsWith('"{')||n.startsWith('"[')||n.startsWith('"\\"');try{if(a){const t=JSON.parse(n),i=typeof t=="string"?JSON.parse(t):t;return JSON.stringify(i,null,2)}}catch{}if(/^\s*[0-9{[]|true|false|null/.test(n))return n}return JSON.stringify(n,null,2)}function Fc(n,a){return a.filter(l=>l.required).every(l=>n.some(t=>il(t,l)))}const n1=n=>{for(const[a,l]of Object.entries(n))if(a.endsWith("DefaultValue")&&l!=null)return n[a]};function I3(n,a){const l=new Map(n.map(t=>[t.invocationName,t]));return a.forEach(t=>{var c;const i=t.invocationName,r=n1(t),o=lt(t.invocationInputField||"");if(!t.invocationName||!t.invocationInputField||!i||r==null||((c=l.get(i))==null?void 0:c[o])!=null)return;const d={canonicalName:t.canonicalName,invocationName:t.invocationName,[o]:r};l.set(i,d)}),Array.from(l.values())}const a1=oe({type:Ha("enabled")}).passthrough(),l1=oe({type:Ql(["any","tool"])}).passthrough(),t1=(n,a)=>{if(!a)return n;const l=n.some(t=>t.canonicalName==="ANTHROPIC_EXTENDED_THINKING"&&t.valueJson&&a1.safeParse(t.valueJson).success);return n.filter(t=>{if(t.canonicalName==="ANTHROPIC_EXTENDED_THINKING"&&!t.valueJson)return!1;if(l){if(t.canonicalName==="TEMPERATURE"||t.canonicalName==="TOP_P")return!1;if(t.canonicalName===Ya)return!l1.safeParse(t.valueJson).success}return!0})},i1=["frequency_penalty","presence_penalty"],r1=n=>n.filter(l=>l.invocationName&&i1.includes(l.invocationName)?!(l.valueFloat==0||l.valueInt==0):!0),Cc=(n,a,l)=>{const t=r1(n);return a==="ANTHROPIC"?t1(t,l):t},s1=/(?:^|\/)deployments\/([^/]+)(?:\/?|$)/,o1=oe({metadata:oe({ls_model_name:Fe().optional()}).optional()}).passthrough();function d1(n){try{const a=new URL(n),l=a.origin.trim(),t=a.searchParams.get("api-version"),i=t&&t.trim()?t.trim():null,o=(a.pathname||"").toString().match(s1),d=o&&o[1]?o[1].trim():null;return{endpoint:l,apiVersion:i,deploymentName:d}}catch{return{endpoint:null,apiVersion:null,deploymentName:null}}}const Kc=y.createContext(null);function x3({children:n,...a}){const[l]=y.useState(()=>ik(a));return e(Kc.Provider,{value:l,children:n})}function Cl(n,a){const l=y.useContext(Kc);if(!l)throw new Error("Missing CredentialsContext.Provider in the tree");return bt(l,n,a)}const Tc="arize-phoenix-feature-flags",ji={evaluators:!1,datasetSplitsUI:!1,datasetLabel:!1};function c1(){const n=localStorage.getItem(Tc);if(!n)return ji;try{const a=JSON.parse(n);return Object.assign({},ji,a)}catch{return ji}}const Pc=y.createContext(null);function Ic(){const n=da.useContext(Pc);if(n===null)throw new Error("useFeatureFlags must be used within a FeatureFlagsProvider");return n}function jl(n){const{featureFlags:a}=Ic();return a[n]}function L3(n){const[a,l]=y.useState(c1()),t=i=>{localStorage.setItem(Tc,JSON.stringify(i)),l(i)};return e(Pc.Provider,{value:{featureFlags:a,setFeatureFlags:t},children:e(u1,{children:n.children})})}function u1(n){const{children:a}=n,{featureFlags:l,setFeatureFlags:t}=Ic(),[i,r]=y.useState(!1);return Sa("ctrl+shift+f",()=>r(!0)),s(ie,{children:[a,e(te,{isOpen:i,onOpenChange:r,children:e(ne,{size:"S",children:e(ae,{children:s(ce,{children:[s(ue,{children:[e(me,{children:"Feature Flags"}),e(he,{children:e(ke,{slot:"close"})})]}),e(C,{padding:"size-100",children:Object.keys(l).map(o=>e(ol,{isSelected:l[o],onChange:d=>t({...l,[o]:d}),children:o},o))})]})})})})]})}const xc=y.createContext(null);function m1(){const n=y.useContext(xc);if(n===null)throw new Error("useFunctionality must be used within a FunctionalityProvider");return n}function D3(n){return e(xc.Provider,{value:{authenticationEnabled:window.Config.authenticationEnabled},children:n.children})}function _3(){return e("main",{children:"Evaluators Page"})}function E3(){return s(ie,{children:[e(rk,{}),e(xe,{})]})}const Lc={argumentDefinitions:[],kind:"Fragment",metadata:null,name:"GenerativeProvidersCard_data",selections:[{alias:null,args:null,concreteType:"GenerativeProvider",kind:"LinkedField",name:"modelProviders",plural:!0,selections:[{alias:null,args:null,kind:"ScalarField",name:"name",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"key",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"dependenciesInstalled",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"dependencies",storageKey:null},{alias:null,args:null,concreteType:"GenerativeProviderCredentialConfig",kind:"LinkedField",name:"credentialRequirements",plural:!0,selections:[{alias:null,args:null,kind:"ScalarField",name:"envVarName",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"isRequired",storageKey:null}],storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"credentialsSet",storageKey:null}],storageKey:null}],type:"Query",abstractKey:null};Lc.hash="4062531cfa3f77e541172a44101f5331";function g1({query:n}){const a=Cl(d=>d),l=T.useFragment(Lc,n),t=y.useMemo(()=>[...l.modelProviders],[l]),i=y.useMemo(()=>[{header:"Name",accessorKey:"name",cell:({row:d})=>s(b,{direction:"row",alignItems:"center",gap:"size-100",children:[e(al,{provider:d.original.key,height:18}),d.original.name]})},{header:"Environment Variables",accessorKey:"apiKeyEnvVar",cell:({row:d})=>{const c=Ft[d.original.key],m=(c==null?void 0:c.map(p=>p.envVarName).join(", "))||d.original.credentialRequirements.map(p=>p.envVarName).join(", ")||"--";return e(F,{children:m})}},{header:"configuration",accessorKey:"credentialsSet",cell:({row:d})=>{if(!d.original.dependenciesInstalled)return e(F,{color:"warning",children:"missing dependencies"});const c=d.original.credentialRequirements;if(!Lr(d.original.key))return e(F,{color:"warning",children:"unknown provider key"});const m=a[d.original.key];return c.every(({envVarName:g,isRequired:u})=>(m==null?void 0:m[g])!==void 0||!u)?e(F,{color:"success",children:"local"}):d.original.credentialsSet?e(F,{color:"success",children:"configured on the server"}):e(F,{color:"text-700",children:"not configured"})}},{header:"",accessorKey:"id",cell:({row:d})=>e(b,{direction:"row",justifyContent:"end",gap:"size-100",width:"100%",children:s(ee,{children:[e(M,{size:"S",leadingVisual:e(x,{svg:e(Kl,{})})}),e(te,{children:e(ne,{size:"M",children:e(p1,{provider:d.original})})})]})})}],[a]),r=Ne({columns:i,data:t,getCoreRowModel:$e(),getSortedRowModel:xn()}),o=r.getRowModel().rows;return e(Z,{title:"AI Providers",children:s("table",{css:mn,children:[e("thead",{children:r.getHeaderGroups().map(d=>e("tr",{children:d.headers.map(c=>e("th",{colSpan:c.colSpan,children:c.isPlaceholder?null:e("div",{children:re(c.column.columnDef.header,c.getContext())})},c.id))},d.id))}),e("tbody",{children:o.map(d=>e("tr",{children:d.getVisibleCells().map(c=>e("td",{children:re(c.column.columnDef.cell,c.getContext())},c.id))},d.id))})]})})}function p1({provider:n}){return e(ae,{children:s(ce,{children:[s(ue,{children:[s(me,{children:["Configure ",n.name," Credentials"]}),e(he,{children:e(ke,{slot:"close"})})]}),s(C,{padding:"size-200",children:[e(C,{paddingBottom:"size-100",children:s(F,{size:"XS",children:["Set the credentials for the ",n.name," API. These credentials will be stored entirely in your browser and will only be sent to the server during API requests."]})}),s(Ln,{children:[e(y1,{provider:n.key}),e(C,{paddingTop:"size-200",children:s(b,{direction:"row",justifyContent:"end",gap:"size-100",children:[e(M,{variant:"default",size:"S",slot:"close",children:"Cancel"}),e(M,{variant:"primary",size:"S",slot:"close",children:"Save Credentials"})]})})]})]})]})})}function y1({provider:n}){const a=Cl(i=>i.setCredential),l=Ft[n],t=Cl(i=>i[n]);return e(b,{direction:"column",gap:"size-100",children:l.map(i=>s(rd,{isRequired:i.isRequired,onChange:r=>{a({provider:n,envVarName:i.envVarName,value:r})},value:(t==null?void 0:t[i.envVarName])??void 0,children:[e(Y,{children:i.envVarName}),e(id,{})]},i.envVarName))})}function A3(){const n=Dn();return kn(n),e(g1,{query:n})}const Dc={fragment:{argumentDefinitions:[],kind:"Fragment",metadata:null,name:"settingsAIProvidersPageLoaderQuery",selections:[{args:null,kind:"FragmentSpread",name:"GenerativeProvidersCard_data"}],type:"Query",abstractKey:null},kind:"Request",operation:{argumentDefinitions:[],kind:"Operation",name:"settingsAIProvidersPageLoaderQuery",selections:[{alias:null,args:null,concreteType:"GenerativeProvider",kind:"LinkedField",name:"modelProviders",plural:!0,selections:[{alias:null,args:null,kind:"ScalarField",name:"name",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"key",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"dependenciesInstalled",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"dependencies",storageKey:null},{alias:null,args:null,concreteType:"GenerativeProviderCredentialConfig",kind:"LinkedField",name:"credentialRequirements",plural:!0,selections:[{alias:null,args:null,kind:"ScalarField",name:"envVarName",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"isRequired",storageKey:null}],storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"credentialsSet",storageKey:null}],storageKey:null}]},params:{cacheID:"1238ea27e05b70fd2c203ab4be6a1209",id:null,metadata:{},name:"settingsAIProvidersPageLoaderQuery",operationKind:"query",text:`query settingsAIProvidersPageLoaderQuery {
2
2
  ...GenerativeProvidersCard_data
3
3
  }
4
4
 
@@ -6431,10 +6431,10 @@ fragment TransferTracesButton_projects_1oCkZB on Query {
6431
6431
  }
6432
6432
  `}}})();cy.hash="11306bf401c87cbfba767ee1ddd9dde5";function YP({traceIds:n,currentProjectId:a,onSuccess:l,onError:t}){const[i,r]=T.useMutation(cy),o=d=>{i({variables:{traceIds:n,projectId:d},onCompleted:c=>{var p;const m=((p=c.transferTracesToProject.project)==null?void 0:p.name)||"unknown";l({projectName:m,projectId:d})},onError:c=>{t(c)}})};return s(ee,{children:[e(M,{leadingVisual:e(x,{svg:e(lb,{})}),isDisabled:r,children:r?"Transferring":"Transfer"}),s(hn,{children:[e(Tl,{}),e(ae,{children:({close:d})=>e(y.Suspense,{fallback:e(be,{}),children:e(eI,{onProjectSelect:c=>{o(c),d()},currentProjectId:a})})})]})]})}function eI({onProjectSelect:n,currentProjectId:a}){const l=T.useLazyLoadQuery(dy,{search:""});return e(nI,{query:l,onProjectSelect:n,currentProjectId:a})}function nI({query:n,onProjectSelect:a,currentProjectId:l}){const[,t]=y.useTransition(),{contains:i}=Pr({sensitivity:"base"}),[r,o]=T.useRefetchableFragment(oy,n),d=y.useMemo(()=>r.projects.edges.map(m=>m.node),[r]);return s(Rl,{filter:i,children:[e(C,{padding:"size-100",borderBottomWidth:"thin",borderColor:"dark",minWidth:300,children:s(b,{direction:"column",gap:"size-50",children:[e(ve,{level:4,weight:"heavy",children:"Transfer Traces to Project"}),e(Gl,{autoFocus:!0,"aria-label":"Search projects",placeholder:"Search projects...",onChange:m=>{t(()=>{o({search:m})})}})]})}),e(Zn,{"aria-label":"projects",items:d,selectionMode:"single",css:K`
6433
6433
  height: 300px;
6434
- `,onSelectionChange:m=>{if(m==="all")return;const p=m.keys().next().value;typeof p=="string"&&a(p)},renderEmptyState:()=>"No projects found",children:m=>e(el,{id:m.id,isDisabled:m.id===l,children:m.name},m.id)})]})}function uy(n){const{projectId:a}=Ye(),{setFetchKey:l}=yl();kn(a);const t=Le(),i=Te(),r=Ie(),[o,d]=y.useState(!1),[c,m]=y.useState(!1),[p,g]=y.useState(!1),{selectedSpans:u,onClearSelection:f}=n,k=y.useMemo(()=>[...new Set(u.map(_=>_.traceId))],[u]),[h,S]=T.useMutation(ly),[v,P]=T.useMutation(ay),I=u.length!==1,A=y.useCallback(_=>{h({variables:{input:{datasetId:_,spanIds:u.map(L=>L.id)}},onCompleted:()=>{i({title:"Examples added to dataset",message:`${u.length} example${I?"s have":" has"} been added to the dataset.`,action:{text:"View dataset",onClick:()=>{t(`/datasets/${_}/examples`)}}}),f()},onError:L=>{const V=ze(L);r({title:"An error occurred",message:`Failed to add spans to dataset: ${(V==null?void 0:V[0])??L.message}`})}})},[h,u,i,I,f,t,r]),w=y.useCallback(()=>{v({variables:{traceIds:k},onCompleted:()=>{i({title:"Traces deleted",message:`${k.length} trace${k.length!==1?"s have":" has"} been deleted.`}),f()},onError:_=>{const L=ze(_);r({title:"An error occurred",message:`Failed to delete traces: ${(L==null?void 0:L[0])??_.message}`})}})},[v,k,i,f,r]),D=()=>{g(!0)};return e(Jr,{children:s(Wr,{children:[s(ur,{"aria-label":"Span selection",children:[e(fn,{size:"M",onPress:f,"aria-label":"Clear selection",children:e(x,{svg:e($l,{})})}),e(C,{paddingEnd:"size-100",children:e(F,{children:`${u.length} span${I?"s":""} selected`})})]}),s(ur,{"aria-label":"Span selection actions",children:[s(ee,{isOpen:c,onOpenChange:_=>{m(_)},children:[e(M,{variant:"primary",size:"M",leadingVisual:e(x,{svg:e($n,{})}),onPress:()=>{m(!0)},isDisabled:S,children:S?"Adding...":"Add to Dataset"}),e(hn,{placement:"top end",children:s(y.Suspense,{children:[e(Tl,{}),e(ae,{children:e(ZP,{onDatasetSelected:_=>{A(_),m(!1)},onCreateNewDataset:()=>{m(!1),d(!0)}})})]})})]}),e(YP,{traceIds:k,currentProjectId:a,onSuccess:({projectName:_})=>{i({title:"Transfer Success",message:`The traces have been moved to project: ${_}`}),f(),l(`trace-transfer-${Date.now()}`)},onError:_=>{r({title:"Transfer Failed",message:`Failed to transfer due to error: ${_.message}`})}}),e(ee,{isOpen:o,onOpenChange:d,children:e(te,{children:e(ne,{children:e(ae,{children:s(ce,{children:[s(ue,{children:[e(me,{children:"New Dataset"}),e(he,{children:e(M,{variant:"default",size:"S",onPress:()=>{d(!1)},leadingVisual:e(x,{svg:e($l,{})})})})]}),e(Wd,{onDatasetCreateError:_=>{const L=ze(_);r({title:"Dataset creation failed",message:`Failed to create dataset: ${(L==null?void 0:L[0])??_.message}`})},onDatasetCreated:_=>{d(!1),i({title:"Dataset created",message:`${_.name} has been successfully created.`}),m(!0)}})]})})})})}),e(M,{size:"M","aria-label":"Delete Traces",isDisabled:P,onPress:D,variant:"danger",leadingVisual:e(x,{svg:e(gn,{})})}),e(ee,{isOpen:p,onOpenChange:g,children:e(te,{children:e(ne,{children:e(ae,{children:s(ce,{children:[e(ue,{children:e(me,{children:"Delete Traces"})}),e(C,{padding:"size-200",children:e(F,{color:"danger",children:"Are you sure you want to delete the selected spans and their traces?"})}),e(C,{paddingEnd:"size-200",paddingTop:"size-100",paddingBottom:"size-100",borderTopColor:"light",borderTopWidth:"thin",children:s(b,{direction:"row",justifyContent:"end",gap:"size-100",children:[e(M,{variant:"default",onPress:()=>{g(!1)},children:"Cancel"}),e(M,{variant:"danger",onPress:()=>{w(),g(!1)},children:"Delete Traces"})]})})]})})})})})]})]})})}const Nt=cs,aI={minSize:100};function lI(n){return n==="root"||n==="all"}const my=({table:n,hasNext:a,onLoadNext:l,isLoadingNext:t})=>{const i=Le(),[r]=tn(),{traceId:o}=Ye(),d=r.get(On);return s("tbody",{children:[n.getRowModel().rows.map(c=>{const m=d===c.original.id||!d&&c.original.trace.traceId===o;return e("tr",{"data-selected":m,onClick:()=>i(`${c.original.trace.traceId}?${On}=${c.original.id}`),children:c.getVisibleCells().map(p=>{const g=`--col-${p.column.id}-size`;return e("td",{style:{width:`calc(var(${g}) * 1px)`,maxWidth:`calc(var(${g}) * 1px)`,textWrap:"nowrap",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:re(p.column.columnDef.cell,p.getContext())},p.id)})},c.id)}),a?e(Jd,{onLoadMore:l,isLoadingNext:t},"load-more"):null]})},tI=da.memo(my,(n,a)=>n.table.options.data===a.table.options.data);function iI(n){const{fetchKey:a}=yl(),l=y.useRef(null),t=y.useRef(!0),[i,r]=y.useState({}),[o,d]=y.useState([]),[c,m]=y.useState(""),[p,g]=y.useState(!0),u=cn(E=>E.columnVisibility),{data:f,loadNext:k,hasNext:h,isLoadingNext:S,refetch:v}=T.usePaginationFragment(Up,n.project),P=Ks(),I=P==null?void 0:P.setTraceSequence;y.useEffect(()=>{if(I)return I(f.spans.edges.map(({span:E})=>({traceId:E.trace.traceId,spanId:E.id}))),()=>{I([])}},[f.spans.edges,I]);const A=cn(E=>E.annotationColumnVisibility),w=y.useMemo(()=>Object.keys(A).filter(E=>A[E]),[A]),D=y.useMemo(()=>f.spans.edges.map(({span:B})=>B),[f]),_=w.map(E=>({header:E,columns:[{header:"labels",accessorKey:Ol(E,"label"),cell:({row:B})=>{const J=B.original.spanAnnotationSummaries.find(ye=>ye.name===E);return J?e(Fs,{name:E,labelFractions:J.labelFractions}):null}},{header:"mean score",accessorKey:Ol(E,"score"),cell:({row:B})=>{const J=B.original.spanAnnotationSummaries.find(ye=>ye.name===E);return J?e(Pt,{value:J.meanScore,fallback:null}):null}}]})),L=[{header:()=>s(b,{direction:"row",gap:"size-50",children:[e("span",{children:"annotations"}),s(at,{children:[e(ve,{level:3,weight:"heavy",children:"Annotations"}),e(ul,{children:"Evaluations and human annotations logged via the API or set via the UI."})]})]}),id:"annotations",accessorKey:"spanAnnotations",enableSorting:!1,cell:({row:E})=>s(b,{direction:"row",gap:"size-50",wrap:"wrap",children:[e(Si,{span:E.original,showFilterActions:!0}),E.original.documentRetrievalMetrics.map(B=>s(ie,{children:[e(Gn,{name:B.evaluationName,metric:"ndcg",score:B.ndcg},"ndcg"),e(Gn,{name:B.evaluationName,metric:"precision",score:B.precision},"precision"),e(Gn,{name:B.evaluationName,metric:"hit",score:B.hit},"hit")]}))]})},..._],V=[{id:"select",maxSize:32,header:({table:E})=>e(Ca,{isSelected:E.getIsAllRowsSelected(),isIndeterminate:E.getIsSomeRowsSelected(),onChange:E.toggleAllRowsSelected}),cell:({row:E})=>e(Ca,{isSelected:E.getIsSelected(),isDisabled:!E.getCanSelect(),isIndeterminate:E.getIsSomeSelected(),onChange:E.toggleSelected})},{header:"status",accessorKey:"statusCode",maxSize:30,enableSorting:!1,cell:({getValue:E})=>{const B=E();return e(b,{direction:"row",gap:"size-50",alignItems:"center",children:e(fi,{statusCode:B})})}},{header:"kind",accessorKey:"spanKind",maxSize:100,enableSorting:!1,cell:({getValue:E})=>e(Vr,{spanKind:E()})},{header:"name",accessorKey:"name",enableSorting:!1,cell:({getValue:E,row:B})=>{const J=B.original,{traceId:ye}=J.trace;return e(bn,{to:`${ye}?${On}=${J.id}`,children:E()})}},{header:"input",accessorKey:"input.value",cell:yn,enableSorting:!1},{header:"output",accessorKey:"output.value",cell:yn,enableSorting:!1},{header:"metadata",accessorKey:"metadata",cell:({row:E})=>e(Gp,{metadata:E.original.metadata}),enableSorting:!1},...L,{header:"start time",accessorKey:"startTime",cell:We},{header:"latency",accessorKey:"latencyMs",cell:({getValue:E})=>{const B=E();return B===null||typeof B!="number"?null:e(Sn,{latencyMs:B})}},{header:p?"cumulative tokens":"total tokens",accessorKey:p?"cumulativeTokenCountTotal":"tokenCountTotal",cell:({row:E,getValue:B})=>{if(B()===null)return"--";const ye=E.original,Nn=p?ye.cumulativeTokenCountTotal:ye.tokenCountTotal;return p?e(_d,{tokenCountTotal:Nn||0,nodeId:ye.id}):e(hi,{tokenCountTotal:Nn||0,nodeId:ye.id})}},{header:p?"cumulative cost":"total cost",accessorKey:p?"trace.costSummary.total.cost":"costSummary.total.cost",id:p?"cumulativeTokenCostTotal":"tokenCostTotal",cell:({row:E,getValue:B})=>{const J=B();if(J===null||typeof J!="number")return"--";const ye=E.original;return p?e(jr,{totalCost:J,nodeId:ye.trace.id,size:"S"}):e(ki,{totalCost:J,spanNodeId:ye.id,size:"S"})}}];y.useEffect(()=>{if(t.current===!0){t.current=!1;return}y.startTransition(()=>{const E=o[0];v({sort:E?Qp(E):Op,after:null,first:Nt,filterCondition:c,rootSpansOnly:p},{fetchPolicy:"store-and-network"})})},[o,v,c,a,p]);const z=y.useCallback(E=>{if(E){const{scrollHeight:B,scrollTop:J,clientHeight:ye}=E;B-J-ye<300&&!S&&h&&k(Nt)}},[h,S,k]),j=cn(E=>E.setColumnSizing),q=cn(E=>E.columnSizing),R=Ne({columns:V,data:D,state:{sorting:o,columnVisibility:u,rowSelection:i,columnSizing:q},defaultColumn:aI,columnResizeMode:"onChange",manualSorting:!0,enableRowSelection:!0,onRowSelectionChange:r,onSortingChange:d,onColumnSizingChange:j,getCoreRowModel:$e(),getSortedRowModel:xn()}),O=R.getRowModel().rows,Q=R.getSelectedRowModel().rows,$=Q.map(E=>({id:E.original.id,traceId:E.original.trace.id})),G=y.useCallback(()=>{r({})},[r]),se=O.length===0,H=R.getAllColumns().filter(E=>E.columns.length===0),{columnSizingInfo:le,columnSizing:N}=R.getState(),W=R.getFlatHeaders,pe=H.length,[je]=y.useMemo(()=>{const E=W(),B={};for(let J=0;J<E.length;J++){const ye=E[J];B[`--header-${ye.id}-size`]=ye.getSize(),B[`--col-${ye.column.id}-size`]=ye.column.getSize()}return[B]},[W,le,N,pe]);return s("div",{css:xs,children:[e(C,{paddingTop:"size-100",paddingBottom:"size-100",paddingStart:"size-200",paddingEnd:"size-200",borderBottomColor:"grey-300",borderBottomWidth:"thin",flex:"none",children:s(b,{direction:"row",gap:"size-100",width:"100%",alignItems:"center",children:[e(ny,{onValidCondition:m}),s(Fi,{"aria-label":"Toggle between root and all spans",selectionMode:"single",selectedKeys:[p?"root":"all"],onSelectionChange:E=>{if(E.size===0)return;const B=E.keys().next().value;if(lI(B))g(B==="root");else throw new Error(`Unknown root span filter selection: ${B}`)},children:[e(ka,{"aria-label":"root spans",id:"root",children:"Root Spans"}),e(ka,{"aria-label":"all spans",id:"all",children:"All"})]}),e(Zp,{columns:H,query:f}),e(OP,{})]})}),e("div",{css:K`
6434
+ `,onSelectionChange:m=>{if(m==="all")return;const p=m.keys().next().value;typeof p=="string"&&a(p)},renderEmptyState:()=>"No projects found",children:m=>e(el,{id:m.id,isDisabled:m.id===l,children:m.name},m.id)})]})}function uy(n){const{projectId:a}=Ye(),{setFetchKey:l}=yl();kn(a);const t=Le(),i=Te(),r=Ie(),[o,d]=y.useState(!1),[c,m]=y.useState(!1),[p,g]=y.useState(!1),{selectedSpans:u,onClearSelection:f}=n,k=y.useMemo(()=>[...new Set(u.map(_=>_.traceId))],[u]),[h,S]=T.useMutation(ly),[v,P]=T.useMutation(ay),I=u.length!==1,A=y.useCallback(_=>{h({variables:{input:{datasetId:_,spanIds:u.map(L=>L.id)}},onCompleted:()=>{i({title:"Examples added to dataset",message:`${u.length} example${I?"s have":" has"} been added to the dataset.`,action:{text:"View dataset",onClick:()=>{t(`/datasets/${_}/examples`)}}}),f()},onError:L=>{const V=ze(L);r({title:"An error occurred",message:`Failed to add spans to dataset: ${(V==null?void 0:V[0])??L.message}`})}})},[h,u,i,I,f,t,r]),w=y.useCallback(()=>{v({variables:{traceIds:k},onCompleted:()=>{i({title:"Traces deleted",message:`${k.length} trace${k.length!==1?"s have":" has"} been deleted.`}),f()},onError:_=>{const L=ze(_);r({title:"An error occurred",message:`Failed to delete traces: ${(L==null?void 0:L[0])??_.message}`})}})},[v,k,i,f,r]),D=()=>{g(!0)};return e(Jr,{children:s(Wr,{children:[s(ur,{"aria-label":"Span selection",children:[e(fn,{size:"M",onPress:f,"aria-label":"Clear selection",children:e(x,{svg:e($l,{})})}),e(C,{paddingEnd:"size-100",children:e(F,{children:`${u.length} span${I?"s":""} selected`})})]}),s(ur,{"aria-label":"Span selection actions",children:[s(ee,{isOpen:c,onOpenChange:_=>{m(_)},children:[e(M,{variant:"primary",size:"M",leadingVisual:e(x,{svg:e($n,{})}),onPress:()=>{m(!0)},isDisabled:S,children:S?"Adding...":"Add to Dataset"}),e(hn,{placement:"top end",children:s(y.Suspense,{children:[e(Tl,{}),e(ae,{children:e(ZP,{onDatasetSelected:_=>{A(_),m(!1)},onCreateNewDataset:()=>{m(!1),d(!0)}})})]})})]}),e(YP,{traceIds:k,currentProjectId:a,onSuccess:({projectName:_})=>{i({title:"Transfer Success",message:`The traces have been moved to project: ${_}`}),f(),l(`trace-transfer-${Date.now()}`)},onError:_=>{r({title:"Transfer Failed",message:`Failed to transfer due to error: ${_.message}`})}}),e(ee,{isOpen:o,onOpenChange:d,children:e(te,{children:e(ne,{children:e(ae,{children:s(ce,{children:[s(ue,{children:[e(me,{children:"New Dataset"}),e(he,{children:e(M,{variant:"default",size:"S",onPress:()=>{d(!1)},leadingVisual:e(x,{svg:e($l,{})})})})]}),e(Wd,{onDatasetCreateError:_=>{const L=ze(_);r({title:"Dataset creation failed",message:`Failed to create dataset: ${(L==null?void 0:L[0])??_.message}`})},onDatasetCreated:_=>{d(!1),i({title:"Dataset created",message:`${_.name} has been successfully created.`}),m(!0)}})]})})})})}),e(M,{size:"M","aria-label":"Delete Traces",isDisabled:P,onPress:D,variant:"danger",leadingVisual:e(x,{svg:e(gn,{})})}),e(ee,{isOpen:p,onOpenChange:g,children:e(te,{children:e(ne,{children:e(ae,{children:s(ce,{children:[e(ue,{children:e(me,{children:"Delete Traces"})}),e(C,{padding:"size-200",children:e(F,{color:"danger",children:"Are you sure you want to delete the selected spans and their traces?"})}),e(C,{paddingEnd:"size-200",paddingTop:"size-100",paddingBottom:"size-100",borderTopColor:"light",borderTopWidth:"thin",children:s(b,{direction:"row",justifyContent:"end",gap:"size-100",children:[e(M,{variant:"default",onPress:()=>{g(!1)},children:"Cancel"}),e(M,{variant:"danger",onPress:()=>{w(),g(!1)},children:"Delete Traces"})]})})]})})})})})]})]})})}const Nt=cs,aI={minSize:100};function lI(n){return n==="root"||n==="all"}const my=({table:n,hasNext:a,onLoadNext:l,isLoadingNext:t})=>{const i=Le(),[r]=tn(),{traceId:o}=Ye(),d=r.get(On);return s("tbody",{children:[n.getRowModel().rows.map(c=>{const m=d===c.original.id||!d&&c.original.trace.traceId===o;return e("tr",{"data-selected":m,onClick:()=>i(`${c.original.trace.traceId}?${On}=${c.original.id}`),children:c.getVisibleCells().map(p=>{const g=`--col-${p.column.id}-size`;return e("td",{style:{width:`calc(var(${g}) * 1px)`,maxWidth:`calc(var(${g}) * 1px)`,textWrap:"nowrap",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:re(p.column.columnDef.cell,p.getContext())},p.id)})},c.id)}),a?e(Jd,{onLoadMore:l,isLoadingNext:t},"load-more"):null]})},tI=da.memo(my,(n,a)=>n.table.options.data===a.table.options.data);function iI(n){const{fetchKey:a}=yl(),l=y.useRef(null),t=y.useRef(!0),[i,r]=y.useState({}),[o,d]=y.useState([]),[c,m]=y.useState(""),[p,g]=y.useState(!0),u=cn(E=>E.columnVisibility),{data:f,loadNext:k,hasNext:h,isLoadingNext:S,refetch:v}=T.usePaginationFragment(Up,n.project),P=Ks(),I=P==null?void 0:P.setTraceSequence;y.useEffect(()=>{if(I)return I(f.spans.edges.map(({span:E})=>({traceId:E.trace.traceId,spanId:E.id}))),()=>{I([])}},[f.spans.edges,I]);const A=cn(E=>E.annotationColumnVisibility),w=y.useMemo(()=>Object.keys(A).filter(E=>A[E]),[A]),D=y.useMemo(()=>f.spans.edges.map(({span:B})=>B),[f]),_=w.map(E=>({header:E,columns:[{header:"labels",accessorKey:Ol(E,"label"),cell:({row:B})=>{const J=B.original.spanAnnotationSummaries.find(ye=>ye.name===E);return J?e(Fs,{name:E,labelFractions:J.labelFractions}):null}},{header:"mean score",accessorKey:Ol(E,"score"),cell:({row:B})=>{const J=B.original.spanAnnotationSummaries.find(ye=>ye.name===E);return J?e(Pt,{value:J.meanScore,fallback:null}):null}}]})),L=[{header:()=>s(b,{direction:"row",gap:"size-50",children:[e("span",{children:"annotations"}),s(at,{children:[e(ve,{level:3,weight:"heavy",children:"Annotations"}),e(ul,{children:"Evaluations and human annotations logged via the API or set via the UI."})]})]}),id:"annotations",accessorKey:"spanAnnotations",enableSorting:!1,cell:({row:E})=>s(b,{direction:"row",gap:"size-50",wrap:"wrap",children:[e(Si,{span:E.original,showFilterActions:!0}),E.original.documentRetrievalMetrics.map(B=>s(ie,{children:[e(Gn,{name:B.evaluationName,metric:"ndcg",score:B.ndcg},"ndcg"),e(Gn,{name:B.evaluationName,metric:"precision",score:B.precision},"precision"),e(Gn,{name:B.evaluationName,metric:"hit",score:B.hit},"hit")]}))]})},..._],V=[{id:"select",maxSize:32,header:({table:E})=>e(Ca,{isSelected:E.getIsAllRowsSelected(),isIndeterminate:E.getIsSomeRowsSelected(),onChange:E.toggleAllRowsSelected}),cell:({row:E})=>e(Ca,{isSelected:E.getIsSelected(),isDisabled:!E.getCanSelect(),isIndeterminate:E.getIsSomeSelected(),onChange:E.toggleSelected})},{header:"status",accessorKey:"statusCode",enableSorting:!1,minSize:50,maxSize:75,cell:({getValue:E})=>{const B=E();return e(fi,{statusCode:B})}},{header:"kind",accessorKey:"spanKind",maxSize:100,enableSorting:!1,cell:({getValue:E})=>e(Vr,{spanKind:E()})},{header:"name",accessorKey:"name",enableSorting:!1,cell:({getValue:E,row:B})=>{const J=B.original,{traceId:ye}=J.trace;return e(bn,{to:`${ye}?${On}=${J.id}`,children:E()})}},{header:"input",accessorKey:"input.value",cell:yn,enableSorting:!1},{header:"output",accessorKey:"output.value",cell:yn,enableSorting:!1},{header:"metadata",accessorKey:"metadata",cell:({row:E})=>e(Gp,{metadata:E.original.metadata}),enableSorting:!1},...L,{header:"start time",accessorKey:"startTime",cell:We},{header:"latency",accessorKey:"latencyMs",cell:({getValue:E})=>{const B=E();return B===null||typeof B!="number"?null:e(Sn,{latencyMs:B})}},{header:p?"cumulative tokens":"total tokens",accessorKey:p?"cumulativeTokenCountTotal":"tokenCountTotal",cell:({row:E,getValue:B})=>{if(B()===null)return"--";const ye=E.original,Nn=p?ye.cumulativeTokenCountTotal:ye.tokenCountTotal;return p?e(_d,{tokenCountTotal:Nn||0,nodeId:ye.id}):e(hi,{tokenCountTotal:Nn||0,nodeId:ye.id})}},{header:p?"cumulative cost":"total cost",accessorKey:p?"trace.costSummary.total.cost":"costSummary.total.cost",id:p?"cumulativeTokenCostTotal":"tokenCostTotal",cell:({row:E,getValue:B})=>{const J=B();if(J===null||typeof J!="number")return"--";const ye=E.original;return p?e(jr,{totalCost:J,nodeId:ye.trace.id,size:"S"}):e(ki,{totalCost:J,spanNodeId:ye.id,size:"S"})}}];y.useEffect(()=>{if(t.current===!0){t.current=!1;return}y.startTransition(()=>{const E=o[0];v({sort:E?Qp(E):Op,after:null,first:Nt,filterCondition:c,rootSpansOnly:p},{fetchPolicy:"store-and-network"})})},[o,v,c,a,p]);const z=y.useCallback(E=>{if(E){const{scrollHeight:B,scrollTop:J,clientHeight:ye}=E;B-J-ye<300&&!S&&h&&k(Nt)}},[h,S,k]),j=cn(E=>E.setColumnSizing),q=cn(E=>E.columnSizing),R=Ne({columns:V,data:D,state:{sorting:o,columnVisibility:u,rowSelection:i,columnSizing:q},defaultColumn:aI,columnResizeMode:"onChange",manualSorting:!0,enableRowSelection:!0,onRowSelectionChange:r,onSortingChange:d,onColumnSizingChange:j,getCoreRowModel:$e(),getSortedRowModel:xn()}),O=R.getRowModel().rows,Q=R.getSelectedRowModel().rows,$=Q.map(E=>({id:E.original.id,traceId:E.original.trace.id})),G=y.useCallback(()=>{r({})},[r]),se=O.length===0,H=R.getAllColumns().filter(E=>E.columns.length===0),{columnSizingInfo:le,columnSizing:N}=R.getState(),W=R.getFlatHeaders,pe=H.length,[je]=y.useMemo(()=>{const E=W(),B={};for(let J=0;J<E.length;J++){const ye=E[J];B[`--header-${ye.id}-size`]=ye.getSize(),B[`--col-${ye.column.id}-size`]=ye.column.getSize()}return[B]},[W,le,N,pe]);return s("div",{css:xs,children:[e(C,{paddingTop:"size-100",paddingBottom:"size-100",paddingStart:"size-200",paddingEnd:"size-200",borderBottomColor:"grey-300",borderBottomWidth:"thin",flex:"none",children:s(b,{direction:"row",gap:"size-100",width:"100%",alignItems:"center",children:[e(ny,{onValidCondition:m}),s(Fi,{"aria-label":"Toggle between root and all spans",selectionMode:"single",selectedKeys:[p?"root":"all"],onSelectionChange:E=>{if(E.size===0)return;const B=E.keys().next().value;if(lI(B))g(B==="root");else throw new Error(`Unknown root span filter selection: ${B}`)},children:[e(ka,{"aria-label":"root spans",id:"root",children:"Root Spans"}),e(ka,{"aria-label":"all spans",id:"all",children:"All"})]}),e(Zp,{columns:H,query:f}),e(OP,{})]})}),e("div",{css:K`
6435
6435
  flex: 1 1 auto;
6436
6436
  overflow: auto;
6437
- `,onScroll:E=>z(E.target),ref:l,children:s("table",{css:dl,style:{...je,width:R.getTotalSize(),minWidth:"100%"},children:[e("thead",{children:R.getHeaderGroups().map(E=>e("tr",{children:E.headers.map(B=>e("th",{colSpan:B.colSpan,style:{width:`calc(var(--header-${B.id}-size) * 1px)`},children:B.isPlaceholder?null:s(ie,{children:[s("div",{className:B.column.getCanSort()?"sort":"",onClick:B.column.getToggleSortingHandler(),style:{left:B.getStart(),width:B.getSize()},children:[e(un,{maxWidth:"100%",children:re(B.column.columnDef.header,B.getContext())}),B.column.getIsSorted()?e(x,{className:"sort-icon",svg:B.column.getIsSorted()==="asc"?e(Kn,{}):e(Tn,{})}):null]}),e("div",{onMouseDown:B.getResizeHandler(),onTouchStart:B.getResizeHandler(),className:`resizer ${B.column.getIsResizing()?"isResizing":""}`})]})},B.id))},E.id))}),se&&!h?e(Wp,{projectName:f.name}):le.isResizingColumn?e(tI,{table:R,hasNext:h,onLoadNext:()=>k(Nt),isLoadingNext:S}):e(my,{table:R,hasNext:h,onLoadNext:()=>k(Nt),isLoadingNext:S})]})}),Q.length?e(uy,{selectedSpans:$,onClearSelection:G}):null]})}function rI({queryReference:n}){const a=T.usePreloadedQuery(Ru,n);return e(iI,{project:a.project})}const h4=()=>{const{spansQueryReference:n}=Ii();return n?e(Ls,{children:s(cg,{children:[e(vs,{children:e(y.Suspense,{fallback:e(be,{}),children:e(rI,{queryReference:n})})}),e(y.Suspense,{children:e(xe,{})})]})}):null},gy=(function(){var n={defaultValue:null,kind:"LocalArgument",name:"after"},a={defaultValue:null,kind:"LocalArgument",name:"filterCondition"},l={defaultValue:30,kind:"LocalArgument",name:"first"},t={defaultValue:null,kind:"LocalArgument",name:"id"},i={defaultValue:{col:"startTime",dir:"desc"},kind:"LocalArgument",name:"sort"},r={defaultValue:null,kind:"LocalArgument",name:"timeRange"},o=[{kind:"Variable",name:"id",variableName:"id"}],d={kind:"Variable",name:"after",variableName:"after"},c={kind:"Variable",name:"filterCondition",variableName:"filterCondition"},m={kind:"Variable",name:"first",variableName:"first"},p={kind:"Variable",name:"sort",variableName:"sort"},g={alias:null,args:null,kind:"ScalarField",name:"__typename",storageKey:null},u={alias:null,args:null,kind:"ScalarField",name:"id",storageKey:null},f={alias:null,args:null,kind:"ScalarField",name:"name",storageKey:null},k=[d,c,m,{kind:"Literal",name:"rootSpansOnly",value:!0},p,{kind:"Variable",name:"timeRange",variableName:"timeRange"}],h={alias:null,args:null,kind:"ScalarField",name:"spanKind",storageKey:null},S={alias:null,args:null,kind:"ScalarField",name:"startTime",storageKey:null},v={alias:null,args:null,kind:"ScalarField",name:"endTime",storageKey:null},P={alias:null,args:null,kind:"ScalarField",name:"latencyMs",storageKey:null},I={alias:null,args:null,kind:"ScalarField",name:"parentId",storageKey:null},A=[{alias:"value",args:null,kind:"ScalarField",name:"truncatedValue",storageKey:null}],w={alias:null,args:null,concreteType:"SpanIOValue",kind:"LinkedField",name:"input",plural:!1,selections:A,storageKey:null},D={alias:null,args:null,concreteType:"SpanIOValue",kind:"LinkedField",name:"output",plural:!1,selections:A,storageKey:null},_={alias:null,args:null,kind:"ScalarField",name:"spanId",storageKey:null},L={alias:null,args:null,kind:"ScalarField",name:"traceId",storageKey:null},V={alias:null,args:null,kind:"ScalarField",name:"label",storageKey:null},z={alias:null,args:null,kind:"ScalarField",name:"score",storageKey:null},j={alias:null,args:null,concreteType:"SpanAnnotation",kind:"LinkedField",name:"spanAnnotations",plural:!0,selections:[u,f,V,z,{alias:null,args:null,kind:"ScalarField",name:"annotatorKind",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"createdAt",storageKey:null},{alias:null,args:null,concreteType:"User",kind:"LinkedField",name:"user",plural:!1,selections:[{alias:null,args:null,kind:"ScalarField",name:"username",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"profilePictureUrl",storageKey:null},u],storageKey:null}],storageKey:null},q={alias:null,args:null,concreteType:"AnnotationSummary",kind:"LinkedField",name:"spanAnnotationSummaries",plural:!0,selections:[{alias:null,args:null,concreteType:"LabelFraction",kind:"LinkedField",name:"labelFractions",plural:!0,selections:[{alias:null,args:null,kind:"ScalarField",name:"fraction",storageKey:null},V],storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"meanScore",storageKey:null},f],storageKey:null},R={alias:null,args:null,concreteType:"Project",kind:"LinkedField",name:"project",plural:!1,selections:[u,{alias:null,args:null,concreteType:"AnnotationConfigConnection",kind:"LinkedField",name:"annotationConfigs",plural:!1,selections:[{alias:null,args:null,concreteType:"AnnotationConfigEdge",kind:"LinkedField",name:"edges",plural:!0,selections:[{alias:null,args:null,concreteType:null,kind:"LinkedField",name:"node",plural:!1,selections:[g,{kind:"InlineFragment",selections:[{alias:null,args:null,kind:"ScalarField",name:"annotationType",storageKey:null}],type:"AnnotationConfigBase",abstractKey:"__isAnnotationConfigBase"},{kind:"InlineFragment",selections:[u,f,{alias:null,args:null,kind:"ScalarField",name:"optimizationDirection",storageKey:null},{alias:null,args:null,concreteType:"CategoricalAnnotationValue",kind:"LinkedField",name:"values",plural:!0,selections:[V,z],storageKey:null}],type:"CategoricalAnnotationConfig",abstractKey:null},{kind:"InlineFragment",selections:[u],type:"Node",abstractKey:"__isNode"}],storageKey:null}],storageKey:null}],storageKey:null}],storageKey:null},O={alias:null,args:null,concreteType:"DocumentRetrievalMetrics",kind:"LinkedField",name:"documentRetrievalMetrics",plural:!0,selections:[{alias:null,args:null,kind:"ScalarField",name:"evaluationName",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"ndcg",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"precision",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"hit",storageKey:null}],storageKey:null};return{fragment:{argumentDefinitions:[n,a,l,t,i,r],kind:"Fragment",metadata:null,name:"TracesTableQuery",selections:[{alias:null,args:o,concreteType:null,kind:"LinkedField",name:"node",plural:!1,selections:[{args:[d,c,m,p],kind:"FragmentSpread",name:"TracesTable_spans"}],storageKey:null}],type:"Query",abstractKey:null},kind:"Request",operation:{argumentDefinitions:[n,a,l,i,r,t],kind:"Operation",name:"TracesTableQuery",selections:[{alias:null,args:o,concreteType:null,kind:"LinkedField",name:"node",plural:!1,selections:[g,u,{kind:"InlineFragment",selections:[f,{alias:null,args:null,kind:"ScalarField",name:"spanAnnotationNames",storageKey:null},{alias:"rootSpans",args:k,concreteType:"SpanConnection",kind:"LinkedField",name:"spans",plural:!1,selections:[{alias:null,args:null,concreteType:"SpanEdge",kind:"LinkedField",name:"edges",plural:!0,selections:[{alias:"rootSpan",args:null,concreteType:"Span",kind:"LinkedField",name:"node",plural:!1,selections:[u,h,f,{alias:null,args:null,kind:"ScalarField",name:"metadata",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"statusCode",storageKey:null},S,v,P,{alias:null,args:null,kind:"ScalarField",name:"cumulativeTokenCountTotal",storageKey:null},I,w,D,_,{alias:null,args:null,concreteType:"Trace",kind:"LinkedField",name:"trace",plural:!1,selections:[u,L,{alias:null,args:null,kind:"ScalarField",name:"numSpans",storageKey:null},{alias:null,args:null,concreteType:"SpanCostSummary",kind:"LinkedField",name:"costSummary",plural:!1,selections:[{alias:null,args:null,concreteType:"CostBreakdown",kind:"LinkedField",name:"total",plural:!1,selections:[{alias:null,args:null,kind:"ScalarField",name:"cost",storageKey:null}],storageKey:null}],storageKey:null}],storageKey:null},j,q,R,O,{alias:null,args:[{kind:"Literal",name:"first",value:50}],concreteType:"SpanConnection",kind:"LinkedField",name:"descendants",plural:!1,selections:[{alias:null,args:null,concreteType:"SpanEdge",kind:"LinkedField",name:"edges",plural:!0,selections:[{alias:null,args:null,concreteType:"Span",kind:"LinkedField",name:"node",plural:!1,selections:[u,h,f,{alias:"statusCode",args:null,kind:"ScalarField",name:"propagatedStatusCode",storageKey:null},S,v,P,I,{alias:"cumulativeTokenCountTotal",args:null,kind:"ScalarField",name:"tokenCountTotal",storageKey:null},w,D,_,{alias:null,args:null,concreteType:"Trace",kind:"LinkedField",name:"trace",plural:!1,selections:[u,L],storageKey:null},j,R,q,O],storageKey:null}],storageKey:null}],storageKey:"descendants(first:50)"}],storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"cursor",storageKey:null},{alias:null,args:null,concreteType:"Span",kind:"LinkedField",name:"node",plural:!1,selections:[g,u],storageKey:null}],storageKey:null},{alias:null,args:null,concreteType:"PageInfo",kind:"LinkedField",name:"pageInfo",plural:!1,selections:[{alias:null,args:null,kind:"ScalarField",name:"endCursor",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"hasNextPage",storageKey:null}],storageKey:null}],storageKey:null},{alias:"rootSpans",args:k,filters:["sort","rootSpansOnly","filterCondition","timeRange"],handle:"connection",key:"TracesTable_rootSpans",kind:"LinkedHandle",name:"spans"}],type:"Project",abstractKey:null}],storageKey:null}]},params:{cacheID:"d30684c52189e88dab2fb3e08b4e4ada",id:null,metadata:{},name:"TracesTableQuery",operationKind:"query",text:`query TracesTableQuery(
6437
+ `,onScroll:E=>z(E.target),ref:l,children:s("table",{css:dl,style:{...je,width:R.getTotalSize(),minWidth:"100%"},children:[e("thead",{children:R.getHeaderGroups().map(E=>e("tr",{children:E.headers.map(B=>e("th",{colSpan:B.colSpan,style:{width:`calc(var(--header-${B.id}-size) * 1px)`},children:B.isPlaceholder?null:s(ie,{children:[s("div",{className:B.column.getCanSort()?"sort":"",onClick:B.column.getToggleSortingHandler(),style:{left:B.getStart(),width:B.getSize()},children:[e(un,{maxWidth:B.getSize(),children:re(B.column.columnDef.header,B.getContext())}),B.column.getIsSorted()?e(x,{className:"sort-icon",svg:B.column.getIsSorted()==="asc"?e(Kn,{}):e(Tn,{})}):null]}),e("div",{onMouseDown:B.getResizeHandler(),onTouchStart:B.getResizeHandler(),className:`resizer ${B.column.getIsResizing()?"isResizing":""}`})]})},B.id))},E.id))}),se&&!h?e(Wp,{projectName:f.name}):le.isResizingColumn?e(tI,{table:R,hasNext:h,onLoadNext:()=>k(Nt),isLoadingNext:S}):e(my,{table:R,hasNext:h,onLoadNext:()=>k(Nt),isLoadingNext:S})]})}),Q.length?e(uy,{selectedSpans:$,onClearSelection:G}):null]})}function rI({queryReference:n}){const a=T.usePreloadedQuery(Ru,n);return e(iI,{project:a.project})}const h4=()=>{const{spansQueryReference:n}=Ii();return n?e(Ls,{children:s(cg,{children:[e(vs,{children:e(y.Suspense,{fallback:e(be,{}),children:e(rI,{queryReference:n})})}),e(y.Suspense,{children:e(xe,{})})]})}):null},gy=(function(){var n={defaultValue:null,kind:"LocalArgument",name:"after"},a={defaultValue:null,kind:"LocalArgument",name:"filterCondition"},l={defaultValue:30,kind:"LocalArgument",name:"first"},t={defaultValue:null,kind:"LocalArgument",name:"id"},i={defaultValue:{col:"startTime",dir:"desc"},kind:"LocalArgument",name:"sort"},r={defaultValue:null,kind:"LocalArgument",name:"timeRange"},o=[{kind:"Variable",name:"id",variableName:"id"}],d={kind:"Variable",name:"after",variableName:"after"},c={kind:"Variable",name:"filterCondition",variableName:"filterCondition"},m={kind:"Variable",name:"first",variableName:"first"},p={kind:"Variable",name:"sort",variableName:"sort"},g={alias:null,args:null,kind:"ScalarField",name:"__typename",storageKey:null},u={alias:null,args:null,kind:"ScalarField",name:"id",storageKey:null},f={alias:null,args:null,kind:"ScalarField",name:"name",storageKey:null},k=[d,c,m,{kind:"Literal",name:"rootSpansOnly",value:!0},p,{kind:"Variable",name:"timeRange",variableName:"timeRange"}],h={alias:null,args:null,kind:"ScalarField",name:"spanKind",storageKey:null},S={alias:null,args:null,kind:"ScalarField",name:"startTime",storageKey:null},v={alias:null,args:null,kind:"ScalarField",name:"endTime",storageKey:null},P={alias:null,args:null,kind:"ScalarField",name:"latencyMs",storageKey:null},I={alias:null,args:null,kind:"ScalarField",name:"parentId",storageKey:null},A=[{alias:"value",args:null,kind:"ScalarField",name:"truncatedValue",storageKey:null}],w={alias:null,args:null,concreteType:"SpanIOValue",kind:"LinkedField",name:"input",plural:!1,selections:A,storageKey:null},D={alias:null,args:null,concreteType:"SpanIOValue",kind:"LinkedField",name:"output",plural:!1,selections:A,storageKey:null},_={alias:null,args:null,kind:"ScalarField",name:"spanId",storageKey:null},L={alias:null,args:null,kind:"ScalarField",name:"traceId",storageKey:null},V={alias:null,args:null,kind:"ScalarField",name:"label",storageKey:null},z={alias:null,args:null,kind:"ScalarField",name:"score",storageKey:null},j={alias:null,args:null,concreteType:"SpanAnnotation",kind:"LinkedField",name:"spanAnnotations",plural:!0,selections:[u,f,V,z,{alias:null,args:null,kind:"ScalarField",name:"annotatorKind",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"createdAt",storageKey:null},{alias:null,args:null,concreteType:"User",kind:"LinkedField",name:"user",plural:!1,selections:[{alias:null,args:null,kind:"ScalarField",name:"username",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"profilePictureUrl",storageKey:null},u],storageKey:null}],storageKey:null},q={alias:null,args:null,concreteType:"AnnotationSummary",kind:"LinkedField",name:"spanAnnotationSummaries",plural:!0,selections:[{alias:null,args:null,concreteType:"LabelFraction",kind:"LinkedField",name:"labelFractions",plural:!0,selections:[{alias:null,args:null,kind:"ScalarField",name:"fraction",storageKey:null},V],storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"meanScore",storageKey:null},f],storageKey:null},R={alias:null,args:null,concreteType:"Project",kind:"LinkedField",name:"project",plural:!1,selections:[u,{alias:null,args:null,concreteType:"AnnotationConfigConnection",kind:"LinkedField",name:"annotationConfigs",plural:!1,selections:[{alias:null,args:null,concreteType:"AnnotationConfigEdge",kind:"LinkedField",name:"edges",plural:!0,selections:[{alias:null,args:null,concreteType:null,kind:"LinkedField",name:"node",plural:!1,selections:[g,{kind:"InlineFragment",selections:[{alias:null,args:null,kind:"ScalarField",name:"annotationType",storageKey:null}],type:"AnnotationConfigBase",abstractKey:"__isAnnotationConfigBase"},{kind:"InlineFragment",selections:[u,f,{alias:null,args:null,kind:"ScalarField",name:"optimizationDirection",storageKey:null},{alias:null,args:null,concreteType:"CategoricalAnnotationValue",kind:"LinkedField",name:"values",plural:!0,selections:[V,z],storageKey:null}],type:"CategoricalAnnotationConfig",abstractKey:null},{kind:"InlineFragment",selections:[u],type:"Node",abstractKey:"__isNode"}],storageKey:null}],storageKey:null}],storageKey:null}],storageKey:null},O={alias:null,args:null,concreteType:"DocumentRetrievalMetrics",kind:"LinkedField",name:"documentRetrievalMetrics",plural:!0,selections:[{alias:null,args:null,kind:"ScalarField",name:"evaluationName",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"ndcg",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"precision",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"hit",storageKey:null}],storageKey:null};return{fragment:{argumentDefinitions:[n,a,l,t,i,r],kind:"Fragment",metadata:null,name:"TracesTableQuery",selections:[{alias:null,args:o,concreteType:null,kind:"LinkedField",name:"node",plural:!1,selections:[{args:[d,c,m,p],kind:"FragmentSpread",name:"TracesTable_spans"}],storageKey:null}],type:"Query",abstractKey:null},kind:"Request",operation:{argumentDefinitions:[n,a,l,i,r,t],kind:"Operation",name:"TracesTableQuery",selections:[{alias:null,args:o,concreteType:null,kind:"LinkedField",name:"node",plural:!1,selections:[g,u,{kind:"InlineFragment",selections:[f,{alias:null,args:null,kind:"ScalarField",name:"spanAnnotationNames",storageKey:null},{alias:"rootSpans",args:k,concreteType:"SpanConnection",kind:"LinkedField",name:"spans",plural:!1,selections:[{alias:null,args:null,concreteType:"SpanEdge",kind:"LinkedField",name:"edges",plural:!0,selections:[{alias:"rootSpan",args:null,concreteType:"Span",kind:"LinkedField",name:"node",plural:!1,selections:[u,h,f,{alias:null,args:null,kind:"ScalarField",name:"metadata",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"statusCode",storageKey:null},S,v,P,{alias:null,args:null,kind:"ScalarField",name:"cumulativeTokenCountTotal",storageKey:null},I,w,D,_,{alias:null,args:null,concreteType:"Trace",kind:"LinkedField",name:"trace",plural:!1,selections:[u,L,{alias:null,args:null,kind:"ScalarField",name:"numSpans",storageKey:null},{alias:null,args:null,concreteType:"SpanCostSummary",kind:"LinkedField",name:"costSummary",plural:!1,selections:[{alias:null,args:null,concreteType:"CostBreakdown",kind:"LinkedField",name:"total",plural:!1,selections:[{alias:null,args:null,kind:"ScalarField",name:"cost",storageKey:null}],storageKey:null}],storageKey:null}],storageKey:null},j,q,R,O,{alias:null,args:[{kind:"Literal",name:"first",value:50}],concreteType:"SpanConnection",kind:"LinkedField",name:"descendants",plural:!1,selections:[{alias:null,args:null,concreteType:"SpanEdge",kind:"LinkedField",name:"edges",plural:!0,selections:[{alias:null,args:null,concreteType:"Span",kind:"LinkedField",name:"node",plural:!1,selections:[u,h,f,{alias:"statusCode",args:null,kind:"ScalarField",name:"propagatedStatusCode",storageKey:null},S,v,P,I,{alias:"cumulativeTokenCountTotal",args:null,kind:"ScalarField",name:"tokenCountTotal",storageKey:null},w,D,_,{alias:null,args:null,concreteType:"Trace",kind:"LinkedField",name:"trace",plural:!1,selections:[u,L],storageKey:null},j,R,q,O],storageKey:null}],storageKey:null}],storageKey:"descendants(first:50)"}],storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"cursor",storageKey:null},{alias:null,args:null,concreteType:"Span",kind:"LinkedField",name:"node",plural:!1,selections:[g,u],storageKey:null}],storageKey:null},{alias:null,args:null,concreteType:"PageInfo",kind:"LinkedField",name:"pageInfo",plural:!1,selections:[{alias:null,args:null,kind:"ScalarField",name:"endCursor",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"hasNextPage",storageKey:null}],storageKey:null}],storageKey:null},{alias:"rootSpans",args:k,filters:["sort","rootSpansOnly","filterCondition","timeRange"],handle:"connection",key:"TracesTable_rootSpans",kind:"LinkedHandle",name:"spans"}],type:"Project",abstractKey:null}],storageKey:null}]},params:{cacheID:"d30684c52189e88dab2fb3e08b4e4ada",id:null,metadata:{},name:"TracesTableQuery",operationKind:"query",text:`query TracesTableQuery(
6438
6438
  $after: String = null
6439
6439
  $filterCondition: String = null
6440
6440
  $first: Int = 30
@@ -6624,7 +6624,7 @@ fragment TracesTable_spans_1XEuU on Project {
6624
6624
  &[data-is-additional-row="true"] {
6625
6625
  box-shadow: inset 0 -10px 20px var(--ac-global-color-grey-100);
6626
6626
  }
6627
- `;function fy(n){const{children:a}=n,l=[];for(const t of a){const i={...t.span,children:fy({children:t.children})};l.push(i)}return l}function uI(n){const a=y.useRef(null),l=y.useRef(!0),[t,i]=y.useState({}),[r,o]=y.useState([]),[d,c]=y.useState(""),{fetchKey:m}=yl(),{data:p,loadNext:g,hasNext:u,isLoadingNext:f,refetch:k}=T.usePaginationFragment(py,n.project),h=cn(E=>E.annotationColumnVisibility),S=y.useMemo(()=>Object.keys(h).filter(E=>h[E]),[h]),v=y.useMemo(()=>p.rootSpans.edges.map(({rootSpan:E})=>{const B=tb([E,...E.descendants.edges.map(({node:Nn})=>Nn)]),[J]=fy({children:B}),ye=E.trace.numSpans-sI-1;return ye>0&&(J.children=[...J.children,{...J,__additionalRow:!0,name:`+ ${ye} more span${ye>1?"s":""}`,id:`additional-${J.id}`,input:{value:""},output:{value:""},metadata:null,spanAnnotations:[],documentRetrievalMetrics:[],children:[]}]),J}),[p]),P=y.useMemo(()=>S.map(E=>({header:E,columns:[{header:"labels",accessorKey:Ol(E,"label"),cell:({row:B})=>{var ye;const J=(ye=B.original.spanAnnotationSummaries)==null?void 0:ye.find(Nn=>Nn.name===E);return J?e(Fs,{name:E,labelFractions:J.labelFractions}):null}},{header:"mean score",accessorKey:Ol(E,"score"),cell:({row:B})=>{var ye;const J=(ye=B.original.spanAnnotationSummaries)==null?void 0:ye.find(Nn=>Nn.name===E);return J?e(Pt,{value:J.meanScore,fallback:null}):null}}]})),[S]),I=y.useMemo(()=>[{header:()=>s(b,{direction:"row",gap:"size-50",children:[e("span",{children:"Annotations"}),s(at,{children:[e(ve,{level:3,weight:"heavy",children:"Annotations"}),e(ul,{children:"Evaluations and human annotations logged via the API or set via the UI."})]})]}),id:"annotations",accessorKey:"spanAnnotations",enableSorting:!1,cell:({row:E})=>{if(E.original.__additionalRow)return null;const B=E.original.spanAnnotations.length===0&&E.original.documentRetrievalMetrics.length===0;return s(b,{direction:"row",gap:"size-50",wrap:"wrap",children:[e(Si,{span:E.original,showFilterActions:!0}),E.original.documentRetrievalMetrics.map(J=>s(y.Fragment,{children:[e(Gn,{name:J.evaluationName,metric:"ndcg",score:J.ndcg},"ndcg"),e(Gn,{name:J.evaluationName,metric:"precision",score:J.precision},"precision"),e(Gn,{name:J.evaluationName,metric:"hit",score:J.hit},"hit")]},"doc-evals")),B?"--":null]})}},...P],[P]),A=y.useMemo(()=>[{id:"select",maxSize:32,header:({table:E})=>e(Ca,{isSelected:E.getIsAllRowsSelected(),isIndeterminate:E.getIsSomeRowsSelected(),onChange:E.toggleAllRowsSelected}),cell:({row:E})=>E.original.__additionalRow?null:e(Ca,{isSelected:E.getIsSelected(),isDisabled:!E.getCanSelect(),isIndeterminate:E.getIsSomeSelected(),onChange:E.toggleSelected})},{header:"status",accessorKey:"statusCode",maxSize:30,enableSorting:!1,cell:({getValue:E,row:B})=>{if(B.original.__additionalRow)return null;const J=E();return e(fi,{statusCode:J})}},{header:({table:E})=>s(b,{gap:"size-50",direction:"row",alignItems:"center",children:[e(Hs,{isExpanded:E.getIsAllRowsExpanded(),onClick:E.getToggleAllRowsExpandedHandler(),"aria-label":"Expand all rows"}),"kind"]}),enableSorting:!1,accessorKey:"spanKind",maxSize:100,cell:E=>E.row.original.__additionalRow?e("div",{css:K`
6627
+ `;function fy(n){const{children:a}=n,l=[];for(const t of a){const i={...t.span,children:fy({children:t.children})};l.push(i)}return l}function uI(n){const a=y.useRef(null),l=y.useRef(!0),[t,i]=y.useState({}),[r,o]=y.useState([]),[d,c]=y.useState(""),{fetchKey:m}=yl(),{data:p,loadNext:g,hasNext:u,isLoadingNext:f,refetch:k}=T.usePaginationFragment(py,n.project),h=cn(E=>E.annotationColumnVisibility),S=y.useMemo(()=>Object.keys(h).filter(E=>h[E]),[h]),v=y.useMemo(()=>p.rootSpans.edges.map(({rootSpan:E})=>{const B=tb([E,...E.descendants.edges.map(({node:Nn})=>Nn)]),[J]=fy({children:B}),ye=E.trace.numSpans-sI-1;return ye>0&&(J.children=[...J.children,{...J,__additionalRow:!0,name:`+ ${ye} more span${ye>1?"s":""}`,id:`additional-${J.id}`,input:{value:""},output:{value:""},metadata:null,spanAnnotations:[],documentRetrievalMetrics:[],children:[]}]),J}),[p]),P=y.useMemo(()=>S.map(E=>({header:E,columns:[{header:"labels",accessorKey:Ol(E,"label"),cell:({row:B})=>{var ye;const J=(ye=B.original.spanAnnotationSummaries)==null?void 0:ye.find(Nn=>Nn.name===E);return J?e(Fs,{name:E,labelFractions:J.labelFractions}):null}},{header:"mean score",accessorKey:Ol(E,"score"),cell:({row:B})=>{var ye;const J=(ye=B.original.spanAnnotationSummaries)==null?void 0:ye.find(Nn=>Nn.name===E);return J?e(Pt,{value:J.meanScore,fallback:null}):null}}]})),[S]),I=y.useMemo(()=>[{header:()=>s(b,{direction:"row",gap:"size-50",children:[e("span",{children:"Annotations"}),s(at,{children:[e(ve,{level:3,weight:"heavy",children:"Annotations"}),e(ul,{children:"Evaluations and human annotations logged via the API or set via the UI."})]})]}),id:"annotations",accessorKey:"spanAnnotations",enableSorting:!1,cell:({row:E})=>{if(E.original.__additionalRow)return null;const B=E.original.spanAnnotations.length===0&&E.original.documentRetrievalMetrics.length===0;return s(b,{direction:"row",gap:"size-50",wrap:"wrap",children:[e(Si,{span:E.original,showFilterActions:!0}),E.original.documentRetrievalMetrics.map(J=>s(y.Fragment,{children:[e(Gn,{name:J.evaluationName,metric:"ndcg",score:J.ndcg},"ndcg"),e(Gn,{name:J.evaluationName,metric:"precision",score:J.precision},"precision"),e(Gn,{name:J.evaluationName,metric:"hit",score:J.hit},"hit")]},"doc-evals")),B?"--":null]})}},...P],[P]),A=y.useMemo(()=>[{id:"select",maxSize:32,header:({table:E})=>e(Ca,{isSelected:E.getIsAllRowsSelected(),isIndeterminate:E.getIsSomeRowsSelected(),onChange:E.toggleAllRowsSelected}),cell:({row:E})=>E.original.__additionalRow?null:e(Ca,{isSelected:E.getIsSelected(),isDisabled:!E.getCanSelect(),isIndeterminate:E.getIsSomeSelected(),onChange:E.toggleSelected})},{header:"status",accessorKey:"statusCode",enableSorting:!1,minSize:50,maxSize:75,cell:({getValue:E,row:B})=>{if(B.original.__additionalRow)return null;const J=E();return e(fi,{statusCode:J})}},{header:({table:E})=>s(b,{gap:"size-50",direction:"row",alignItems:"center",children:[e(Hs,{isExpanded:E.getIsAllRowsExpanded(),onClick:E.getToggleAllRowsExpandedHandler(),"aria-label":"Expand all rows"}),"kind"]}),enableSorting:!1,accessorKey:"spanKind",maxSize:100,cell:E=>E.row.original.__additionalRow?e("div",{css:K`
6628
6628
  // Since rows are flattened by default,
6629
6629
  // we can use the row.depth property
6630
6630
  // and paddingLeft to visually indicate the depth
@@ -1,18 +1,63 @@
1
1
  """
2
+ OpenTelemetry Span Attribute Flattening/Unflattening for Phoenix
3
+
4
+ This module handles the conversion between flattened dot-separated key-value pairs
5
+ (as received from OpenTelemetry protobuf) and nested dictionary structures (as used
6
+ internally by Phoenix).
7
+
8
+ Basic Behavior
9
+ --------------
2
10
  Span attribute keys have a special relationship with the `.` separator. When
3
11
  a span attribute is ingested from protobuf, it's in the form of a key value
4
- pair such as `("llm.token_count.completion", 123)`. What we need to do is to split
5
- the key by the `.` separator and turn it into part of a nested dictionary such
6
- as {"llm": {"token_count": {"completion": 123}}}. We also need to reverse this
7
- process, which is to flatten the nested dictionary into a list of key value
8
- pairs. This module provides functions to do both of these operations.
9
-
10
- Note that digit keys are treated as indices of a nested array. For example,
11
- the digits inside `("retrieval.documents.0.document.content", 'A')` and
12
- `("retrieval.documents.1.document.content": 'B')` turn the sub-keys following
13
- them into a nested list of dictionaries i.e.
14
- {`retrieval: {"documents": [{"document": {"content": "A"}}, {"document":
15
- {"content": "B"}}]}`.
12
+ pair such as `("llm.token_count.completion", 123)`. We split the key by the `.`
13
+ separator and turn it into a nested dictionary:
14
+ {"llm": {"token_count": {"completion": 123}}}
15
+
16
+ Array Creation Rule
17
+ -------------------
18
+ Numeric keys are treated specially to support array-like structures in OpenTelemetry
19
+ semantic conventions. A numeric key becomes an array index ONLY when:
20
+ 1. The numeric key has additional segments after it (e.g., "documents.0.content")
21
+ 2. Those segments lead to mappings (dictionaries), not scalar values
22
+
23
+ Examples:
24
+ ("documents.0.content", "A"), ("documents.1.content", "B")
25
+ → {"documents": [{"content": "A"}, {"content": "B"}]} # Array created
26
+
27
+ ("tags.0", "python"), ("tags.1", "ai")
28
+ → {"tags": {"0": "python", "1": "ai"}} # Dict with string keys, NOT array
29
+
30
+ Rationale: In OpenTelemetry semantic conventions, arrays typically contain structured
31
+ objects (like documents or events), not primitive values. This rule ensures that only
32
+ semantically meaningful arrays are created, avoiding ambiguity with numeric string keys.
33
+
34
+ Terminal Value Node Behavior
35
+ ----------------------------
36
+ When a path receives an explicit value (typically from pre-nested input), that node
37
+ becomes "terminal" and cannot have children added via flattened keys. Instead,
38
+ attempted extensions become separate dotted keys:
39
+
40
+ ("a", {"b": 1}), ("a.c", 2)
41
+ → {"a": {"b": 1}, "a.c": 2} # "a.c" becomes dotted key, not nested
42
+
43
+ This preserves all data during OpenTelemetry ingestion where:
44
+ - Pre-nested values (dicts/arrays) come from the OTEL data model
45
+ - Flattened keys come from custom instrumentation
46
+ - Both must be preserved to avoid data loss
47
+
48
+ Edge Cases
49
+ ----------
50
+ - None values: Skipped entirely during processing
51
+ - Leading zeros: Normalized ("00" → "0", treated as same key)
52
+ - Negative numbers: Treated as string keys, not array indices
53
+ - Empty key segments: Ignored ("a..b" → "a.b")
54
+ - Alphanumeric keys: "0a", "1x" are string keys, not array indices
55
+ - Whitespace: Stripped from key segments (" key " → "key")
56
+ - Empty string key: Valid key, preserved as-is
57
+ - Duplicate keys: Last write wins
58
+
59
+ These edge cases are handled consistently to ensure reliable round-tripping
60
+ between flattened and nested representations.
16
61
  """
17
62
 
18
63
  import inspect
@@ -107,6 +152,13 @@ def has_mapping(sequence: Iterable[Any]) -> bool:
107
152
  only contain primitive types, such as strings, integers, etc. Conversely,
108
153
  we'll only un-flatten digit sub-keys if it can be interpreted the index of
109
154
  an array of dictionaries.
155
+
156
+ This is the key function that implements the "arrays only for mappings" rule.
157
+ In OpenTelemetry semantic conventions, arrays typically contain structured
158
+ objects (e.g., retrieval.documents[0], llm.messages[1]) not primitive arrays
159
+ like ["tag1", "tag2"]. This check ensures semantic correctness during round-
160
+ trip conversions: primitive arrays stay as-is, only structured arrays are
161
+ flattened/unflattened with numeric indices.
110
162
  """
111
163
  for item in sequence:
112
164
  if isinstance(item, Mapping):
@@ -189,7 +241,9 @@ class _Trie(defaultdict[Union[str, int], "_Trie"]):
189
241
 
190
242
  def set_value(self, value: Any) -> None:
191
243
  self.value = value
192
- # value and indices must not coexist
244
+ # value and indices must not coexist - convert indices to branches
245
+ # This handles the case where a numeric key ends a path (scalar value)
246
+ # vs. continues a path (array index). Example: "a.0" vs "a.0.b"
193
247
  self.branches.update(self.indices)
194
248
  self.indices.clear()
195
249
 
@@ -230,8 +284,14 @@ def _build_trie(
230
284
  separator,
231
285
  prefix_exclusions,
232
286
  )
287
+ # Strip whitespace from key segments for cleaner attribute keys
288
+ prefix = prefix.strip()
233
289
  if prefix.isdigit():
234
290
  index = int(prefix)
291
+ # Key decision: numeric key with suffix → array index (add_index)
292
+ # numeric key without suffix → dict key (add_branch)
293
+ # This ensures arrays only contain mappings, not scalar values,
294
+ # matching OpenTelemetry semantic conventions.
235
295
  t = t.add_index(index) if suffix else t.add_branch(index)
236
296
  else:
237
297
  t = t.add_branch(prefix)
@@ -253,8 +313,15 @@ def _walk(
253
313
  yield the prefix and the value. If the Trie node has indices, then yield the
254
314
  prefix and a list of dictionaries. If the Trie node has branches, then yield
255
315
  the prefix and a dictionary.
316
+
317
+ Conflict Resolution: When a node has both a value and child nodes, both are
318
+ yielded. The value is yielded with its current prefix, and children create
319
+ additional dotted keys. This preserves all data from mixed flattened/nested
320
+ input, avoiding data loss during OpenTelemetry span ingestion.
256
321
  """
257
322
  if trie.value is not None:
323
+ # Yield the value first - if there are also branches, those will become
324
+ # separate dotted keys (e.g., "a" and "a.b" coexist)
258
325
  yield prefix, trie.value
259
326
  elif prefix and trie.indices:
260
327
  yield (
phoenix/version.py CHANGED
@@ -1 +1 @@
1
- __version__ = "12.3.0"
1
+ __version__ = "12.4.0"