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

@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: arize-phoenix
3
- Version: 11.28.0
3
+ Version: 11.29.0
4
4
  Summary: AI Observability and Evaluation
5
5
  Project-URL: Documentation, https://arize.com/docs/phoenix/
6
6
  Project-URL: Issues, https://github.com/Arize-ai/phoenix/issues
@@ -50,7 +50,8 @@ Requires-Dist: python-multipart
50
50
  Requires-Dist: scikit-learn
51
51
  Requires-Dist: scipy
52
52
  Requires-Dist: sqlalchemy[asyncio]<3,>=2.0.4
53
- Requires-Dist: sqlean-py>=3.45.1
53
+ Requires-Dist: sqlean-py<3.50,>=3.45.1; platform_system == 'Windows'
54
+ Requires-Dist: sqlean-py>=3.45.1; platform_system != 'Windows'
54
55
  Requires-Dist: starlette
55
56
  Requires-Dist: strawberry-graphql==0.270.1
56
57
  Requires-Dist: tqdm
@@ -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=ngkyKGVatX3cO2WJdo2hKdaVKP-xJCMvqthvga6kJss,5196
8
8
  phoenix/settings.py,sha256=2kHfT3BNOVd4dAO1bq-syEQbHSG8oX2-7NhOwK2QREk,896
9
- phoenix/version.py,sha256=9BbsyqXMqD5D5cPHbfNkmPeW-WTp3yZaVegN3LRUWSU,24
9
+ phoenix/version.py,sha256=dmpBux9ABrJi8fLg-MbszS9TOYZ3loPQG7TMhFmf_iE,24
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
@@ -120,14 +120,14 @@ phoenix/server/api/utils.py,sha256=quCBRcusc6PUq9tJq7M8PgwFZp7nXgVAxtbw8feribY,8
120
120
  phoenix/server/api/dataloaders/__init__.py,sha256=ddiX1BdbyGkPTzMZNo-hkF_2kqIquelBUFvQejnAJYk,6834
121
121
  phoenix/server/api/dataloaders/annotation_configs_by_project.py,sha256=_Nfiug9o01JimU3Z0LpZJ0uaMCjchXomyt_dYAxPFRY,1178
122
122
  phoenix/server/api/dataloaders/annotation_summaries.py,sha256=0b23-bucBKyL25RWb2QzCNJjQzrq403qMmHKUVD5W4M,14377
123
- phoenix/server/api/dataloaders/average_experiment_run_latency.py,sha256=GLFoFAbztOH-0FVzzZ77mATIO63UcjB50j3qXiNi-tE,1811
123
+ phoenix/server/api/dataloaders/average_experiment_run_latency.py,sha256=EgRkx_2QIzdOZe4D-0kd3B9HMoAibU9DZDotUh2CWFE,1945
124
124
  phoenix/server/api/dataloaders/dataset_example_revisions.py,sha256=xF7M2dg3UmjhdCrscnztCIBBI0cg3RF48IIqvilpc18,4623
125
125
  phoenix/server/api/dataloaders/dataset_example_spans.py,sha256=z_MFquqAcJ9wat7BBp7MVeJ9BYuu2EZEdaog52iWDno,1390
126
126
  phoenix/server/api/dataloaders/document_evaluation_summaries.py,sha256=9fdROnzp-mymggHwNvpRkCk93LUFxxLy55-j3HP_2HY,5565
127
127
  phoenix/server/api/dataloaders/document_evaluations.py,sha256=KCnCItJ2DQOCHvxFp1KK2AStPN1akGlAGOEzEAu6c6I,1246
128
128
  phoenix/server/api/dataloaders/document_retrieval_metrics.py,sha256=37EcAW7oYQuWYHMDHb0wcqbWj9lhSskvzDO7NJbT5Js,4136
129
- phoenix/server/api/dataloaders/experiment_annotation_summaries.py,sha256=fFEjpJzUOhu_cJKQ-YnwEvtn8NDl6bPs-moERe-Bp04,2767
130
- phoenix/server/api/dataloaders/experiment_error_rates.py,sha256=V4U_y16LwfBDksTZ4QP1dDALGSsQAQ1KcttKRE6lXto,1920
129
+ phoenix/server/api/dataloaders/experiment_annotation_summaries.py,sha256=Jfurk2bBqt3RTq1ydqZ4B4H_0mTyW6XMeIImShT1aQs,5643
130
+ phoenix/server/api/dataloaders/experiment_error_rates.py,sha256=06IZF07qt2y167DBM49QkSNdnphPArhcsgYFcunaL-U,1992
131
131
  phoenix/server/api/dataloaders/experiment_run_annotations.py,sha256=uJ--9Ue4tnmZYH9Zy-Cj2Y2t3xzs2xUqN8Y6EGe1MCo,1296
132
132
  phoenix/server/api/dataloaders/experiment_run_counts.py,sha256=j_7229IL705p_TycxIMYylhSgLHsAn91TiGPYXtOuQ8,1617
133
133
  phoenix/server/api/dataloaders/experiment_sequence_number.py,sha256=zM_f78fnqhppLtevrx9iISQSN7w_BNeXT9CoX8jYgAI,1534
@@ -284,7 +284,7 @@ phoenix/server/api/types/CostBreakdown.py,sha256=yw9dlb0blGIB_dWNP8yEvDHJztHjpiV
284
284
  phoenix/server/api/types/CreateDatasetPayload.py,sha256=R-6zCmuD0f76RU9Giu78xwTHlASQs6Aq8yzvX1Kxc3g,140
285
285
  phoenix/server/api/types/CronExpression.py,sha256=R7oxuSSX_eTUHQWaoaSueQqWDmkkHr5dBKRN6q-6ROk,331
286
286
  phoenix/server/api/types/DataQualityMetric.py,sha256=Aieg3bHeBFaAf4mqeRcH1zT04sXAtQD8ATSHJt7FaBQ,1538
287
- phoenix/server/api/types/Dataset.py,sha256=StVJmOE996Citau11JtFTmcgLqvN9IeZsHAbe-Y1gkg,12933
287
+ phoenix/server/api/types/Dataset.py,sha256=23dst_glr7kFNC62-q6D9H2hJgrfZnGe7V-Bg72SJgg,15303
288
288
  phoenix/server/api/types/DatasetExample.py,sha256=_9byxGpXfYb-hmFMUJeG7Bw1wsRKSJaHwF2IPAbFpFw,3115
