arize-phoenix 7.9.0__py3-none-any.whl → 7.9.1__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.

@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: arize-phoenix
3
- Version: 7.9.0
3
+ Version: 7.9.1
4
4
  Summary: AI Observability and Evaluation
5
5
  Project-URL: Documentation, https://docs.arize.com/phoenix/
6
6
  Project-URL: Issues, https://github.com/Arize-ai/phoenix/issues
@@ -6,7 +6,7 @@ phoenix/exceptions.py,sha256=n2L2KKuecrdflB9MsCdAYCiSEvGJptIsfRkXMoJle7A,169
6
6
  phoenix/py.typed,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
7
7
  phoenix/services.py,sha256=kpW1WL0kiB8XJsO6XycvZVJ-lBkNoenhQ7atCvBoSe8,5365
8
8
  phoenix/settings.py,sha256=ht-0oN-sMV6SPXrk7Tu1EZlngpAYkGNLYPhO8DyrdQI,661
9
- phoenix/version.py,sha256=cR9GZGw5gRT-1yq69vN7Bfk48p6j47mGqQA4xv9soHw,22
9
+ phoenix/version.py,sha256=OCzzWcndzwbsTJckJwc3M6Ckz0RxG4bgI8z00zXB5dQ,22
10
10
  phoenix/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
11
  phoenix/core/embedding_dimension.py,sha256=zKGbcvwOXgLf-yrJBpQyKtd-LEOPRKHnUToyAU8Owis,87
12
12
  phoenix/core/model.py,sha256=qBFraOtmwCCnWJltKNP18DDG0mULXigytlFsa6YOz6k,4837
@@ -159,7 +159,7 @@ phoenix/server/api/input_types/DeleteExperimentsInput.py,sha256=4d9N0vSLYbuysAam
159
159
  phoenix/server/api/input_types/DimensionFilter.py,sha256=eBYcn7ECSJQlEePvbStqkHBRicbIL4vEAzFJwX7bacQ,3137
160
160
  phoenix/server/api/input_types/DimensionInput.py,sha256=Vfx5FmiMKey4-EHDQsQRPzSAMRJMN5oVMLDUl4NKAa8,164
161
161
  phoenix/server/api/input_types/GenerativeModelInput.py,sha256=h_9dNkz-LBgOLKQ5_ijch4UNGiDb4x5CCC96WyverSg,551
162
- phoenix/server/api/input_types/Granularity.py,sha256=PiOFWmSMs_w7ZZMNfEWPzIY6S6guI83Vy4NXXSEewGo,2310
162
+ phoenix/server/api/input_types/Granularity.py,sha256=dbBlD_GsIBa8_xrx4JlLuR59bQ0NRB5H-cv1zvcb-cw,2299
163
163
  phoenix/server/api/input_types/InvocationParameters.py,sha256=I_FvPvY2sXxNd-kFSB96-1DOW7lo-VbqVWzppU_5hy8,5196
164
164
  phoenix/server/api/input_types/PatchAnnotationInput.py,sha256=NWhkcbcGNPwfOYsN3wm5YFNNrSc5T-8Y5my74RK99HE,520
165
165
  phoenix/server/api/input_types/PatchDatasetExamplesInput.py,sha256=_uMqkAInhLDvzUSASl6HgLNulTsekMcYzyd5J6LF90I,884
@@ -169,7 +169,7 @@ phoenix/server/api/input_types/ProjectSessionSort.py,sha256=qFgLmKYeyFpx7An9ZNdD
169
169
  phoenix/server/api/input_types/SpanAnnotationSort.py,sha256=T5pAGzmh4MiJp9JMAzNDByFVTczfw02FH4WFWwFezyI,361
170
170
  phoenix/server/api/input_types/SpanSort.py,sha256=Dhvl8BIoV52yHoqntfOax_gUc15uH8ITI_00Ha7PvYc,5959
171
171
  phoenix/server/api/input_types/TemplateOptions.py,sha256=BrKozr604QwthBdKhlsHbxJc5oZ7eHnwviVubW2i0jA,220
172
- phoenix/server/api/input_types/TimeRange.py,sha256=yzx-gxj8mDeGLft1FzU_x1MVEgIG5Pt6-f8PUVDgipQ,522
172
+ phoenix/server/api/input_types/TimeRange.py,sha256=gWr55NPaB4gy-Ta4amMAjBqz7YANO2rF00Y6c802d5U,656
173
173
  phoenix/server/api/input_types/TraceAnnotationSort.py,sha256=BzwiUnMh2VsgQYnhDlbJ6ljHugqIS4YDUlYzvq_tl3o,365
174
174
  phoenix/server/api/input_types/UserRoleInput.py,sha256=xxhFe0ITZOgRVEJbVem_W6F1Ip_H6xDENdQqMMx-kKE,129
175
175
  phoenix/server/api/input_types/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -216,14 +216,14 @@ phoenix/server/api/types/DatasetExample.py,sha256=5f7DO6jRec1G5jaJW5FrykFU9R07jD
216
216
  phoenix/server/api/types/DatasetExampleRevision.py,sha256=c-jWR6dTguEZTm54IMlFr0Ic84I3nefyDnZb7nF5hnI,874
217
217
  phoenix/server/api/types/DatasetValues.py,sha256=7VbCOLlzOXpZN80-zYF2UGuafRcPsZF-8WQNc0YsKFc,1119
218
218
  phoenix/server/api/types/DatasetVersion.py,sha256=NnDriqQUE20N_Jhyu3-IxHWJQE9wmdHEJIQAKyTVJpo,302
219
- phoenix/server/api/types/Dimension.py,sha256=Yv1h_vGcPKXaTjl2jb9Agf1L9noTJ1YC092VUKItqDQ,10326
219
+ phoenix/server/api/types/Dimension.py,sha256=VjW6kOMhFslGSSHlsylpF1hYY3wuhopC2LM2eOcIhRI,10665
220
220
  phoenix/server/api/types/DimensionDataType.py,sha256=o0QQRpUzgXbhd10drR2LthxrjB8klQcELrIvsbp4l_g,441
221
221
  phoenix/server/api/types/DimensionShape.py,sha256=LNsRt3Uyx1OmwMa5EXk1JGRXPLVV2EEgYXz-6wnLJn4,562
222
222
  phoenix/server/api/types/DimensionType.py,sha256=JLikZUBVqbHlUWcYYd8d60gB1_hmAcuFuZZsjCXpIwc,801
223
223
  phoenix/server/api/types/DimensionWithValue.py,sha256=4_koirnDrZBBdFkIWka2f-OeqZ6IzQXwqz3ccjdgHrc,484
224
224
  phoenix/server/api/types/DocumentEvaluationSummary.py,sha256=dx4Btlfw9_XsfmibjfWvMOvUfrvr9oGJq8jYmIL2o-Q,3494
225
225
  phoenix/server/api/types/DocumentRetrievalMetrics.py,sha256=amkpC3H5IU5-9GvO0telpbq00m6lIcv_2v446OpwFwc,1822
226
- phoenix/server/api/types/EmbeddingDimension.py,sha256=XOd85EkFfrOtPSjdRuV-ri2HnXi4Goe25ABEh-cPgnc,19055
226
+ phoenix/server/api/types/EmbeddingDimension.py,sha256=AYvpZ1nWINAgN4BAZsA_xI_2TNFK6h5jmqzvkPs651M,19428
227
227
  phoenix/server/api/types/EmbeddingMetadata.py,sha256=fJvNNYCbkf3SJalArLy9rcBq9Uj1SNac60zjqe1PFnM,461
228
228
  phoenix/server/api/types/Evaluation.py,sha256=rLJptUSRUPPx9sdUyc4UPWxzkr9gcKtkpAS5Zi_EyFQ,2406
229
229
  phoenix/server/api/types/EvaluationSummary.py,sha256=vILYejnfPvMwWEXOwhQZsANvYe3AdO2OkMR2rcgp1H4,1512
@@ -243,7 +243,7 @@ phoenix/server/api/types/Inferences.py,sha256=wv88PjcK-KwnzmTdukiAX9EV2KX4GqsKXV
243
243
  phoenix/server/api/types/InferencesRole.py,sha256=mLfeHpyhGUVX1-tWzT9IwC_cD18BZrD3RA4YsHYuSpA,595
244
244
  phoenix/server/api/types/LabelFraction.py,sha256=zsDxdFALrNiGA1eNykeP8o65gbA0HOhRp54MPH_iRAM,93
245
245
  phoenix/server/api/types/MimeType.py,sha256=Zpi6zCalkSFgsvhzvOs-O1gYA04usAi9H__QZUmFlO0,365
246
- phoenix/server/api/types/Model.py,sha256=dirXGnOqLFNaOlXUwqyAjiJjcOrWpryO_5N6V0pAxtk,8045
246
+ phoenix/server/api/types/Model.py,sha256=8UIFqMe1q-2ufBNg-gxHusV8wM1h-KbfLUeJjyVcMvQ,8081
247
247
  phoenix/server/api/types/NumericRange.py,sha256=afEjgF97Go_OvmjMggbPBt-zGM8IONewAyEiKEHRds0,192
248
248
  phoenix/server/api/types/PerformanceMetric.py,sha256=KFkmJDqP43eDUtARQOUqR7NYcxvL6Vh2uisHWU6H3ko,387
249
249
  phoenix/server/api/types/Project.py,sha256=xbV15SOHcPQeE1TMSWFpXk7ZQkfxCD4ZjFS4C83K4tU,18852
@@ -258,7 +258,7 @@ phoenix/server/api/types/SpanAnnotation.py,sha256=6b5G-b_OoRvDL2ayWk7MkbqarLK-F-
258
258
  phoenix/server/api/types/SpanIOValue.py,sha256=u_g9QrX-E3fwneoucire73KY5gf3fE4V9IBN3qx2cvU,445
259
259
  phoenix/server/api/types/SystemApiKey.py,sha256=2ym8EgsTBIvxx1l9xZ-2YMovz58ZwYb_MaHBTJ9NH2E,166
260
260
  phoenix/server/api/types/TemplateLanguage.py,sha256=6j_0uwO_GZIeCpR7sTOnxySXudT7qBSC6LFsjzbvW1o,160
261
- phoenix/server/api/types/TimeSeries.py,sha256=nnZnEQvjKhdyVYBGwjQ76UdUVDsZ_8OuDS319LmMhUI,5310
261
+ phoenix/server/api/types/TimeSeries.py,sha256=nuuZtfHmOhTjeB8_SvZ5PUQexAkTcPScwYeFC5RUlRU,5491
262
262
  phoenix/server/api/types/TokenUsage.py,sha256=g-PjAGVigpchQgkXAuC5sc53fn2YwAgfeXkGmFPi_TE,201
263
263
  phoenix/server/api/types/Trace.py,sha256=Nwof2FlcZtCFnKTS5UqvNZBlY-VcN5QMK7Zm9xEQUrU,5597
264
264
  phoenix/server/api/types/TraceAnnotation.py,sha256=OW6A2zr1gomOuG0XQe55dk15XXX2DSM0DzatRbHWH5A,1256
@@ -287,10 +287,10 @@ phoenix/server/static/apple-touch-icon-76x76.png,sha256=CT_xT12I0u2i0WU8JzBZBuOQ
287
287
  phoenix/server/static/apple-touch-icon.png,sha256=fOfpjqGpWYbJ0eAurKsyoZP1EAs6ZVooBJ_SGk2ZkDs,3801
288
288
  phoenix/server/static/favicon.ico,sha256=bY0vvCKRftemZfPShwZtE93DiiQdaYaozkPGwNFr6H8,34494
289
289
  phoenix/server/static/modernizr.js,sha256=mvK-XtkNqjOral-QvzoqsyOMECXIMu5BQwSVN_wcU9c,2564
290
- phoenix/server/static/.vite/manifest.json,sha256=MZ4XZ6Z1DSNli6ZeXIcXPC9IwhTtKXswhv2szy9CM14,2163
291
- phoenix/server/static/assets/components-Dn-PoB4S.js,sha256=kp3x6i8kFHqQ5LjqPiBtmx3YfMRlwj7fwotEk1lyFSs,390205
292
- phoenix/server/static/assets/index-Cky21rQb.js,sha256=VzW6K99SWOuKD6I0XOILzhZZvcZAlhzjxzNn2GL8dPc,8711
293
- phoenix/server/static/assets/pages-DRhPpbPi.js,sha256=lKL-JvRwH_53RMwwCZVasLId1YjZWjEKVi5MA8fjeGk,680660
290
+ phoenix/server/static/.vite/manifest.json,sha256=VBEhec2sIILozJ577fkMAeHAtsO5Uyp_Aiv06RopPso,2163
291
+ phoenix/server/static/assets/components-CN9dra1h.js,sha256=MEQ7hAxk7BTbYMSLnbwQ67BnBFqZW79yHJQLPJAO3Uc,390205
292
+ phoenix/server/static/assets/index-DcnHbEy5.js,sha256=O6Z5cf7vTw3Nj2SNxsl_QWXYYwSj2k3uV6Sk_V4ipUE,8711
293
+ phoenix/server/static/assets/pages-nMcybglv.js,sha256=suAAMt5HEOeCllO8MYDnfspDLJHvONvz-FPgOF7Lz4c,680658
294
294
  phoenix/server/static/assets/vendor-DvC8cT4X.js,sha256=-EzJrg6BeYa58JPfaZC6KS5gvkJ8gC1n-Sb7lP-pOkw,2159677
295
295
  phoenix/server/static/assets/vendor-DxkFTwjz.css,sha256=nZrkr0u6NNElFGvpWHk9GTHeGoibCXCli1bE7mXZGZg,1816
296
296
  phoenix/server/static/assets/vendor-arizeai-Do1793cv.js,sha256=IFADVVEZ8VY9o4iqYighRedZTXSyi1uZMTFFsBeIYis,305184
