arize-phoenix 8.28.0__py3-none-any.whl → 8.29.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.

@@ -427,11 +427,8 @@ class Query:
427
427
  @strawberry.field
428
428
  async def functionality(self, info: Info[Context, None]) -> "Functionality":
429
429
  has_model_inferences = not info.context.model.is_empty
430
- async with info.context.db() as session:
431
- has_traces = (await session.scalar(select(models.Trace).limit(1))) is not None
432
430
  return Functionality(
433
431
  model_inferences=has_model_inferences,
434
- tracing=has_traces,
435
432
  )
436
433
 
437
434
  @strawberry.field
@@ -10,6 +10,3 @@ class Functionality:
10
10
  model_inferences: bool = strawberry.field(
11
11
  description="Model inferences are available for analysis"
12
12
  )
13
- tracing: bool = strawberry.field(
14
- description="Generative tracing records are available for analysis"
15
- )
@@ -14,7 +14,11 @@ from opentelemetry.proto.collector.trace.v1.trace_service_pb2_grpc import (
14
14
  from typing_extensions import TypeAlias
15
15
 
16
16
  from phoenix.auth import CanReadToken
17
- from phoenix.config import get_env_grpc_port
17
+ from phoenix.config import (
18
+ TLSConfigVerifyClient,
19
+ get_env_grpc_port,
20
+ get_env_tls_config,
21
+ )
18
22
  from phoenix.server.bearer_auth import ApiKeyInterceptor
19
23
  from phoenix.trace.otel import decode_otlp_span
20
24
  from phoenix.trace.schemas import Span
@@ -86,7 +90,20 @@ class GrpcServer:
86
90
  options=(("grpc.so_reuseport", 0),),
87
91
  interceptors=interceptors,
88
92
  )
89
- server.add_insecure_port(f"[::]:{get_env_grpc_port()}")
93
+ if tls_config := get_env_tls_config():
94
+ private_key_certificate_chain_pairs = [(tls_config.key_data, tls_config.cert_data)]
95
+ server_credentials = (
96
+ grpc.ssl_server_credentials(
97
+ private_key_certificate_chain_pairs,
98
+ root_certificates=tls_config.ca_data,
99
+ require_client_auth=True,
100
+ )
101
+ if isinstance(tls_config, TLSConfigVerifyClient)
102
+ else grpc.ssl_server_credentials(private_key_certificate_chain_pairs)
103
+ )
104
+ server.add_secure_port(f"[::]:{get_env_grpc_port()}", server_credentials)
105
+ else:
106
+ server.add_insecure_port(f"[::]:{get_env_grpc_port()}")
90
107
  add_TraceServiceServicer_to_server(Servicer(self._callback), server) # type: ignore[no-untyped-call,unused-ignore]
91
108
  await server.start()
92
109
  self._server = server
phoenix/server/main.py CHANGED
@@ -4,6 +4,7 @@ import os
4
4
  import sys
5
5
  from argparse import SUPPRESS, ArgumentParser
6
6
  from pathlib import Path
7
+ from ssl import CERT_REQUIRED
7
8
  from threading import Thread
8
9
  from time import sleep, time
9
10
  from typing import Optional
@@ -15,6 +16,7 @@ from uvicorn import Config, Server
15
16
  import phoenix.trace.v1 as pb