289
289
  phoenix/server/api/types/DatasetExampleRevision.py,sha256=c-jWR6dTguEZTm54IMlFr0Ic84I3nefyDnZb7nF5hnI,874
290
290
  phoenix/server/api/types/DatasetValues.py,sha256=7VbCOLlzOXpZN80-zYF2UGuafRcPsZF-8WQNc0YsKFc,1119
@@ -303,7 +303,7 @@ phoenix/server/api/types/EvaluationSummary.py,sha256=vILYejnfPvMwWEXOwhQZsANvYe3
303
303
  phoenix/server/api/types/Event.py,sha256=iYt_Jx1Roioo0vZ0iPeJTHcTu6NSm4ilVMJ-IMUHAKk,3970
304
304
  phoenix/server/api/types/EventMetadata.py,sha256=-J0tYF9eZTHwCjwxQHY7Gckr2_MNW5OoWT1mydweZNM,635
305
305
  phoenix/server/api/types/ExampleRevisionInterface.py,sha256=gV3Gt9-3Oi5wjaVtepC6nOt3FzTzZFD1KebNnqiw56E,294
306
- phoenix/server/api/types/Experiment.py,sha256=8Hd-8-4Rcym95sPHIBLyTfMuRdyl50YxlKO_fMvdNAA,7830
306
+ phoenix/server/api/types/Experiment.py,sha256=eN0NhUVdcjJyMbyAGoltv30mhunatWS6i2gG97xu5TU,7758
307
307
  phoenix/server/api/types/ExperimentAnnotationSummary.py,sha256=Uk3JtxIrsMoZT5tqc4nJdUOM3XegVzjUyoV3pkjNotE,256
308
308
  phoenix/server/api/types/ExperimentComparison.py,sha256=PXFcB0e8aaJ391yRsuRJr9_dvTZI1RAzF93oC_-HtxU,461
309
309
  phoenix/server/api/types/ExperimentRun.py,sha256=_fcwDLuURV0yviOlkjWAgJJwcCPdz-xGR6VX3UKf73s,6541
@@ -392,10 +392,10 @@ phoenix/server/static/apple-touch-icon-76x76.png,sha256=CT_xT12I0u2i0WU8JzBZBuOQ
392
392
  phoenix/server/static/apple-touch-icon.png,sha256=fOfpjqGpWYbJ0eAurKsyoZP1EAs6ZVooBJ_SGk2ZkDs,3801
393
393
  phoenix/server/static/favicon.ico,sha256=bY0vvCKRftemZfPShwZtE93DiiQdaYaozkPGwNFr6H8,34494
394
394
  phoenix/server/static/modernizr.js,sha256=mvK-XtkNqjOral-QvzoqsyOMECXIMu5BQwSVN_wcU9c,2564
395
- phoenix/server/static/.vite/manifest.json,sha256=YLmkhNaP8CIb58FZA_WbstLTHmeLxO7Bf95-j2o1iwg,2328
396
- phoenix/server/static/assets/components-C3HQDu_r.js,sha256=KTCwdIg8fU5Xo3nRecbeh-LQqPr3s_T9LIEzYVbz8LE,664499
397
- phoenix/server/static/assets/index-C-sjZRYC.js,sha256=Y51REgta4DEkMYGcas1FLL1as0OyUOyEM1fFtRTxazc,63396
398
- phoenix/server/static/assets/pages-DvrxSPg3.js,sha256=LNxKvwIv55HqiVUdtSyiFcnS3qMSHUf0bBXOR0whd0k,1266943
395
+ phoenix/server/static/.vite/manifest.json,sha256=-rNvMLAChq7_eDpTSPXWf7ujX9-KJZOw6I_ONqi1eBY,2328
396
+ phoenix/server/static/assets/components-dCdVienD.js,sha256=a8fwhvVLGgLiQmj6R7zuXEdvLLpormuCrJePqF8ss5k,664533
397
+ phoenix/server/static/assets/index-Bp44T8N2.js,sha256=kaA9zlqpA50LK3xdjN2K3tPAjq6roX3cy6OyCyBS49k,63396
398
+ phoenix/server/static/assets/pages-CA4bKhm9.js,sha256=plhzt6_SL9xsAOva_dTqDk-0yWfre4t_nvg_VJcQeX0,1268001
399
399
  phoenix/server/static/assets/vendor-CqDb5u4o.css,sha256=zIyFiNJKxMaQk8AvtLgt1rR01oO10d1MFndSDKH9Clw,5517
400
400
  phoenix/server/static/assets/vendor-RdRDaQiR.js,sha256=oTxLetZZXJ20yoKNAYExto9V73y8X5zjddWV46K9CWM,2595492
401
401
  phoenix/server/static/assets/vendor-arizeai-DsYDNOqt.js,sha256=0HIkPJXbKTh85nqphdAXYeStRzdaim0IQxRXiXxa21U,121514
@@ -442,9 +442,9 @@ phoenix/utilities/project.py,sha256=auVpARXkDb-JgeX5f2aStyFIkeKvGwN9l7qrFeJMVxI,
442
442
  phoenix/utilities/re.py,sha256=6YyUWIkv0zc2SigsxfOWIHzdpjKA_TZo2iqKq7zJKvw,2081
443
443
  phoenix/utilities/span_store.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
444
444
  phoenix/utilities/template_formatters.py,sha256=gh9PJD6WEGw7TEYXfSst1UR4pWWwmjxMLrDVQ_CkpkQ,2779