@@ -317,7 +317,7 @@ phoenix/trace/schemas.py,sha256=Su6e567Bei9oo6PsWO2srTcPAj9C2bMgbGtx64Sgqeg,6332
317
317
  phoenix/trace/span_evaluations.py,sha256=x3nye9r2SQk1mrR3N05YbuWsgUKpMWwTRBtJTDBSj3Y,13156
318
318
  phoenix/trace/span_json_decoder.py,sha256=J1_oDViuUoC4vxPg61U4EOZC1uEMcCzoj-kVjOFEE8k,3224
319
319
  phoenix/trace/span_json_encoder.py,sha256=Wa7RvQTZSsFG4pdKSSFSO_4q4DjAOQuG8wLNJvYzsfM,2004
320
- phoenix/trace/trace_dataset.py,sha256=7XyCe_7WemBmAiHw0kigmwkC1gPSLeVBqtrRe9FpM6s,14490
320
+ phoenix/trace/trace_dataset.py,sha256=jOlAD8_QqbI3hwqya72hrd3zo-pg7ok1I1a4psoHqbA,14936
321
321
  phoenix/trace/utils.py,sha256=nlOmbF4n57s6qwZsMoeyEdfPHl6KE0fZM8V9aHaIR-I,1681
322
322
  phoenix/trace/dsl/README.md,sha256=ihmP9zGUC5V-TDbzKla76LuyDqPDQIBUH2BORwxNI68,2902
323
323
  phoenix/trace/dsl/__init__.py,sha256=WIQIjJg362XD3s50OsPJJ0xbDsGp41bSv7vDllLrPuA,144
@@ -337,9 +337,9 @@ phoenix/utilities/project.py,sha256=auVpARXkDb-JgeX5f2aStyFIkeKvGwN9l7qrFeJMVxI,
337
337
  phoenix/utilities/re.py,sha256=x8Xbk-Wa6qDMAtUd_7JtZvKtrYEuMY-bchB0n163_5c,2006
338
338
  phoenix/utilities/span_store.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
339
339
  phoenix/utilities/template_formatters.py,sha256=gh9PJD6WEGw7TEYXfSst1UR4pWWwmjxMLrDVQ_CkpkQ,2779
340
- arize_phoenix-7.9.0.dist-info/METADATA,sha256=Dm7BoR78lSCEm7pc2Lar9DzCeqHvudTrG4veoMMrOSI,23522
341
- arize_phoenix-7.9.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
342
- arize_phoenix-7.9.0.dist-info/entry_points.txt,sha256=Pgpn8Upxx9P8z8joPXZWl2LlnAlGc3gcQoVchb06X1Q,94
343
- arize_phoenix-7.9.0.dist-info/licenses/IP_NOTICE,sha256=JBqyyCYYxGDfzQ0TtsQgjts41IJoa-hiwDrBjCb9gHM,469
344
- arize_phoenix-7.9.0.dist-info/licenses/LICENSE,sha256=HFkW9REuMOkvKRACuwLPT0hRydHb3zNg-fdFt94td18,3794
345
- arize_phoenix-7.9.0.dist-info/RECORD,,
340
+ arize_phoenix-7.9.1.dist-info/METADATA,sha256=uZ-830O5Z4WO4AYrns3ImDt3CL8QDb2L9QQJUXsvR6o,23522
341
+ arize_phoenix-7.9.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
342
+ arize_phoenix-7.9.1.dist-info/entry_points.txt,sha256=Pgpn8Upxx9P8z8joPXZWl2LlnAlGc3gcQoVchb06X1Q,94
343
+ arize_phoenix-7.9.1.dist-info/licenses/IP_NOTICE,sha256=JBqyyCYYxGDfzQ0TtsQgjts41IJoa-hiwDrBjCb9gHM,469
344
+ arize_phoenix-7.9.1.dist-info/licenses/LICENSE,sha256=HFkW9REuMOkvKRACuwLPT0hRydHb3zNg-fdFt94td18,3794
345
+ arize_phoenix-7.9.1.dist-info/RECORD,,
@@ -4,7 +4,7 @@ from itertools import accumulate, repeat, takewhile
4
4
 
5
5
  import strawberry
6
6
 
7
- from phoenix.server.api.input_types.TimeRange import TimeRange
7
+ from phoenix.core import model_schema
8
8
 
9
9
 
10
10
  @strawberry.input(
@@ -38,7 +38,7 @@ class Granularity:
38
38
 
39
39
 
40
40
  def to_timestamps(
41
- time_range: TimeRange,
41
+ time_range: model_schema.TimeRange,
42
42
  granularity: Granularity,
43
43
  ) -> Iterator[datetime]:
44
44
  if not granularity.sampling_interval_minutes:
@@ -51,6 +51,6 @@ def to_timestamps(
51
51
  minutes=granularity.sampling_interval_minutes,
52
52
  )
53
53
  ),
54
- initial=time_range.end,
54
+ initial=time_range.stop,
55
55
  ),
56
56
  )
@@ -1,20 +1,23 @@
1
1
  from datetime import datetime, timezone
2
+ from typing import Optional
2
3
 
3
4
  import strawberry
4
5
 
5
6
 
6
7
  @strawberry.input
7
8
  class TimeRange:
8
- start: datetime = strawberry.field(
9
+ start: Optional[datetime] = strawberry.field(
9
10
  description="The start of the time range",
10
11
  )
11
- end: datetime = strawberry.field(
12
+ end: Optional[datetime] = strawberry.field(
12
13
  description="The end of the time range. Right exclusive.",
13
14
  )
14
15
 
15
16
  def __post_init__(self) -> None:
16
- self.start = self.start.astimezone(timezone.utc)
17
- self.end = self.end.astimezone(timezone.utc)
17
+ if self.start:
18
+ self.start = self.start.astimezone(timezone.utc)
19
+ if self.end:
20
+ self.end = self.end.astimezone(timezone.utc)
18
21
 
19
22
  def is_valid(self) -> bool:
20
- return self.start < self.end
23
+ return not self.start or not self.end or self.start < self.end
@@ -9,6 +9,7 @@ from strawberry.types import Info
9
9
  from typing_extensions import Annotated
10
10
 
11
11
  import phoenix.core.model_schema as ms
12
+ from phoenix.core import model_schema
12
13
  from phoenix.core.model_schema import CONTINUOUS, PRIMARY, REFERENCE, ScalarDimension
13
14
  from phoenix.metrics import binning
14
15
  from phoenix.metrics.metrics import Count
@@ -71,14 +72,14 @@ class Dimension(Node):
71
72
  if model[REFERENCE].empty:
72
73
  return None
73
74
  inferences = model[PRIMARY]
74
- time_range, granularity = ensure_timeseries_parameters(
75
+ resolved_time_range, granularity = ensure_timeseries_parameters(
75
76
  inferences,
76
77
  time_range,
77
78
  )
78
79
  data = get_drift_timeseries_data(
79
80
  self.dimension,
80
81
  metric,
81
- time_range,
82
+ resolved_time_range,
82
83
  granularity,
83
84
  pd.DataFrame(
84
85
  {self.dimension.name: self.dimension[REFERENCE]},
@@ -103,14 +104,14 @@ class Dimension(Node):
103
104
  if not isinstance(inferences_role, InferencesRole):
104
105
  inferences_role = InferencesRole.primary
105
106
  inferences = info.context.model[inferences_role.value]
106
- time_range, granularity = ensure_timeseries_parameters(
107
+ resolved_time_range, granularity = ensure_timeseries_parameters(
107
108
  inferences,
108
109
  time_range,
109
110
  )
110
111
  data = get_data_quality_timeseries_data(
111
112
  self.dimension,
112
113
  metric,
113
- time_range,
114
+ resolved_time_range,
114
115
  granularity,
115
116
  inferences_role,
116
117
  )
@@ -150,7 +151,7 @@ class Dimension(Node):
150
151
  if not isinstance(inferences_role, InferencesRole):
151
152
  inferences_role = InferencesRole.primary
152
153
  inferences = info.context.model[inferences_role.value]
153
- time_range, granularity = ensure_timeseries_parameters(
154
+ resolved_time_range, granularity = ensure_timeseries_parameters(
154
155
  inferences,
155
156
  time_range,
156
157
  granularity,
@@ -159,7 +160,7 @@ class Dimension(Node):
159
160
  data=get_data_quality_timeseries_data(
160
161
  self.dimension,
161
162
  metric,
162
- time_range,
163
+ resolved_time_range,
163
164
  granularity,
164
165
  inferences_role,
165
166
  )
@@ -184,7 +185,7 @@ class Dimension(Node):
184
185
  if model[REFERENCE].empty:
185
186
  return DriftTimeSeries(data=[])
186
187
  inferences = model[PRIMARY]
187
- time_range, granularity = ensure_timeseries_parameters(
188
+ resolved_time_range, granularity = ensure_timeseries_parameters(
188
189
  inferences,
189
190
  time_range,
190
191
  granularity,
@@ -193,7 +194,7 @@ class Dimension(Node):
193
194
  data=get_drift_timeseries_data(
194
195
  self.dimension,
195
196
  metric,
196
- time_range,
197
+ resolved_time_range,
197
198
  granularity,
198
199
  pd.DataFrame(
199
200
  {self.dimension.name: self.dimension[REFERENCE]},
@@ -229,10 +230,14 @@ class Dimension(Node):
229
230
  if (df := model[role]).empty:
230
231
  continue
231
232
  if time_range:
233
+ resolved_time_range = model_schema.TimeRange(
234
+ start=time_range.start or df.time_range.start,
235
+ stop=time_range.end or df.time_range.stop,
236
+ )
232
237
  start, stop = row_interval_from_sorted_time_index(
233
238
  df.index,
234
- time_range.start,
235
- time_range.end,
239
+ resolved_time_range.start,
240
+ resolved_time_range.stop,
236
241
  )
237
242
  df = df.iloc[start:stop]
238
243
  summaries[role] = binning_method.segmented_summary(
@@ -15,6 +15,7 @@ from strawberry.types import Info
15
15
  from typing_extensions import Annotated
16
16
 
17
17
  import phoenix.core.model_schema as ms
18
+ from phoenix.core import model_schema
18
19
  from phoenix.core.model_schema import (
19
20
  ACTUAL_LABEL,
20
21
  ACTUAL_SCORE,
@@ -93,14 +94,14 @@ class EmbeddingDimension(Node):
93
94
  if model[REFERENCE].empty:
94
95
  return None
95
96
  dataset = model[PRIMARY]
96
- time_range, granularity = ensure_timeseries_parameters(
97
+ resolved_time_range, granularity = ensure_timeseries_parameters(
97
98
  dataset,
98
99
  time_range,
99
100
  )
100
101
  data = get_drift_timeseries_data(
101
102
  self.dimension,
102
103
  metric,
103
- time_range,
104
+ resolved_time_range,
104
105
  granularity,
105
106
  pd.DataFrame(
106
107
  {self.dimension.name: self.dimension[REFERENCE]},
@@ -127,14 +128,14 @@ class EmbeddingDimension(Node):
127
128
  return None
128
129
  model = info.context.model
129
130
  dataset = model[PRIMARY]
130
- time_range, granularity = ensure_timeseries_parameters(
131
+ resolved_time_range, granularity = ensure_timeseries_parameters(
131
132
  dataset,
132
133
  time_range,
133
134
  )
134
135
  data = get_drift_timeseries_data(
135
136
  self.dimension,
136
137
  metric,
137
- time_range,
138
+ resolved_time_range,
138
139
  granularity,
139
140
  pd.DataFrame(
140
141
  {self.dimension.name: self.dimension(corpus[PRIMARY])},
@@ -167,7 +168,7 @@ class EmbeddingDimension(Node):
167
168
  if not isinstance(inferences_role, InferencesRole):
168
169
  inferences_role = InferencesRole.primary
169
170
  dataset = info.context.model[inferences_role.value]
170
- time_range, granularity = ensure_timeseries_parameters(
171
+ resolved_time_range, granularity = ensure_timeseries_parameters(
171
172
  dataset,
172
173
  time_range,
173
174
  granularity,
@@ -176,7 +177,7 @@ class EmbeddingDimension(Node):
176
177
  data=get_data_quality_timeseries_data(
177
178
  self.dimension,
178
179
  metric,
179
- time_range,
180
+ resolved_time_range,
180
181
  granularity,
181
182
  inferences_role,
182
183
  )
@@ -203,7 +204,7 @@ class EmbeddingDimension(Node):
203
204
  if model[REFERENCE].empty:
204
205
  return DriftTimeSeries(data=[])
205
206
  dataset = model[PRIMARY]
206
- time_range, granularity = ensure_timeseries_parameters(
207
+ resolved_time_range, granularity = ensure_timeseries_parameters(
207
208
  dataset,
208
209
  time_range,
209
210
  granularity,
@@ -212,7 +213,7 @@ class EmbeddingDimension(Node):
212
213
  data=get_drift_timeseries_data(
213
214
  self.dimension,
214
215
  metric,
215
- time_range,
216
+ resolved_time_range,
216
217
  granularity,
217
218
  pd.DataFrame(
218
219
  {self.dimension.name: self.dimension[REFERENCE]},
@@ -242,7 +243,7 @@ class EmbeddingDimension(Node):
242
243
  return DriftTimeSeries(data=[])
243
244
  model = info.context.model
244
245
  dataset = model[PRIMARY]
245
- time_range, granularity = ensure_timeseries_parameters(
246
+ resolved_time_range, granularity = ensure_timeseries_parameters(
246
247
  dataset,
247
248
  time_range,
248
249
  granularity,
@@ -251,7 +252,7 @@ class EmbeddingDimension(Node):
251
252
  data=get_drift_timeseries_data(
252
253
  self.dimension,
253
254
  metric,
254
- time_range,
255
+ resolved_time_range,
255
256
  granularity,
256
257
  pd.DataFrame(
257
258
  {self.dimension.name: self.dimension(corpus[PRIMARY])},
@@ -320,10 +321,14 @@ class EmbeddingDimension(Node):
320
321
  inferences_id = inferences.role
321
322
  row_id_start, row_id_stop = 0, len(inferences)
322
323
  if inferences_id is PRIMARY:
324
+ resolved_time_range = model_schema.TimeRange(
325
+ start=time_range.start or inferences.time_range.start,
326
+ stop=time_range.end or inferences.time_range.stop,
327
+ )
323
328
  row_id_start, row_id_stop = row_interval_from_sorted_time_index(
324
329
  time_index=cast(pd.DatetimeIndex, inferences.index),
325
- time_start=time_range.start,
326
- time_stop=time_range.end,
330
+ time_start=resolved_time_range.start,
331
+ time_stop=resolved_time_range.stop,
327
332
  )
328
333
  vector_column = self.dimension[inferences_id]
329
334
  samples_collected = 0
@@ -167,7 +167,7 @@ class Model:
167
167
  inferences_role = InferencesRole.primary
168
168
  model = info.context.model
169
169
  inferences = model[inferences_role.value]
170
- time_range, granularity = ensure_timeseries_parameters(
170
+ resolved_time_range, granularity = ensure_timeseries_parameters(
171
171
  inferences,
172
172
  time_range,
173
173
  )
@@ -175,7 +175,7 @@ class Model:
175
175
  data = get_timeseries_data(
176
176
  inferences,
177
177
  metric_instance,
178
- time_range,
178
+ resolved_time_range,
179
179
  granularity,
180
180
  )
181
181
  return data[0].value if len(data) else None
@@ -205,7 +205,7 @@ class Model:
205
205
  inferences_role = InferencesRole.primary
206
206
  model = info.context.model
207
207
  inferences = model[inferences_role.value]
208
- time_range, granularity = ensure_timeseries_parameters(
208
+ resolved_time_range, granularity = ensure_timeseries_parameters(
209
209
  inferences,
210
210
  time_range,
211
211
  granularity,
@@ -215,7 +215,7 @@ class Model:
215
215
  data=get_timeseries_data(
216
216
  inferences,
217
217
  metric_instance,
218
- time_range,
218
+ resolved_time_range,
219
219
  granularity,
220
220
  )
221
221
  )
@@ -8,6 +8,7 @@ import pandas as pd
8
8
  import strawberry
9
9
  from strawberry import UNSET
10
10
 
11
+ from phoenix.core import model_schema
11
12
  from phoenix.core.model_schema import CONTINUOUS, PRIMARY, REFERENCE, Column, Dimension, Inferences
12
13
  from phoenix.metrics import Metric, binning
13
14
  from phoenix.metrics.mixins import UnaryOperator
@@ -69,13 +70,13 @@ class TimeSeries:
69
70
  def get_timeseries_data(
70
71
  df: pd.DataFrame,
71
72
  metric: Metric,
72
- time_range: TimeRange,
73
+ time_range: model_schema.TimeRange,
73
74
  granularity: Granularity,
74
75
  ) -> list[TimeSeriesDataPoint]:
75
76
  return df.pipe(
76
77
  timeseries(
77
78
  start_time=time_range.start,
78
- end_time=time_range.end,
79
+ end_time=time_range.stop,
79
80
  evaluation_window=timedelta(
80
81
  minutes=granularity.evaluation_window_minutes,
81
82
  ),
@@ -99,7 +100,7 @@ class DataQualityTimeSeries(TimeSeries):
99
100
  def get_data_quality_timeseries_data(
100
101
  dimension: Dimension,
101
102
  metric: DataQualityMetric,
102
- time_range: TimeRange,
103
+ time_range: model_schema.TimeRange,
103
104
  granularity: Granularity,
104
105
  inferences_role: InferencesRole,
105
106
  ) -> list[TimeSeriesDataPoint]:
@@ -129,7 +130,7 @@ class DriftTimeSeries(TimeSeries):
129
130
  def get_drift_timeseries_data(
130
131
  dimension: Dimension,
131
132
  metric: Union[ScalarDriftMetric, VectorDriftMetric],
132
- time_range: TimeRange,
133
+ time_range: model_schema.TimeRange,
133
134
  granularity: Granularity,
134
135
  reference_data: pd.DataFrame,
135
136
  ) -> list[TimeSeriesDataPoint]:
@@ -165,14 +166,15 @@ class PerformanceTimeSeries(TimeSeries):
165
166
 
166
167
  def ensure_timeseries_parameters(
167
168
  inferences: Inferences,
168
- time_range: Optional[TimeRange] = UNSET,
169
+ time_range_input: Optional[TimeRange] = UNSET,
169
170
  granularity: Optional[Granularity] = UNSET,
170
- ) -> tuple[TimeRange, Granularity]:
171
- if not isinstance(time_range, TimeRange):
172
- start, stop = inferences.time_range
173
- time_range = TimeRange(start=start, end=stop)
171
+ ) -> tuple[model_schema.TimeRange, Granularity]:
172
+ time_range = model_schema.TimeRange(
173
+ start=(time_range_input and time_range_input.start) or inferences.time_range.start,
174
+ stop=(time_range_input and time_range_input.end) or inferences.time_range.stop,
175
+ )
174
176
  if not isinstance(granularity, Granularity):
175
- total_minutes = int((time_range.end - time_range.start).total_seconds()) // 60
177
+ total_minutes = int((time_range.stop - time_range.start).total_seconds()) // 60
176
178
  granularity = Granularity(
177
179
  evaluation_window_minutes=total_minutes,
178
180
  sampling_interval_minutes=total_minutes,
@@ -1,22 +1,22 @@
1
1
  {
2
- "_components-Dn-PoB4S.js": {
3
- "file": "assets/components-Dn-PoB4S.js",
2
+ "_components-CN9dra1h.js": {
3
+ "file": "assets/components-CN9dra1h.js",
4
4
  "name": "components",
5
5
  "imports": [
6
6
  "_vendor-DvC8cT4X.js",
7
- "_pages-DRhPpbPi.js",
7
+ "_pages-nMcybglv.js",
8
8
  "_vendor-arizeai-Do1793cv.js",
9
9
  "_vendor-codemirror-BzwZPyJM.js",
10
10
  "_vendor-three-DwGkEfCM.js"
11
11
  ]
12
12
  },
13
- "_pages-DRhPpbPi.js": {
14
- "file": "assets/pages-DRhPpbPi.js",
13
+ "_pages-nMcybglv.js": {
14
+ "file": "assets/pages-nMcybglv.js",
15
15
  "name": "pages",
16
16
  "imports": [
17
17
  "_vendor-DvC8cT4X.js",
18
18
  "_vendor-arizeai-Do1793cv.js",
19
- "_components-Dn-PoB4S.js",
19
+ "_components-CN9dra1h.js",
20
20
  "_vendor-codemirror-BzwZPyJM.js",
21
21
  "_vendor-recharts-_Jb7JjhG.js"
22
22
  ]
@@ -69,15 +69,15 @@
69
69
  "name": "vendor-three"
70
70
  },
71
71
  "index.tsx": {
72
- "file": "assets/index-Cky21rQb.js",
72
+ "file": "assets/index-DcnHbEy5.js",
73
73
  "name": "index",
74
74
  "src": "index.tsx",
75
75
  "isEntry": true,
76
76
  "imports": [
77
77
  "_vendor-DvC8cT4X.js",
78
78
  "_vendor-arizeai-Do1793cv.js",
79
- "_pages-DRhPpbPi.js",
80
- "_components-Dn-PoB4S.js",
79
+ "_pages-nMcybglv.js",
80
+ "_components-CN9dra1h.js",
81
81
  "_vendor-three-DwGkEfCM.js",
82
82
  "_vendor-codemirror-BzwZPyJM.js",
83
83
  "_vendor-shiki-Cl9QBraO.js",
@@ -1,4 +1,4 @@
1
- import{r as p,R as G,j as e,n as Wn,a as we,e as Xe,s as T1,b as e1,c as ke,d as N1,f as Da,g as ge,h as Pa,i as Oa,k as R1,l,m as _a,o as Se,C as t1,p as Be,q as $e,t as N,u as Fa,v as Na,L as Un,w as jn,x as Qn,y as oe,z as w,A as u1,B as qn,D as m,E as Xn,F as Yn,G as Ze,$ as Ra,H as Ha,I as Ka,J as Z1,K as Jn,M as a1,N as i1,O as et,P as r1,Q as Ba,S as $a,T as Za,U,V as Ga,W as Wa,X as Ua,Y as nt,Z as ja,_ as Qa,a0 as tt,a1 as qa,a2 as V,a3 as at,a4 as Te,a5 as m1,a6 as Ee,a7 as F,a8 as Xa,a9 as Ya,aa as Ja,ab as ei,ac as hn,ad as ni,ae as ti,af as ai,ag as gn,ah as ii,ai as ri,aj as oi,ak as I1,al as G1,am as li,an as si,ao as ci,ap as di,aq as ui,ar as mi,as as pi,at as hi,au as gi,av as fi,aw as Ci,ax as bi,ay as Li,az as vi,aA as yi,aB as wi,aC as ki}from"./vendor-DvC8cT4X.js";import{m as Si,T as xi,a as fn,u as Mi}from"./pages-DRhPpbPi.js";import{u as Ti,_ as it,a as te,T as j,b as Ii,c as Ai,R as J,d as Ge,e as ne,f as zi,E as rt,g as B,h as W1,i as Ve,j as ot,k as ve,D as p1,l as o1,I as U1,m as j1,n as lt,P as Q1,C as h1,o as g1,A as We,L as Ce,p as Ei,q as ye,F as st,r as Vi,s as Di,t as Pi,v as ce,w as de,x as Oi,y as _i,z as Cn,B as Fi}from"./vendor-arizeai-Do1793cv.js";import{L as ct,a as dt,l as H1,j as ut,h as Ni,b as Ri,c as Hi,d as Ki,e as Bi,f as $i,s as Zi,R as Ue,g as mt,n as je,i as pt,E as q1,p as Gi,k as Wi}from"./vendor-codemirror-BzwZPyJM.js";import{V as Ui}from"./vendor-three-DwGkEfCM.js";const ht=function(){var n={defaultValue:null,kind:"LocalArgument",name:"clusters"},t={defaultValue:null,kind:"LocalArgument",name:"dataQualityMetricColumnName"},a={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}],s=[{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,t,a,i,r],kind:"Fragment",metadata:null,name:"pointCloudStore_clusterMetricsQuery",selections:s,type:"Query",abstractKey:null},kind:"Request",operation:{argumentDefinitions:[n,a,t,i,r],kind:"Operation",name:"pointCloudStore_clusterMetricsQuery",selections:s},params:{cacheID:"86666967012812887ac0a0149d2d2535",id:null,metadata:{},name:"pointCloudStore_clusterMetricsQuery",operationKind:"query",text:`query pointCloudStore_clusterMetricsQuery(
1
+ import{r as p,R as G,j as e,n as Wn,a as we,e as Xe,s as T1,b as e1,c as ke,d as N1,f as Da,g as ge,h as Pa,i as Oa,k as R1,l,m as _a,o as Se,C as t1,p as Be,q as $e,t as N,u as Fa,v as Na,L as Un,w as jn,x as Qn,y as oe,z as w,A as u1,B as qn,D as m,E as Xn,F as Yn,G as Ze,$ as Ra,H as Ha,I as Ka,J as Z1,K as Jn,M as a1,N as i1,O as et,P as r1,Q as Ba,S as $a,T as Za,U,V as Ga,W as Wa,X as Ua,Y as nt,Z as ja,_ as Qa,a0 as tt,a1 as qa,a2 as V,a3 as at,a4 as Te,a5 as m1,a6 as Ee,a7 as F,a8 as Xa,a9 as Ya,aa as Ja,ab as ei,ac as hn,ad as ni,ae as ti,af as ai,ag as gn,ah as ii,ai as ri,aj as oi,ak as I1,al as G1,am as li,an as si,ao as ci,ap as di,aq as ui,ar as mi,as as pi,at as hi,au as gi,av as fi,aw as Ci,ax as bi,ay as Li,az as vi,aA as yi,aB as wi,aC as ki}from"./vendor-DvC8cT4X.js";import{m as Si,T as xi,a as fn,u as Mi}from"./pages-nMcybglv.js";import{u as Ti,_ as it,a as te,T as j,b as Ii,c as Ai,R as J,d as Ge,e as ne,f as zi,E as rt,g as B,h as W1,i as Ve,j as ot,k as ve,D as p1,l as o1,I as U1,m as j1,n as lt,P as Q1,C as h1,o as g1,A as We,L as Ce,p as Ei,q as ye,F as st,r as Vi,s as Di,t as Pi,v as ce,w as de,x as Oi,y as _i,z as Cn,B as Fi}from"./vendor-arizeai-Do1793cv.js";import{L as ct,a as dt,l as H1,j as ut,h as Ni,b as Ri,c as Hi,d as Ki,e as Bi,f as $i,s as Zi,R as Ue,g as mt,n as je,i as pt,E as q1,p as Gi,k as Wi}from"./vendor-codemirror-BzwZPyJM.js";import{V as Ui}from"./vendor-three-DwGkEfCM.js";const ht=function(){var n={defaultValue:null,kind:"LocalArgument",name:"clusters"},t={defaultValue:null,kind:"LocalArgument",name:"dataQualityMetricColumnName"},a={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}],s=[{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,t,a,i,r],kind:"Fragment",metadata:null,name:"pointCloudStore_clusterMetricsQuery",selections:s,type:"Query",abstractKey:null},kind:"Request",operation:{argumentDefinitions:[n,a,t,i,r],kind:"Operation",name:"pointCloudStore_clusterMetricsQuery",selections:s},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
@@ -1,4 +1,4 @@
1
- import{r as c,j as e,dL as v,l as n,U as F,R as w,D as E,bq as L,dM as S,dN as R,dO as a,dP as k,t as I,dQ as A}from"./vendor-DvC8cT4X.js";import{k as C,Q as _,D as j,Y as z}from"./vendor-arizeai-Do1793cv.js";import{E as O,L as T,R as D,r as N,b as G,F as M,A as U,c as q,d as B,P as J,h as K,M as Q,e as m,D as V,f as W,g as H,i as Y,j as $,k as X,l as Z,p as ee,n as h,o as ae,S as re,s as te,q as oe,t as g,v as ne,w as u,x as b,y as se,z as le,B as ie,C as de,G as ce,H as x,I as pe,J as me,K as he,N as ge,O as ue,Q as be,U as xe,V as fe}from"./pages-DRhPpbPi.js";import{V as Pe,d2 as ye,at as ve,ab as Fe,d3 as we,d4 as Ee}from"./components-Dn-PoB4S.js";import"./vendor-three-DwGkEfCM.js";import"./vendor-codemirror-BzwZPyJM.js";import"./vendor-shiki-Cl9QBraO.js";import"./vendor-recharts-_Jb7JjhG.js";(function(){const s=document.createElement("link").relList;if(s&&s.supports&&s.supports("modulepreload"))return;for(const t of document.querySelectorAll('link[rel="modulepreload"]'))d(t);new MutationObserver(t=>{for(const o of t)if(o.type==="childList")for(const l of o.addedNodes)l.tagName==="LINK"&&l.rel==="modulepreload"&&d(l)}).observe(document,{childList:!0,subtree:!0});function i(t){const o={};return t.integrity&&(o.integrity=t.integrity),t.referrerPolicy&&(o.referrerPolicy=t.referrerPolicy),t.crossOrigin==="use-credentials"?o.credentials="include":t.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function d(t){if(t.ep)return;t.ep=!0;const o=i(t);fetch(t.href,o)}})();const f="arize-phoenix-feature-flags",p={__RESET__:!1};function Le(){const r=localStorage.getItem(f);if(!r)return p;try{const s=JSON.parse(r);return Object.assign({},p,s)}catch{return p}}const P=c.createContext(null);function Se(){const r=w.useContext(P);if(r===null)throw new Error("useFeatureFlags must be used within a FeatureFlagsProvider");return r}function Re(r){const[s,i]=c.useState(Le()),d=t=>{localStorage.setItem(f,JSON.stringify(t)),i(t)};return e(P.Provider,{value:{featureFlags:s,setFeatureFlags:d},children:e(ke,{children:r.children})})}function ke(r){const{children:s}=r,{featureFlags:i,setFeatureFlags:d}=Se(),[t,o]=c.useState(!1);return v("ctrl+shift+f",()=>o(!0)),n(F,{children:[s,e(j,{type:"modal",isDismissable:!0,onDismiss:()=>o(!1),children:t&&e(C,{title:"Feature Flags",children:e(Pe,{height:"size-1000",padding:"size-100",children:Object.keys(i).map(l=>e(_,{isSelected:i[l],onChange:y=>d({...i,[l]:y}),children:l},l))})})})]})}function Ie(){return e(L,{styles:E`
1
+ import{r as c,j as e,dL as v,l as n,U as F,R as w,D as E,bq as L,dM as S,dN as R,dO as a,dP as k,t as I,dQ as A}from"./vendor-DvC8cT4X.js";import{k as C,Q as _,D as j,Y as z}from"./vendor-arizeai-Do1793cv.js";import{E as O,L as T,R as D,r as N,b as G,F as M,A as U,c as q,d as B,P as J,h as K,M as Q,e as m,D as V,f as W,g as H,i as Y,j as $,k as X,l as Z,p as ee,n as h,o as ae,S as re,s as te,q as oe,t as g,v as ne,w as u,x as b,y as se,z as le,B as ie,C as de,G as ce,H as x,I as pe,J as me,K as he,N as ge,O as ue,Q as be,U as xe,V as fe}from"./pages-nMcybglv.js";import{V as Pe,d2 as ye,at as ve,ab as Fe,d3 as we,d4 as Ee}from"./components-CN9dra1h.js";import"./vendor-three-DwGkEfCM.js";import"./vendor-codemirror-BzwZPyJM.js";import"./vendor-shiki-Cl9QBraO.js";import"./vendor-recharts-_Jb7JjhG.js";(function(){const s=document.createElement("link").relList;if(s&&s.supports&&s.supports("modulepreload"))return;for(const t of document.querySelectorAll('link[rel="modulepreload"]'))d(t);new MutationObserver(t=>{for(const o of t)if(o.type==="childList")for(const l of o.addedNodes)l.tagName==="LINK"&&l.rel==="modulepreload"&&d(l)}).observe(document,{childList:!0,subtree:!0});function i(t){const o={};return t.integrity&&(o.integrity=t.integrity),t.referrerPolicy&&(o.referrerPolicy=t.referrerPolicy),t.crossOrigin==="use-credentials"?o.credentials="include":t.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function d(t){if(t.ep)return;t.ep=!0;const o=i(t);fetch(t.href,o)}})();const f="arize-phoenix-feature-flags",p={__RESET__:!1};function Le(){const r=localStorage.getItem(f);if(!r)return p;try{const s=JSON.parse(r);return Object.assign({},p,s)}catch{return p}}const P=c.createContext(null);function Se(){const r=w.useContext(P);if(r===null)throw new Error("useFeatureFlags must be used within a FeatureFlagsProvider");return r}function Re(r){const[s,i]=c.useState(Le()),d=t=>{localStorage.setItem(f,JSON.stringify(t)),i(t)};return e(P.Provider,{value:{featureFlags:s,setFeatureFlags:d},children:e(ke,{children:r.children})})}function ke(r){const{children:s}=r,{featureFlags:i,setFeatureFlags:d}=Se(),[t,o]=c.useState(!1);return v("ctrl+shift+f",()=>o(!0)),n(F,{children:[s,e(j,{type:"modal",isDismissable:!0,onDismiss:()=>o(!1),children:t&&e(C,{title:"Feature Flags",children:e(Pe,{height:"size-1000",padding:"size-100",children:Object.keys(i).map(l=>e(_,{isSelected:i[l],onChange:y=>d({...i,[l]:y}),children:l},l))})})})]})}function Ie(){return e(L,{styles:E`
2
2
  body {
3
3
  background-color: var(--ac-global-color-grey-75);
4
4
  color: var(--ac-global-text-color-900);
@@ -1,4 +1,4 @@
1
- import{z as R,aD as de,aE as Le,aF as _e,aG as Oa,A as _d,r as u,j as e,R as ve,n as Ea,D as v,l as s,aH as je,a0 as Y,U as B,t as L,a6 as Be,a7 as G,a8 as Ke,a9 as Te,ac as W,aI as he,aJ as mn,aK as gn,aL as Oe,aM as Ed,aN as Et,aO as Dn,aP as Ga,a2 as ie,aQ as Va,ab as Gn,g as Xl,aR as wd,a4 as zt,G as Rd,aS as Md,aT as bt,aU as St,aV as ka,aW as da,aX as Yl,o as Xa,aY as Ad,ay as Nd,az as zd,aZ as Vd,p as ei,q as $d,a_ as Od,ah as Qd,a$ as jd,b0 as fl,b1 as qd,b2 as Ud,b3 as Bd,b4 as Hd,b5 as Gd,b6 as Wd,b7 as Jd,b8 as Zd,b9 as Xd}from"./vendor-DvC8cT4X.js";import{A as ce,C as j,h as Vt,k as J,D as ee,B as $t,y as qe,z as ne,G as Yd,s as Ya,p as et,P as Wn,j as Jn,q as nt,v as Zn,w as ca,H as Xe,L as Qa,J as ni,K as ec,M as ai,N as nc,O as ac,Q as ua,e as we,f as Xn,T as ue,S as Ot,i as Re,g as ae,E as at,a as De,U as Qt,V as jt,c as Pn,o as hl,W as tc,n as lc,I as ic,m as kl,l as rc,u as sc,X as oc,r as dc,R as xa,d as ti}from"./vendor-arizeai-Do1793cv.js";import{s as qt,a as me,l as cc,j as li,b as Ae,i as ii,c as ri,d as Tn,e as si,f as uc,g as Da,D as mc,h as ja,k as gc,T as On,m as pc,n as bl,o as yc,p as fc,q as Sl,r as hc,t as kc,N as bc,u as Sc,L as ye,v as Ce,w as wa,B as vc,_ as k,x as Cn,I as D,C as Cc,G as oi,y as Ut,P as ma,z as tt,S as Fc,A as Kc,E as Tc,F as xc,H as Ic,J as Dc,K as Pc,M as Lc,O as un,Q as N,R as He,U as di,V as C,W as ze,X as Bt,Y as Yn,Z as Me,$ as F,a0 as pe,a1 as Fe,a2 as ga,a3 as pn,a4 as kn,a5 as lt,a6 as xe,a7 as re,a8 as Ze,a9 as Ln,aa as se,ab as Ne,ac as ci,ad as We,ae as ui,af as Ye,ag as _n,ah as Ht,ai as an,aj as bn,ak as Gt,al as mi,am as gi,an as yn,ao as ke,ap as be,aq as Se,ar as vl,as as Cl,at as Sn,au as _c,av as Ec,aw as U,ax as pi,ay as Wt,az as it,aA as pa,aB as yi,aC as ya,aD as fa,aE as fi,aF as vn,aG as Ee,aH as rt,aI as En,aJ as hi,aK as Jt,aL as tn,aM as ki,aN as wc,aO as Rc,aP as Mc,aQ as Ac,aR as Nc,aS as ln,aT as rn,aU as zc,aV as Ge,aW as Vc,aX as $c,aY as bi,aZ as Oc,a_ as Qc,a$ as Fl,b0 as jc,b1 as qc,b2 as Uc,b3 as Bc,b4 as Hc,b5 as Gc,b6 as Si,b7 as Wc,b8 as Jc,b9 as Zc,ba as Xc,bb as Yc,bc as qn,bd as Zt,be as vi,bf as ra,bg as wt,bh as $n,bi as Kn,bj as eu,bk as nu,bl as Ci,bm as st,bn as Fi,bo as sn,bp as au,bq as tu,br as Pa,bs as Pe,bt as qa,bu as Ki,bv as lu,bw as $e,bx as Xt,by as iu,bz as ru,bA as su,bB as ou,bC as Yt,bD as Ue,bE as en,bF as ha,bG as du,bH as ot,bI as Ti,bJ as xi,bK as vt,bL as cu,bM as dt,bN as ct,bO as Je,bP as Ve,bQ as uu,bR as el,bS as Ii,bT as Di,bU as Pi,bV as mu,bW as on,bX as Li,bY as xn,bZ as gu,b_ as Kl,b$ as _i,c0 as pu,c1 as yu,c2 as fu,c3 as hu,c4 as Ei,c5 as dn,c6 as ku,c7 as sa,c8 as Rt,c9 as bu,ca as wi,cb as Ri,cc as Su,cd as vu,ce as Cu,cf as ut,cg as Mi,ch as Ra,ci as Tl,cj as Ai,ck as nl,cl as Fu,cm as Ku,cn as al,co as Ni,cp as zi,cq as Tu,cr as Mt,cs as Vi,ct as xu,cu as Iu,cv as $a,cw as Du,cx as Pu,cy as $i,cz as Oi,cA as Lu,cB as _u,cC as Eu,cD as wu,cE as Qi,cF as tl,cG as ji,cH as Ru,cI as Mu,cJ as At,cK as Au,cL as Nu,cM as zu,cN as Vu,cO as $u,cP as Ou,cQ as qi,cR as Qu,cS as ju,cT as qu,cU as Uu,cV as Bu,cW as Hu,cX as Gu,cY as Wu,cZ as Ju,c_ as Zu,c$ as Xu,d0 as xl,d1 as Il}from"./components-Dn-PoB4S.js";import{p as Ma,R as wn,n as Rn,i as Yu,E as Ui,m as Bi,o as Hi,g as em}from"./vendor-codemirror-BzwZPyJM.js";import{R as Mn,C as Aa,X as An,Y as nn,a as Nn,T as zn,B as oa,A as La,b as Gi,c as ll,L as Wi,d as nm,P as am,e as tm,f as lm}from"./vendor-recharts-_Jb7JjhG.js";const im=4,rm={user:["user","human"],ai:["assistant","bot","ai"],system:["system"],tool:["tool"]},sm="Unable to parse span input messages, expected messages which include a role and content.",om="Unable to parse span output messages, expected messages which include a role and content.",dm="Unable to parse span output expected output.value to be present.",cm="Unable to parse span attributes, attributes must be valid JSON.",um="Unable to parse model config, expected llm.model_name to be present.",mm="Unable to parse model config, expected llm.invocation_parameters JSON string to be present.",gm="Unable to parse invocation parameters response_format, expected llm.invocation_parameters.response_format to be a well formed json object or undefined.",pm="Unable to parse tools, expected tools to be an array of valid tools.",ym="Unable to parse prompt template variables, expected prompt template variables to be a valid JSON object string.",Dl={AZURE_OPENAI:[],ANTHROPIC:["claude"],OPENAI:["gpt","o1"],GEMINI:["gemini"]},Ia="TOOL_CHOICE",Ua="tool_choice",Un="RESPONSE_FORMAT",Qn="response_format",fm=[Ia,Un],il=qt()(R.union([R.literal("auto"),R.literal("none"),R.literal("required"),R.object({type:R.literal("function"),function:R.object({name:R.string()})})])),rl=R.object({type:R.union([R.literal("auto"),R.literal("any"),R.literal("tool")]),disable_parallel_tool_use:R.boolean().optional(),name:R.string().optional()}),hm=rl.transform(n=>{switch(n.type){case"any":case"auto":return"auto";case"tool":return n.name?{type:"function",function:{name:n.name}}:"auto";default:return"auto"}}),km=il.transform(n=>typeof n=="string"?{type:"auto"}:{type:"tool",name:n.function.name});R.union([il,rl]);const bm=n=>{const{success:a,data:t}=il.safeParse(n);if(a)return{provider:"OPENAI",toolChoice:t};const{success:l,data:i}=rl.safeParse(n);return l?{provider:"ANTHROPIC",toolChoice:i}:{provider:null,toolChoice:null}},Sm=n=>{const{provider:a,toolChoice:t}=bm(n);if(a==null||t==null)throw new Error("Could not detect provider of tool choice");switch(a){case"AZURE_OPENAI":case"OPENAI":return t;case"ANTHROPIC":return hm.parse(t);default:me()}},vm=({toolChoice:n,targetProvider:a})=>{switch(a){case"AZURE_OPENAI":case"OPENAI":return n;case"ANTHROPIC":return km.parse(n);case"GEMINI":return n;default:me()}},Cm=({toolChoice:n,targetProvider:a})=>{try{const t=Sm(n);return vm({toolChoice:t,targetProvider:a})}catch{return null}},Fm=R.object({tool_call:R.object({id:R.string().optional(),function:R.object({name:R.string(),arguments:R.string()}).partial()}).partial()}).partial(),Ji=R.object({[de.message]:R.object({[Le.role]:R.string(),[Le.content]:R.union([R.string(),R.array(R.record(R.string(),R.unknown()))]).default(""),[Le.tool_calls]:R.array(Fm).optional(),[Le.tool_call_id]:R.string().optional()})}),Km=R.object({[de.llm]:R.object({[_e.input_messages]:R.array(Ji)})}),Tm=R.object({[de.llm]:R.object({[_e.output_messages]:R.array(Ji)})}),xm=R.object({[de.output]:R.object({value:R.string()})}),Zi=qt()(R.enum(["user","ai","system","tool"])),Im=qt()(R.object({id:R.number(),role:Zi,content:R.string().optional(),toolCallId:R.string().optional(),toolCalls:R.array(cc).optional()})),Dm=R.array(Im),sl=R.lazy(()=>R.record(li)),Pm=sl,Xi=R.string().transform((n,a)=>{const{json:t}=Ae(n);if(!ii(t))return a.addIssue({code:R.ZodIssueCode.custom,message:"The invocation parameters must be a valid JSON object"}),R.NEVER;const{success:l,data:i}=Pm.safeParse(t);return l?i:(a.addIssue({code:R.ZodIssueCode.custom,message:"The invocation parameters must be a valid JSON object"}),R.NEVER)}).default("{}"),Lm=R.object({[de.llm]:R.object({[_e.provider]:R.string().optional(),[_e.model_name]:R.string()})}),Yi=R.object({[de.llm]:R.object({[_e.invocation_parameters]:Xi})}),_m=R.object({[de.llm]:R.object({[_e.invocation_parameters]:Xi.pipe(R.object({response_format:sl.optional()}))})}),Em=R.string().transform((n,a)=>{const{json:t}=Ae(n);return t==null||!ii(t)?(a.addIssue({code:R.ZodIssueCode.custom,message:"The tool JSON schema must be a valid JSON object"}),R.NEVER):t}).transform((n,a)=>{const{data:t,success:l}=ri.safeParse(n);return l?t:(a.addIssue({code:R.ZodIssueCode.custom,message:"The tool JSON schema must be a valid tool schema"}),R.NEVER)}),wm=R.object({[de.llm]:R.object({[_e.tools]:R.array(R.object({[de.tool]:R.object({[Oa.json_schema]:Em})}).optional()).optional()}).optional()}).optional(),Rm=R.lazy(()=>R.object({type:R.literal("json_schema"),json_schema:R.object({name:R.string().describe("The name of the schema"),schema:li.describe("The schema itself in JSON format"),strict:R.literal(!0).describe("The schema must be strict")})})),Mm=_d(Rm,{removeAdditionalStrategy:"passthrough"}),Am=R.string().transform((n,a)=>{const{json:t}=Ae(n);return Tn(t)?Object.entries(t).reduce((i,[r,o])=>{if(typeof o=="string")i[r]=o;else{const{json:c}=si(o);c!=null&&(i[r]=c)}return i},{}):(a.addIssue({code:R.ZodIssueCode.custom,message:"The prompt template variables must be a valid JSON object"}),R.NEVER)}),Nm=R.object({[de.llm]:R.object({[_e.prompt_template]:R.object({variables:Am}).optional()}).optional()}).optional();function er(n){return Zi.safeParse(n).success}function Wa(n){if(er(n))return n;for(const[a,t]of Object.entries(rm))if(t.includes(n))return a;return gc}function zm({toolCalls:n,provider:a}){if(n!=null)return n.map(({tool_call:t})=>{var i,r,o,c;if(t==null)return null;let l={};if(((i=t.function)==null?void 0:i.arguments)!=null){const{json:d}=Ae(t.function.arguments);Tn(d)&&(l=d)}switch(a){case"OPENAI":case"AZURE_OPENAI":return{id:t.id??"",function:{name:((r=t.function)==null?void 0:r.name)??"",arguments:l}};case"ANTHROPIC":return{id:t.id??"",type:"tool_use",name:((o=t.function)==null?void 0:o.name)??"",input:l};case"GEMINI":return{id:t.id??"",function:{name:((c=t.function)==null?void 0:c.name)??"",arguments:l}};default:me()}}).filter(t=>t!=null)}function nr({messages:n,provider:a}){return n.map(({message:t})=>({id:Da(),role:t.tool_call_id!=null?Wa("tool"):Wa(t.role),content:typeof t.content=="string"?t.content:void 0,toolCalls:zm({provider:a,toolCalls:t.tool_calls}),toolCallId:t.tool_call_id}))}function Vm({provider:n,parsedAttributes:a}){var l;const t=Km.safeParse(a);if(!t.success)return{messageParsingErrors:[sm],messages:null};if(n==="ANTHROPIC"){const{success:i,data:r}=Yi.safeParse(a);if(i){const o=t.data.llm.input_messages,c=(l=r.llm.invocation_parameters)==null?void 0:l.system;typeof c=="string"&&c&&(!o||o[0].message.role!=="system")&&t.data.llm.input_messages.unshift({message:{role:"system",content:c}})}}return{messageParsingErrors:[],messages:nr({provider:n,messages:t.data.llm.input_messages})}}function $m({provider:n,parsedAttributes:a}){const t=[],l=Tm.safeParse(a);if(l.success)return{output:nr({provider:n,messages:l.data.llm.output_messages}),outputParsingErrors:t};t.push(om);const i=xm.safeParse(a);return i.success?{output:i.data.output.value,outputParsingErrors:t}:(t.push(dm),{output:void 0,outputParsingErrors:t})}function Om(n){if(n==null)return null;switch(n.toLowerCase()){case"openai":return"OPENAI";case"anthropic":return"ANTHROPIC";case"google":return"GEMINI";case"azure":return"AZURE_OPENAI";default:return null}}function Qm(n){for(const a of Object.keys(Dl))if(Dl[a].some(l=>n.includes(l)))return a;return mc}function jm(n){const{success:a,data:t}=Lm.safeParse(n);if(a){const l=Om(t.llm.provider)||Qm(t.llm.model_name);return{modelConfig:{modelName:t.llm.model_name,provider:l,invocationParameters:[],supportedInvocationParameters:[]},parsingErrors:[]}}return{modelConfig:null,parsingErrors:[um]}}function qm(n,a=[]){const{success:t,data:l}=Yi.safeParse(n),i=[];return t||i.push(mm),{invocationParameters:Ym((l==null?void 0:l.llm.invocation_parameters)??{},a),parsingErrors:i}}function Um(n){const{success:a,data:t}=_m.safeParse(n);return a?{responseFormat:t.llm.invocation_parameters.response_format,parsingErrors:[]}:{responseFormat:void 0,parsingErrors:[gm]}}function Bm(n){var a;return(((a=n==null?void 0:n.llm)==null?void 0:a.tools)??[]).map(t=>(t==null?void 0:t.tool)==null?null:{id:ja(),definition:t.tool.json_schema}).filter(t=>t!=null)}function Hm(n){var l;const{data:a,success:t}=wm.safeParse(n);return t?((l=a==null?void 0:a.llm)==null?void 0:l.tools)==null?{tools:null,parsingErrors:[]}:{tools:Bm(a),parsingErrors:[]}:{tools:null,parsingErrors:[pm]}}function Gm(n){var l;const{success:a,data:t}=Nm.safeParse(n);return a?((l=t==null?void 0:t.llm)==null?void 0:l.prompt_template)==null?{variables:null,parsingErrors:[]}:{variables:t.llm.prompt_template.variables,parsingErrors:[]}:{variables:null,parsingErrors:[ym]}}function Wm(n){const a=uc(),{json:t,parseError:l}=Ae(n.attributes);if(l)return{playgroundInstance:{...a,spanId:(n==null?void 0:n.id)??null},parsingErrors:[cm]};const i=n.invocationParameters,r=jm(t);let{modelConfig:o}=r;const{parsingErrors:c}=r,{messages:d,messageParsingErrors:m}=Vm({provider:(o==null?void 0:o.provider)??a.model.provider,parsedAttributes:t}),{output:f,outputParsingErrors:g}=$m({provider:(o==null?void 0:o.provider)??a.model.provider,parsedAttributes:t}),{invocationParameters:y,parsingErrors:p}=qm(t,i),{variables:h,parsingErrors:b}=Gm(t),{parsingErrors:K}=Um(t);o=o!=null?{...o,invocationParameters:K.length>0?y.filter(P=>P.invocationName!==Qn&&P.canonicalName!==Un):y}:null;const{tools:T,parsingErrors:I}=Hm(t);return{playgroundInstance:{...a,model:o??a.model,template:d!=null?{__type:"chat",messages:d}:a.template,output:f,spanId:n.id,tools:T??a.tools},playgroundInput:h!=null?{variablesValueCache:h}:void 0,parsingErrors:[...m,...g,...c,...I,...p,...K,...b]}}const Jm=n=>Dm.safeParse(n).success,ar=({instance:n,templateLanguage:a})=>{if(a==On.NONE)return[];const t=new Set,l=n.template.__type,i=pc(a);switch(l){case"chat":{n.template.messages.forEach(r=>{(r.content==null?[]:i.extractVariables(r.content)).forEach(c=>{t.add(c)})});break}case"text_completion":{i.extractVariables(n.template.prompt).forEach(o=>{t.add(o)});break}default:me()}return Array.from(t)},Zm=({instances:n,templateLanguage:a})=>a==On.NONE?[]:Array.from(new Set(n.flatMap(t=>ar({instance:t,templateLanguage:a})))),tr=({instances:n,templateLanguage:a,input:t})=>{if(a==On.NONE)return{variablesMap:{},variableKeys:[]};const l=Zm({instances:n,templateLanguage:a}),i=t.variablesValueCache??{};return{variablesMap:l.reduce((o,c)=>(o[c]=i[c]||"",o),{}),variableKeys:l}};function Bn(n,a){return n.invocationName===a.invocationName||n.canonicalName!=null&&a.canonicalName!=null&&n.canonicalName===a.canonicalName}const Xm=(n,a)=>n.filter(t=>a.some(l=>Bn(l,t))).map(t=>{var l;return{...t,invocationName:((l=a.find(i=>Bn(i,t)))==null?void 0:l.invocationName)??t.invocationName}}),mt=n=>n.replace(/_([a-z])/g,(a,t)=>t.toUpperCase()),Ym=(n,a)=>Object.entries(n).map(([t,l])=>{const i=a.find(r=>r.canonicalName&&r.canonicalName.toLowerCase()===t.toLowerCase()||r.invocationName&&r.invocationName.toLowerCase()===t.toLowerCase());return i==null||i.invocationInputField==null||i.invocationName==null?null:{canonicalName:i.canonicalName,invocationName:i.invocationName,[mt(i.invocationInputField)]:l}}).filter(t=>t!=null),Ba=n=>{const{provider:a,validatedToolDefinition:t}=fc(n.definition);switch(a){case"OPENAI":case"AZURE_OPENAI":return t.function.name;case"ANTHROPIC":return t.name;case"UNKNOWN":return null;default:me()}},Pl=({provider:n,toolNumber:a})=>{switch(n){case"OPENAI":case"AZURE_OPENAI":return{id:ja(),definition:Sl(a)};case"ANTHROPIC":return{id:ja(),definition:hc(a)};case"GEMINI":return{id:ja(),definition:Sl(a)};default:me()}},eg=n=>{switch(n){case"OPENAI":case"AZURE_OPENAI":return bl();case"ANTHROPIC":return yc();case"GEMINI":return bl();default:me()}};function ng(n){return{content:n.content,role:ag(n.role),toolCalls:n.toolCalls,toolCallId:n.toolCallId}}function ag(n){switch(n){case"system":return"SYSTEM";case"user":return"USER";case"tool":return"TOOL";case"ai":return"AI";default:me()}}const lr=({playgroundStore:n,instanceId:a,credentials:t})=>{const{instances:l}=n.getState(),i=l.find(m=>m.id===a);if(!i)throw new Error(`No instance found for id ${a}`);if(i.template.__type!=="chat")throw new Error("We only support chat templates for now");const r=i.model.supportedInvocationParameters;let o=[...i.model.invocationParameters];const c=Cm({toolChoice:i.toolChoice,targetProvider:i.model.provider});i.tools.length>0?(o=o.filter(m=>m.invocationName!==Ua&&m.canonicalName!==Ia),o.push({canonicalName:Ia,invocationName:Ua,valueJson:c})):o=o.filter(m=>m.invocationName!==Ua&&m.canonicalName!==Ia),o=r.length?Xm(o,r):o;const d=i.model.provider==="AZURE_OPENAI"?{endpoint:i.model.endpoint,apiVersion:i.model.apiVersion}:{};return{messages:i.template.messages.map(ng),model:{providerKey:i.model.provider,name:i.model.modelName||"",...d},invocationParameters:o,tools:i.tools.length?i.tools.map(m=>m.definition):void 0,apiKey:t[i.model.provider]||null}},tg=({playgroundStore:n,instanceId:a,credentials:t})=>{const l=lr({playgroundStore:n,instanceId:a,credentials:t}),{instances:i,templateLanguage:r,input:o}=n.getState(),{variablesMap:c}=tr({instances:i,input:o,templateLanguage:r});return{...l,template:{variables:c,language:r}}},Ll=({playgroundStore:n,instanceId:a,credentials:t,datasetId:l})=>({...lr({playgroundStore:n,instanceId:a,credentials:t}),templateLanguage:n.getState().templateLanguage,datasetId:l});function ir(n){return n==null||n===""?"{}":typeof n=="string"?n:JSON.stringify(n,null,2)}function rr(n,a){return a.filter(t=>t.required).every(t=>n.some(l=>Bn(l,t)))}const lg=n=>{for(const[a,t]of Object.entries(n))if(a.endsWith("DefaultValue")&&t!=null)return n[a]};function A1(n,a){const t=new Map(n.map(l=>[l.canonicalName||l.invocationName,l]));return a.forEach(l=>{var d;const i=l.canonicalName||l.invocationName,r=lg(l),o=mt(l.invocationInputField||"");if(!l.invocationName||!l.invocationInputField||!i||r==null||((d=t.get(i))==null?void 0:d[o])!=null)return;const c={canonicalName:l.canonicalName,invocationName:l.invocationName,[o]:r};t.set(i,c)}),Array.from(t.values())}const sr=u.createContext(null);function N1({children:n,...a}){const[t]=u.useState(()=>kc(a));return e(sr.Provider,{value:t,children:n})}function Ja(n,a){const t=ve.useContext(sr);if(!t)throw new Error("Missing CredentialsContext.Provider in the tree");return Ea(t,n,a)}const or=u.createContext(null);function ig(){const n=u.useContext(or);if(n===null)throw new Error("useFunctionality must be used within a FunctionalityProvider");return n}function z1(n){return e(or.Provider,{value:{authenticationEnabled:window.Config.authenticationEnabled},children:n.children})}const rg=v`
1
+ import{z as R,aD as de,aE as Le,aF as _e,aG as Oa,A as _d,r as u,j as e,R as ve,n as Ea,D as v,l as s,aH as je,a0 as Y,U as B,t as L,a6 as Be,a7 as G,a8 as Ke,a9 as Te,ac as W,aI as he,aJ as mn,aK as gn,aL as Oe,aM as Ed,aN as Et,aO as Dn,aP as Ga,a2 as ie,aQ as Va,ab as Gn,g as Xl,aR as wd,a4 as zt,G as Rd,aS as Md,aT as bt,aU as St,aV as ka,aW as da,aX as Yl,o as Xa,aY as Ad,ay as Nd,az as zd,aZ as Vd,p as ei,q as $d,a_ as Od,ah as Qd,a$ as jd,b0 as fl,b1 as qd,b2 as Ud,b3 as Bd,b4 as Hd,b5 as Gd,b6 as Wd,b7 as Jd,b8 as Zd,b9 as Xd}from"./vendor-DvC8cT4X.js";import{A as ce,C as j,h as Vt,k as J,D as ee,B as $t,y as qe,z as ne,G as Yd,s as Ya,p as et,P as Wn,j as Jn,q as nt,v as Zn,w as ca,H as Xe,L as Qa,J as ni,K as ec,M as ai,N as nc,O as ac,Q as ua,e as we,f as Xn,T as ue,S as Ot,i as Re,g as ae,E as at,a as De,U as Qt,V as jt,c as Pn,o as hl,W as tc,n as lc,I as ic,m as kl,l as rc,u as sc,X as oc,r as dc,R as xa,d as ti}from"./vendor-arizeai-Do1793cv.js";import{s as qt,a as me,l as cc,j as li,b as Ae,i as ii,c as ri,d as Tn,e as si,f as uc,g as Da,D as mc,h as ja,k as gc,T as On,m as pc,n as bl,o as yc,p as fc,q as Sl,r as hc,t as kc,N as bc,u as Sc,L as ye,v as Ce,w as wa,B as vc,_ as k,x as Cn,I as D,C as Cc,G as oi,y as Ut,P as ma,z as tt,S as Fc,A as Kc,E as Tc,F as xc,H as Ic,J as Dc,K as Pc,M as Lc,O as un,Q as N,R as He,U as di,V as C,W as ze,X as Bt,Y as Yn,Z as Me,$ as F,a0 as pe,a1 as Fe,a2 as ga,a3 as pn,a4 as kn,a5 as lt,a6 as xe,a7 as re,a8 as Ze,a9 as Ln,aa as se,ab as Ne,ac as ci,ad as We,ae as ui,af as Ye,ag as _n,ah as Ht,ai as an,aj as bn,ak as Gt,al as mi,am as gi,an as yn,ao as ke,ap as be,aq as Se,ar as vl,as as Cl,at as Sn,au as _c,av as Ec,aw as U,ax as pi,ay as Wt,az as it,aA as pa,aB as yi,aC as ya,aD as fa,aE as fi,aF as vn,aG as Ee,aH as rt,aI as En,aJ as hi,aK as Jt,aL as tn,aM as ki,aN as wc,aO as Rc,aP as Mc,aQ as Ac,aR as Nc,aS as ln,aT as rn,aU as zc,aV as Ge,aW as Vc,aX as $c,aY as bi,aZ as Oc,a_ as Qc,a$ as Fl,b0 as jc,b1 as qc,b2 as Uc,b3 as Bc,b4 as Hc,b5 as Gc,b6 as Si,b7 as Wc,b8 as Jc,b9 as Zc,ba as Xc,bb as Yc,bc as qn,bd as Zt,be as vi,bf as ra,bg as wt,bh as $n,bi as Kn,bj as eu,bk as nu,bl as Ci,bm as st,bn as Fi,bo as sn,bp as au,bq as tu,br as Pa,bs as Pe,bt as qa,bu as Ki,bv as lu,bw as $e,bx as Xt,by as iu,bz as ru,bA as su,bB as ou,bC as Yt,bD as Ue,bE as en,bF as ha,bG as du,bH as ot,bI as Ti,bJ as xi,bK as vt,bL as cu,bM as dt,bN as ct,bO as Je,bP as Ve,bQ as uu,bR as el,bS as Ii,bT as Di,bU as Pi,bV as mu,bW as on,bX as Li,bY as xn,bZ as gu,b_ as Kl,b$ as _i,c0 as pu,c1 as yu,c2 as fu,c3 as hu,c4 as Ei,c5 as dn,c6 as ku,c7 as sa,c8 as Rt,c9 as bu,ca as wi,cb as Ri,cc as Su,cd as vu,ce as Cu,cf as ut,cg as Mi,ch as Ra,ci as Tl,cj as Ai,ck as nl,cl as Fu,cm as Ku,cn as al,co as Ni,cp as zi,cq as Tu,cr as Mt,cs as Vi,ct as xu,cu as Iu,cv as $a,cw as Du,cx as Pu,cy as $i,cz as Oi,cA as Lu,cB as _u,cC as Eu,cD as wu,cE as Qi,cF as tl,cG as ji,cH as Ru,cI as Mu,cJ as At,cK as Au,cL as Nu,cM as zu,cN as Vu,cO as $u,cP as Ou,cQ as qi,cR as Qu,cS as ju,cT as qu,cU as Uu,cV as Bu,cW as Hu,cX as Gu,cY as Wu,cZ as Ju,c_ as Zu,c$ as Xu,d0 as xl,d1 as Il}from"./components-CN9dra1h.js";import{p as Ma,R as wn,n as Rn,i as Yu,E as Ui,m as Bi,o as Hi,g as em}from"./vendor-codemirror-BzwZPyJM.js";import{R as Mn,C as Aa,X as An,Y as nn,a as Nn,T as zn,B as oa,A as La,b as Gi,c as ll,L as Wi,d as nm,P as am,e as tm,f as lm}from"./vendor-recharts-_Jb7JjhG.js";const im=4,rm={user:["user","human"],ai:["assistant","bot","ai"],system:["system"],tool:["tool"]},sm="Unable to parse span input messages, expected messages which include a role and content.",om="Unable to parse span output messages, expected messages which include a role and content.",dm="Unable to parse span output expected output.value to be present.",cm="Unable to parse span attributes, attributes must be valid JSON.",um="Unable to parse model config, expected llm.model_name to be present.",mm="Unable to parse model config, expected llm.invocation_parameters JSON string to be present.",gm="Unable to parse invocation parameters response_format, expected llm.invocation_parameters.response_format to be a well formed json object or undefined.",pm="Unable to parse tools, expected tools to be an array of valid tools.",ym="Unable to parse prompt template variables, expected prompt template variables to be a valid JSON object string.",Dl={AZURE_OPENAI:[],ANTHROPIC:["claude"],OPENAI:["gpt","o1"],GEMINI:["gemini"]},Ia="TOOL_CHOICE",Ua="tool_choice",Un="RESPONSE_FORMAT",Qn="response_format",fm=[Ia,Un],il=qt()(R.union([R.literal("auto"),R.literal("none"),R.literal("required"),R.object({type:R.literal("function"),function:R.object({name:R.string()})})])),rl=R.object({type:R.union([R.literal("auto"),R.literal("any"),R.literal("tool")]),disable_parallel_tool_use:R.boolean().optional(),name:R.string().optional()}),hm=rl.transform(n=>{switch(n.type){case"any":case"auto":return"auto";case"tool":return n.name?{type:"function",function:{name:n.name}}:"auto";default:return"auto"}}),km=il.transform(n=>typeof n=="string"?{type:"auto"}:{type:"tool",name:n.function.name});R.union([il,rl]);const bm=n=>{const{success:a,data:t}=il.safeParse(n);if(a)return{provider:"OPENAI",toolChoice:t};const{success:l,data:i}=rl.safeParse(n);return l?{provider:"ANTHROPIC",toolChoice:i}:{provider:null,toolChoice:null}},Sm=n=>{const{provider:a,toolChoice:t}=bm(n);if(a==null||t==null)throw new Error("Could not detect provider of tool choice");switch(a){case"AZURE_OPENAI":case"OPENAI":return t;case"ANTHROPIC":return hm.parse(t);default:me()}},vm=({toolChoice:n,targetProvider:a})=>{switch(a){case"AZURE_OPENAI":case"OPENAI":return n;case"ANTHROPIC":return km.parse(n);case"GEMINI":return n;default:me()}},Cm=({toolChoice:n,targetProvider:a})=>{try{const t=Sm(n);return vm({toolChoice:t,targetProvider:a})}catch{return null}},Fm=R.object({tool_call:R.object({id:R.string().optional(),function:R.object({name:R.string(),arguments:R.string()}).partial()}).partial()}).partial(),Ji=R.object({[de.message]:R.object({[Le.role]:R.string(),[Le.content]:R.union([R.string(),R.array(R.record(R.string(),R.unknown()))]).default(""),[Le.tool_calls]:R.array(Fm).optional(),[Le.tool_call_id]:R.string().optional()})}),Km=R.object({[de.llm]:R.object({[_e.input_messages]:R.array(Ji)})}),Tm=R.object({[de.llm]:R.object({[_e.output_messages]:R.array(Ji)})}),xm=R.object({[de.output]:R.object({value:R.string()})}),Zi=qt()(R.enum(["user","ai","system","tool"])),Im=qt()(R.object({id:R.number(),role:Zi,content:R.string().optional(),toolCallId:R.string().optional(),toolCalls:R.array(cc).optional()})),Dm=R.array(Im),sl=R.lazy(()=>R.record(li)),Pm=sl,Xi=R.string().transform((n,a)=>{const{json:t}=Ae(n);if(!ii(t))return a.addIssue({code:R.ZodIssueCode.custom,message:"The invocation parameters must be a valid JSON object"}),R.NEVER;const{success:l,data:i}=Pm.safeParse(t);return l?i:(a.addIssue({code:R.ZodIssueCode.custom,message:"The invocation parameters must be a valid JSON object"}),R.NEVER)}).default("{}"),Lm=R.object({[de.llm]:R.object({[_e.provider]:R.string().optional(),[_e.model_name]:R.string()})}),Yi=R.object({[de.llm]:R.object({[_e.invocation_parameters]:Xi})}),_m=R.object({[de.llm]:R.object({[_e.invocation_parameters]:Xi.pipe(R.object({response_format:sl.optional()}))})}),Em=R.string().transform((n,a)=>{const{json:t}=Ae(n);return t==null||!ii(t)?(a.addIssue({code:R.ZodIssueCode.custom,message:"The tool JSON schema must be a valid JSON object"}),R.NEVER):t}).transform((n,a)=>{const{data:t,success:l}=ri.safeParse(n);return l?t:(a.addIssue({code:R.ZodIssueCode.custom,message:"The tool JSON schema must be a valid tool schema"}),R.NEVER)}),wm=R.object({[de.llm]:R.object({[_e.tools]:R.array(R.object({[de.tool]:R.object({[Oa.json_schema]:Em})}).optional()).optional()}).optional()}).optional(),Rm=R.lazy(()=>R.object({type:R.literal("json_schema"),json_schema:R.object({name:R.string().describe("The name of the schema"),schema:li.describe("The schema itself in JSON format"),strict:R.literal(!0).describe("The schema must be strict")})})),Mm=_d(Rm,{removeAdditionalStrategy:"passthrough"}),Am=R.string().transform((n,a)=>{const{json:t}=Ae(n);return Tn(t)?Object.entries(t).reduce((i,[r,o])=>{if(typeof o=="string")i[r]=o;else{const{json:c}=si(o);c!=null&&(i[r]=c)}return i},{}):(a.addIssue({code:R.ZodIssueCode.custom,message:"The prompt template variables must be a valid JSON object"}),R.NEVER)}),Nm=R.object({[de.llm]:R.object({[_e.prompt_template]:R.object({variables:Am}).optional()}).optional()}).optional();function er(n){return Zi.safeParse(n).success}function Wa(n){if(er(n))return n;for(const[a,t]of Object.entries(rm))if(t.includes(n))return a;return gc}function zm({toolCalls:n,provider:a}){if(n!=null)return n.map(({tool_call:t})=>{var i,r,o,c;if(t==null)return null;let l={};if(((i=t.function)==null?void 0:i.arguments)!=null){const{json:d}=Ae(t.function.arguments);Tn(d)&&(l=d)}switch(a){case"OPENAI":case"AZURE_OPENAI":return{id:t.id??"",function:{name:((r=t.function)==null?void 0:r.name)??"",arguments:l}};case"ANTHROPIC":return{id:t.id??"",type:"tool_use",name:((o=t.function)==null?void 0:o.name)??"",input:l};case"GEMINI":return{id:t.id??"",function:{name:((c=t.function)==null?void 0:c.name)??"",arguments:l}};default:me()}}).filter(t=>t!=null)}function nr({messages:n,provider:a}){return n.map(({message:t})=>({id:Da(),role:t.tool_call_id!=null?Wa("tool"):Wa(t.role),content:typeof t.content=="string"?t.content:void 0,toolCalls:zm({provider:a,toolCalls:t.tool_calls}),toolCallId:t.tool_call_id}))}function Vm({provider:n,parsedAttributes:a}){var l;const t=Km.safeParse(a);if(!t.success)return{messageParsingErrors:[sm],messages:null};if(n==="ANTHROPIC"){const{success:i,data:r}=Yi.safeParse(a);if(i){const o=t.data.llm.input_messages,c=(l=r.llm.invocation_parameters)==null?void 0:l.system;typeof c=="string"&&c&&(!o||o[0].message.role!=="system")&&t.data.llm.input_messages.unshift({message:{role:"system",content:c}})}}return{messageParsingErrors:[],messages:nr({provider:n,messages:t.data.llm.input_messages})}}function $m({provider:n,parsedAttributes:a}){const t=[],l=Tm.safeParse(a);if(l.success)return{output:nr({provider:n,messages:l.data.llm.output_messages}),outputParsingErrors:t};t.push(om);const i=xm.safeParse(a);return i.success?{output:i.data.output.value,outputParsingErrors:t}:(t.push(dm),{output:void 0,outputParsingErrors:t})}function Om(n){if(n==null)return null;switch(n.toLowerCase()){case"openai":return"OPENAI";case"anthropic":return"ANTHROPIC";case"google":return"GEMINI";case"azure":return"AZURE_OPENAI";default:return null}}function Qm(n){for(const a of Object.keys(Dl))if(Dl[a].some(l=>n.includes(l)))return a;return mc}function jm(n){const{success:a,data:t}=Lm.safeParse(n);if(a){const l=Om(t.llm.provider)||Qm(t.llm.model_name);return{modelConfig:{modelName:t.llm.model_name,provider:l,invocationParameters:[],supportedInvocationParameters:[]},parsingErrors:[]}}return{modelConfig:null,parsingErrors:[um]}}function qm(n,a=[]){const{success:t,data:l}=Yi.safeParse(n),i=[];return t||i.push(mm),{invocationParameters:Ym((l==null?void 0:l.llm.invocation_parameters)??{},a),parsingErrors:i}}function Um(n){const{success:a,data:t}=_m.safeParse(n);return a?{responseFormat:t.llm.invocation_parameters.response_format,parsingErrors:[]}:{responseFormat:void 0,parsingErrors:[gm]}}function Bm(n){var a;return(((a=n==null?void 0:n.llm)==null?void 0:a.tools)??[]).map(t=>(t==null?void 0:t.tool)==null?null:{id:ja(),definition:t.tool.json_schema}).filter(t=>t!=null)}function Hm(n){var l;const{data:a,success:t}=wm.safeParse(n);return t?((l=a==null?void 0:a.llm)==null?void 0:l.tools)==null?{tools:null,parsingErrors:[]}:{tools:Bm(a),parsingErrors:[]}:{tools:null,parsingErrors:[pm]}}function Gm(n){var l;const{success:a,data:t}=Nm.safeParse(n);return a?((l=t==null?void 0:t.llm)==null?void 0:l.prompt_template)==null?{variables:null,parsingErrors:[]}:{variables:t.llm.prompt_template.variables,parsingErrors:[]}:{variables:null,parsingErrors:[ym]}}function Wm(n){const a=uc(),{json:t,parseError:l}=Ae(n.attributes);if(l)return{playgroundInstance:{...a,spanId:(n==null?void 0:n.id)??null},parsingErrors:[cm]};const i=n.invocationParameters,r=jm(t);let{modelConfig:o}=r;const{parsingErrors:c}=r,{messages:d,messageParsingErrors:m}=Vm({provider:(o==null?void 0:o.provider)??a.model.provider,parsedAttributes:t}),{output:f,outputParsingErrors:g}=$m({provider:(o==null?void 0:o.provider)??a.model.provider,parsedAttributes:t}),{invocationParameters:y,parsingErrors:p}=qm(t,i),{variables:h,parsingErrors:b}=Gm(t),{parsingErrors:K}=Um(t);o=o!=null?{...o,invocationParameters:K.length>0?y.filter(P=>P.invocationName!==Qn&&P.canonicalName!==Un):y}:null;const{tools:T,parsingErrors:I}=Hm(t);return{playgroundInstance:{...a,model:o??a.model,template:d!=null?{__type:"chat",messages:d}:a.template,output:f,spanId:n.id,tools:T??a.tools},playgroundInput:h!=null?{variablesValueCache:h}:void 0,parsingErrors:[...m,...g,...c,...I,...p,...K,...b]}}const Jm=n=>Dm.safeParse(n).success,ar=({instance:n,templateLanguage:a})=>{if(a==On.NONE)return[];const t=new Set,l=n.template.__type,i=pc(a);switch(l){case"chat":{n.template.messages.forEach(r=>{(r.content==null?[]:i.extractVariables(r.content)).forEach(c=>{t.add(c)})});break}case"text_completion":{i.extractVariables(n.template.prompt).forEach(o=>{t.add(o)});break}default:me()}return Array.from(t)},Zm=({instances:n,templateLanguage:a})=>a==On.NONE?[]:Array.from(new Set(n.flatMap(t=>ar({instance:t,templateLanguage:a})))),tr=({instances:n,templateLanguage:a,input:t})=>{if(a==On.NONE)return{variablesMap:{},variableKeys:[]};const l=Zm({instances:n,templateLanguage:a}),i=t.variablesValueCache??{};return{variablesMap:l.reduce((o,c)=>(o[c]=i[c]||"",o),{}),variableKeys:l}};function Bn(n,a){return n.invocationName===a.invocationName||n.canonicalName!=null&&a.canonicalName!=null&&n.canonicalName===a.canonicalName}const Xm=(n,a)=>n.filter(t=>a.some(l=>Bn(l,t))).map(t=>{var l;return{...t,invocationName:((l=a.find(i=>Bn(i,t)))==null?void 0:l.invocationName)??t.invocationName}}),mt=n=>n.replace(/_([a-z])/g,(a,t)=>t.toUpperCase()),Ym=(n,a)=>Object.entries(n).map(([t,l])=>{const i=a.find(r=>r.canonicalName&&r.canonicalName.toLowerCase()===t.toLowerCase()||r.invocationName&&r.invocationName.toLowerCase()===t.toLowerCase());return i==null||i.invocationInputField==null||i.invocationName==null?null:{canonicalName:i.canonicalName,invocationName:i.invocationName,[mt(i.invocationInputField)]:l}}).filter(t=>t!=null),Ba=n=>{const{provider:a,validatedToolDefinition:t}=fc(n.definition);switch(a){case"OPENAI":case"AZURE_OPENAI":return t.function.name;case"ANTHROPIC":return t.name;case"UNKNOWN":return null;default:me()}},Pl=({provider:n,toolNumber:a})=>{switch(n){case"OPENAI":case"AZURE_OPENAI":return{id:ja(),definition:Sl(a)};case"ANTHROPIC":return{id:ja(),definition:hc(a)};case"GEMINI":return{id:ja(),definition:Sl(a)};default:me()}},eg=n=>{switch(n){case"OPENAI":case"AZURE_OPENAI":return bl();case"ANTHROPIC":return yc();case"GEMINI":return bl();default:me()}};function ng(n){return{content:n.content,role:ag(n.role),toolCalls:n.toolCalls,toolCallId:n.toolCallId}}function ag(n){switch(n){case"system":return"SYSTEM";case"user":return"USER";case"tool":return"TOOL";case"ai":return"AI";default:me()}}const lr=({playgroundStore:n,instanceId:a,credentials:t})=>{const{instances:l}=n.getState(),i=l.find(m=>m.id===a);if(!i)throw new Error(`No instance found for id ${a}`);if(i.template.__type!=="chat")throw new Error("We only support chat templates for now");const r=i.model.supportedInvocationParameters;let o=[...i.model.invocationParameters];const c=Cm({toolChoice:i.toolChoice,targetProvider:i.model.provider});i.tools.length>0?(o=o.filter(m=>m.invocationName!==Ua&&m.canonicalName!==Ia),o.push({canonicalName:Ia,invocationName:Ua,valueJson:c})):o=o.filter(m=>m.invocationName!==Ua&&m.canonicalName!==Ia),o=r.length?Xm(o,r):o;const d=i.model.provider==="AZURE_OPENAI"?{endpoint:i.model.endpoint,apiVersion:i.model.apiVersion}:{};return{messages:i.template.messages.map(ng),model:{providerKey:i.model.provider,name:i.model.modelName||"",...d},invocationParameters:o,tools:i.tools.length?i.tools.map(m=>m.definition):void 0,apiKey:t[i.model.provider]||null}},tg=({playgroundStore:n,instanceId:a,credentials:t})=>{const l=lr({playgroundStore:n,instanceId:a,credentials:t}),{instances:i,templateLanguage:r,input:o}=n.getState(),{variablesMap:c}=tr({instances:i,input:o,templateLanguage:r});return{...l,template:{variables:c,language:r}}},Ll=({playgroundStore:n,instanceId:a,credentials:t,datasetId:l})=>({...lr({playgroundStore:n,instanceId:a,credentials:t}),templateLanguage:n.getState().templateLanguage,datasetId:l});function ir(n){return n==null||n===""?"{}":typeof n=="string"?n:JSON.stringify(n,null,2)}function rr(n,a){return a.filter(t=>t.required).every(t=>n.some(l=>Bn(l,t)))}const lg=n=>{for(const[a,t]of Object.entries(n))if(a.endsWith("DefaultValue")&&t!=null)return n[a]};function A1(n,a){const t=new Map(n.map(l=>[l.canonicalName||l.invocationName,l]));return a.forEach(l=>{var d;const i=l.canonicalName||l.invocationName,r=lg(l),o=mt(l.invocationInputField||"");if(!l.invocationName||!l.invocationInputField||!i||r==null||((d=t.get(i))==null?void 0:d[o])!=null)return;const c={canonicalName:l.canonicalName,invocationName:l.invocationName,[o]:r};t.set(i,c)}),Array.from(t.values())}const sr=u.createContext(null);function N1({children:n,...a}){const[t]=u.useState(()=>kc(a));return e(sr.Provider,{value:t,children:n})}function Ja(n,a){const t=ve.useContext(sr);if(!t)throw new Error("Missing CredentialsContext.Provider in the tree");return Ea(t,n,a)}const or=u.createContext(null);function ig(){const n=u.useContext(or);if(n===null)throw new Error("useFunctionality must be used within a FunctionalityProvider");return n}function z1(n){return e(or.Provider,{value:{authenticationEnabled:window.Config.authenticationEnabled},children:n.children})}const rg=v`
2
2
  display: flex;
3
3
  direction: row;
4
4
  height: 100vh;
@@ -3336,7 +3336,7 @@ fragment ExperimentsTableFragment_2HEEH6 on Dataset {
3336
3336
  align-items: center;
3337
3337
  color: var(--ac-global-color-primary);
3338
3338
  gap: var(--ac-global-dimension-size-50);
3339
- `;function yh(n){const{datasetId:a,experimentIds:t,displayFullText:l}=n,[i,r]=u.useState(""),o=L.useLazyLoadQuery(Io,{experimentIds:t,datasetId:a,filterCondition:i}),c=u.useMemo(()=>{var I,P;return((P=(I=o.dataset)==null?void 0:I.experiments)==null?void 0:P.edges.reduce((w,S)=>{var x,_;return w[S.experiment.id]={...S.experiment,projectId:((_=(x=S.experiment)==null?void 0:x.project)==null?void 0:_.id)||null},w},{}))||{}},[o]),d=u.useMemo(()=>o.comparisons.map(I=>{const P=I.runComparisonItems.reduce((w,S)=>(w[S.experimentId]=S,w),{});return{...I,id:I.example.id,input:I.example.revision.input,referenceOutput:I.example.revision.referenceOutput,runComparisonMap:P}}),[o]),[m,f]=u.useState(null),g=u.useMemo(()=>[{header:"input",accessorKey:"input",minWidth:500,cell:({row:I})=>e(Tl,{controls:s(ue,{children:[e(N,{size:"S","aria-label":"View example details",icon:e(D,{svg:e(Pa,{})}),onPress:()=>{u.startTransition(()=>{f(e(u.Suspense,{children:e(ol,{exampleId:I.original.example.id,onDismiss:()=>{f(null)}})}))})}}),e(De,{children:"View Example"})]}),children:e(ul,{children:e(Ra,{json:I.original.input,disableTitle:!0,space:l?2:0})})})},{header:"reference output",accessorKey:"referenceOutput",minWidth:500,cell:l?bh:sa}],[l]),y=u.useMemo(()=>t.map(I=>({header:()=>{var _,E,O,z;const P=(_=c[I])==null?void 0:_.name,w=(E=c[I])==null?void 0:E.metadata,S=(O=c[I])==null?void 0:O.projectId,x=((z=c[I])==null?void 0:z.sequenceNumber)||0;return s(k,{direction:"row",gap:"size-100",wrap:!0,alignItems:"center",justifyContent:"space-between",children:[s(k,{direction:"row",gap:"size-100",wrap:!0,alignItems:"center",children:[e(ut,{sequenceNumber:x}),e(F,{children:P})]}),e(Mi,{experimentId:I,metadata:w,isQuiet:!0,projectId:S})]})},accessorKey:I,minSize:500,cell:({row:P})=>{var H,Z;const w=P.original.runComparisonMap[I],S=(w==null?void 0:w.runs.length)||0;if(S===0)return e(jl,{});if(S>1)return e(F,{color:"warning",children:`${S} runs`});const x=w==null?void 0:w.runs[0];let _=null;const E=(H=x==null?void 0:x.trace)==null?void 0:H.traceId,O=(Z=x==null?void 0:x.trace)==null?void 0:Z.projectId;return E&&O&&(_=s(ue,{children:[e(N,{variant:"default",className:"trace-button",size:"S","aria-label":"View run trace",icon:e(D,{svg:e(lt,{})}),onPress:()=>{u.startTransition(()=>{f(e(Mo,{traceId:E,projectId:O,title:"Experiment Run Trace"}))})}}),e(De,{children:"View Trace"})]})),x?e(Tl,{controls:s(B,{children:[s(ue,{children:[e(N,{variant:"default",className:"expand-button",size:"S","aria-label":"View example run details",icon:e(D,{svg:e(Pa,{})}),onPress:()=>{u.startTransition(()=>{f(e(Sh,{selectedExample:P.original,datasetId:a,experimentInfoById:c}))})}}),e(De,{children:"View run details"})]}),_]}),children:e(kh,{...x,displayFullText:l,setDialog:f})}):e(jl,{})}})),[t,c,a,l]),p=u.useMemo(()=>[...g,...y,{id:"tail",minSize:500}],[g,y]),h=Ke({columns:p,data:d,getCoreRowModel:Te(),columnResizeMode:"onChange"}),b=ve.useMemo(()=>{const I=h.getFlatHeaders(),P={};for(let w=0;w<I.length;w++){const S=I[w];P[`--header-${S.id}-size`]=S.getSize(),P[`--col-${S.column.id}-size`]=S.column.getSize()}return P},[h.getState().columnSizingInfo,h.getState().columnSizing]),T=h.getRowModel().rows.length===0;return s(k,{direction:"column",height:"100%",children:[e(C,{paddingTop:"size-100",paddingBottom:"size-100",paddingStart:"size-200",paddingEnd:"size-200",borderBottomColor:"grey-300",borderBottomWidth:"thin",flex:"none",children:e(uh,{onValidCondition:r})}),s("div",{css:gh,children:[s("table",{css:v(tn,Ai),style:{...b,width:h.getTotalSize(),minWidth:"100%"},children:[e("thead",{children:h.getHeaderGroups().map(I=>e("tr",{children:I.headers.map(P=>s("th",{style:{width:`calc(var(--header-${P==null?void 0:P.id}-size) * 1px)`},children:[e("div",{children:W(P.column.columnDef.header,P.getContext())}),e("div",{onMouseDown:P.getResizeHandler(),onTouchStart:P.getResizeHandler(),className:`resizer ${P.column.getIsResizing()?"isResizing":""}`})]},P.id))},I.id))}),T?e(sn,{}):h.getState().columnSizingInfo.isResizingColumn?e(fh,{table:h}):e(Eo,{table:h})]}),e(ee,{isDismissable:!0,type:"slideOver",onDismiss:()=>{f(null)},children:m})]})]})}function Eo({table:n}){return e("tbody",{children:n.getRowModel().rows.map(a=>e("tr",{children:a.getVisibleCells().map(t=>e("td",{style:{width:`calc(var(--col-${t.column.id}-size) * 1px)`},children:W(t.column.columnDef.cell,t.getContext())},t.id))},a.id))})}const fh=ve.memo(Eo,(n,a)=>n.table.options.data===a.table.options.data);function hh(n){const{datasetId:a,exampleId:t}=n,l=Y();return e("div",{onClick:i=>{i.preventDefault(),i.stopPropagation()},children:e(Jn,{buttonSize:"compact",align:"end",onAction:i=>{switch(i){case"gotoExample":return l(`/datasets/${a}/examples/${t}`);default:me()}},children:e(ie,{children:s(k,{direction:"row",gap:"size-75",justifyContent:"start",alignItems:"center",children:[e(D,{svg:e(Ku,{})}),e(F,{children:"Go to example"})]})},"gotoExample")})})}function kh(n){const{output:a,error:t,startTime:l,endTime:i,annotations:r,displayFullText:o,setDialog:c}=n;if(t)return e(wo,{error:t});const d=r!=null&&r.edges.length?r.edges.map(m=>m.annotation):[];return s(k,{direction:"column",gap:"size-100",height:"100%",justifyContent:"space-between",children:[e(ul,{children:e(Ra,{json:a,disableTitle:!0,space:o?2:0})}),s("ul",{css:v`
3339
+ `;function yh(n){const{datasetId:a,experimentIds:t,displayFullText:l}=n,[i,r]=u.useState(""),o=L.useLazyLoadQuery(Io,{experimentIds:t,datasetId:a,filterCondition:i}),c=u.useMemo(()=>{var I,P;return((P=(I=o.dataset)==null?void 0:I.experiments)==null?void 0:P.edges.reduce((w,S)=>{var x,_;return w[S.experiment.id]={...S.experiment,projectId:((_=(x=S.experiment)==null?void 0:x.project)==null?void 0:_.id)||null},w},{}))||{}},[o]),d=u.useMemo(()=>o.comparisons.map(I=>{const P=I.runComparisonItems.reduce((w,S)=>(w[S.experimentId]=S,w),{});return{...I,id:I.example.id,input:I.example.revision.input,referenceOutput:I.example.revision.referenceOutput,runComparisonMap:P}}),[o]),[m,f]=u.useState(null),g=u.useMemo(()=>[{header:"input",accessorKey:"input",minWidth:500,cell:({row:I})=>e(Tl,{controls:s(ue,{children:[e(N,{size:"S","aria-label":"View example details",icon:e(D,{svg:e(Pa,{})}),onPress:()=>{u.startTransition(()=>{f(e(u.Suspense,{children:e(ol,{exampleId:I.original.example.id,onDismiss:()=>{f(null)}})}))})}}),e(De,{children:"View Example"})]}),children:e(ul,{children:e(Ra,{json:I.original.input,disableTitle:!0,space:l?2:0})})})},{header:"reference output",accessorKey:"referenceOutput",minWidth:500,cell:l?bh:sa}],[l]),y=u.useMemo(()=>t.map(I=>({header:()=>{var _,E,O,z;const P=(_=c[I])==null?void 0:_.name,w=(E=c[I])==null?void 0:E.metadata,S=(O=c[I])==null?void 0:O.projectId,x=((z=c[I])==null?void 0:z.sequenceNumber)||0;return s(k,{direction:"row",gap:"size-100",wrap:!0,alignItems:"center",justifyContent:"space-between",children:[s(k,{direction:"row",gap:"size-100",wrap:!0,alignItems:"center",children:[e(ut,{sequenceNumber:x}),e(F,{children:P})]}),e(Mi,{experimentId:I,metadata:w,isQuiet:!0,projectId:S})]})},accessorKey:I,minSize:500,cell:({row:P})=>{var H,Z;const w=P.original.runComparisonMap[I],S=(w==null?void 0:w.runs.length)||0;if(S===0)return e(jl,{});if(S>1)return e(F,{color:"warning",children:`${S} runs`});const x=w==null?void 0:w.runs[0];let _=null;const E=(H=x==null?void 0:x.trace)==null?void 0:H.traceId,O=(Z=x==null?void 0:x.trace)==null?void 0:Z.projectId;return E&&O&&(_=s(ue,{children:[e(N,{variant:"default",className:"trace-button",size:"S","aria-label":"View run trace",icon:e(D,{svg:e(lt,{})}),onPress:()=>{u.startTransition(()=>{f(e(Mo,{traceId:E,projectId:O,title:"Experiment Run Trace"}))})}}),e(De,{children:"View Trace"})]})),x?e(Tl,{controls:s(B,{children:[s(ue,{children:[e(N,{variant:"default",className:"expand-button",size:"S","aria-label":"View example run details",icon:e(D,{svg:e(Pa,{})}),onPress:()=>{u.startTransition(()=>{f(e(Sh,{selectedExample:P.original,datasetId:a,experimentInfoById:c}))})}}),e(De,{children:"View run details"})]}),_]}),children:e(kh,{...x,displayFullText:l,setDialog:f})}):e(jl,{})}})),[t,c,a,l]),p=u.useMemo(()=>[...g,...y],[g,y]),h=Ke({columns:p,data:d,getCoreRowModel:Te(),columnResizeMode:"onChange"}),b=ve.useMemo(()=>{const I=h.getFlatHeaders(),P={};for(let w=0;w<I.length;w++){const S=I[w];P[`--header-${S.id}-size`]=S.getSize(),P[`--col-${S.column.id}-size`]=S.column.getSize()}return P},[h.getState().columnSizingInfo,h.getState().columnSizing]),T=h.getRowModel().rows.length===0;return s(k,{direction:"column",height:"100%",children:[e(C,{paddingTop:"size-100",paddingBottom:"size-100",paddingStart:"size-200",paddingEnd:"size-200",borderBottomColor:"grey-300",borderBottomWidth:"thin",flex:"none",children:e(uh,{onValidCondition:r})}),s("div",{css:gh,children:[s("table",{css:v(tn,Ai),style:{...b,width:h.getTotalSize(),minWidth:"100%"},children:[e("thead",{children:h.getHeaderGroups().map(I=>e("tr",{children:I.headers.map(P=>s("th",{style:{width:`calc(var(--header-${P==null?void 0:P.id}-size) * 1px)`},children:[e("div",{children:W(P.column.columnDef.header,P.getContext())}),e("div",{onMouseDown:P.getResizeHandler(),onTouchStart:P.getResizeHandler(),className:`resizer ${P.column.getIsResizing()?"isResizing":""}`})]},P.id))},I.id))}),T?e(sn,{}):h.getState().columnSizingInfo.isResizingColumn?e(fh,{table:h}):e(Eo,{table:h})]}),e(ee,{isDismissable:!0,type:"slideOver",onDismiss:()=>{f(null)},children:m})]})]})}function Eo({table:n}){return e("tbody",{children:n.getRowModel().rows.map(a=>e("tr",{children:a.getVisibleCells().map(t=>e("td",{style:{width:`calc(var(--col-${t.column.id}-size) * 1px)`,wordBreak:"break-all"},children:W(t.column.columnDef.cell,t.getContext())},t.id))},a.id))})}const fh=ve.memo(Eo,(n,a)=>n.table.options.data===a.table.options.data);function hh(n){const{datasetId:a,exampleId:t}=n,l=Y();return e("div",{onClick:i=>{i.preventDefault(),i.stopPropagation()},children:e(Jn,{buttonSize:"compact",align:"end",onAction:i=>{switch(i){case"gotoExample":return l(`/datasets/${a}/examples/${t}`);default:me()}},children:e(ie,{children:s(k,{direction:"row",gap:"size-75",justifyContent:"start",alignItems:"center",children:[e(D,{svg:e(Ku,{})}),e(F,{children:"Go to example"})]})},"gotoExample")})})}function kh(n){const{output:a,error:t,startTime:l,endTime:i,annotations:r,displayFullText:o,setDialog:c}=n;if(t)return e(wo,{error:t});const d=r!=null&&r.edges.length?r.edges.map(m=>m.annotation):[];return s(k,{direction:"column",gap:"size-100",height:"100%",justifyContent:"space-between",children:[e(ul,{children:e(Ra,{json:a,disableTitle:!0,space:o?2:0})}),s("ul",{css:v`
3340
3340
  display: flex;
3341
3341
  flex-direction: row;
3342
3342
  gap: var(--ac-global-dimension-static-size-100);
@@ -196,6 +196,17 @@ class TraceDataset:
196
196
  end_time: Optional[datetime] = cast(datetime, row.get("end_time"))
197
197
  if end_time is pd.NaT:
198
198
  end_time = None
199
+ events = cast(Any, row.get("events"))
200
+ if isinstance(events, np.ndarray):
201
+ events = events.tolist()
202
+ elif isinstance(events, str):
203
+ events = json.loads(events)
204
+ assert isinstance(events, list)
205
+ elif isinstance(events, Iterable):
206
+ events = list(events)
207
+ elif pd.isna(events):
208
+ events = []
209
+ assert isinstance(events, list)
199
210
  yield json_to_span(
200
211
  {
201
212
  "name": row["name"],
@@ -207,7 +218,7 @@ class TraceDataset:
207
218
  "status_code": row["status_code"],
208
219
  "status_message": row.get("status_message") or "",
209
220
  "attributes": attributes,
210
- "events": row.get("events") or [],
221
+ "events": events,
211
222
  "conversation": row.get("conversation"),
212
223
  }
213
224
  )
phoenix/version.py CHANGED
@@ -1 +1 @@
1
- __version__ = "7.9.0"
1
+ __version__ = "7.9.1"