16
17
  from phoenix.config import (
17
18
  EXPORT_DIR,
19
+ TLSConfigVerifyClient,
18
20
  get_env_access_token_expiry,
19
21
  get_env_allowed_origins,
20
22
  get_env_auth_settings,
@@ -39,6 +41,7 @@ from phoenix.config import (
39
41
  get_env_smtp_port,
40
42
  get_env_smtp_username,
41
43
  get_env_smtp_validate_certs,
44
+ get_env_tls_config,
42
45
  get_pids_path,
43
46
  )
44
47
  from phoenix.core.model_schema_adapter import create_model_from_inferences
@@ -98,15 +101,22 @@ _WELCOME_MESSAGE = Environment(loader=BaseLoader()).from_string("""
98
101
  | 🚀 Phoenix Server 🚀
99
102
  | Phoenix UI: {{ ui_path }}
100
103
  | Authentication: {{ auth_enabled }}
101
- | Websockets: {{ websockets_enabled }}
102
- {%- if allowed_origins %}\n| Allowed Origins: {{ allowed_origins }}{% endif %}
104
+ {%- if tls_enabled %}
105
+ | TLS: Enabled
106
+ {%- if tls_verify_client %}
107
+ | TLS Client Verification: Enabled
108
+ {%- endif %}
109
+ {%- endif %}
110
+ {%- if allowed_origins %}
111
+ | Allowed Origins: {{ allowed_origins }}
112
+ {%- endif %}
103
113
  | Log traces:
104
114
  | - gRPC: {{ grpc_path }}
105
115
  | - HTTP: {{ http_path }}
106
116
  | Storage: {{ storage }}
107
- {% if schema -%}
117
+ {%- if schema %}
108
118
  | - Schema: {{ schema }}
109
- {% endif -%}
119
+ {%- endif %}
110
120
  """)
111
121
 
112
122
 
@@ -356,16 +366,24 @@ def main() -> None:
356
366
 
357
367
  allowed_origins = get_env_allowed_origins()
358
368
 
369
+ # Get TLS configuration
370
+ tls_config = get_env_tls_config()
371
+ tls_enabled = tls_config is not None
372
+ tls_verify_client = tls_enabled and isinstance(tls_config, TLSConfigVerifyClient)
373
+
359
374
  # Print information about the server
360
- root_path = urljoin(f"http://{host}:{port}", host_root_path)
375
+ scheme = "https" if tls_enabled else "http"
376
+ root_path = urljoin(f"{scheme}://{host}:{port}", host_root_path)
361
377
  msg = _WELCOME_MESSAGE.render(
362
378
  version=phoenix_version,
363
379
  ui_path=root_path,
364
- grpc_path=f"http://{host}:{get_env_grpc_port()}",
380
+ grpc_path=f"{scheme}://{host}:{get_env_grpc_port()}",
365
381
  http_path=urljoin(root_path, "v1/traces"),
366
382
  storage=get_printable_db_url(db_connection_str),
367
383
  schema=get_env_database_schema(),
368
384
  auth_enabled=authentication_enabled,
385
+ tls_enabled=tls_enabled,
386
+ tls_verify_client=tls_verify_client,
369
387
  allowed_origins=allowed_origins,
370
388
  )
371
389
  if sys.platform.startswith("win"):
@@ -417,7 +435,27 @@ def main() -> None:
417
435
  oauth2_client_configs=get_env_oauth2_settings(),
418
436
  allowed_origins=allowed_origins,
419
437
  )
420
- server = Server(config=Config(app, host=host, port=port, root_path=host_root_path)) # type: ignore
438
+
439
+ # Configure server with TLS if enabled
440
+ server_config = Config(
441
+ app=app,
442
+ host=host, # type: ignore[arg-type]
443
+ port=port,
444
+ root_path=host_root_path,
445
+ )
446
+
447
+ if tls_config:
448
+ # Configure SSL context with certificate and key
449
+ server_config.ssl_keyfile = str(tls_config.key_file)
450
+ server_config.ssl_keyfile_password = tls_config.key_file_password
451
+ server_config.ssl_certfile = str(tls_config.cert_file)
452
+
453
+ # If CA file is provided and client verification is enabled
454
+ if isinstance(tls_config, TLSConfigVerifyClient):
455
+ server_config.ssl_ca_certs = str(tls_config.ca_file)
456
+ server_config.ssl_cert_reqs = CERT_REQUIRED
457
+
458
+ server = Server(config=server_config)
421
459
  Thread(target=_write_pid_file_when_ready, args=(server,), daemon=True).start()
422
460
 
423
461
  try:
@@ -1,22 +1,22 @@
1
1
  {
2
- "_components-BEtrHoeq.js": {
3
- "file": "assets/components-BEtrHoeq.js",
2
+ "_components-DepxScNF.js": {
3
+ "file": "assets/components-DepxScNF.js",
4
4
  "name": "components",
5
5
  "imports": [
6
6
  "_vendor-BfhM_F1u.js",
7
- "_pages-CZ0wMeOx.js",
7
+ "_pages-CJUakDKi.js",
8
8
  "_vendor-arizeai-CxXYQNUl.js",
9
9
  "_vendor-codemirror-B0NIFPOL.js",
10
10
  "_vendor-three-C5WAXd5r.js"
11
11
  ]
12
12
  },
13
- "_pages-CZ0wMeOx.js": {
14
- "file": "assets/pages-CZ0wMeOx.js",
13
+ "_pages-CJUakDKi.js": {
14
+ "file": "assets/pages-CJUakDKi.js",
15
15
  "name": "pages",
16
16
  "imports": [
17
17
  "_vendor-BfhM_F1u.js",
18
18
  "_vendor-arizeai-CxXYQNUl.js",
19
- "_components-BEtrHoeq.js",
19
+ "_components-DepxScNF.js",
20
20
  "_vendor-codemirror-B0NIFPOL.js",
21
21
  "_vendor-recharts-CrrDFWK1.js"
22
22
  ]
@@ -69,15 +69,15 @@
69
69
  "name": "vendor-three"
70
70
  },
71
71
  "index.tsx": {
72
- "file": "assets/index-Cdj4_6tq.js",
72
+ "file": "assets/index-DUj7q3Q4.js",
73
73
  "name": "index",
74
74
  "src": "index.tsx",
75
75
  "isEntry": true,
76
76
  "imports": [
77
77
  "_vendor-BfhM_F1u.js",
78
78
  "_vendor-arizeai-CxXYQNUl.js",
79
- "_pages-CZ0wMeOx.js",
80
- "_components-BEtrHoeq.js",
79
+ "_pages-CJUakDKi.js",
80
+ "_components-DepxScNF.js",
81
81
  "_vendor-three-C5WAXd5r.js",
82
82
  "_vendor-codemirror-B0NIFPOL.js",
83
83
  "_vendor-shiki-C5bJ-RPf.js",
@@ -1,4 +1,4 @@
1
- import{r as p,R as U,j as e,u as dn,a as ze,e as r1,s as P1,b as O1,c as Be,d as X1,f as wi,g as Le,h as xi,i as ki,k as Y1,l as s,m as _e,p as b1,n as Xe,o as Ze,q as Si,C as c1,t as Mi,v as Ti,w as N,L as wa,x as xa,y as ka,z as ge,A as C,B as v1,D as un,E as m,F as Sa,$ as zi,G as Ma,H as Ta,I as Ne,J as gn,K as X,M as Ii,N as Ai,O as Ei,P as K,Q as d1,S as O,T as H,U as R,V as za,W as Ia,X as Vi,Y as Aa,Z as Di,_ as Pi,a0 as Oi,a1 as Fi,a2 as _i,a3 as Ni,a4 as Ri,a5 as $i,a6 as Hi,a7 as C1,a8 as Ki,a9 as Bi,aa as Zi,ab as ji,ac as Me,ad as J1,ae as en,af as nn,ag as _,ah as Te,ai as $n,aj as Gi,ak as Ui,al as Ea,am as Wi,an as Qi,ao as qi,ap as Xi,aq as Yi,ar as Ji,as as er,at as nr,au as ar,av as tr,aw as ir,ax as F,ay as mn,az as rr,aA as or,aB as lr,aC as sr,aD as cr,aE as Hn,aF as Ee,aG as Va,aH as dr,aI as Da,aJ as ur,aK as gr,aL as pn,aM as mr,aN as pr,aO as hr,aP as fr,aQ as br,aR as vr,aS as Cr,aT as Kn,aU as yr,aV as Lr,aW as wr,aX as F1,aY as xr,aZ as kr,a_ as Sr,a$ as Mr,b0 as Tr,b1 as zr,b2 as Ir,b3 as Ar,b4 as Er}from"./vendor-BfhM_F1u.js";import{a as Bn,R as Vr,b as Dr,c as Pr,m as Or,T as Fr,u as _r}from"./pages-CZ0wMeOx.js";import{u as Nr,_ as Pa,a as he,T as le,E as Oa,b as Re,c as fe,d as Rr,D as y1,e as $r,f as ue,g as Hr,C as Fa,P as hn,h as _a,i as Kr,F as Na,I as Br,j as Zr,k as jr,l as Gr,m as Ur,n as Wr,o as Qr,p as qr,q as Ra,r as $a,s as Xr,t as Yr}from"./vendor-arizeai-CxXYQNUl.js";import{L as Ha,a as Ka,d as Ue,E as fn,k as Ba,b as Za,l as an,h as Jr,j as eo,c as no,e as ao,f as to,s as io,g as Ye,i as Je,R as e1,p as ro,m as oo}from"./vendor-codemirror-B0NIFPOL.js";import{V as lo}from"./vendor-three-C5WAXd5r.js";const ja=function(){var n={defaultValue:null,kind:"LocalArgument",name:"clusters"},a={defaultValue:null,kind:"LocalArgument",name:"dataQualityMetricColumnName"},t={defaultValue:null,kind:"LocalArgument",name:"fetchDataQualityMetric"},i={defaultValue:null,kind:"LocalArgument",name:"fetchPerformanceMetric"},r={defaultValue:null,kind:"LocalArgument",name:"performanceMetric"},o=[{alias:null,args:null,kind:"ScalarField",name:"primaryValue",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"referenceValue",storageKey:null}],l=[{alias:null,args:[{kind:"Variable",name:"clusters",variableName:"clusters"}],concreteType:"Cluster",kind:"LinkedField",name:"clusters",plural:!0,selections:[{alias:null,args:null,kind:"ScalarField",name:"id",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"eventIds",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"driftRatio",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"primaryToCorpusRatio",storageKey:null},{condition:"fetchDataQualityMetric",kind:"Condition",passingValue:!0,selections:[{alias:null,args:[{fields:[{kind:"Variable",name:"columnName",variableName:"dataQualityMetricColumnName"},{kind:"Literal",name:"metric",value:"mean"}],kind:"ObjectValue",name:"metric"}],concreteType:"DatasetValues",kind:"LinkedField",name:"dataQualityMetric",plural:!1,selections:o,storageKey:null}]},{condition:"fetchPerformanceMetric",kind:"Condition",passingValue:!0,selections:[{alias:null,args:[{fields:[{kind:"Variable",name:"metric",variableName:"performanceMetric"}],kind:"ObjectValue",name:"metric"}],concreteType:"DatasetValues",kind:"LinkedField",name:"performanceMetric",plural:!1,selections:o,storageKey:null}]}],storageKey:null}];return{fragment:{argumentDefinitions:[n,a,t,i,r],kind:"Fragment",metadata:null,name:"pointCloudStore_clusterMetricsQuery",selections:l,type:"Query",abstractKey:null},kind:"Request",operation:{argumentDefinitions:[n,t,a,i,r],kind:"Operation",name:"pointCloudStore_clusterMetricsQuery",selections:l},params:{cacheID:"86666967012812887ac0a0149d2d2535",id:null,metadata:{},name:"pointCloudStore_clusterMetricsQuery",operationKind:"query",text:`query pointCloudStore_clusterMetricsQuery(
1
+ import{r as p,R as U,j as e,u as dn,a as ze,e as r1,s as P1,b as O1,c as Be,d as X1,f as wi,g as Le,h as xi,i as ki,k as Y1,l as s,m as _e,p as b1,n as Xe,o as Ze,q as Si,C as c1,t as Mi,v as Ti,w as N,L as wa,x as xa,y as ka,z as ge,A as C,B as v1,D as un,E as m,F as Sa,$ as zi,G as Ma,H as Ta,I as Ne,J as gn,K as X,M as Ii,N as Ai,O as Ei,P as K,Q as d1,S as O,T as H,U as R,V as za,W as Ia,X as Vi,Y as Aa,Z as Di,_ as Pi,a0 as Oi,a1 as Fi,a2 as _i,a3 as Ni,a4 as Ri,a5 as $i,a6 as Hi,a7 as C1,a8 as Ki,a9 as Bi,aa as Zi,ab as ji,ac as Me,ad as J1,ae as en,af as nn,ag as _,ah as Te,ai as $n,aj as Gi,ak as Ui,al as Ea,am as Wi,an as Qi,ao as qi,ap as Xi,aq as Yi,ar as Ji,as as er,at as nr,au as ar,av as tr,aw as ir,ax as F,ay as mn,az as rr,aA as or,aB as lr,aC as sr,aD as cr,aE as Hn,aF as Ee,aG as Va,aH as dr,aI as Da,aJ as ur,aK as gr,aL as pn,aM as mr,aN as pr,aO as hr,aP as fr,aQ as br,aR as vr,aS as Cr,aT as Kn,aU as yr,aV as Lr,aW as wr,aX as F1,aY as xr,aZ as kr,a_ as Sr,a$ as Mr,b0 as Tr,b1 as zr,b2 as Ir,b3 as Ar,b4 as Er}from"./vendor-BfhM_F1u.js";import{a as Bn,R as Vr,b as Dr,c as Pr,m as Or,T as Fr,u as _r}from"./pages-CJUakDKi.js";import{u as Nr,_ as Pa,a as he,T as le,E as Oa,b as Re,c as fe,d as Rr,D as y1,e as $r,f as ue,g as Hr,C as Fa,P as hn,h as _a,i as Kr,F as Na,I as Br,j as Zr,k as jr,l as Gr,m as Ur,n as Wr,o as Qr,p as qr,q as Ra,r as $a,s as Xr,t as Yr}from"./vendor-arizeai-CxXYQNUl.js";import{L as Ha,a as Ka,d as Ue,E as fn,k as Ba,b as Za,l as an,h as Jr,j as eo,c as no,e as ao,f as to,s as io,g as Ye,i as Je,R as e1,p as ro,m as oo}from"./vendor-codemirror-B0NIFPOL.js";import{V as lo}from"./vendor-three-C5WAXd5r.js";const ja=function(){var n={defaultValue:null,kind:"LocalArgument",name:"clusters"},a={defaultValue:null,kind:"LocalArgument",name:"dataQualityMetricColumnName"},t={defaultValue:null,kind:"LocalArgument",name:"fetchDataQualityMetric"},i={defaultValue:null,kind:"LocalArgument",name:"fetchPerformanceMetric"},r={defaultValue:null,kind:"LocalArgument",name:"performanceMetric"},o=[{alias:null,args:null,kind:"ScalarField",name:"primaryValue",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"referenceValue",storageKey:null}],l=[{alias:null,args:[{kind:"Variable",name:"clusters",variableName:"clusters"}],concreteType:"Cluster",kind:"LinkedField",name:"clusters",plural:!0,selections:[{alias:null,args:null,kind:"ScalarField",name:"id",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"eventIds",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"driftRatio",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"primaryToCorpusRatio",storageKey:null},{condition:"fetchDataQualityMetric",kind:"Condition",passingValue:!0,selections:[{alias:null,args:[{fields:[{kind:"Variable",name:"columnName",variableName:"dataQualityMetricColumnName"},{kind:"Literal",name:"metric",value:"mean"}],kind:"ObjectValue",name:"metric"}],concreteType:"DatasetValues",kind:"LinkedField",name:"dataQualityMetric",plural:!1,selections:o,storageKey:null}]},{condition:"fetchPerformanceMetric",kind:"Condition",passingValue:!0,selections:[{alias:null,args:[{fields:[{kind:"Variable",name:"metric",variableName:"performanceMetric"}],kind:"ObjectValue",name:"metric"}],concreteType:"DatasetValues",kind:"LinkedField",name:"performanceMetric",plural:!1,selections:o,storageKey:null}]}],storageKey:null}];return{fragment:{argumentDefinitions:[n,a,t,i,r],kind:"Fragment",metadata:null,name:"pointCloudStore_clusterMetricsQuery",selections:l,type:"Query",abstractKey:null},kind:"Request",operation:{argumentDefinitions:[n,t,a,i,r],kind:"Operation",name:"pointCloudStore_clusterMetricsQuery",selections:l},params:{cacheID:"86666967012812887ac0a0149d2d2535",id:null,metadata:{},name:"pointCloudStore_clusterMetricsQuery",operationKind:"query",text:`query pointCloudStore_clusterMetricsQuery(
2
2
  $clusters: [ClusterInput!]!
3
3
  $fetchDataQualityMetric: Boolean!
4
4
  $dataQualityMetricColumnName: String
@@ -1755,6 +1755,9 @@ import{r as p,R as U,j as e,u as dn,a as ze,e as r1,s as P1,b as O1,c as Be,d as
1755
1755
  }
1756
1756
  }
1757
1757
  `;function W2(n,a){const{size:t="M",...i}=n;return e(nt,{size:t,children:e(ir,{"data-size":t,className:"ac-select",ref:a,...i,css:m(be,U2)})})}p.forwardRef(W2);const Q2=p.forwardRef((n,a)=>{const{children:t,...i}=n;return e(d1,{...i,ref:a,children:({isSelected:r})=>s(k,{direction:"row",justifyContent:"space-between",alignItems:"center",children:[e("span",{children:t}),r&&e(M,{svg:e(xt,{})})]})})});Q2.displayName="SelectItem";const h1={OPENAI:["required","auto","none"],AZURE_OPENAI:["required","auto","none"],ANTHROPIC:["any","auto","none"]},q2=(n,a)=>{switch(n){case"AZURE_OPENAI":case"OPENAI":return J(a)&&"type"in a&&typeof a.type=="string"?a.type:a;case"ANTHROPIC":return J(a)&&"type"in a&&typeof a.type=="string"?a.type:a;case"GOOGLE":return"auto";default:I()}},H4=n=>n in h1,ca=(n,a)=>{var t;return((t=h1[n])==null?void 0:t.includes(a))??!1},f1="tool_",da=n=>`${f1}${n}`,ua=n=>n.startsWith(f1)?n.slice(f1.length):n,X2=({choiceType:n})=>{switch(n){case"any":case"required":return s(k,{gap:"size-100",width:"100%",children:["Use at least one tool"," ",e(ke,{color:"var(--ac-global-color-grey-900)",size:"S",children:n})]});case"none":return s(k,{gap:"size-100",width:"100%",children:["Don't use any tools"," ",e(ke,{color:"var(--ac-global-color-grey-900)",size:"S",children:n})]});case"auto":default:return s(k,{gap:"size-100",width:"100%",children:["Tools auto-selected by LLM"," ",e(ke,{color:"var(--ac-global-color-grey-900)",size:"S",children:n})]})}};function K4({choice:n,onChange:a,toolNames:t,provider:i}){const r=q2(i,n),l=ca(i,r)?r:da(xl(n)??"");return e(Re,{selectedKey:l,label:"Tool Choice","aria-label":"Tool Choice for an LLM",onSelectionChange:c=>{if(typeof c=="string"){if(c.startsWith(f1))switch(i){case"AZURE_OPENAI":case"OPENAI":a(Jn({type:"function",function:{name:ua(c)}}));break;case"ANTHROPIC":a(ea({type:"tool",name:ua(c)}));break;default:I()}else if(ca(i,c))switch(i){case"AZURE_OPENAI":case"OPENAI":a(Jn(c));break;case"ANTHROPIC":a(ea({type:c}));break;default:I()}}},children:[...h1[i]?h1[i].map(c=>e(F,{textValue:c,children:e(X2,{choiceType:c})},c)):[],...t.map(c=>e(F,{textValue:c,children:c},da(c)))]})}const Y2=({height:n})=>s("svg",{viewBox:"0 0 24 24",width:n,height:n,xmlns:"http://www.w3.org/2000/svg",children:[e("title",{children:"Azure"}),e("path",{d:"M11.49 2H2v9.492h9.492V2h-.002z",fill:"#F25022"}),e("path",{d:"M22 2h-9.492v9.492H22V2z",fill:"#7FBA00"}),e("path",{d:"M11.49 12.508H2V22h9.492v-9.492h-.002z",fill:"#00A4EF"}),e("path",{d:"M22 12.508h-9.492V22H22v-9.492z",fill:"#FFB900"})]}),J2=({height:n})=>s("svg",{viewBox:"0 0 24 24",width:n,height:n,xmlns:"http://www.w3.org/2000/svg",children:[e("title",{children:"Google"}),e("defs",{children:s("linearGradient",{id:"lobe-icons-google-fill",x1:"0%",x2:"68.73%",y1:"100%",y2:"30.395%",children:[e("stop",{offset:"0%",stopColor:"#1C7DFF"}),e("stop",{offset:"52.021%",stopColor:"#1C69FF"}),e("stop",{offset:"100%",stopColor:"#F0DCD6"})]})}),e("path",{d:"M12 24A14.304 14.304 0 000 12 14.304 14.304 0 0012 0a14.305 14.305 0 0012 12 14.305 14.305 0 00-12 12",fill:"url(#lobe-icons-google-fill)",fillRule:"nonzero"})]}),es=({height:n})=>s("svg",{fill:"var(--ac-global-text-color-900)",fillRule:"evenodd",viewBox:"0 0 24 24",width:n,height:n,xmlns:"http://www.w3.org/2000/svg",children:[e("title",{children:"OpenAI"}),e("path",{d:"M21.55 10.004a5.416 5.416 0 00-.478-4.501c-1.217-2.09-3.662-3.166-6.05-2.66A5.59 5.59 0 0010.831 1C8.39.995 6.224 2.546 5.473 4.838A5.553 5.553 0 001.76 7.496a5.487 5.487 0 00.691 6.5 5.416 5.416 0 00.477 4.502c1.217 2.09 3.662 3.165 6.05 2.66A5.586 5.586 0 0013.168 23c2.443.006 4.61-1.546 5.361-3.84a5.553 5.553 0 003.715-2.66 5.488 5.488 0 00-.693-6.497v.001zm-8.381 11.558a4.199 4.199 0 01-2.675-.954c.034-.018.093-.05.132-.074l4.44-2.53a.71.71 0 00.364-.623v-6.176l1.877 1.069c.02.01.033.029.036.05v5.115c-.003 2.274-1.87 4.118-4.174 4.123zM4.192 17.78a4.059 4.059 0 01-.498-2.763c.032.02.09.055.131.078l4.44 2.53c.225.13.504.13.73 0l5.42-3.088v2.138a.068.068 0 01-.027.057L9.9 19.288c-1.999 1.136-4.552.46-5.707-1.51h-.001zM3.023 8.216A4.15 4.15 0 015.198 6.41l-.002.151v5.06a.711.711 0 00.364.624l5.42 3.087-1.876 1.07a.067.067 0 01-.063.005l-4.489-2.559c-1.995-1.14-2.679-3.658-1.53-5.63h.001zm15.417 3.54l-5.42-3.088L14.896 7.6a.067.067 0 01.063-.006l4.489 2.557c1.998 1.14 2.683 3.662 1.529 5.633a4.163 4.163 0 01-2.174 1.807V12.38a.71.71 0 00-.363-.623zm1.867-2.773a6.04 6.04 0 00-.132-.078l-4.44-2.53a.731.731 0 00-.729 0l-5.42 3.088V7.325a.068.068 0 01.027-.057L14.1 4.713c2-1.137 4.555-.46 5.707 1.513.487.833.664 1.809.499 2.757h.001zm-11.741 3.81l-1.877-1.068a.065.065 0 01-.036-.051V6.559c.001-2.277 1.873-4.122 4.181-4.12.976 0 1.92.338 2.671.954-.034.018-.092.05-.131.073l-4.44 2.53a.71.71 0 00-.365.623l-.003 6.173v.002zm1.02-2.168L12 9.25l2.414 1.375v2.75L12 14.75l-2.415-1.375v-2.75z"})]}),ns=({height:n})=>s("svg",{fill:"var(--ac-global-text-color-900)",fillRule:"evenodd",viewBox:"0 0 24 24",width:n,height:n,xmlns:"http://www.w3.org/2000/svg",children:[e("title",{children:"Anthropic"}),e("path",{d:"M13.827 3.52h3.603L24 20h-3.603l-6.57-16.48zm-7.258 0h3.767L16.906 20h-3.674l-1.343-3.461H5.017l-1.344 3.46H0L6.57 3.522zm4.132 9.959L8.453 7.687 6.205 13.48H10.7z"})]}),as={AZURE_OPENAI:Y2,GOOGLE:J2,OPENAI:es,ANTHROPIC:ns};function B4({provider:n,height:a=18}){return as[n]({height:a})}const Dt=m`
1758
+ // fixes table row sizing issues with full height cell children
1759
+ // this enables features like hovering anywhere on a cell to display controls
1760
+ height: fit-content;
1758
1761
  font-size: var(--ac-global-font-size-s);
1759
1762
  width: 100%;
1760
1763
  border-collapse: separate;
@@ -1814,6 +1817,8 @@ import{r as p,R as U,j as e,u as dn,a as ze,e as r1,s as P1,b as O1,c as Be,d as
1814
1817
  }
1815
1818
  tbody:not(.is-empty) {
1816
1819
  tr {
1820
+ // when paired with table.height:fit-content, allows table cells and their children to fill entire row height
1821
+ height: 100%;
1817
1822
  &:not(:last-of-type) {
1818
1823
  & > td {
1819
1824
  border-bottom: 1px solid var(--ac-global-border-color-default);
@@ -1,4 +1,4 @@
1
- import{r as t,j as o,bp as z,l as c,P as w,R as P,E as b,cx as k,ei as S,ej as F,ek as L,bF as C,el as l,w as E,em as R}from"./vendor-BfhM_F1u.js";import{c as I,x as j,D as A,K as T,M as _}from"./vendor-arizeai-CxXYQNUl.js";import{L as D,r as O,d as G,e as M,F as N,f as V,P as q,h as K,M as m,g as U,D as W,i as B,E as H,j as J,k as Y,p as $,l as X,n as p,o as Z,q as Q,s as oo,S as lo,t as ao,v as ro,w as co,x as go,y as eo,z as bo,A as u,B as f,C as y,G as no,H as io,I as so,J as to,K as mo,N as po,O as uo,Q as fo,U as yo,V as vo,W as ho,X as xo,Y as zo,Z as wo,_ as Po,$ as ko,a0 as So,a1 as Fo,a2 as Lo,a3 as Co,a4 as Eo,a5 as Ro,a6 as Io,a7 as jo,a8 as Ao,a9 as To,aa as _o,ab as Do,ac as Oo,ad as Go,ae as Mo,af as No,ag as Vo,ah as qo}from"./pages-CZ0wMeOx.js";import{z as Ko,dX as Uo,bH as Wo,R as Bo,dY as Ho,dZ as Jo}from"./components-BEtrHoeq.js";import"./vendor-three-C5WAXd5r.js";import"./vendor-codemirror-B0NIFPOL.js";import"./vendor-shiki-C5bJ-RPf.js";import"./vendor-recharts-CrrDFWK1.js";(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const r of document.querySelectorAll('link[rel="modulepreload"]'))s(r);new MutationObserver(r=>{for(const g of r)if(g.type==="childList")for(const n of g.addedNodes)n.tagName==="LINK"&&n.rel==="modulepreload"&&s(n)}).observe(document,{childList:!0,subtree:!0});function i(r){const g={};return r.integrity&&(g.integrity=r.integrity),r.referrerPolicy&&(g.referrerPolicy=r.referrerPolicy),r.crossOrigin==="use-credentials"?g.credentials="include":r.crossOrigin==="anonymous"?g.credentials="omit":g.credentials="same-origin",g}function s(r){if(r.ep)return;r.ep=!0;const g=i(r);fetch(r.href,g)}})();const v="arize-phoenix-feature-flags",d={__RESET__:!1};function Yo(){const a=localStorage.getItem(v);if(!a)return d;try{const e=JSON.parse(a);return Object.assign({},d,e)}catch{return d}}const h=t.createContext(null);function $o(){const a=P.useContext(h);if(a===null)throw new Error("useFeatureFlags must be used within a FeatureFlagsProvider");return a}function Xo(a){const[e,i]=t.useState(Yo()),s=r=>{localStorage.setItem(v,JSON.stringify(r)),i(r)};return o(h.Provider,{value:{featureFlags:e,setFeatureFlags:s},children:o(Zo,{children:a.children})})}function Zo(a){const{children:e}=a,{featureFlags:i,setFeatureFlags:s}=$o(),[r,g]=t.useState(!1);return z("ctrl+shift+f",()=>g(!0)),c(w,{children:[e,o(A,{type:"modal",isDismissable:!0,onDismiss:()=>g(!1),children:r&&o(I,{title:"Feature Flags",children:o(Ko,{height:"size-1000",padding:"size-100",children:Object.keys(i).map(n=>o(j,{isSelected:i[n],onChange:x=>s({...i,[n]:x}),children:n},n))})})})]})}const Qo=b`
1
+ import{r as t,j as o,bp as z,l as c,P as w,R as P,E as b,cx as k,ei as S,ej as F,ek as L,bF as C,el as l,w as E,em as R}from"./vendor-BfhM_F1u.js";import{c as I,x as j,D as A,K as T,M as _}from"./vendor-arizeai-CxXYQNUl.js";import{L as D,r as O,d as G,e as M,F as N,f as V,P as q,h as K,M as m,g as U,D as W,i as B,E as H,j as J,k as Y,p as $,l as X,n as p,o as Z,q as Q,s as oo,S as lo,t as ao,v as ro,w as co,x as go,y as eo,z as bo,A as u,B as f,C as y,G as no,H as io,I as so,J as to,K as mo,N as po,O as uo,Q as fo,U as yo,V as vo,W as ho,X as xo,Y as zo,Z as wo,_ as Po,$ as ko,a0 as So,a1 as Fo,a2 as Lo,a3 as Co,a4 as Eo,a5 as Ro,a6 as Io,a7 as jo,a8 as Ao,a9 as To,aa as _o,ab as Do,ac as Oo,ad as Go,ae as Mo,af as No,ag as Vo,ah as qo}from"./pages-CJUakDKi.js";import{z as Ko,dX as Uo,bH as Wo,R as Bo,dY as Ho,dZ as Jo}from"./components-DepxScNF.js";import"./vendor-three-C5WAXd5r.js";import"./vendor-codemirror-B0NIFPOL.js";import"./vendor-shiki-C5bJ-RPf.js";import"./vendor-recharts-CrrDFWK1.js";(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const r of document.querySelectorAll('link[rel="modulepreload"]'))s(r);new MutationObserver(r=>{for(const g of r)if(g.type==="childList")for(const n of g.addedNodes)n.tagName==="LINK"&&n.rel==="modulepreload"&&s(n)}).observe(document,{childList:!0,subtree:!0});function i(r){const g={};return r.integrity&&(g.integrity=r.integrity),r.referrerPolicy&&(g.referrerPolicy=r.referrerPolicy),r.crossOrigin==="use-credentials"?g.credentials="include":r.crossOrigin==="anonymous"?g.credentials="omit":g.credentials="same-origin",g}function s(r){if(r.ep)return;r.ep=!0;const g=i(r);fetch(r.href,g)}})();const v="arize-phoenix-feature-flags",d={__RESET__:!1};function Yo(){const a=localStorage.getItem(v);if(!a)return d;try{const e=JSON.parse(a);return Object.assign({},d,e)}catch{return d}}const h=t.createContext(null);function $o(){const a=P.useContext(h);if(a===null)throw new Error("useFeatureFlags must be used within a FeatureFlagsProvider");return a}function Xo(a){const[e,i]=t.useState(Yo()),s=r=>{localStorage.setItem(v,JSON.stringify(r)),i(r)};return o(h.Provider,{value:{featureFlags:e,setFeatureFlags:s},children:o(Zo,{children:a.children})})}function Zo(a){const{children:e}=a,{featureFlags:i,setFeatureFlags:s}=$o(),[r,g]=t.useState(!1);return z("ctrl+shift+f",()=>g(!0)),c(w,{children:[e,o(A,{type:"modal",isDismissable:!0,onDismiss:()=>g(!1),children:r&&o(I,{title:"Feature Flags",children:o(Ko,{height:"size-1000",padding:"size-100",children:Object.keys(i).map(n=>o(j,{isSelected:i[n],onChange:x=>s({...i,[n]:x}),children:n},n))})})})]})}const Qo=b`
2
2
  :root {
3
3
  --ac-global-dimension-scale-factor: 1;
4
4
  --ac-global-dimension-size-0: 0px;