445
- arize_phoenix-11.28.0.dist-info/METADATA,sha256=13C-DWFlaybHe2koaiC7DFxTwuJ93qLXMo9pxK8nkXM,31634
446
- arize_phoenix-11.28.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
447
- arize_phoenix-11.28.0.dist-info/entry_points.txt,sha256=Pgpn8Upxx9P8z8joPXZWl2LlnAlGc3gcQoVchb06X1Q,94
448
- arize_phoenix-11.28.0.dist-info/licenses/IP_NOTICE,sha256=JBqyyCYYxGDfzQ0TtsQgjts41IJoa-hiwDrBjCb9gHM,469
449
- arize_phoenix-11.28.0.dist-info/licenses/LICENSE,sha256=HFkW9REuMOkvKRACuwLPT0hRydHb3zNg-fdFt94td18,3794
450
- arize_phoenix-11.28.0.dist-info/RECORD,,
445
+ arize_phoenix-11.29.0.dist-info/METADATA,sha256=N5M1wqlrq9TDt1tg8K9INOEqK1VBdOtVqyGPmR28e34,31733
446
+ arize_phoenix-11.29.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
447
+ arize_phoenix-11.29.0.dist-info/entry_points.txt,sha256=Pgpn8Upxx9P8z8joPXZWl2LlnAlGc3gcQoVchb06X1Q,94
448
+ arize_phoenix-11.29.0.dist-info/licenses/IP_NOTICE,sha256=JBqyyCYYxGDfzQ0TtsQgjts41IJoa-hiwDrBjCb9gHM,469
449
+ arize_phoenix-11.29.0.dist-info/licenses/LICENSE,sha256=HFkW9REuMOkvKRACuwLPT0hRydHb3zNg-fdFt94td18,3794
450
+ arize_phoenix-11.29.0.dist-info/RECORD,,
@@ -23,32 +23,28 @@ class AverageExperimentRunLatencyDataLoader(DataLoader[Key, Result]):
23
23
 
24
24
  async def _load_fn(self, keys: list[Key]) -> list[Result]:
25
25
  experiment_ids = keys
26
- resolved_experiment_ids = (
27
- select(models.Experiment.id)
28
- .where(models.Experiment.id.in_(set(experiment_ids)))
29
- .subquery()
30
- )
31
- query = (
26
+ average_repetition_latency_ms = (
32
27
  select(
33
- resolved_experiment_ids.c.id,
28
+ models.ExperimentRun.experiment_id.label("experiment_id"),
34
29
  func.avg(
35
30
  func.extract("epoch", models.ExperimentRun.end_time)
36
31
  - func.extract("epoch", models.ExperimentRun.start_time)
37
- ),
32
+ ).label("average_repetition_latency_ms"),
38
33
  )
39
- .outerjoin_from(
40
- from_=resolved_experiment_ids,
41
- target=models.ExperimentRun,
42
- onclause=resolved_experiment_ids.c.id == models.ExperimentRun.experiment_id,
43
- )
44
- .group_by(resolved_experiment_ids.c.id)
34
+ .select_from(models.ExperimentRun)
35
+ .where(models.ExperimentRun.experiment_id.in_(experiment_ids))
36
+ .group_by(models.ExperimentRun.dataset_example_id, models.ExperimentRun.experiment_id)
37
+ .subquery()
45
38
  )
39
+ query = select(
40
+ average_repetition_latency_ms.c.experiment_id,
41
+ func.avg(average_repetition_latency_ms.c.average_repetition_latency_ms).label(
42
+ "average_run_latency_ms"
43
+ ),
44
+ ).group_by(average_repetition_latency_ms.c.experiment_id)
46
45
  async with self._db() as session:
47
- avg_latencies = {
48
- experiment_id: avg_latency
49
- async for experiment_id, avg_latency in await session.stream(query)
46
+ average_run_latencies_ms = {
47
+ experiment_id: average_run_latency_ms
48
+ async for experiment_id, average_run_latency_ms in await session.stream(query)
50
49
  }
51
- return [
52
- avg_latencies.get(experiment_id, ValueError(f"Unknown experiment: {experiment_id}"))
53
- for experiment_id in keys
54
- ]
50
+ return [average_run_latencies_ms.get(experiment_id) for experiment_id in keys]
@@ -2,7 +2,7 @@ from collections import defaultdict
2
2
  from dataclasses import dataclass
3
3
  from typing import Optional
4
4
 
5
- from sqlalchemy import func, select
5
+ from sqlalchemy import and_, func, select
6
6
  from strawberry.dataloader import AbstractCache, DataLoader
7
7
  from typing_extensions import TypeAlias
8
8
 
@@ -37,43 +37,97 @@ class ExperimentAnnotationSummaryDataLoader(DataLoader[Key, Result]):
37
37
  async def _load_fn(self, keys: list[Key]) -> list[Result]:
38
38
  experiment_ids = keys
39
39
  summaries: defaultdict[ExperimentID, Result] = defaultdict(list)
40
+ repetition_mean_scores_by_example_subquery = (
41
+ select(
42
+ models.ExperimentRun.experiment_id.label("experiment_id"),
43
+ models.ExperimentRunAnnotation.name.label("annotation_name"),
44
+ func.avg(models.ExperimentRunAnnotation.score).label("mean_repetition_score"),
45
+ )
46
+ .select_from(models.ExperimentRunAnnotation)
47
+ .join(
48
+ models.ExperimentRun,
49
+ models.ExperimentRunAnnotation.experiment_run_id == models.ExperimentRun.id,
50
+ )
51
+ .where(models.ExperimentRun.experiment_id.in_(experiment_ids))
52
+ .group_by(
53
+ models.ExperimentRun.dataset_example_id,
54
+ models.ExperimentRun.experiment_id,
55
+ models.ExperimentRunAnnotation.name,
56
+ )
57
+ .subquery()
58
+ .alias("repetition_mean_scores_by_example")
59
+ )
60
+ repetition_mean_scores_subquery = (
61
+ select(
62
+ repetition_mean_scores_by_example_subquery.c.experiment_id.label("experiment_id"),
63
+ repetition_mean_scores_by_example_subquery.c.annotation_name.label(
64
+ "annotation_name"
65
+ ),
66
+ func.avg(repetition_mean_scores_by_example_subquery.c.mean_repetition_score).label(
67
+ "mean_score"
68
+ ),
69
+ )
70
+ .select_from(repetition_mean_scores_by_example_subquery)
71
+ .group_by(
72
+ repetition_mean_scores_by_example_subquery.c.experiment_id,
73
+ repetition_mean_scores_by_example_subquery.c.annotation_name,
74
+ )
75
+ .subquery()
76
+ .alias("repetition_mean_scores")
77
+ )
78
+ repetitions_subquery = (
79
+ select(
80
+ models.ExperimentRun.experiment_id.label("experiment_id"),
81
+ models.ExperimentRunAnnotation.name.label("annotation_name"),
82
+ func.min(models.ExperimentRunAnnotation.score).label("min_score"),
83
+ func.max(models.ExperimentRunAnnotation.score).label("max_score"),
84
+ func.count().label("count"),
85
+ func.count(models.ExperimentRunAnnotation.error).label("error_count"),
86
+ )
87
+ .select_from(models.ExperimentRunAnnotation)
88
+ .join(
89
+ models.ExperimentRun,
90
+ models.ExperimentRunAnnotation.experiment_run_id == models.ExperimentRun.id,
91
+ )
92
+ .where(models.ExperimentRun.experiment_id.in_(experiment_ids))
93
+ .group_by(models.ExperimentRun.experiment_id, models.ExperimentRunAnnotation.name)
94
+ .subquery()
95
+ )
96
+ run_scores_query = (
97
+ select(
98
+ repetition_mean_scores_subquery.c.experiment_id.label("experiment_id"),
99
+ repetition_mean_scores_subquery.c.annotation_name.label("annotation_name"),
100
+ repetition_mean_scores_subquery.c.mean_score.label("mean_score"),
101
+ repetitions_subquery.c.min_score.label("min_score"),
102
+ repetitions_subquery.c.max_score.label("max_score"),
103
+ repetitions_subquery.c.count.label("count_"),
104
+ repetitions_subquery.c.error_count.label("error_count"),
105
+ )
106
+ .select_from(repetition_mean_scores_subquery)
107
+ .join(
108
+ repetitions_subquery,
109
+ and_(
110
+ repetitions_subquery.c.experiment_id
111
+ == repetition_mean_scores_subquery.c.experiment_id,
112
+ repetitions_subquery.c.annotation_name
113
+ == repetition_mean_scores_subquery.c.annotation_name,
114
+ ),
115
+ )
116
+ .order_by(repetition_mean_scores_subquery.c.annotation_name)
117
+ )
40
118
  async with self._db() as session:
41
- async for (
42
- experiment_id,
43
- annotation_name,
44
- min_score,
45
- max_score,
46
- mean_score,
47
- count,
48
- error_count,
49
- ) in await session.stream(
50
- select(
51
- models.ExperimentRun.experiment_id,
52
- models.ExperimentRunAnnotation.name,
53
- func.min(models.ExperimentRunAnnotation.score),
54
- func.max(models.ExperimentRunAnnotation.score),
55
- func.avg(models.ExperimentRunAnnotation.score),
56
- func.count(),
57
- func.count(models.ExperimentRunAnnotation.error),
58
- )
59
- .join(
60
- models.ExperimentRun,
61
- models.ExperimentRunAnnotation.experiment_run_id == models.ExperimentRun.id,
62
- )
63
- .where(models.ExperimentRun.experiment_id.in_(experiment_ids))
64
- .group_by(models.ExperimentRun.experiment_id, models.ExperimentRunAnnotation.name)
65
- ):
66
- summaries[experiment_id].append(
119
+ async for scores_tuple in await session.stream(run_scores_query):
120
+ summaries[scores_tuple.experiment_id].append(
67
121
  ExperimentAnnotationSummary(
68
- annotation_name=annotation_name,
69
- min_score=min_score,
70
- max_score=max_score,
71
- mean_score=mean_score,
72
- count=count,
73
- error_count=error_count,
122
+ annotation_name=scores_tuple.annotation_name,
123
+ min_score=scores_tuple.min_score,
124
+ max_score=scores_tuple.max_score,
125
+ mean_score=scores_tuple.mean_score,
126
+ count=scores_tuple.count_,
127
+ error_count=scores_tuple.error_count,
74
128
  )
75
129
  )
76
130
  return [
77
131
  sorted(summaries[experiment_id], key=lambda summary: summary.annotation_name)
78
- for experiment_id in keys
132
+ for experiment_id in experiment_ids
79
133
  ]
@@ -1,6 +1,6 @@
1
1
  from typing import Optional
2
2
 
3
- from sqlalchemy import case, func, select
3
+ from sqlalchemy import func, select
4
4
  from strawberry.dataloader import DataLoader
5
5
  from typing_extensions import TypeAlias
6
6
 
@@ -23,36 +23,29 @@ class ExperimentErrorRatesDataLoader(DataLoader[Key, Result]):
23
23
 
24
24
  async def _load_fn(self, keys: list[Key]) -> list[Result]:
25
25
  experiment_ids = keys
26
- resolved_experiment_ids = (
27
- select(models.Experiment.id)
28
- .where(models.Experiment.id.in_(set(experiment_ids)))
29
- .subquery()
30
- )
31
- query = (
26
+ average_repetition_error_rates_subquery = (
32
27
  select(
33
- resolved_experiment_ids.c.id,
34
- case(
35
- (
36
- func.count(models.ExperimentRun.id) != 0,
37
- func.count(models.ExperimentRun.error)
38
- / func.count(models.ExperimentRun.id),
39
- ),
40
- else_=None,
41
- ),
28
+ models.ExperimentRun.experiment_id.label("experiment_id"),
29
+ (
30
+ func.count(models.ExperimentRun.error) / func.count(models.ExperimentRun.id)
31
+ ).label("average_repetition_error_rate"),
42
32
  )
43
- .outerjoin_from(
44
- from_=resolved_experiment_ids,
45
- target=models.ExperimentRun,
46
- onclause=resolved_experiment_ids.c.id == models.ExperimentRun.experiment_id,
47
- )
48
- .group_by(resolved_experiment_ids.c.id)
33
+ .where(models.ExperimentRun.experiment_id.in_(experiment_ids))
34
+ .group_by(models.ExperimentRun.dataset_example_id, models.ExperimentRun.experiment_id)
35
+ .subquery()
36
+ .alias("average_repetition_error_rates")
49
37
  )
38
+ average_run_error_rates_query = select(
39
+ average_repetition_error_rates_subquery.c.experiment_id,
40
+ func.avg(average_repetition_error_rates_subquery.c.average_repetition_error_rate).label(
41
+ "average_run_error_rates"
42
+ ),
43
+ ).group_by(average_repetition_error_rates_subquery.c.experiment_id)
50
44
  async with self._db() as session:
51
- error_rates = {
45
+ average_run_error_rates = {
52
46
  experiment_id: error_rate
53
- async for experiment_id, error_rate in await session.stream(query)
47
+ async for experiment_id, error_rate in await session.stream(
48
+ average_run_error_rates_query
49
+ )
54
50
  }
55
- return [
56
- error_rates.get(experiment_id, ValueError(f"Unknown experiment ID: {experiment_id}"))
57
- for experiment_id in keys
58
- ]
51
+ return [average_run_error_rates.get(experiment_id) for experiment_id in experiment_ids]
@@ -272,15 +272,53 @@ class Dataset(Node):
272
272
  self, info: Info[Context, None]
273
273
  ) -> list[ExperimentAnnotationSummary]:
274
274
  dataset_id = self.id_attr
275
- query = (
275
+ repetition_mean_scores_by_example_subquery = (
276
276
  select(
277
+ models.ExperimentRunAnnotation.name.label("annotation_name"),
278
+ func.avg(models.ExperimentRunAnnotation.score).label("mean_repetition_score"),
279
+ )
280
+ .select_from(models.ExperimentRunAnnotation)
281
+ .join(
282
+ models.ExperimentRun,
283
+ models.ExperimentRunAnnotation.experiment_run_id == models.ExperimentRun.id,
284
+ )
285
+ .join(
286
+ models.Experiment,
287
+ models.ExperimentRun.experiment_id == models.Experiment.id,
288
+ )
289
+ .where(models.Experiment.dataset_id == dataset_id)
290
+ .group_by(
291
+ models.ExperimentRun.dataset_example_id,
277
292
  models.ExperimentRunAnnotation.name,
278
- func.min(models.ExperimentRunAnnotation.score),
279
- func.max(models.ExperimentRunAnnotation.score),
280
- func.avg(models.ExperimentRunAnnotation.score),
281
- func.count(),
282
- func.count(models.ExperimentRunAnnotation.error),
283
293
  )
294
+ .subquery()
295
+ .alias("repetition_mean_scores_by_example")
296
+ )
297
+ repetition_mean_scores_subquery = (
298
+ select(
299
+ repetition_mean_scores_by_example_subquery.c.annotation_name.label(
300
+ "annotation_name"
301
+ ),
302
+ func.avg(repetition_mean_scores_by_example_subquery.c.mean_repetition_score).label(
303
+ "mean_score"
304
+ ),
305
+ )
306
+ .select_from(repetition_mean_scores_by_example_subquery)
307
+ .group_by(
308
+ repetition_mean_scores_by_example_subquery.c.annotation_name,
309
+ )
310
+ .subquery()
311
+ .alias("repetition_mean_scores")
312
+ )
313
+ repetitions_subquery = (
314
+ select(
315
+ models.ExperimentRunAnnotation.name.label("annotation_name"),
316
+ func.min(models.ExperimentRunAnnotation.score).label("min_score"),
317
+ func.max(models.ExperimentRunAnnotation.score).label("max_score"),
318
+ func.count().label("count"),
319
+ func.count(models.ExperimentRunAnnotation.error).label("error_count"),
320
+ )
321
+ .select_from(models.ExperimentRunAnnotation)
284
322
  .join(
285
323
  models.ExperimentRun,
286
324
  models.ExperimentRunAnnotation.experiment_run_id == models.ExperimentRun.id,
@@ -291,26 +329,36 @@ class Dataset(Node):
291
329
  )
292
330
  .where(models.Experiment.dataset_id == dataset_id)
293
331
  .group_by(models.ExperimentRunAnnotation.name)
294
- .order_by(models.ExperimentRunAnnotation.name)
332
+ .subquery()
333
+ )
334
+ run_scores_query = (
335
+ select(
336
+ repetition_mean_scores_subquery.c.annotation_name.label("annotation_name"),
337
+ repetition_mean_scores_subquery.c.mean_score.label("mean_score"),
338
+ repetitions_subquery.c.min_score.label("min_score"),
339
+ repetitions_subquery.c.max_score.label("max_score"),
340
+ repetitions_subquery.c.count.label("count_"),
341
+ repetitions_subquery.c.error_count.label("error_count"),
342
+ )
343
+ .select_from(repetition_mean_scores_subquery)
344
+ .join(
345
+ repetitions_subquery,
346
+ repetitions_subquery.c.annotation_name
347
+ == repetition_mean_scores_subquery.c.annotation_name,
348
+ )
349
+ .order_by(repetition_mean_scores_subquery.c.annotation_name)
295
350
  )
296
351
  async with info.context.db() as session:
297
352
  return [
298
353
  ExperimentAnnotationSummary(
299
- annotation_name=annotation_name,
300
- min_score=min_score,
301
- max_score=max_score,
302
- mean_score=mean_score,
303
- count=count_,
304
- error_count=error_count,
354
+ annotation_name=scores_tuple.annotation_name,
355
+ min_score=scores_tuple.min_score,
356
+ max_score=scores_tuple.max_score,
357
+ mean_score=scores_tuple.mean_score,
358
+ count=scores_tuple.count_,
359
+ error_count=scores_tuple.error_count,
305
360
  )
306
- async for (
307
- annotation_name,
308
- min_score,
309
- max_score,
310
- mean_score,
311
- count_,
312
- error_count,
313
- ) in await session.stream(query)
361
+ async for scores_tuple in await session.stream(run_scores_query)
314
362
  ]
315
363
 
316
364
  @strawberry.field
@@ -4,7 +4,6 @@ from typing import ClassVar, Optional
4
4
  import strawberry
5
5
  from sqlalchemy import func, select
6
6
  from sqlalchemy.orm import joinedload
7
- from sqlalchemy.sql.functions import coalesce
8
7
  from strawberry import UNSET, Private
9
8
  from strawberry.relay import Connection, Node, NodeID
10
9
  from strawberry.scalars import JSON
@@ -165,8 +164,8 @@ class Experiment(Node):
165
164
  select(
166
165
  models.SpanCostDetail.token_type,
167
166
  models.SpanCostDetail.is_prompt,
168
- coalesce(func.sum(models.SpanCostDetail.cost), 0).label("cost"),
169
- coalesce(func.sum(models.SpanCostDetail.tokens), 0).label("tokens"),
167
+ func.sum(models.SpanCostDetail.cost).label("cost"),
168
+ func.sum(models.SpanCostDetail.tokens).label("tokens"),
170
169
  )
171
170
  .select_from(models.SpanCostDetail)
172
171
  .join(models.SpanCost, models.SpanCostDetail.span_cost_id == models.SpanCost.id)
@@ -1,22 +1,22 @@
1
1
  {
2
- "_components-C3HQDu_r.js": {
3
- "file": "assets/components-C3HQDu_r.js",
2
+ "_components-dCdVienD.js": {
3
+ "file": "assets/components-dCdVienD.js",
4
4
  "name": "components",
5
5
  "imports": [
6
6
  "_vendor-RdRDaQiR.js",
7
- "_pages-DvrxSPg3.js",
7
+ "_pages-CA4bKhm9.js",
8
8
  "_vendor-arizeai-DsYDNOqt.js",
9
9
  "_vendor-codemirror-BzJDUbEx.js",
10
10
  "_vendor-three-BLWp5bic.js"
11
11
  ]
12
12
  },
13
- "_pages-DvrxSPg3.js": {
14
- "file": "assets/pages-DvrxSPg3.js",
13
+ "_pages-CA4bKhm9.js": {
14
+ "file": "assets/pages-CA4bKhm9.js",
15
15
  "name": "pages",
16
16
  "imports": [
17
17
  "_vendor-RdRDaQiR.js",
18
18
  "_vendor-arizeai-DsYDNOqt.js",
19
- "_components-C3HQDu_r.js",
19
+ "_components-dCdVienD.js",
20
20
  "_vendor-codemirror-BzJDUbEx.js",
21
21
  "_vendor-recharts-BTHn5Y2R.js"
22
22
  ]
@@ -75,15 +75,15 @@
75
75
  "name": "vendor-three"
76
76
  },
77
77
  "index.tsx": {
78
- "file": "assets/index-C-sjZRYC.js",
78
+ "file": "assets/index-Bp44T8N2.js",
79
79
  "name": "index",
80
80
  "src": "index.tsx",
81
81
  "isEntry": true,
82
82
  "imports": [
83
83
  "_vendor-RdRDaQiR.js",
84
84
  "_vendor-arizeai-DsYDNOqt.js",
85
- "_pages-DvrxSPg3.js",
86
- "_components-C3HQDu_r.js",
85
+ "_pages-CA4bKhm9.js",
86
+ "_components-dCdVienD.js",
87
87
  "_vendor-three-BLWp5bic.js",
88
88
  "_vendor-codemirror-BzJDUbEx.js",
89
89
  "_vendor-shiki-BAcocHFl.js",
@@ -1,4 +1,4 @@
1
- import{r as p,j as e,u as st,a as rn,e as qn,s as xa,b as Ta,c as zn,d as Za,f as So,g as Xe,h as xo,i as To,k as Ua,l as s,m as bn,p as ca,n as Nn,R as Ge,o as E,q as ct,t as Fn,v as Ao,C as na,w as Io,x as Mo,L as _l,y as Dl,z as Kl,A as Oe,B as tn,D as W,E as zo,F as cn,G as Fo,H as Eo,I as $e,J as an,K as j,M as _o,N as oe,O as yn,P as Dn,Q as Pl,S as xn,T as da,U as m,V as Vl,$ as N,W as Do,X as V,Y as Ol,Z as Rl,_ as Ae,a0 as Ko,a1 as Po,a2 as vn,a3 as Vo,a4 as B,a5 as gn,a6 as P,a7 as G,a8 as ee,a9 as Nl,aa as $l,ab as Oo,ac as Bl,ad as Ro,ae as Hl,af as No,ag as $o,ah as jl,ai as Bo,aj as Ho,ak as jo,al as Zl,am as Zo,an as Uo,ao as Go,ap as Te,aq as Ul,ar as Be,as as Qo,at as Wo,au as Qe,av as Ga,aw as Qa,ax as Wa,ay as U,az as Cn,aA as Ut,aB as Gl,aC as Ql,aD as qo,aE as Xo,aF as Yo,aG as Jo,aH as e1,aI as n1,aJ as Wl,aK as a1,aL as t1,aM as l1,aN as i1,aO as r1,aP as o1,aQ as s1,aR as dt,aS as te,aT as c1,aU as d1,aV as ql,aW as u1,aX as g1,aY as Xl,aZ as Ke,a_ as Yl,a$ as Gt,b0 as m1,b1 as Jl,b2 as pe,b3 as p1,b4 as ut,b5 as h1,b6 as f1,b7 as b1,b8 as y1,b9 as Qt,ba as ei,bb as v1,bc as C1,bd as k1,be as gt,bf as L1,bg as w1,bh as ua,bi as S1,bj as x1,bk as T1,bl as ni,bm as A1,bn as I1,bo as M1,bp as z1,bq as F1,br as E1,bs as _1,bt as Wt,bu as D1,bv as Aa,bw as K1,bx as P1,by as V1,bz as O1,bA as R1,bB as N1,bC as $1,bD as B1,bE as H1,bF as Xn}from"./vendor-RdRDaQiR.js";import{a as qt,R as j1,b as Z1,c as U1,m as G1,T as Q1,A as W1,S as q1,d as X1,e as Y1,f as J1,u as es}from"./pages-DvrxSPg3.js";import{u as ns,_ as as,a as ts,F as ai,I as ls,b as is,c as rs,d as os,e as ss,f as cs,g as ds,P as us,h as gs,i as ms,j as ps,T as hs,k as fs}from"./vendor-arizeai-DsYDNOqt.js";import{L as ti,a as li,j as ii,E as mt,k as ri,d as oi,l as qa,b as si,h as bs,c as ys,e as vs,f as Cs,g as ks,i as Ls,s as ws,m as $n,n as Bn,R as Hn,p as Ss,o as xs}from"./vendor-codemirror-BzJDUbEx.js";import{V as Ts}from"./vendor-three-BLWp5bic.js";const ci=function(){var n={defaultValue:null,kind:"LocalArgument",name:"clusters"},a={defaultValue:null,kind:"LocalArgument",name:"dataQualityMetricColumnName"},t={defaultValue:null,kind:"LocalArgument",name:"fetchDataQualityMetric"},l={defaultValue:null,kind:"LocalArgument",name:"fetchPerformanceMetric"},i={defaultValue:null,kind:"LocalArgument",name:"performanceMetric"},r=[{alias:null,args:null,kind:"ScalarField",name:"primaryValue",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"referenceValue",storageKey:null}],o=[{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:r,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:r,storageKey:null}]}],storageKey:null}];return{fragment:{argumentDefinitions:[n,a,t,l,i],kind:"Fragment",metadata:null,name:"pointCloudStore_clusterMetricsQuery",selections:o,type:"Query",abstractKey:null},kind:"Request",operation:{argumentDefinitions:[n,t,a,l,i],kind:"Operation",name:"pointCloudStore_clusterMetricsQuery",selections:o},params:{cacheID:"86666967012812887ac0a0149d2d2535",id:null,metadata:{},name:"pointCloudStore_clusterMetricsQuery",operationKind:"query",text:`query pointCloudStore_clusterMetricsQuery(
1
+ import{r as p,j as e,u as st,a as rn,e as qn,s as xa,b as Ta,c as zn,d as Za,f as So,g as Xe,h as xo,i as To,k as Ua,l as s,m as bn,p as ca,n as Nn,R as Ge,o as E,q as ct,t as Fn,v as Ao,C as na,w as Io,x as Mo,L as _l,y as Dl,z as Kl,A as Oe,B as tn,D as W,E as zo,F as cn,G as Fo,H as Eo,I as $e,J as an,K as j,M as _o,N as oe,O as yn,P as Dn,Q as Pl,S as xn,T as da,U as m,V as Vl,$ as N,W as Do,X as V,Y as Ol,Z as Rl,_ as Ae,a0 as Ko,a1 as Po,a2 as vn,a3 as Vo,a4 as B,a5 as gn,a6 as P,a7 as G,a8 as ee,a9 as Nl,aa as $l,ab as Oo,ac as Bl,ad as Ro,ae as Hl,af as No,ag as $o,ah as jl,ai as Bo,aj as Ho,ak as jo,al as Zl,am as Zo,an as Uo,ao as Go,ap as Te,aq as Ul,ar as Be,as as Qo,at as Wo,au as Qe,av as Ga,aw as Qa,ax as Wa,ay as U,az as Cn,aA as Ut,aB as Gl,aC as Ql,aD as qo,aE as Xo,aF as Yo,aG as Jo,aH as e1,aI as n1,aJ as Wl,aK as a1,aL as t1,aM as l1,aN as i1,aO as r1,aP as o1,aQ as s1,aR as dt,aS as te,aT as c1,aU as d1,aV as ql,aW as u1,aX as g1,aY as Xl,aZ as Ke,a_ as Yl,a$ as Gt,b0 as m1,b1 as Jl,b2 as pe,b3 as p1,b4 as ut,b5 as h1,b6 as f1,b7 as b1,b8 as y1,b9 as Qt,ba as ei,bb as v1,bc as C1,bd as k1,be as gt,bf as L1,bg as w1,bh as ua,bi as S1,bj as x1,bk as T1,bl as ni,bm as A1,bn as I1,bo as M1,bp as z1,bq as F1,br as E1,bs as _1,bt as Wt,bu as D1,bv as Aa,bw as K1,bx as P1,by as V1,bz as O1,bA as R1,bB as N1,bC as $1,bD as B1,bE as H1,bF as Xn}from"./vendor-RdRDaQiR.js";import{a as qt,R as j1,b as Z1,c as U1,m as G1,T as Q1,A as W1,S as q1,d as X1,e as Y1,f as J1,u as es}from"./pages-CA4bKhm9.js";import{u as ns,_ as as,a as ts,F as ai,I as ls,b as is,c as rs,d as os,e as ss,f as cs,g as ds,P as us,h as gs,i as ms,j as ps,T as hs,k as fs}from"./vendor-arizeai-DsYDNOqt.js";import{L as ti,a as li,j as ii,E as mt,k as ri,d as oi,l as qa,b as si,h as bs,c as ys,e as vs,f as Cs,g as ks,i as Ls,s as ws,m as $n,n as Bn,R as Hn,p as Ss,o as xs}from"./vendor-codemirror-BzJDUbEx.js";import{V as Ts}from"./vendor-three-BLWp5bic.js";const ci=function(){var n={defaultValue:null,kind:"LocalArgument",name:"clusters"},a={defaultValue:null,kind:"LocalArgument",name:"dataQualityMetricColumnName"},t={defaultValue:null,kind:"LocalArgument",name:"fetchDataQualityMetric"},l={defaultValue:null,kind:"LocalArgument",name:"fetchPerformanceMetric"},i={defaultValue:null,kind:"LocalArgument",name:"performanceMetric"},r=[{alias:null,args:null,kind:"ScalarField",name:"primaryValue",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"referenceValue",storageKey:null}],o=[{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:r,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:r,storageKey:null}]}],storageKey:null}];return{fragment:{argumentDefinitions:[n,a,t,l,i],kind:"Fragment",metadata:null,name:"pointCloudStore_clusterMetricsQuery",selections:o,type:"Query",abstractKey:null},kind:"Request",operation:{argumentDefinitions:[n,t,a,l,i],kind:"Operation",name:"pointCloudStore_clusterMetricsQuery",selections:o},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
@@ -2431,10 +2431,11 @@ fragment ViewerContext_viewer on Query {
2431
2431
  }
2432
2432
  `,u3=m`
2433
2433
  inline-size: var(--ac-global-dimension-size-2400);
2434
+ height: var(--ac-global-dimension-size-75);
2434
2435
 
2435
2436
  .progress-bar__track {
2436
2437
  forced-color-adjust: none;
2437
- height: var(--ac-global-dimension-size-75);
2438
+ height: 100%;
2438
2439
  border-radius: 3px;
2439
2440
  overflow: hidden;
2440
2441
  background-color: var(
@@ -2447,7 +2448,7 @@ fragment ViewerContext_viewer on Query {
2447
2448
  background: var(--mod-barloader-fill-color, var(--ac-global-color-primary));
2448
2449
  height: 100%;
2449
2450
  }
2450
- `;function g3(n,a){const{isIndeterminate:t=!1,value:l,size:i="M"}=n;return e(ql,{...n,"data-size":i,"data-indeterminate":t||void 0,css:d3,ref:a,style:!t&&l!=null?{"--progress-circle-value":l}:void 0,children:s("svg",{className:"progress-circle__svg",children:[e("circle",{className:"progress-circle__background"}),e("circle",{className:"progress-circle__arc"})]})})}const ar=p.forwardRef(g3);function m3({width:n,...a},t){return e(ql,{...a,ref:t,css:u3,style:{width:n},children:({percentage:l})=>e("div",{className:"progress-bar__track",children:e("div",{className:"progress-bar__fill",style:{width:l+"%"}})})})}const cg=p.forwardRef(m3),p3=m`
2451
+ `;function g3(n,a){const{isIndeterminate:t=!1,value:l,size:i="M"}=n;return e(ql,{...n,"data-size":i,"data-indeterminate":t||void 0,css:d3,ref:a,style:!t&&l!=null?{"--progress-circle-value":l}:void 0,children:s("svg",{className:"progress-circle__svg",children:[e("circle",{className:"progress-circle__background"}),e("circle",{className:"progress-circle__arc"})]})})}const ar=p.forwardRef(g3);function m3({width:n,height:a,...t},l){return e(ql,{...t,ref:l,css:u3,style:{width:n,height:a},children:({percentage:i})=>e("div",{className:"progress-bar__track",children:e("div",{className:"progress-bar__fill",style:{width:i+"%"}})})})}const cg=p.forwardRef(m3),p3=m`
2451
2452
  list-style: none;
2452
2453
  padding: 0;
2453
2454
  margin: 0;
@@ -1,4 +1,4 @@
1
- import{U as g,j as o,c_ as f,eD as h,eE as v,eF as y,l as r,cl as x,eG as a,r as z,o as w,eH as P}from"./vendor-RdRDaQiR.js";import{r as k,s as S}from"./vendor-arizeai-DsYDNOqt.js";import{L,g as C,r as R,h as j,i as E,F as I,j as D,P as A,k as F,M as t,l as T,D as G,n as M,E as _,o as O,p as N,q as V,s as q,t as d,v as U,w as W,x as B,y as $,z as H,B as K,C as Y,G as J,H as Q,I as X,J as Z,K as oo,N as ao,O as lo,Q as ro,U as co,V as go,W as m,X as p,Y as eo,Z as bo,_ as no,$ as io,a0 as so,a1 as to,a2 as mo,a3 as po,a4 as uo,a5 as fo,a6 as ho,a7 as vo,a8 as yo,a9 as xo,aa as zo,ab as wo,ac as Po,ad as ko,ae as So,af as Lo,ag as Co,ah as Ro,ai as jo,aj as Eo,ak as Io,al as Do,am as Ao,an as Fo,ao as To,ap as Go,aq as Mo,ar as _o,as as Oo,at as No,au as Vo,av as qo,aw as Uo,ax as Wo,ay as n,az as Bo,aA as $o,aB as Ho,aC as Ko,aD as Yo,aE as Jo}from"./pages-DvrxSPg3.js";import{fR as Qo,cY as Xo,U as Zo,fS as oa,fT as aa,fU as la}from"./components-C3HQDu_r.js";import"./vendor-three-BLWp5bic.js";import"./vendor-codemirror-BzJDUbEx.js";import"./vendor-shiki-BAcocHFl.js";import"./vendor-recharts-BTHn5Y2R.js";(function(){const b=document.createElement("link").relList;if(b&&b.supports&&b.supports("modulepreload"))return;for(const c of document.querySelectorAll('link[rel="modulepreload"]'))s(c);new MutationObserver(c=>{for(const e of c)if(e.type==="childList")for(const i of e.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&s(i)}).observe(document,{childList:!0,subtree:!0});function u(c){const e={};return c.integrity&&(e.integrity=c.integrity),c.referrerPolicy&&(e.referrerPolicy=c.referrerPolicy),c.crossOrigin==="use-credentials"?e.credentials="include":c.crossOrigin==="anonymous"?e.credentials="omit":e.credentials="same-origin",e}function s(c){if(c.ep)return;c.ep=!0;const e=u(c);fetch(c.href,e)}})();const ra=g`
1
+ import{U as g,j as o,c_ as f,eD as h,eE as v,eF as y,l as r,cl as x,eG as a,r as z,o as w,eH as P}from"./vendor-RdRDaQiR.js";import{r as k,s as S}from"./vendor-arizeai-DsYDNOqt.js";import{L,g as C,r as R,h as j,i as E,F as I,j as D,P as A,k as F,M as t,l as T,D as G,n as M,E as _,o as O,p as N,q as V,s as q,t as d,v as U,w as W,x as B,y as $,z as H,B as K,C as Y,G as J,H as Q,I as X,J as Z,K as oo,N as ao,O as lo,Q as ro,U as co,V as go,W as m,X as p,Y as eo,Z as bo,_ as no,$ as io,a0 as so,a1 as to,a2 as mo,a3 as po,a4 as uo,a5 as fo,a6 as ho,a7 as vo,a8 as yo,a9 as xo,aa as zo,ab as wo,ac as Po,ad as ko,ae as So,af as Lo,ag as Co,ah as Ro,ai as jo,aj as Eo,ak as Io,al as Do,am as Ao,an as Fo,ao as To,ap as Go,aq as Mo,ar as _o,as as Oo,at as No,au as Vo,av as qo,aw as Uo,ax as Wo,ay as n,az as Bo,aA as $o,aB as Ho,aC as Ko,aD as Yo,aE as Jo}from"./pages-CA4bKhm9.js";import{fR as Qo,cY as Xo,U as Zo,fS as oa,fT as aa,fU as la}from"./components-dCdVienD.js";import"./vendor-three-BLWp5bic.js";import"./vendor-codemirror-BzJDUbEx.js";import"./vendor-shiki-BAcocHFl.js";import"./vendor-recharts-BTHn5Y2R.js";(function(){const b=document.createElement("link").relList;if(b&&b.supports&&b.supports("modulepreload"))return;for(const c of document.querySelectorAll('link[rel="modulepreload"]'))s(c);new MutationObserver(c=>{for(const e of c)if(e.type==="childList")for(const i of e.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&s(i)}).observe(document,{childList:!0,subtree:!0});function u(c){const e={};return c.integrity&&(e.integrity=c.integrity),c.referrerPolicy&&(e.referrerPolicy=c.referrerPolicy),c.crossOrigin==="use-credentials"?e.credentials="include":c.crossOrigin==="anonymous"?e.credentials="omit":e.credentials="same-origin",e}function s(c){if(c.ep)return;c.ep=!0;const e=u(c);fetch(c.href,e)}})();const ra=g`
2
2
  :root,
3
3
  .ac-theme {
4
4
  --ac-global-dimension-scale-factor: 1;