arize-phoenix 4.22.0__py3-none-any.whl → 4.22.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.3
2
2
  Name: arize-phoenix
3
- Version: 4.22.0
3
+ Version: 4.22.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
@@ -5,7 +5,7 @@ phoenix/exceptions.py,sha256=n2L2KKuecrdflB9MsCdAYCiSEvGJptIsfRkXMoJle7A,169
5
5
  phoenix/py.typed,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
6
6
  phoenix/services.py,sha256=aTxhcOA1pZHB6U-B3TEcp6fqDF5oT0xCUvEUNMZVTUQ,5175
7
7
  phoenix/settings.py,sha256=cO-qgis_S27nHirTobYI9hHPfZH18R--WMmxNdsVUwc,273
8
- phoenix/version.py,sha256=QzEW4rw3knzx0cHKAbjoAdUuGoTl82VIDrnWP2UhHw0,23
8
+ phoenix/version.py,sha256=o6NOndzGr8AzXGIlB0Kpj1jAyiWB77iB92rO-Vlh2y0,23
9
9
  phoenix/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
10
  phoenix/core/embedding_dimension.py,sha256=zKGbcvwOXgLf-yrJBpQyKtd-LEOPRKHnUToyAU8Owis,87
11
11
  phoenix/core/model.py,sha256=km_a--PBHOuA337ClRw9xqhOHhrUT6Rl9pz_zV0JYkQ,4843
@@ -39,9 +39,9 @@ phoenix/db/migrations/versions/10460e46d750_datasets.py,sha256=eZAyz720DmpOd7Rnu
39
39
  phoenix/db/migrations/versions/3be8647b87d8_add_token_columns_to_spans_table.py,sha256=x6oKFwn7Zmite4G0trDQPpMCn0I7jejuBcN3-ivEuDg,3938
40
40
  phoenix/db/migrations/versions/cf03bd6bae1d_init.py,sha256=09cpofqje8zi4eQFfUn-i21x7VcsUYOfLKKUlrtKrGc,8662
41
41
  phoenix/experiments/__init__.py,sha256=6JGwgUd7xCbGpuHqYZlsmErmYvVgv7N_j43bn3dUqsk,123
42
- phoenix/experiments/functions.py,sha256=4XaOLE1Co9sW_yjM1sypQClmOLtt9kwoxmhIEJ3f_rk,32209
42
+ phoenix/experiments/functions.py,sha256=WnyBaO6UEesQ1P77GXy-brQSSY9NF1EpAULbtbr4mHo,32228
43
43
  phoenix/experiments/tracing.py,sha256=wVpt8Ie9WNPoi1djJdcrkwCokHdTO0bicXViLg3O-1Y,2831
44
- phoenix/experiments/types.py,sha256=SQqI-8CqA-bDTVIOUC1NOMi9bjEcDSlcG7o3Li1IBFY,23415
44
+ phoenix/experiments/types.py,sha256=HegeRSLyx2lESlzAc2PXYQJVHBFbCLwqQQmPcDMdUnM,23433
45
45
  phoenix/experiments/utils.py,sha256=wLu5Kvt1b4a8rGPRWq5G8RQ9XSiV8fCIVm51zWBI3-g,758
46
46
  phoenix/experiments/evaluators/__init__.py,sha256=j63fi3fa3U7-itVPHa82GowhjQRU-wO6yhO34u_lhsA,714
47
47
  phoenix/experiments/evaluators/base.py,sha256=jAwJs-V7jCp2UBChL0S3813Xyd9GN4rU4IEhX0nkFGs,5549
@@ -68,9 +68,9 @@ phoenix/pointcloud/pointcloud.py,sha256=4zAIkKs2xOUbchpj4XDAV-iPMXrfAJ15TG6rlIYG
68
68
  phoenix/pointcloud/projectors.py,sha256=zO_RrtDYSv2rqVOfIP2_9Cv11Dc8EmcZR94xhFcBYPU,1057
69
69
  phoenix/pointcloud/umap_parameters.py,sha256=3UQSjrysVOvq2V4KNpTMqNqNiK0BsTZnPBHWZ4fyJtQ,1708
70
70
  phoenix/server/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
71
- phoenix/server/app.py,sha256=1715YnPAPUUojIG6SYHCanSlMLahxPO3h0dKktLwVFU,19889
71
+ phoenix/server/app.py,sha256=fZYS5Jttj70iHnyDMivXs74oZMAx_gQgdWyNUXs59jE,19407
72
72
  phoenix/server/dml_event.py,sha256=MpjCFqljxvgb9OB5Cez9vJesb3oHb3XxXictynBfcis,2851
73
- phoenix/server/dml_event_handler.py,sha256=pKEWiDApy4mBHvp477mo0y94cm65r9gD5ggQgsA_hak,8460
73
+ phoenix/server/dml_event_handler.py,sha256=6p-PucctivelVHfO-_9zNxWZYPr_eGjDF3bKjLtc5co,8251
74
74
  phoenix/server/grpc_server.py,sha256=jllxDNkpLQxDkvej4RhTokobowbvydF-SU8gSw1MTCc,3378
75
75
  phoenix/server/main.py,sha256=dvjv3g8ANpkvSGCUN02S2Yse643Nlwrp_bj4iXBSVTE,11082
76
76
  phoenix/server/prometheus.py,sha256=j9DHB2fERuq_ZKmwVaqR-9wx5WcPPuU1Cm5Bhg5241Y,2996
@@ -78,12 +78,12 @@ phoenix/server/telemetry.py,sha256=T_2OKrxNViAeaANlNspEekg_Y5uZIFWvKAnpz8Aoqvk,2
78
78
  phoenix/server/thread_server.py,sha256=RwXQGP_QhGD7le6WB7xEygEEuwBl5Ck_Zo8xGIYGi9M,2135
79
79
  phoenix/server/types.py,sha256=UCCkwEzUAbRdu-hZpG7A2hdPM09onBezaXNtWX4A7og,3431
80
80
  phoenix/server/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
81
- phoenix/server/api/context.py,sha256=4YkrPe9AnB4l6qXSV5FsrqUdkXG1jxCU8ST7iTNlwZY,3047
81
+ phoenix/server/api/context.py,sha256=2-kJpoix-OISxyAhoI5FFEnQMt9ad-3HQ3VOFCjdbxU,2799
82
82
  phoenix/server/api/interceptor.py,sha256=ykDnoC_apUd-llVli3m1CW18kNSIgjz2qZ6m5JmPDu8,1294
83
83
  phoenix/server/api/queries.py,sha256=Nuw74Nh1XhDkLNV8hTO3WPPNeqcSlNhUF76r5HaytGc,20268
84
84
  phoenix/server/api/schema.py,sha256=BcxdqO5CSGqpKd-AAJHMjFlzaK9oJA8GJuxmMfcdjn4,434
85
85
  phoenix/server/api/utils.py,sha256=Kl47G-1A7QKTDrc75BU2QK6HupsG6MWuXxy351FOfKQ,858
86
- phoenix/server/api/dataloaders/__init__.py,sha256=OaqWVJwb2BM2lDHVbILCdpjbB4M5w2UYFXIz_FEO0YI,3476
86
+ phoenix/server/api/dataloaders/__init__.py,sha256=TrOGnU_SD_vEIxOE_dm8HrD5C2ScLFQ4xQ7f8r-E76s,3064
87
87
  phoenix/server/api/dataloaders/annotation_summaries.py,sha256=Wv8AORZoGd5TJ4Y-em8iqJu87AMpZP7lWOTr-SML-x8,5560
88
88
  phoenix/server/api/dataloaders/average_experiment_run_latency.py,sha256=q091UmkXx37OBKh7L-GJ5LXHyRXfX2w4XTk1NMHtPpw,1827
89
89
  phoenix/server/api/dataloaders/dataset_example_revisions.py,sha256=i0g8F4akEf3kQOzAvBjO27QwXNsq-kJEM8dtzduxQgY,3720
@@ -91,7 +91,6 @@ phoenix/server/api/dataloaders/dataset_example_spans.py,sha256=-TjdyyJv2c2JiN1OX
91
91
  phoenix/server/api/dataloaders/document_evaluation_summaries.py,sha256=5XOom2KRAmCwPmtlraiZOSl3vhfaW-eiiYkmetAEalw,5616
92
92
  phoenix/server/api/dataloaders/document_evaluations.py,sha256=V6sE34jON_qFxt7eArJbktykAsty-gnBZHlEkORcj0E,1296
93
93
  phoenix/server/api/dataloaders/document_retrieval_metrics.py,sha256=JqDqkUuoeG6WfcmWSrmQptfF6IPX8XgzYzyECXTAjgg,4202
94
- phoenix/server/api/dataloaders/evaluation_summaries.py,sha256=FEfUMKgk0uqQlJCS5ynmjkBoJVkqW9EVQ8vhgQ2ReKY,5656
95
94
  phoenix/server/api/dataloaders/experiment_annotation_summaries.py,sha256=qDEBRo0XKJMYBYlXBgJ-69jwPK-0r4pi9ZhbjC_vx6M,2813
96
95
  phoenix/server/api/dataloaders/experiment_error_rates.py,sha256=wWTFOO2UxGIYUu53nnzzLk04-mJxw-BQgJELA9gT5bY,1949
97
96
  phoenix/server/api/dataloaders/experiment_run_counts.py,sha256=8VlKRaXwD56-7q_uonRr7L6QlEkyEQubkFKmKx6vuz0,1661
@@ -103,10 +102,8 @@ phoenix/server/api/dataloaders/record_counts.py,sha256=64OsyiQRDZASlibpQAXtRkzyA
103
102
  phoenix/server/api/dataloaders/span_annotations.py,sha256=v3vGkLGTn-n4khxXZY2btgvfXitvytWgBahzrrWEz0I,1078
104
103
  phoenix/server/api/dataloaders/span_dataset_examples.py,sha256=BtLZp11fyyeaWGGBPZj2StzFM0m5jxt52zB2nFMVybo,1306
105
104
  phoenix/server/api/dataloaders/span_descendants.py,sha256=b7jGTn0Hi22gv2yskloLnf3BG3upS9z5hnKLMT9Sxac,2094
106
- phoenix/server/api/dataloaders/span_evaluations.py,sha256=IfwXW23GQaWti8F49wSJocWf7Tklf2ZJ0F6aB4cSVHs,1248
107
105
  phoenix/server/api/dataloaders/span_projects.py,sha256=LbQWiboCFqq4CHS18OzvRUwL9yORqP26fh5p7JbpFdg,1244
108
106
  phoenix/server/api/dataloaders/token_counts.py,sha256=6gDVely8BYiCBdmiq1ECO0lMChUYPIlsZbB34rmL1xM,4684
109
- phoenix/server/api/dataloaders/trace_evaluations.py,sha256=vraPehNsausR4dbdvq-HudRVNARJUbep3T-Ud9jwWYY,1262
110
107
  phoenix/server/api/dataloaders/trace_row_ids.py,sha256=RODX4NULlBzMxHMrsq0dp1ij6ZlLH4ZzQBnafGdxOvU,1100
111
108
  phoenix/server/api/dataloaders/cache/__init__.py,sha256=SYoOM9n8FJaMdQarma5d1blu-jIg2GB8Shqg5ezSzZ8,106
112
109
  phoenix/server/api/dataloaders/cache/two_tier_cache.py,sha256=I38L1RsOis98OQftE7n1Q9QBZfFJO6OW_qIINkuJllo,2295
@@ -157,7 +154,7 @@ phoenix/server/api/routers/v1/__init__.py,sha256=nb49zcOdAi3DSGuC9gUubN9Yri-o7-W
157
154
  phoenix/server/api/routers/v1/datasets.py,sha256=pyLtVEGnjwxh1wJySBOUFrsjtawatfpaF8F3WijK8qU,37049
158
155
  phoenix/server/api/routers/v1/evaluations.py,sha256=FSfz9MTi8s65F07abDXlb9-y97fDZSYbqsCXpimwO7g,12628
159
156
  phoenix/server/api/routers/v1/experiment_evaluations.py,sha256=RTQnjupjmh07xowjq77ajbuAZhzIEfYxA4ZtECvGwOU,4844
160
- phoenix/server/api/routers/v1/experiment_runs.py,sha256=dr7oA3RMyFVON4Dq3fJtDoTeXETcglWVYAakVW8zyZw,6196
157
+ phoenix/server/api/routers/v1/experiment_runs.py,sha256=0G7GgGcZv9dzK47tsPp-p4k5O7W4F_aNRrsNuJN7mho,6393
161
158
  phoenix/server/api/routers/v1/experiments.py,sha256=GeT3Rya4bdaCr6sCf2Vx6fQ_gfMX5XyFHmODCSJiCfU,9951
162
159
  phoenix/server/api/routers/v1/pydantic_compat.py,sha256=FeK8oe2brqu-djsoqRxiKL4tw5cHmi89OHVfCFxYsAo,2890
163
160
  phoenix/server/api/routers/v1/spans.py,sha256=Hd63VHQUqSy0VHsYQ5DPLf5WwKALMXZOIh_ig_5MStc,8780
@@ -183,7 +180,7 @@ phoenix/server/api/types/DocumentEvaluationSummary.py,sha256=EpgKn0uiH2Vbpyltc1M
183
180
  phoenix/server/api/types/DocumentRetrievalMetrics.py,sha256=amkpC3H5IU5-9GvO0telpbq00m6lIcv_2v446OpwFwc,1822
184
181
  phoenix/server/api/types/EmbeddingDimension.py,sha256=2OTVzAcfY-2xnJLl7122EAaqJyp0sob1v9-ryaNWknw,18961
185
182
  phoenix/server/api/types/EmbeddingMetadata.py,sha256=fJvNNYCbkf3SJalArLy9rcBq9Uj1SNac60zjqe1PFnM,461
186
- phoenix/server/api/types/Evaluation.py,sha256=oW9UfUCs6Td60kb5s6_sJNvUkxk5TQXjG0pmQ0-gT4M,3298
183
+ phoenix/server/api/types/Evaluation.py,sha256=rLJptUSRUPPx9sdUyc4UPWxzkr9gcKtkpAS5Zi_EyFQ,2406
187
184
  phoenix/server/api/types/EvaluationSummary.py,sha256=N1DhPXGhBbOOQakF43OGuZ5fl4vye7Uc-HnW5M262F8,1518
188
185
  phoenix/server/api/types/Event.py,sha256=XdYgaIxcVIW-YFViCkxj5l9OaVNepyIrCtm5Iqg2le8,3989
189
186
  phoenix/server/api/types/EventMetadata.py,sha256=-J0tYF9eZTHwCjwxQHY7Gckr2_MNW5OoWT1mydweZNM,635
@@ -202,13 +199,13 @@ phoenix/server/api/types/MimeType.py,sha256=Zpi6zCalkSFgsvhzvOs-O1gYA04usAi9H__Q
202
199
  phoenix/server/api/types/Model.py,sha256=BRIzH5xSGiDrAUYvhwDpwxT6--ddS3Xr3vCvP8_vzdo,8051
203
200
  phoenix/server/api/types/NumericRange.py,sha256=afEjgF97Go_OvmjMggbPBt-zGM8IONewAyEiKEHRds0,192
204
201
  phoenix/server/api/types/PerformanceMetric.py,sha256=W92B7OghEOgzFvmY0LCqpgavHaQggTGshdgfD0yqHX4,350
205
- phoenix/server/api/types/Project.py,sha256=f29k2bsDIQTvqDkgW_dA9ufpQAmw6XEWwiPrv-AaASk,15506
202
+ phoenix/server/api/types/Project.py,sha256=CZ5Hl9fNeHiW8MfSbzXGBYP3A7jw0GubWqtHmzW-bUM,13299
206
203
  phoenix/server/api/types/PromptResponse.py,sha256=Q8HKtpp8GpUOcxPCzZpkkokidDd6u0aZOv_SuPZZd5Q,630
207
204
  phoenix/server/api/types/Retrieval.py,sha256=OhMK2ncjoyp5h1yjKhjlKpoTbQrMHuxmgSFw-AO1rWw,285
208
205
  phoenix/server/api/types/ScalarDriftMetricEnum.py,sha256=IUAcRPpgL41WdoIgK6cNk2Te38SspXGyEs-S1fY23_A,232
209
206
  phoenix/server/api/types/Segments.py,sha256=m2yoegrxA1Tn7ZAy1rMjjD1isc752MaAXMoffkBlvrM,2921
210
207
  phoenix/server/api/types/SortDir.py,sha256=OUpXhlCzCxPoXSDkJJygEs9Rw9pMymfaZUG5zPTrw4Y,152
211
- phoenix/server/api/types/Span.py,sha256=xzJoRuzFf1S64jDuPmGLjSFZ4oPyKUyfK1CtmtZ4LY0,14801
208
+ phoenix/server/api/types/Span.py,sha256=ypzCF70a22QH7e7N8UQbO3FPtsPnAUxqqnq7UlcdGV4,14373
212
209
  phoenix/server/api/types/SpanAnnotation.py,sha256=6b5G-b_OoRvDL2ayWk7MkbqarLK-F-pQMx21CpUuNGY,1168
213
210
  phoenix/server/api/types/TimeSeries.py,sha256=wjzuxHFqCey0O7Ys25qiXyuqXK8an-osyNWUE8A_8G4,5227
214
211
  phoenix/server/api/types/Trace.py,sha256=-nh3A-S_BlQK1VSSOTWqM85l-WwJsRHifxeDi0sFWZE,3246
@@ -230,10 +227,10 @@ phoenix/server/static/apple-touch-icon-76x76.png,sha256=CT_xT12I0u2i0WU8JzBZBuOQ
230
227
  phoenix/server/static/apple-touch-icon.png,sha256=fOfpjqGpWYbJ0eAurKsyoZP1EAs6ZVooBJ_SGk2ZkDs,3801
231
228
  phoenix/server/static/favicon.ico,sha256=bY0vvCKRftemZfPShwZtE93DiiQdaYaozkPGwNFr6H8,34494
232
229
  phoenix/server/static/modernizr.js,sha256=mvK-XtkNqjOral-QvzoqsyOMECXIMu5BQwSVN_wcU9c,2564
233
- phoenix/server/static/.vite/manifest.json,sha256=HOOexYONSka_hn_J9xhFRtKsvGXqttAcXqmC1C9uSLI,1929
234
- phoenix/server/static/assets/components-Bhx3QVW0.js,sha256=5UWD5GSontt9-H7IMs7lRbds6I4RyCbeRwFJRM52DGw,187118
235
- phoenix/server/static/assets/index-CZg-95kd.js,sha256=NOPlnhvT31fNg9srw7-kvKfoBLFqVbwlTvUrYKYIYeQ,7362
236
- phoenix/server/static/assets/pages-DG-5zgoV.js,sha256=m2FGLIvrM7I3uweAC_5YcXZfmdTI3mVeVCgLCcB23B0,452737
230
+ phoenix/server/static/.vite/manifest.json,sha256=D9OZ5VZQ3XozxyFU4FF1fd4MmUGkyB_xa67tlUi1NWI,1929
231
+ phoenix/server/static/assets/components-BC3-LP_a.js,sha256=LnC6sDg6caKtsMyIno5Dw7Ure5BGAReRrsn5XBCcP50,187118
232
+ phoenix/server/static/assets/index-BjJvafYL.js,sha256=dz-kVZPp63OEi2l0SYVU5PeimOsUgW3VQQdYdnoZLQE,7362
233
+ phoenix/server/static/assets/pages--n2933VW.js,sha256=WJZ6L_bWgzgJc3EAcbwbzuGADKEcZfMBwSVjDHhKslQ,452799
237
234
  phoenix/server/static/assets/vendor-BMWfu6zp.js,sha256=AAVTM5SjGUI_CmAWFUFmhpp5VDhvCD-MrEoh-pXXADY,1355423
238
235
  phoenix/server/static/assets/vendor-DxkFTwjz.css,sha256=nZrkr0u6NNElFGvpWHk9GTHeGoibCXCli1bE7mXZGZg,1816
239
236
  phoenix/server/static/assets/vendor-arizeai-Sj74jm5V.js,sha256=9lD4YeMt5WtyfrqIApcH9WFQxyJJUtth0syWabkzX-I,304008
@@ -284,8 +281,8 @@ phoenix/utilities/logging.py,sha256=lDXd6EGaamBNcQxL4vP1au9-i_SXe0OraUDiJOcszSw,
284
281
  phoenix/utilities/project.py,sha256=8IJuMM4yUMoooPi37sictGj8Etu9rGmq6RFtc9848cQ,436
285
282
  phoenix/utilities/re.py,sha256=PDve_OLjRTM8yQQJHC8-n3HdIONi7aNils3ZKRZ5uBM,2045
286
283
  phoenix/utilities/span_store.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
287
- arize_phoenix-4.22.0.dist-info/METADATA,sha256=knv747RowfHFOmv5WqkavBVG6KBadXQ8kLol_iYJK-Q,11902
288
- arize_phoenix-4.22.0.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
289
- arize_phoenix-4.22.0.dist-info/licenses/IP_NOTICE,sha256=JBqyyCYYxGDfzQ0TtsQgjts41IJoa-hiwDrBjCb9gHM,469
290
- arize_phoenix-4.22.0.dist-info/licenses/LICENSE,sha256=HFkW9REuMOkvKRACuwLPT0hRydHb3zNg-fdFt94td18,3794
291
- arize_phoenix-4.22.0.dist-info/RECORD,,
284
+ arize_phoenix-4.22.1.dist-info/METADATA,sha256=aMe9GmDUEAXZE2A5wixJeuulWvcq7dA7U4FGnGVVCf8,11902
285
+ arize_phoenix-4.22.1.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
286
+ arize_phoenix-4.22.1.dist-info/licenses/IP_NOTICE,sha256=JBqyyCYYxGDfzQ0TtsQgjts41IJoa-hiwDrBjCb9gHM,469
287
+ arize_phoenix-4.22.1.dist-info/licenses/LICENSE,sha256=HFkW9REuMOkvKRACuwLPT0hRydHb3zNg-fdFt94td18,3794
288
+ arize_phoenix-4.22.1.dist-info/RECORD,,
@@ -447,14 +447,14 @@ def evaluate_experiment(
447
447
  )
448
448
  if not dataset.examples:
449
449
  raise ValueError(f"Dataset has no examples: {dataset_id=}, {dataset_version_id=}")
450
- experiment_runs = tuple(
451
- ExperimentRun.from_dict(exp_run)
450
+ experiment_runs = {
451
+ exp_run["id"]: ExperimentRun.from_dict(exp_run)
452
452
  for exp_run in sync_client.get(f"/v1/experiments/{experiment.id}/runs").json()["data"]
453
- )
453
+ }
454
454
  if not experiment_runs:
455
455
  raise ValueError("Experiment has not been run")
456
456
  params = ExperimentParameters(n_examples=len(dataset.examples))
457
- task_summary = TaskSummary.from_task_runs(params, experiment_runs)
457
+ task_summary = TaskSummary.from_task_runs(params, experiment_runs.values())
458
458
  ran_experiment = object.__new__(RanExperiment)
459
459
  ran_experiment.__init__( # type: ignore[misc]
460
460
  dataset=dataset,
@@ -167,7 +167,7 @@ class Dataset:
167
167
  def from_dict(cls, obj: Mapping[str, Any]) -> Dataset:
168
168
  examples = tuple(map(Example.from_dict, obj.get("examples") or ()))
169
169
  return cls(
170
- id=obj["id"],
170
+ id=obj["dataset_id"],
171
171
  version_id=obj["version_id"],
172
172
  examples={ex.id: ex for ex in examples},
173
173
  )
@@ -225,7 +225,7 @@ class ExperimentRun:
225
225
  )
226
226
 
227
227
  def __post_init__(self) -> None:
228
- if bool(self.output) == bool(self.error):
228
+ if self.output is None and self.error is None:
229
229
  raise ValueError("Must specify exactly one of experiment_run_output or error")
230
230
 
231
231
 
@@ -284,7 +284,7 @@ class ExperimentEvaluationRun:
284
284
  )
285
285
 
286
286
  def __post_init__(self) -> None:
287
- if bool(self.result) == bool(self.error):
287
+ if self.result is None and self.error is None:
288
288
  raise ValueError("Must specify either result or error")
289
289
 
290
290
 
@@ -14,7 +14,6 @@ from phoenix.server.api.dataloaders import (
14
14
  DocumentEvaluationsDataLoader,
15
15
  DocumentEvaluationSummaryDataLoader,
16
16
  DocumentRetrievalMetricsDataLoader,
17
- EvaluationSummaryDataLoader,
18
17
  ExperimentAnnotationSummaryDataLoader,
19
18
  ExperimentErrorRatesDataLoader,
20
19
  ExperimentRunCountsDataLoader,
@@ -26,10 +25,8 @@ from phoenix.server.api.dataloaders import (
26
25
  SpanAnnotationsDataLoader,
27
26
  SpanDatasetExamplesDataLoader,
28
27
  SpanDescendantsDataLoader,
29
- SpanEvaluationsDataLoader,
30
28
  SpanProjectsDataLoader,
31
29
  TokenCountDataLoader,
32
- TraceEvaluationsDataLoader,
33
30
  TraceRowIdsDataLoader,
34
31
  )
35
32
  from phoenix.server.dml_event import DmlEvent
@@ -45,7 +42,6 @@ class DataLoaders:
45
42
  document_evaluations: DocumentEvaluationsDataLoader
46
43
  document_retrieval_metrics: DocumentRetrievalMetricsDataLoader
47
44
  annotation_summaries: AnnotationSummaryDataLoader
48
- evaluation_summaries: EvaluationSummaryDataLoader
49
45
  experiment_annotation_summaries: ExperimentAnnotationSummaryDataLoader
50
46
  experiment_error_rates: ExperimentErrorRatesDataLoader
51
47
  experiment_run_counts: ExperimentRunCountsDataLoader
@@ -56,10 +52,8 @@ class DataLoaders:
56
52
  span_annotations: SpanAnnotationsDataLoader
57
53
  span_dataset_examples: SpanDatasetExamplesDataLoader
58
54
  span_descendants: SpanDescendantsDataLoader
59
- span_evaluations: SpanEvaluationsDataLoader
60
55
  span_projects: SpanProjectsDataLoader
61
56
  token_counts: TokenCountDataLoader
62
- trace_evaluations: TraceEvaluationsDataLoader
63
57
  trace_row_ids: TraceRowIdsDataLoader
64
58
  project_by_name: ProjectByNameDataLoader
65
59
 
@@ -10,7 +10,6 @@ from .document_evaluation_summaries import (
10
10
  )
11
11
  from .document_evaluations import DocumentEvaluationsDataLoader
12
12
  from .document_retrieval_metrics import DocumentRetrievalMetricsDataLoader
13
- from .evaluation_summaries import EvaluationSummaryCache, EvaluationSummaryDataLoader
14
13
  from .experiment_annotation_summaries import ExperimentAnnotationSummaryDataLoader
15
14
  from .experiment_error_rates import ExperimentErrorRatesDataLoader
16
15
  from .experiment_run_counts import ExperimentRunCountsDataLoader
@@ -22,10 +21,8 @@ from .record_counts import RecordCountCache, RecordCountDataLoader
22
21
  from .span_annotations import SpanAnnotationsDataLoader
23
22
  from .span_dataset_examples import SpanDatasetExamplesDataLoader
24
23
  from .span_descendants import SpanDescendantsDataLoader
25
- from .span_evaluations import SpanEvaluationsDataLoader
26
24
  from .span_projects import SpanProjectsDataLoader
27
25
  from .token_counts import TokenCountCache, TokenCountDataLoader
28
- from .trace_evaluations import TraceEvaluationsDataLoader
29
26
  from .trace_row_ids import TraceRowIdsDataLoader
30
27
 
31
28
  __all__ = [
@@ -37,7 +34,6 @@ __all__ = [
37
34
  "DocumentEvaluationsDataLoader",
38
35
  "DocumentRetrievalMetricsDataLoader",
39
36
  "AnnotationSummaryDataLoader",
40
- "EvaluationSummaryDataLoader",
41
37
  "ExperimentAnnotationSummaryDataLoader",
42
38
  "ExperimentErrorRatesDataLoader",
43
39
  "ExperimentRunCountsDataLoader",
@@ -47,10 +43,8 @@ __all__ = [
47
43
  "RecordCountDataLoader",
48
44
  "SpanDatasetExamplesDataLoader",
49
45
  "SpanDescendantsDataLoader",
50
- "SpanEvaluationsDataLoader",
51
46
  "SpanProjectsDataLoader",
52
47
  "TokenCountDataLoader",
53
- "TraceEvaluationsDataLoader",
54
48
  "TraceRowIdsDataLoader",
55
49
  "ProjectByNameDataLoader",
56
50
  "SpanAnnotationsDataLoader",
@@ -65,9 +59,6 @@ class CacheForDataLoaders:
65
59
  annotation_summary: AnnotationSummaryCache = field(
66
60
  default_factory=AnnotationSummaryCache,
67
61
  )
68
- evaluation_summary: EvaluationSummaryCache = field(
69
- default_factory=EvaluationSummaryCache,
70
- )
71
62
  latency_ms_quantile: LatencyMsQuantileCache = field(
72
63
  default_factory=LatencyMsQuantileCache,
73
64
  )
@@ -108,7 +108,12 @@ async def create_experiment_run(
108
108
  return CreateExperimentResponseBody(data=CreateExperimentRunResponseBodyData(id=str(run_gid)))
109
109
 
110
110
 
111
- class ListExperimentRunsResponseBody(ResponseBody[List[ExperimentRun]]):
111
+ class ExperimentRunResponse(ExperimentRun):
112
+ id: str = Field(description="The ID of the experiment run")
113
+ experiment_id: str = Field(description="The ID of the experiment")
114
+
115
+
116
+ class ListExperimentRunsResponseBody(ResponseBody[List[ExperimentRunResponse]]):
112
117
  pass
113
118
 
114
119
 
@@ -147,7 +152,7 @@ async def list_experiment_runs(
147
152
  experiment_gid = GlobalID("Experiment", str(exp_run.experiment_id))
148
153
  example_gid = GlobalID("DatasetExample", str(exp_run.dataset_example_id))
149
154
  runs.append(
150
- ExperimentRun(
155
+ ExperimentRunResponse(
151
156
  start_time=exp_run.start_time,
152
157
  end_time=exp_run.end_time,
153
158
  experiment_id=str(experiment_gid),
@@ -1,7 +1,7 @@
1
1
  import strawberry
2
2
 
3
3
  import phoenix.trace.v1 as pb
4
- from phoenix.db.models import DocumentAnnotation, SpanAnnotation, TraceAnnotation
4
+ from phoenix.db.models import DocumentAnnotation, TraceAnnotation
5
5
 
6
6
  from .Annotation import Annotation
7
7
 
@@ -31,31 +31,6 @@ class TraceEvaluation(Annotation):
31
31
  )
32
32
 
33
33
 
34
- @strawberry.type
35
- class SpanEvaluation(Annotation):
36
- @staticmethod
37
- def from_pb_evaluation(evaluation: pb.Evaluation) -> "SpanEvaluation":
38
- result = evaluation.result
39
- score = result.score.value if result.HasField("score") else None
40
- label = result.label.value if result.HasField("label") else None
41
- explanation = result.explanation.value if result.HasField("explanation") else None
42
- return SpanEvaluation(
43
- name=evaluation.name,
44
- score=score,
45
- label=label,
46
- explanation=explanation,
47
- )
48
-
49
- @staticmethod
50
- def from_sql_span_annotation(annotation: SpanAnnotation) -> "SpanEvaluation":
51
- return SpanEvaluation(
52
- name=annotation.name,
53
- score=annotation.score,
54
- label=annotation.label,
55
- explanation=annotation.explanation,
56
- )
57
-
58
-
59
34
  @strawberry.type
60
35
  class DocumentEvaluation(Annotation):
61
36
  document_position: int = strawberry.field(
@@ -24,7 +24,6 @@ from phoenix.server.api.input_types.SpanSort import SpanSort, SpanSortConfig
24
24
  from phoenix.server.api.input_types.TimeRange import TimeRange
25
25
  from phoenix.server.api.types.AnnotationSummary import AnnotationSummary
26
26
  from phoenix.server.api.types.DocumentEvaluationSummary import DocumentEvaluationSummary
27
- from phoenix.server.api.types.EvaluationSummary import EvaluationSummary
28
27
  from phoenix.server.api.types.pagination import (
29
28
  Cursor,
30
29
  CursorSortColumn,
@@ -249,23 +248,6 @@ class Project(Node):
249
248
  has_next_page=has_next_page,
250
249
  )
251
250
 
252
- @strawberry.field(
253
- description="Names of all available evaluations for traces. "
254
- "(The list contains no duplicates.)"
255
- ) # type: ignore
256
- async def trace_evaluation_names(
257
- self,
258
- info: Info[Context, None],
259
- ) -> List[str]:
260
- stmt = (
261
- select(distinct(models.TraceAnnotation.name))
262
- .join(models.Trace)
263
- .where(models.Trace.project_rowid == self.id_attr)
264
- .where(models.TraceAnnotation.annotator_kind == "LLM")
265
- )
266
- async with info.context.db() as session:
267
- return list(await session.scalars(stmt))
268
-
269
251
  @strawberry.field(
270
252
  description="Names of all available annotations for traces. "
271
253
  "(The list contains no duplicates.)"
@@ -282,24 +264,6 @@ class Project(Node):
282
264
  async with info.context.db() as session:
283
265
  return list(await session.scalars(stmt))
284
266
 
285
- @strawberry.field(
286
- description="Names of all available evaluations for spans. "
287
- "(The list contains no duplicates.)"
288
- ) # type: ignore
289
- async def span_evaluation_names(
290
- self,
291
- info: Info[Context, None],
292
- ) -> List[str]:
293
- stmt = (
294
- select(distinct(models.SpanAnnotation.name))
295
- .join(models.Span)
296
- .join(models.Trace, models.Span.trace_rowid == models.Trace.id)
297
- .where(models.Trace.project_rowid == self.id_attr)
298
- .where(models.SpanAnnotation.annotator_kind == "LLM")
299
- )
300
- async with info.context.db() as session:
301
- return list(await session.scalars(stmt))
302
-
303
267
  @strawberry.field(
304
268
  description="Names of all available annotations for spans. "
305
269
  "(The list contains no duplicates.)"
@@ -337,29 +301,6 @@ class Project(Node):
337
301
  async with info.context.db() as session:
338
302
  return list(await session.scalars(stmt))
339
303
 
340
- @strawberry.field
341
- async def trace_evaluation_summary(
342
- self,
343
- info: Info[Context, None],
344
- evaluation_name: str,
345
- time_range: Optional[TimeRange] = UNSET,
346
- ) -> Optional[EvaluationSummary]:
347
- return await info.context.data_loaders.evaluation_summaries.load(
348
- ("trace", self.id_attr, time_range, None, evaluation_name),
349
- )
350
-
351
- @strawberry.field
352
- async def span_evaluation_summary(
353
- self,
354
- info: Info[Context, None],
355
- evaluation_name: str,
356
- time_range: Optional[TimeRange] = UNSET,
357
- filter_condition: Optional[str] = UNSET,
358
- ) -> Optional[EvaluationSummary]:
359
- return await info.context.data_loaders.evaluation_summaries.load(
360
- ("span", self.id_attr, time_range, filter_condition, evaluation_name),
361
- )
362
-
363
304
  @strawberry.field
364
305
  async def trace_annotation_summary(
365
306
  self,
@@ -405,7 +346,7 @@ class Project(Node):
405
346
  @strawberry.field
406
347
  async def validate_span_filter_condition(self, condition: str) -> ValidationResult:
407
348
  # This query is too expensive to run on every validation
408
- # valid_eval_names = await self.span_evaluation_names()
349
+ # valid_eval_names = await self.span_annotation_names()
409
350
  try:
410
351
  SpanFilter(
411
352
  condition=condition,
@@ -28,7 +28,7 @@ from phoenix.server.api.types.SpanAnnotation import to_gql_span_annotation
28
28
  from phoenix.trace.attributes import get_attribute_value
29
29
 
30
30
  from .DocumentRetrievalMetrics import DocumentRetrievalMetrics
31
- from .Evaluation import DocumentEvaluation, SpanEvaluation
31
+ from .Evaluation import DocumentEvaluation
32
32
  from .ExampleRevisionInterface import ExampleRevision
33
33
  from .MimeType import MimeType
34
34
  from .SpanAnnotation import SpanAnnotation
@@ -170,14 +170,6 @@ class Span(Node):
170
170
  "codes from descendant spans (children, grandchildren, etc.)",
171
171
  )
172
172
 
173
- @strawberry.field(
174
- description="Evaluations associated with the span, e.g. if the span is "
175
- "an LLM, an evaluation may assess the helpfulness of its response with "
176
- "respect to its input."
177
- ) # type: ignore
178
- async def span_evaluations(self, info: Info[Context, None]) -> List[SpanEvaluation]:
179
- return await info.context.data_loaders.span_evaluations.load(self.id_attr)
180
-
181
173
  @strawberry.field(
182
174
  description=(
183
175
  "Annotations associated with the span. This encompasses both "
phoenix/server/app.py CHANGED
@@ -65,7 +65,6 @@ from phoenix.server.api.dataloaders import (
65
65
  DocumentEvaluationsDataLoader,
66
66
  DocumentEvaluationSummaryDataLoader,
67
67
  DocumentRetrievalMetricsDataLoader,
68
- EvaluationSummaryDataLoader,
69
68
  ExperimentAnnotationSummaryDataLoader,
70
69
  ExperimentErrorRatesDataLoader,
71
70
  ExperimentRunCountsDataLoader,
@@ -77,10 +76,8 @@ from phoenix.server.api.dataloaders import (
77
76
  SpanAnnotationsDataLoader,
78
77
  SpanDatasetExamplesDataLoader,
79
78
  SpanDescendantsDataLoader,
80
- SpanEvaluationsDataLoader,
81
79
  SpanProjectsDataLoader,
82
80
  TokenCountDataLoader,
83
- TraceEvaluationsDataLoader,
84
81
  TraceRowIdsDataLoader,
85
82
  )
86
83
  from phoenix.server.api.routers.v1 import REST_API_VERSION
@@ -303,12 +300,6 @@ def create_graphql_router(
303
300
  if cache_for_dataloaders
304
301
  else None,
305
302
  ),
306
- evaluation_summaries=EvaluationSummaryDataLoader(
307
- db,
308
- cache_map=cache_for_dataloaders.evaluation_summary
309
- if cache_for_dataloaders
310
- else None,
311
- ),
312
303
  experiment_annotation_summaries=ExperimentAnnotationSummaryDataLoader(db),
313
304
  experiment_error_rates=ExperimentErrorRatesDataLoader(db),
314
305
  experiment_run_counts=ExperimentRunCountsDataLoader(db),
@@ -332,13 +323,11 @@ def create_graphql_router(
332
323
  span_annotations=SpanAnnotationsDataLoader(db),
333
324
  span_dataset_examples=SpanDatasetExamplesDataLoader(db),
334
325
  span_descendants=SpanDescendantsDataLoader(db),
335
- span_evaluations=SpanEvaluationsDataLoader(db),
336
326
  span_projects=SpanProjectsDataLoader(db),
337
327
  token_counts=TokenCountDataLoader(
338
328
  db,
339
329
  cache_map=cache_for_dataloaders.token_count if cache_for_dataloaders else None,
340
330
  ),
341
- trace_evaluations=TraceEvaluationsDataLoader(db),
342
331
  trace_row_ids=TraceRowIdsDataLoader(db),
343
332
  project_by_name=ProjectByNameDataLoader(db),
344
333
  ),
@@ -142,7 +142,6 @@ class _SpanDeleteEventHandler(_SpanDmlEventHandler):
142
142
  @staticmethod
143
143
  def _clear(cache: CacheForDataLoaders, project_id: int) -> None:
144
144
  cache.annotation_summary.invalidate_project(project_id)
145
- cache.evaluation_summary.invalidate_project(project_id)
146
145
  cache.document_evaluation_summary.invalidate_project(project_id)
147
146
 
148
147
 
@@ -201,7 +200,6 @@ class _SpanAnnotationDmlEventHandler(_AnnotationDmlEventHandler[SpanAnnotationDm
201
200
  @staticmethod
202
201
  def _clear(cache: CacheForDataLoaders, project_id: int, name: str) -> None:
203
202
  cache.annotation_summary.invalidate((project_id, name, "span"))
204
- cache.evaluation_summary.invalidate((project_id, name, "span"))
205
203
 
206
204
 
207
205
  class _TraceAnnotationDmlEventHandler(_AnnotationDmlEventHandler[TraceAnnotationDmlEvent]):
@@ -214,7 +212,6 @@ class _TraceAnnotationDmlEventHandler(_AnnotationDmlEventHandler[TraceAnnotation
214
212
  @staticmethod
215
213
  def _clear(cache: CacheForDataLoaders, project_id: int, name: str) -> None:
216
214
  cache.annotation_summary.invalidate((project_id, name, "trace"))
217
- cache.evaluation_summary.invalidate((project_id, name, "trace"))
218
215
 
219
216
 
220
217
  class _DocumentAnnotationDmlEventHandler(_AnnotationDmlEventHandler[DocumentAnnotationDmlEvent]):
@@ -1,21 +1,21 @@
1
1
  {
2
- "_components-Bhx3QVW0.js": {
3
- "file": "assets/components-Bhx3QVW0.js",
2
+ "_components-BC3-LP_a.js": {
3
+ "file": "assets/components-BC3-LP_a.js",
4
4
  "name": "components",
5
5
  "imports": [
6
6
  "_vendor-BMWfu6zp.js",
7
7
  "_vendor-arizeai-Sj74jm5V.js",
8
- "_pages-DG-5zgoV.js",
8
+ "_pages--n2933VW.js",
9
9
  "_vendor-three-DwGkEfCM.js",
10
10
  "_vendor-codemirror-DO3VqEcD.js"
11
11
  ]
12
12
  },
13
- "_pages-DG-5zgoV.js": {
14
- "file": "assets/pages-DG-5zgoV.js",
13
+ "_pages--n2933VW.js": {
14
+ "file": "assets/pages--n2933VW.js",
15
15
  "name": "pages",
16
16
  "imports": [
17
17
  "_vendor-BMWfu6zp.js",
18
- "_components-Bhx3QVW0.js",
18
+ "_components-BC3-LP_a.js",
19
19
  "_vendor-arizeai-Sj74jm5V.js",
20
20
  "_vendor-recharts-BGN0SxgJ.js",
21
21
  "_vendor-codemirror-DO3VqEcD.js"
@@ -61,15 +61,15 @@
61
61
  "name": "vendor-three"
62
62
  },
63
63
  "index.tsx": {
64
- "file": "assets/index-CZg-95kd.js",
64
+ "file": "assets/index-BjJvafYL.js",
65
65
  "name": "index",
66
66
  "src": "index.tsx",
67
67
  "isEntry": true,
68
68
  "imports": [
69
69
  "_vendor-BMWfu6zp.js",
70
70
  "_vendor-arizeai-Sj74jm5V.js",
71
- "_components-Bhx3QVW0.js",
72
- "_pages-DG-5zgoV.js",
71
+ "_components-BC3-LP_a.js",
72
+ "_pages--n2933VW.js",
73
73
  "_vendor-three-DwGkEfCM.js",
74
74
  "_vendor-codemirror-DO3VqEcD.js",
75
75
  "_vendor-recharts-BGN0SxgJ.js"
@@ -1,4 +1,4 @@
1
- import{c as je,p as Dt,d as qe,r as p,j as n,R as W,n as Fn,a as we,C as De,b as U,s as Et,e as Ft,f as ie,g as Se,h as Ke,i as Te,k as Le,l as _t,m as Pt,o as ae,q as Vt,t as Nt,u as Rt,v as s,w as m,x as Fe,$ as V,L as _n,y as Ot,z as Kt,A as At,B as zt,D as cn,F as _e,E as se,G as $t,H as Gt,I as Pn,S as Bt,J as Qt,Q as dn,K as Ht,M as Ut,N as Zt,P as Ae,O as Vn,T as jt,U as qt,V as Wt,W as Jt,X as Xt,Y as Yt,Z as ea,_ as na,a0 as ta,a1 as We,a2 as Q,a3 as Nn,a4 as aa,a5 as ra,a6 as ia,a7 as la,a8 as oa}from"./vendor-BMWfu6zp.js";import{u as sa,_ as q,a as Pe,b as $,c as N,T as R,F as Rn,d as Z,I,e as w,f as G,A as ca,g as On,h as C,i as D,j as z,k as da,l as ua,P as ma,R as H,m as Ve,n as pa,o as ga,L as Je,p as J,q as X,r as Ne,s as ha,t as Kn,E as An,v as fa,w as La,x as ya,y as va,z as ba,B as Ca}from"./vendor-arizeai-Sj74jm5V.js";import{u as ka}from"./pages-DG-5zgoV.js";import{V as xa}from"./vendor-three-DwGkEfCM.js";import{j as zn,E as $n,l as Gn,a as Bn,R as Xe,n as Ye,p as wa}from"./vendor-codemirror-DO3VqEcD.js";const Sa=e=>{const t=a=>({markdownDisplayMode:"text",setMarkdownDisplayMode:r=>{a({markdownDisplayMode:r})},traceStreamingEnabled:!0,setTraceStreamingEnabled:r=>{a({traceStreamingEnabled:r})},showSpanAside:!0,setShowSpanAside:r=>{a({showSpanAside:r})},showMetricsInTraceTree:!0,setShowMetricsInTraceTree:r=>{a({showMetricsInTraceTree:r})},...e});return je()(Dt(qe(t),{name:"arize-phoenix-preferences"}))},Qn=p.createContext(null);function Rl({children:e,...t}){const a=p.useRef();return a.current||(a.current=Sa(t)),n(Qn.Provider,{value:a.current,children:e})}function be(e,t){const a=W.useContext(Qn);if(!a)throw new Error("Missing PreferencesContext.Provider in the tree");return Fn(a,e,t)}var A=(e=>(e.primary="primary",e.reference="reference",e.corpus="corpus",e))(A||{});function _(e){throw new Error("Unreachable")}function en(e){return typeof e=="number"||e===null}function Ma(e){return typeof e=="string"||e===null}function Ol(e){return Array.isArray(e)?e.every(t=>typeof t=="string"):!1}function Ta(e){return typeof e=="object"&&e!==null}const nn=p.createContext(null);function Re(){const e=W.useContext(nn);if(e===null)throw new Error("useInferences must be used within a InferencesProvider");return e}function Kl(e){return n(nn.Provider,{value:{primaryInferences:e.primaryInferences,referenceInferences:e.referenceInferences,corpusInferences:e.corpusInferences,getInferencesNameByRole:t=>{var a,r;switch(t){case A.primary:return e.primaryInferences.name;case A.reference:return((a=e.referenceInferences)==null?void 0:a.name)??"reference";case A.corpus:return((r=e.corpusInferences)==null?void 0:r.name)??"corpus";default:_()}}},children:e.children})}const Hn=function(){var e={defaultValue:null,kind:"LocalArgument",name:"clusters"},t={defaultValue:null,kind:"LocalArgument",name:"dataQualityMetricColumnName"},a={defaultValue:null,kind:"LocalArgument",name:"fetchDataQualityMetric"},r={defaultValue:null,kind:"LocalArgument",name:"fetchPerformanceMetric"},i={defaultValue:null,kind:"LocalArgument",name:"performanceMetric"},l=[{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:l,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:l,storageKey:null}]}],storageKey:null}];return{fragment:{argumentDefinitions:[e,t,a,r,i],kind:"Fragment",metadata:null,name:"pointCloudStore_clusterMetricsQuery",selections:o,type:"Query",abstractKey:null},kind:"Request",operation:{argumentDefinitions:[e,a,t,r,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{c as je,p as Dt,d as qe,r as p,j as n,R as W,n as Fn,a as we,C as De,b as U,s as Et,e as Ft,f as ie,g as Se,h as Ke,i as Te,k as Le,l as _t,m as Pt,o as ae,q as Vt,t as Nt,u as Rt,v as s,w as m,x as Fe,$ as V,L as _n,y as Ot,z as Kt,A as At,B as zt,D as cn,F as _e,E as se,G as $t,H as Gt,I as Pn,S as Bt,J as Qt,Q as dn,K as Ht,M as Ut,N as Zt,P as Ae,O as Vn,T as jt,U as qt,V as Wt,W as Jt,X as Xt,Y as Yt,Z as ea,_ as na,a0 as ta,a1 as We,a2 as Q,a3 as Nn,a4 as aa,a5 as ra,a6 as ia,a7 as la,a8 as oa}from"./vendor-BMWfu6zp.js";import{u as sa,_ as q,a as Pe,b as $,c as N,T as R,F as Rn,d as Z,I,e as w,f as G,A as ca,g as On,h as C,i as D,j as z,k as da,l as ua,P as ma,R as H,m as Ve,n as pa,o as ga,L as Je,p as J,q as X,r as Ne,s as ha,t as Kn,E as An,v as fa,w as La,x as ya,y as va,z as ba,B as Ca}from"./vendor-arizeai-Sj74jm5V.js";import{u as ka}from"./pages--n2933VW.js";import{V as xa}from"./vendor-three-DwGkEfCM.js";import{j as zn,E as $n,l as Gn,a as Bn,R as Xe,n as Ye,p as wa}from"./vendor-codemirror-DO3VqEcD.js";const Sa=e=>{const t=a=>({markdownDisplayMode:"text",setMarkdownDisplayMode:r=>{a({markdownDisplayMode:r})},traceStreamingEnabled:!0,setTraceStreamingEnabled:r=>{a({traceStreamingEnabled:r})},showSpanAside:!0,setShowSpanAside:r=>{a({showSpanAside:r})},showMetricsInTraceTree:!0,setShowMetricsInTraceTree:r=>{a({showMetricsInTraceTree:r})},...e});return je()(Dt(qe(t),{name:"arize-phoenix-preferences"}))},Qn=p.createContext(null);function Rl({children:e,...t}){const a=p.useRef();return a.current||(a.current=Sa(t)),n(Qn.Provider,{value:a.current,children:e})}function be(e,t){const a=W.useContext(Qn);if(!a)throw new Error("Missing PreferencesContext.Provider in the tree");return Fn(a,e,t)}var A=(e=>(e.primary="primary",e.reference="reference",e.corpus="corpus",e))(A||{});function _(e){throw new Error("Unreachable")}function en(e){return typeof e=="number"||e===null}function Ma(e){return typeof e=="string"||e===null}function Ol(e){return Array.isArray(e)?e.every(t=>typeof t=="string"):!1}function Ta(e){return typeof e=="object"&&e!==null}const nn=p.createContext(null);function Re(){const e=W.useContext(nn);if(e===null)throw new Error("useInferences must be used within a InferencesProvider");return e}function Kl(e){return n(nn.Provider,{value:{primaryInferences:e.primaryInferences,referenceInferences:e.referenceInferences,corpusInferences:e.corpusInferences,getInferencesNameByRole:t=>{var a,r;switch(t){case A.primary:return e.primaryInferences.name;case A.reference:return((a=e.referenceInferences)==null?void 0:a.name)??"reference";case A.corpus:return((r=e.corpusInferences)==null?void 0:r.name)??"corpus";default:_()}}},children:e.children})}const Hn=function(){var e={defaultValue:null,kind:"LocalArgument",name:"clusters"},t={defaultValue:null,kind:"LocalArgument",name:"dataQualityMetricColumnName"},a={defaultValue:null,kind:"LocalArgument",name:"fetchDataQualityMetric"},r={defaultValue:null,kind:"LocalArgument",name:"fetchPerformanceMetric"},i={defaultValue:null,kind:"LocalArgument",name:"performanceMetric"},l=[{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:l,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:l,storageKey:null}]}],storageKey:null}];return{fragment:{argumentDefinitions:[e,t,a,r,i],kind:"Fragment",metadata:null,name:"pointCloudStore_clusterMetricsQuery",selections:o,type:"Query",abstractKey:null},kind:"Request",operation:{argumentDefinitions:[e,a,t,r,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
@@ -1,4 +1,4 @@
1
- import{r as d,j as e,d2 as F,v as s,F as P,R as v,w as E,aN as L,d3 as R,d4 as S,d5 as a,d6 as w,d7 as z,b as A,d8 as j}from"./vendor-BMWfu6zp.js";import{S as C,j as k,Z as $,U as _,t as I,a4 as O}from"./vendor-arizeai-Sj74jm5V.js";import{b2 as T,d as D,R as N,b3 as G,b4 as M}from"./components-Bhx3QVW0.js";import{L as U,E as B,h as q,M as J,a as m,D as K,d as W,b as H,e as V,P as Y,c as Z,T as Q,p as X,f as u,g as ee,i as re,j as g,k as ae,l as h,m as x,n as oe,o as te,q as ne,r as se,s as le,A as ie}from"./pages-DG-5zgoV.js";import"./vendor-three-DwGkEfCM.js";import"./vendor-codemirror-DO3VqEcD.js";import"./vendor-recharts-BGN0SxgJ.js";(function(){const n=document.createElement("link").relList;if(n&&n.supports&&n.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))c(o);new MutationObserver(o=>{for(const t of o)if(t.type==="childList")for(const l of t.addedNodes)l.tagName==="LINK"&&l.rel==="modulepreload"&&c(l)}).observe(document,{childList:!0,subtree:!0});function i(o){const t={};return o.integrity&&(t.integrity=o.integrity),o.referrerPolicy&&(t.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?t.credentials="include":o.crossOrigin==="anonymous"?t.credentials="omit":t.credentials="same-origin",t}function c(o){if(o.ep)return;o.ep=!0;const t=i(o);fetch(o.href,t)}})();const b="arize-phoenix-feature-flags",p={__CLEAR__:!0};function ce(){const r=localStorage.getItem(b);if(!r)return p;try{const n=JSON.parse(r);return Object.assign({},p,n)}catch{return p}}const f=d.createContext(null);function de(){const r=v.useContext(f);if(r===null)throw new Error("useFeatureFlags must be used within a FeatureFlagsProvider");return r}function pe(r){const[n,i]=d.useState(ce()),c=o=>{localStorage.setItem(b,JSON.stringify(o)),i(o)};return e(f.Provider,{value:{featureFlags:n,setFeatureFlags:c},children:e(me,{children:r.children})})}function me(r){const{children:n}=r,{featureFlags:i,setFeatureFlags:c}=de(),[o,t]=d.useState(!1);return F("ctrl+shift+f",()=>t(!0)),s(P,{children:[n,e(_,{type:"modal",isDismissable:!0,onDismiss:()=>t(!1),children:o&&e(C,{title:"Feature Flags",children:e(k,{height:"size-1000",padding:"size-100",children:Object.keys(i).map(l=>e($,{isSelected:i[l],onChange:y=>c({...i,[l]:y}),children:l},l))})})})]})}function ue(){return e(L,{styles:r=>E`
1
+ import{r as d,j as e,d2 as F,v as s,F as P,R as v,w as E,aN as L,d3 as R,d4 as S,d5 as a,d6 as w,d7 as z,b as A,d8 as j}from"./vendor-BMWfu6zp.js";import{S as C,j as k,Z as $,U as _,t as I,a4 as O}from"./vendor-arizeai-Sj74jm5V.js";import{b2 as T,d as D,R as N,b3 as G,b4 as M}from"./components-BC3-LP_a.js";import{L as U,E as B,h as q,M as J,a as m,D as K,d as W,b as H,e as V,P as Y,c as Z,T as Q,p as X,f as u,g as ee,i as re,j as g,k as ae,l as h,m as x,n as oe,o as te,q as ne,r as se,s as le,A as ie}from"./pages--n2933VW.js";import"./vendor-three-DwGkEfCM.js";import"./vendor-codemirror-DO3VqEcD.js";import"./vendor-recharts-BGN0SxgJ.js";(function(){const n=document.createElement("link").relList;if(n&&n.supports&&n.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))c(o);new MutationObserver(o=>{for(const t of o)if(t.type==="childList")for(const l of t.addedNodes)l.tagName==="LINK"&&l.rel==="modulepreload"&&c(l)}).observe(document,{childList:!0,subtree:!0});function i(o){const t={};return o.integrity&&(t.integrity=o.integrity),o.referrerPolicy&&(t.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?t.credentials="include":o.crossOrigin==="anonymous"?t.credentials="omit":t.credentials="same-origin",t}function c(o){if(o.ep)return;o.ep=!0;const t=i(o);fetch(o.href,t)}})();const b="arize-phoenix-feature-flags",p={__CLEAR__:!0};function ce(){const r=localStorage.getItem(b);if(!r)return p;try{const n=JSON.parse(r);return Object.assign({},p,n)}catch{return p}}const f=d.createContext(null);function de(){const r=v.useContext(f);if(r===null)throw new Error("useFeatureFlags must be used within a FeatureFlagsProvider");return r}function pe(r){const[n,i]=d.useState(ce()),c=o=>{localStorage.setItem(b,JSON.stringify(o)),i(o)};return e(f.Provider,{value:{featureFlags:n,setFeatureFlags:c},children:e(me,{children:r.children})})}function me(r){const{children:n}=r,{featureFlags:i,setFeatureFlags:c}=de(),[o,t]=d.useState(!1);return F("ctrl+shift+f",()=>t(!0)),s(P,{children:[n,e(_,{type:"modal",isDismissable:!0,onDismiss:()=>t(!1),children:o&&e(C,{title:"Feature Flags",children:e(k,{height:"size-1000",padding:"size-100",children:Object.keys(i).map(l=>e($,{isSelected:i[l],onChange:y=>c({...i,[l]:y}),children:l},l))})})})]})}function ue(){return e(L,{styles:r=>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{b as E,a9 as Xn,v as s,j as e,w as F,aa as Ke,r as u,ab as Oe,$ as W,ac as Zn,y as he,z as ke,D as J,F as H,B as Vn,R as De,o as ll,ad as nn,ae as oe,af as an,ag as ir,E as Da,ah as zn,a7 as ae,a1 as Sn,a2 as U,ai as ue,aj as dn,ak as rr,al as ga,am as pa,an as ya,ao as En,ap as Se,aq as tl,n as il,a as sr,ar as or,as as dr,at as cr,au as ur,av as mr,c as gr,d as pr,aw as yr}from"./vendor-BMWfu6zp.js";import{R as Ce,u as Ie,a as Pe,T as Ca,P as rl,b as sl,M as za,c as Qa,d as Qn,D as fr,e as hr,f as z,g as ol,h as ge,i as la,j as vn,k as dl,l as Fn,m as Kn,n as cl,o as Me,p as Ae,C as ie,q as ta,r as je,s as Ia,t as On,E as ul,v as kr,w as br,L as ce,x as Sr,y as vr,F as Fr,z as Kr,A as ln,B as ve,S as xr,G as Tr,H as ml,I as Dr,J as Cr,K as Oa,N as Ir,O as Lr,Q as _r,U as Er,V as Rr,W as Ar,X as gl,Y as xn,Z as wr,_ as Pr,$ as Mr,a0 as Nr,a1 as $r,a2 as tn,a3 as La,a4 as pl,a5 as yn,a6 as xa,a7 as gn,a8 as Le,a9 as Vr,aa as zr,ab as be,ac as yl,ad as ia,ae as xe,af as _a,ag as sn,ah as Y,ai as jn,aj as Qr,ak as Ea,al as Ee,am as Re,an as na,ao as Ra,ap as fl,aq as Or,ar as jr,as as ye,at as we,au as qn,av as qr,aw as Bn,ax as ra,ay as hl,az as kl,aA as Br,aB as Hn,aC as Tn,aD as Ne,aE as Dn,aF as Cn,aG as Hr,aH as ja,aI as bl,aJ as Gr,aK as Wr,aL as Ur,aM as Yn,aN as Jr,aO as Xr,aP as Zr,aQ as Yr,aR as es,aS as ns,aT as as,aU as ls,aV as fn,aW as Xe,aX as ts,aY as Ze,aZ as is,a_ as sa,a$ as rs,b0 as Aa,b1 as ss}from"./components-Bhx3QVW0.js";import{C as Sl,D as fe,G as j,H as Ye,J as de,K as os,l as wa,M as Gn,P as on,I as w,e as A,N as qe,a as vl,c as le,p as In,q as Ln,t as te,h as x,n as Fl,O as $e,j as T,i as k,L as Pn,Q as Kl,f as V,S as B,s as ne,U as X,V as xl,W as Tl,X as ds,Y as cs,Z as Pa,_ as hn,v as Wn,T as Fe,d as pe,z as oa,r as kn,$ as Q,a0 as Dl,E as da,b as Mn,a1 as Ma,a2 as us,y as ca,u as ms,a3 as gs}from"./vendor-arizeai-Sj74jm5V.js";import{R as Be,C as Un,X as He,Y as Te,a as Ge,T as We,B as bn,A as Nn,b as Cl,c as Na,L as Il,d as ps,P as ys,e as fs,f as hs}from"./vendor-recharts-BGN0SxgJ.js";import{p as $a,R as ua,n as ma,j as ks,E as bs,k as Ss,b as vs}from"./vendor-codemirror-DO3VqEcD.js";const Ll=function(){var n=[{alias:null,args:null,concreteType:"Functionality",kind:"LinkedField",name:"functionality",plural:!1,selections:[{alias:null,args:null,kind:"ScalarField",name:"modelInferences",storageKey:null}],storageKey:null},{alias:null,args:null,concreteType:"ProjectConnection",kind:"LinkedField",name:"projects",plural:!1,selections:[{alias:null,args:null,concreteType:"ProjectEdge",kind:"LinkedField",name:"edges",plural:!0,selections:[{alias:"project",args:null,concreteType:"Project",kind:"LinkedField",name:"node",plural:!1,selections:[{alias:null,args:null,kind:"ScalarField",name:"id",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"endTime",storageKey:null}],storageKey:null}],storageKey:null}],storageKey:null}];return{fragment:{argumentDefinitions:[],kind:"Fragment",metadata:null,name:"homeLoaderQuery",selections:n,type:"Query",abstractKey:null},kind:"Request",operation:{argumentDefinitions:[],kind:"Operation",name:"homeLoaderQuery",selections:n},params:{cacheID:"6926e4e720b443f7b7252b60271944e6",id:null,metadata:{},name:"homeLoaderQuery",operationKind:"query",text:`query homeLoaderQuery {
1
+ import{b as E,a9 as Xn,v as s,j as e,w as F,aa as Ke,r as u,ab as Oe,$ as W,ac as Zn,y as he,z as ke,D as J,F as H,B as Vn,R as De,o as ll,ad as nn,ae as oe,af as an,ag as ir,E as Da,ah as zn,a7 as ae,a1 as Sn,a2 as U,ai as ue,aj as dn,ak as rr,al as ga,am as pa,an as ya,ao as En,ap as Se,aq as tl,n as il,a as sr,ar as or,as as dr,at as cr,au as ur,av as mr,c as gr,d as pr,aw as yr}from"./vendor-BMWfu6zp.js";import{R as Ce,u as Ie,a as Pe,T as Ca,P as rl,b as sl,M as za,c as Qa,d as Qn,D as fr,e as hr,f as z,g as ol,h as ge,i as la,j as vn,k as dl,l as Fn,m as Kn,n as cl,o as Me,p as Ae,C as ie,q as ta,r as je,s as Ia,t as On,E as ul,v as kr,w as br,L as ce,x as Sr,y as vr,F as Fr,z as Kr,A as ln,B as ve,S as xr,G as Tr,H as ml,I as Dr,J as Cr,K as Oa,N as Ir,O as Lr,Q as _r,U as Er,V as Rr,W as Ar,X as gl,Y as xn,Z as wr,_ as Pr,$ as Mr,a0 as Nr,a1 as $r,a2 as tn,a3 as La,a4 as pl,a5 as yn,a6 as xa,a7 as gn,a8 as Le,a9 as Vr,aa as zr,ab as be,ac as yl,ad as ia,ae as xe,af as _a,ag as sn,ah as Y,ai as jn,aj as Qr,ak as Ea,al as Ee,am as Re,an as na,ao as Ra,ap as fl,aq as Or,ar as jr,as as ye,at as we,au as qn,av as qr,aw as Bn,ax as ra,ay as hl,az as kl,aA as Br,aB as Hn,aC as Tn,aD as Ne,aE as Dn,aF as Cn,aG as Hr,aH as ja,aI as bl,aJ as Gr,aK as Wr,aL as Ur,aM as Yn,aN as Jr,aO as Xr,aP as Zr,aQ as Yr,aR as es,aS as ns,aT as as,aU as ls,aV as fn,aW as Xe,aX as ts,aY as Ze,aZ as is,a_ as sa,a$ as rs,b0 as Aa,b1 as ss}from"./components-BC3-LP_a.js";import{C as Sl,D as fe,G as j,H as Ye,J as de,K as os,l as wa,M as Gn,P as on,I as w,e as A,N as qe,a as vl,c as le,p as In,q as Ln,t as te,h as x,n as Fl,O as $e,j as T,i as k,L as Pn,Q as Kl,f as V,S as B,s as ne,U as X,V as xl,W as Tl,X as ds,Y as cs,Z as Pa,_ as hn,v as Wn,T as Fe,d as pe,z as oa,r as kn,$ as Q,a0 as Dl,E as da,b as Mn,a1 as Ma,a2 as us,y as ca,u as ms,a3 as gs}from"./vendor-arizeai-Sj74jm5V.js";import{R as Be,C as Un,X as He,Y as Te,a as Ge,T as We,B as bn,A as Nn,b as Cl,c as Na,L as Il,d as ps,P as ys,e as fs,f as hs}from"./vendor-recharts-BGN0SxgJ.js";import{p as $a,R as ua,n as ma,j as ks,E as bs,k as Ss,b as vs}from"./vendor-codemirror-DO3VqEcD.js";const Ll=function(){var n=[{alias:null,args:null,concreteType:"Functionality",kind:"LinkedField",name:"functionality",plural:!1,selections:[{alias:null,args:null,kind:"ScalarField",name:"modelInferences",storageKey:null}],storageKey:null},{alias:null,args:null,concreteType:"ProjectConnection",kind:"LinkedField",name:"projects",plural:!1,selections:[{alias:null,args:null,concreteType:"ProjectEdge",kind:"LinkedField",name:"edges",plural:!0,selections:[{alias:"project",args:null,concreteType:"Project",kind:"LinkedField",name:"node",plural:!1,selections:[{alias:null,args:null,kind:"ScalarField",name:"id",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"endTime",storageKey:null}],storageKey:null}],storageKey:null}],storageKey:null}];return{fragment:{argumentDefinitions:[],kind:"Fragment",metadata:null,name:"homeLoaderQuery",selections:n,type:"Query",abstractKey:null},kind:"Request",operation:{argumentDefinitions:[],kind:"Operation",name:"homeLoaderQuery",selections:n},params:{cacheID:"6926e4e720b443f7b7252b60271944e6",id:null,metadata:{},name:"homeLoaderQuery",operationKind:"query",text:`query homeLoaderQuery {
2
2
  functionality {
3
3
  modelInferences
4
4
  }
@@ -934,7 +934,7 @@ fragment DimensionSegmentsBarChart_dimension_3E0ZE6 on Dimension {
934
934
  id
935
935
  }
936
936
  }
937
- `}}}();ct.hash="5a662d77e69d2e9bb4eb2af4cad6b722";async function Iu(n){const{dimensionId:a}=n.params;return E.fetchQuery(Ce,ct,{id:a}).toPromise()}const ut=function(){var n={defaultValue:null,kind:"LocalArgument",name:"id"},a={defaultValue:null,kind:"LocalArgument",name:"traceId"},l=[{kind:"Variable",name:"id",variableName:"id"}],t={alias:null,args:null,kind:"ScalarField",name:"id",storageKey:null},i={alias:null,args:null,kind:"ScalarField",name:"name",storageKey:null},r={kind:"InlineFragment",selections:[{alias:null,args:[{kind:"Variable",name:"traceId",variableName:"traceId"}],concreteType:"Trace",kind:"LinkedField",name:"trace",plural:!1,selections:[{alias:null,args:[{kind:"Literal",name:"first",value:1e3}],concreteType:"SpanConnection",kind:"LinkedField",name:"spans",plural:!1,selections:[{alias:null,args:null,concreteType:"SpanEdge",kind:"LinkedField",name:"edges",plural:!0,selections:[{alias:"span",args:null,concreteType:"Span",kind:"LinkedField",name:"node",plural:!1,selections:[t,{alias:null,args:null,concreteType:"SpanContext",kind:"LinkedField",name:"context",plural:!1,selections:[{alias:null,args:null,kind:"ScalarField",name:"spanId",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"traceId",storageKey:null}],storageKey:null},i,{alias:null,args:null,kind:"ScalarField",name:"spanKind",storageKey:null},{alias:"statusCode",args:null,kind:"ScalarField",name:"propagatedStatusCode",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"startTime",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"parentId",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"latencyMs",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"tokenCountTotal",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"tokenCountPrompt",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"tokenCountCompletion",storageKey:null},{alias:null,args:null,concreteType:"SpanEvaluation",kind:"LinkedField",name:"spanEvaluations",plural:!0,selections:[i,{alias:null,args:null,kind:"ScalarField",name:"label",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"score",storageKey:null}],storageKey:null}],storageKey:null}],storageKey:null}],storageKey:"spans(first:1000)"}],storageKey:null}],type:"Project",abstractKey:null};return{fragment:{argumentDefinitions:[n,a],kind:"Fragment",metadata:null,name:"TraceDetailsQuery",selections:[{alias:"project",args:l,concreteType:null,kind:"LinkedField",name:"node",plural:!1,selections:[r],storageKey:null}],type:"Query",abstractKey:null},kind:"Request",operation:{argumentDefinitions:[a,n],kind:"Operation",name:"TraceDetailsQuery",selections:[{alias:"project",args:l,concreteType:null,kind:"LinkedField",name:"node",plural:!1,selections:[{alias:null,args:null,kind:"ScalarField",name:"__typename",storageKey:null},r,{kind:"TypeDiscriminator",abstractKey:"__isNode"},t],storageKey:null}]},params:{cacheID:"872e8d6e17fb1b6cf51bae98d6767208",id:null,metadata:{},name:"TraceDetailsQuery",operationKind:"query",text:`query TraceDetailsQuery(
937
+ `}}}();ct.hash="5a662d77e69d2e9bb4eb2af4cad6b722";async function Iu(n){const{dimensionId:a}=n.params;return E.fetchQuery(Ce,ct,{id:a}).toPromise()}const ut=function(){var n={defaultValue:null,kind:"LocalArgument",name:"id"},a={defaultValue:null,kind:"LocalArgument",name:"traceId"},l=[{kind:"Variable",name:"id",variableName:"id"}],t={alias:null,args:null,kind:"ScalarField",name:"id",storageKey:null},i={alias:null,args:null,kind:"ScalarField",name:"name",storageKey:null},r={kind:"InlineFragment",selections:[{alias:null,args:[{kind:"Variable",name:"traceId",variableName:"traceId"}],concreteType:"Trace",kind:"LinkedField",name:"trace",plural:!1,selections:[{alias:null,args:[{kind:"Literal",name:"first",value:1e3}],concreteType:"SpanConnection",kind:"LinkedField",name:"spans",plural:!1,selections:[{alias:null,args:null,concreteType:"SpanEdge",kind:"LinkedField",name:"edges",plural:!0,selections:[{alias:"span",args:null,concreteType:"Span",kind:"LinkedField",name:"node",plural:!1,selections:[t,{alias:null,args:null,concreteType:"SpanContext",kind:"LinkedField",name:"context",plural:!1,selections:[{alias:null,args:null,kind:"ScalarField",name:"spanId",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"traceId",storageKey:null}],storageKey:null},i,{alias:null,args:null,kind:"ScalarField",name:"spanKind",storageKey:null},{alias:"statusCode",args:null,kind:"ScalarField",name:"propagatedStatusCode",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"startTime",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"parentId",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"latencyMs",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"tokenCountTotal",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"tokenCountPrompt",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"tokenCountCompletion",storageKey:null},{alias:null,args:null,concreteType:"SpanAnnotation",kind:"LinkedField",name:"spanAnnotations",plural:!0,selections:[i,{alias:null,args:null,kind:"ScalarField",name:"label",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"score",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"annotatorKind",storageKey:null}],storageKey:null}],storageKey:null}],storageKey:null}],storageKey:"spans(first:1000)"}],storageKey:null}],type:"Project",abstractKey:null};return{fragment:{argumentDefinitions:[n,a],kind:"Fragment",metadata:null,name:"TraceDetailsQuery",selections:[{alias:"project",args:l,concreteType:null,kind:"LinkedField",name:"node",plural:!1,selections:[r],storageKey:null}],type:"Query",abstractKey:null},kind:"Request",operation:{argumentDefinitions:[a,n],kind:"Operation",name:"TraceDetailsQuery",selections:[{alias:"project",args:l,concreteType:null,kind:"LinkedField",name:"node",plural:!1,selections:[{alias:null,args:null,kind:"ScalarField",name:"__typename",storageKey:null},r,{kind:"TypeDiscriminator",abstractKey:"__isNode"},t],storageKey:null}]},params:{cacheID:"22103e9bb1f983529081ca93d60e76ef",id:null,metadata:{},name:"TraceDetailsQuery",operationKind:"query",text:`query TraceDetailsQuery(
938
938
  $traceId: ID!
939
939
  $id: GlobalID!
940
940
  ) {
@@ -959,10 +959,11 @@ fragment DimensionSegmentsBarChart_dimension_3E0ZE6 on Dimension {
959
959
  tokenCountTotal
960
960
  tokenCountPrompt
961
961
  tokenCountCompletion
962
- spanEvaluations {
962
+ spanAnnotations {
963
963
  name
964
964
  label
965
965
  score
966
+ annotatorKind
966
967
  }
967
968
  }
968
969
  }
@@ -973,7 +974,7 @@ fragment DimensionSegmentsBarChart_dimension_3E0ZE6 on Dimension {
973
974
  id
974
975
  }
975
976
  }
976
- `}}}();ut.hash="73a6eacf0bb44e37ed4963cb27883c51";const mt=function(){var n=[{defaultValue:null,kind:"LocalArgument",name:"spanId"}],a=[{kind:"Variable",name:"id",variableName:"spanId"}],l={alias:null,args:null,kind:"ScalarField",name:"__typename",storageKey:null},t={alias:null,args:null,kind:"ScalarField",name:"id",storageKey:null},i={alias:null,args:null,concreteType:"SpanContext",kind:"LinkedField",name:"context",plural:!1,selections:[{alias:null,args:null,kind:"ScalarField",name:"spanId",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"traceId",storageKey:null}],storageKey:null},r={alias:null,args:null,kind:"ScalarField",name:"name",storageKey:null},o={alias:null,args:null,kind:"ScalarField",name:"spanKind",storageKey:null},c={alias:"statusCode",args:null,kind:"ScalarField",name:"propagatedStatusCode",storageKey:null},d={alias:null,args:null,kind:"ScalarField",name:"statusMessage",storageKey:null},m={alias:null,args:null,kind:"ScalarField",name:"startTime",storageKey:null},p={alias:null,args:null,kind:"ScalarField",name:"parentId",storageKey:null},g={alias:null,args:null,kind:"ScalarField",name:"latencyMs",storageKey:null},f={alias:null,args:null,kind:"ScalarField",name:"tokenCountTotal",storageKey:null},y={alias:null,args:null,kind:"ScalarField",name:"tokenCountPrompt",storageKey:null},b={alias:null,args:null,kind:"ScalarField",name:"tokenCountCompletion",storageKey:null},S=[{alias:null,args:null,kind:"ScalarField",name:"value",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"mimeType",storageKey:null}],h={alias:null,args:null,concreteType:"SpanIOValue",kind:"LinkedField",name:"input",plural:!1,selections:S,storageKey:null},v={alias:null,args:null,concreteType:"SpanIOValue",kind:"LinkedField",name:"output",plural:!1,selections:S,storageKey:null},L={alias:null,args:null,kind:"ScalarField",name:"attributes",storageKey:null},I={alias:null,args:null,concreteType:"SpanEvent",kind:"LinkedField",name:"events",plural:!0,selections:[r,{alias:null,args:null,kind:"ScalarField",name:"message",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"timestamp",storageKey:null}],storageKey:null},C={alias:null,args:null,concreteType:"DocumentRetrievalMetrics",kind:"LinkedField",name:"documentRetrievalMetrics",plural:!0,selections:[{alias:null,args:null,kind:"ScalarField",name:"evaluationName",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"ndcg",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"precision",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"hit",storageKey:null}],storageKey:null},K={alias:null,args:null,kind:"ScalarField",name:"label",storageKey:null},D={alias:null,args:null,kind:"ScalarField",name:"score",storageKey:null},M={alias:null,args:null,kind:"ScalarField",name:"explanation",storageKey:null},R={alias:null,args:null,concreteType:"DocumentEvaluation",kind:"LinkedField",name:"documentEvaluations",plural:!0,selections:[{alias:null,args:null,kind:"ScalarField",name:"documentPosition",storageKey:null},r,K,D,M],storageKey:null};return{fragment:{argumentDefinitions:n,kind:"Fragment",metadata:null,name:"SpanDetailsQuery",selections:[{alias:"span",args:a,concreteType:null,kind:"LinkedField",name:"node",plural:!1,selections:[l,{kind:"InlineFragment",selections:[t,i,r,o,c,d,m,p,g,f,y,b,h,v,L,{kind:"RequiredField",field:I,action:"THROW",path:"span.events"},C,R,{alias:null,args:null,concreteType:"SpanAnnotation",kind:"LinkedField",name:"spanAnnotations",plural:!0,selections:[r],storageKey:null},{args:null,kind:"FragmentSpread",name:"SpanFeedback_annotations"},{args:null,kind:"FragmentSpread",name:"SpanAside_span"}],type:"Span",abstractKey:null}],storageKey:null}],type:"Query",abstractKey:null},kind:"Request",operation:{argumentDefinitions:n,kind:"Operation",name:"SpanDetailsQuery",selections:[{alias:"span",args:a,concreteType:null,kind:"LinkedField",name:"node",plural:!1,selections:[l,{kind:"TypeDiscriminator",abstractKey:"__isNode"},t,{kind:"InlineFragment",selections:[i,r,o,c,d,m,p,g,f,y,b,h,v,L,I,C,R,{alias:null,args:null,concreteType:"SpanAnnotation",kind:"LinkedField",name:"spanAnnotations",plural:!0,selections:[r,K,D,M,{alias:null,args:null,kind:"ScalarField",name:"annotatorKind",storageKey:null},t],storageKey:null},{alias:"code",args:null,kind:"ScalarField",name:"statusCode",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"endTime",storageKey:null}],type:"Span",abstractKey:null}],storageKey:null}]},params:{cacheID:"b1a80a0108c40baebf6e64b811ca0202",id:null,metadata:{},name:"SpanDetailsQuery",operationKind:"query",text:`query SpanDetailsQuery(
977
+ `}}}();ut.hash="8b568616f23f7d349cac5a31807463fb";const mt=function(){var n=[{defaultValue:null,kind:"LocalArgument",name:"spanId"}],a=[{kind:"Variable",name:"id",variableName:"spanId"}],l={alias:null,args:null,kind:"ScalarField",name:"__typename",storageKey:null},t={alias:null,args:null,kind:"ScalarField",name:"id",storageKey:null},i={alias:null,args:null,concreteType:"SpanContext",kind:"LinkedField",name:"context",plural:!1,selections:[{alias:null,args:null,kind:"ScalarField",name:"spanId",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"traceId",storageKey:null}],storageKey:null},r={alias:null,args:null,kind:"ScalarField",name:"name",storageKey:null},o={alias:null,args:null,kind:"ScalarField",name:"spanKind",storageKey:null},c={alias:"statusCode",args:null,kind:"ScalarField",name:"propagatedStatusCode",storageKey:null},d={alias:null,args:null,kind:"ScalarField",name:"statusMessage",storageKey:null},m={alias:null,args:null,kind:"ScalarField",name:"startTime",storageKey:null},p={alias:null,args:null,kind:"ScalarField",name:"parentId",storageKey:null},g={alias:null,args:null,kind:"ScalarField",name:"latencyMs",storageKey:null},f={alias:null,args:null,kind:"ScalarField",name:"tokenCountTotal",storageKey:null},y={alias:null,args:null,kind:"ScalarField",name:"tokenCountPrompt",storageKey:null},b={alias:null,args:null,kind:"ScalarField",name:"tokenCountCompletion",storageKey:null},S=[{alias:null,args:null,kind:"ScalarField",name:"value",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"mimeType",storageKey:null}],h={alias:null,args:null,concreteType:"SpanIOValue",kind:"LinkedField",name:"input",plural:!1,selections:S,storageKey:null},v={alias:null,args:null,concreteType:"SpanIOValue",kind:"LinkedField",name:"output",plural:!1,selections:S,storageKey:null},L={alias:null,args:null,kind:"ScalarField",name:"attributes",storageKey:null},I={alias:null,args:null,concreteType:"SpanEvent",kind:"LinkedField",name:"events",plural:!0,selections:[r,{alias:null,args:null,kind:"ScalarField",name:"message",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"timestamp",storageKey:null}],storageKey:null},C={alias:null,args:null,concreteType:"DocumentRetrievalMetrics",kind:"LinkedField",name:"documentRetrievalMetrics",plural:!0,selections:[{alias:null,args:null,kind:"ScalarField",name:"evaluationName",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"ndcg",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"precision",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"hit",storageKey:null}],storageKey:null},K={alias:null,args:null,kind:"ScalarField",name:"label",storageKey:null},D={alias:null,args:null,kind:"ScalarField",name:"score",storageKey:null},M={alias:null,args:null,kind:"ScalarField",name:"explanation",storageKey:null},R={alias:null,args:null,concreteType:"DocumentEvaluation",kind:"LinkedField",name:"documentEvaluations",plural:!0,selections:[{alias:null,args:null,kind:"ScalarField",name:"documentPosition",storageKey:null},r,K,D,M],storageKey:null};return{fragment:{argumentDefinitions:n,kind:"Fragment",metadata:null,name:"SpanDetailsQuery",selections:[{alias:"span",args:a,concreteType:null,kind:"LinkedField",name:"node",plural:!1,selections:[l,{kind:"InlineFragment",selections:[t,i,r,o,c,d,m,p,g,f,y,b,h,v,L,{kind:"RequiredField",field:I,action:"THROW",path:"span.events"},C,R,{alias:null,args:null,concreteType:"SpanAnnotation",kind:"LinkedField",name:"spanAnnotations",plural:!0,selections:[r],storageKey:null},{args:null,kind:"FragmentSpread",name:"SpanFeedback_annotations"},{args:null,kind:"FragmentSpread",name:"SpanAside_span"}],type:"Span",abstractKey:null}],storageKey:null}],type:"Query",abstractKey:null},kind:"Request",operation:{argumentDefinitions:n,kind:"Operation",name:"SpanDetailsQuery",selections:[{alias:"span",args:a,concreteType:null,kind:"LinkedField",name:"node",plural:!1,selections:[l,{kind:"TypeDiscriminator",abstractKey:"__isNode"},t,{kind:"InlineFragment",selections:[i,r,o,c,d,m,p,g,f,y,b,h,v,L,I,C,R,{alias:null,args:null,concreteType:"SpanAnnotation",kind:"LinkedField",name:"spanAnnotations",plural:!0,selections:[r,K,D,M,{alias:null,args:null,kind:"ScalarField",name:"annotatorKind",storageKey:null},t],storageKey:null},{alias:"code",args:null,kind:"ScalarField",name:"statusCode",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"endTime",storageKey:null}],type:"Span",abstractKey:null}],storageKey:null}]},params:{cacheID:"b1a80a0108c40baebf6e64b811ca0202",id:null,metadata:{},name:"SpanDetailsQuery",operationKind:"query",text:`query SpanDetailsQuery(
977
978
  $spanId: GlobalID!
978
979
  ) {
979
980
  span: node(id: $spanId) {
@@ -1456,7 +1457,7 @@ fragment DatasetPicker__datasets on Query {
1456
1457
  `,children:[e(Id,{rootSpan:m}),s(nn,{direction:"horizontal",autoSaveId:"trace-panel-group",css:F`
1457
1458
  flex: 1 1 auto;
1458
1459
  overflow: hidden;
1459
- `,children:[e(oe,{defaultSize:30,minSize:10,maxSize:70,children:e(_d,{children:e(qr,{spans:o,selectedSpanNodeId:d,onSpanClick:p=>{i(g=>(g.set(Ua,p.id),g),{replace:!0})}})})}),e(an,{css:xn}),e(oe,{children:e(Ld,{children:d?e(u.Suspense,{fallback:e(ce,{}),children:e(sd,{spanNodeId:d,projectId:l})}):null})})]})]})}function Id({rootSpan:n}){const{latencyMs:a,statusCode:l,spanEvaluations:t}=n??{latencyMs:null,statusCode:"UNSET",spanEvaluations:[]},i=t.length>0,r=yl(l);return e(T,{padding:"size-200",borderBottomWidth:"thin",borderBottomColor:"dark",children:s(k,{direction:"row",gap:"size-400",children:[s(k,{direction:"column",children:[e(x,{elementType:"h3",textSize:"medium",color:"text-700",children:"Trace Status"}),e(x,{textSize:"xlarge",children:s(k,{direction:"row",gap:"size-50",alignItems:"center",children:[e(ia,{statusCode:l}),e(x,{textSize:"xlarge",color:r,children:l})]})})]}),s(k,{direction:"column",children:[e(x,{elementType:"h3",textSize:"medium",color:"text-700",children:"Latency"}),e(x,{textSize:"xlarge",children:typeof a=="number"?e(xe,{latencyMs:a,textSize:"xlarge"}):"--"})]}),i?s(k,{direction:"column",gap:"size-50",children:[e(x,{elementType:"h3",textSize:"medium",color:"text-700",children:"Evaluations"}),e(k,{direction:"row",gap:"size-50",children:t.map(o=>{const c={...o,annotatorKind:"LLM"};return e(Bn,{annotation:c,children:e(sn,{annotation:c,annotationDisplayPreference:"label"})},o.name)})})]}):null]})})}function Ld({children:n}){return e("div",{"data-testid":"scrolling-tabs-wrapper",css:F`
1460
+ `,children:[e(oe,{defaultSize:30,minSize:10,maxSize:70,children:e(_d,{children:e(qr,{spans:o,selectedSpanNodeId:d,onSpanClick:p=>{i(g=>(g.set(Ua,p.id),g),{replace:!0})}})})}),e(an,{css:xn}),e(oe,{children:e(Ld,{children:d?e(u.Suspense,{fallback:e(ce,{}),children:e(sd,{spanNodeId:d,projectId:l})}):null})})]})]})}function Id({rootSpan:n}){const{latencyMs:a,statusCode:l,spanAnnotations:t}=n??{latencyMs:null,statusCode:"UNSET",spanAnnotations:[]},i=t.length>0,r=yl(l);return e(T,{padding:"size-200",borderBottomWidth:"thin",borderBottomColor:"dark",children:s(k,{direction:"row",gap:"size-400",children:[s(k,{direction:"column",children:[e(x,{elementType:"h3",textSize:"medium",color:"text-700",children:"Trace Status"}),e(x,{textSize:"xlarge",children:s(k,{direction:"row",gap:"size-50",alignItems:"center",children:[e(ia,{statusCode:l}),e(x,{textSize:"xlarge",color:r,children:l})]})})]}),s(k,{direction:"column",children:[e(x,{elementType:"h3",textSize:"medium",color:"text-700",children:"Latency"}),e(x,{textSize:"xlarge",children:typeof a=="number"?e(xe,{latencyMs:a,textSize:"xlarge"}):"--"})]}),i?s(k,{direction:"column",gap:"size-50",children:[e(x,{elementType:"h3",textSize:"medium",color:"text-700",children:"Feedback"}),e(k,{direction:"row",gap:"size-50",children:t.map(o=>e(Bn,{annotation:o,children:e(sn,{annotation:o,annotationDisplayPreference:"label"})},o.name))})]}):null]})})}function Ld({children:n}){return e("div",{"data-testid":"scrolling-tabs-wrapper",css:F`
1460
1461
  height: 100%;
1461
1462
  overflow: hidden;
1462
1463
  .ac-tabs {
phoenix/version.py CHANGED
@@ -1 +1 @@
1
- __version__ = "4.22.0"
1
+ __version__ = "4.22.1"
@@ -1,149 +0,0 @@
1
- from collections import defaultdict
2
- from datetime import datetime
3
- from typing import (
4
- Any,
5
- DefaultDict,
6
- List,
7
- Literal,
8
- Optional,
9
- Tuple,
10
- )
11
-
12
- import pandas as pd
13
- from aioitertools.itertools import groupby
14
- from cachetools import LFUCache, TTLCache
15
- from sqlalchemy import Select, func, or_, select
16
- from strawberry.dataloader import AbstractCache, DataLoader
17
- from typing_extensions import TypeAlias, assert_never
18
-
19
- from phoenix.db import models
20
- from phoenix.server.api.dataloaders.cache import TwoTierCache
21
- from phoenix.server.api.input_types.TimeRange import TimeRange
22
- from phoenix.server.api.types.EvaluationSummary import EvaluationSummary
23
- from phoenix.server.types import DbSessionFactory
24
- from phoenix.trace.dsl import SpanFilter
25
-
26
- Kind: TypeAlias = Literal["span", "trace"]
27
- ProjectRowId: TypeAlias = int
28
- TimeInterval: TypeAlias = Tuple[Optional[datetime], Optional[datetime]]
29
- FilterCondition: TypeAlias = Optional[str]
30
- EvalName: TypeAlias = str
31
-
32
- Segment: TypeAlias = Tuple[Kind, ProjectRowId, TimeInterval, FilterCondition]
33
- Param: TypeAlias = EvalName
34
-
35
- Key: TypeAlias = Tuple[Kind, ProjectRowId, Optional[TimeRange], FilterCondition, EvalName]
36
- Result: TypeAlias = Optional[EvaluationSummary]
37
- ResultPosition: TypeAlias = int
38
- DEFAULT_VALUE: Result = None
39
-
40
-
41
- def _cache_key_fn(key: Key) -> Tuple[Segment, Param]:
42
- kind, project_rowid, time_range, filter_condition, eval_name = key
43
- interval = (
44
- (time_range.start, time_range.end) if isinstance(time_range, TimeRange) else (None, None)
45
- )
46
- return (kind, project_rowid, interval, filter_condition), eval_name
47
-
48
-
49
- _Section: TypeAlias = Tuple[ProjectRowId, EvalName, Kind]
50
- _SubKey: TypeAlias = Tuple[TimeInterval, FilterCondition]
51
-
52
-
53
- class EvaluationSummaryCache(
54
- TwoTierCache[Key, Result, _Section, _SubKey],
55
- ):
56
- def __init__(self) -> None:
57
- super().__init__(
58
- # TTL=3600 (1-hour) because time intervals are always moving forward, but
59
- # interval endpoints are rounded down to the hour by the UI, so anything
60
- # older than an hour most likely won't be a cache-hit anyway.
61
- main_cache=TTLCache(maxsize=64 * 32 * 2, ttl=3600),
62
- sub_cache_factory=lambda: LFUCache(maxsize=2 * 2),
63
- )
64
-
65
- def invalidate_project(self, project_rowid: ProjectRowId) -> None:
66
- for section in self._cache.keys():
67
- if section[0] == project_rowid:
68
- del self._cache[section]
69
-
70
- def _cache_key(self, key: Key) -> Tuple[_Section, _SubKey]:
71
- (kind, project_rowid, interval, filter_condition), eval_name = _cache_key_fn(key)
72
- return (project_rowid, eval_name, kind), (interval, filter_condition)
73
-
74
-
75
- class EvaluationSummaryDataLoader(DataLoader[Key, Result]):
76
- def __init__(
77
- self,
78
- db: DbSessionFactory,
79
- cache_map: Optional[AbstractCache[Key, Result]] = None,
80
- ) -> None:
81
- super().__init__(
82
- load_fn=self._load_fn,
83
- cache_key_fn=_cache_key_fn,
84
- cache_map=cache_map,
85
- )
86
- self._db = db
87
-
88
- async def _load_fn(self, keys: List[Key]) -> List[Result]:
89
- results: List[Result] = [DEFAULT_VALUE] * len(keys)
90
- arguments: DefaultDict[
91
- Segment,
92
- DefaultDict[Param, List[ResultPosition]],
93
- ] = defaultdict(lambda: defaultdict(list))
94
- for position, key in enumerate(keys):
95
- segment, param = _cache_key_fn(key)
96
- arguments[segment][param].append(position)
97
- for segment, params in arguments.items():
98
- stmt = _get_stmt(segment, *params.keys())
99
- async with self._db() as session:
100
- data = await session.stream(stmt)
101
- async for eval_name, group in groupby(data, lambda row: row.name):
102
- summary = EvaluationSummary(pd.DataFrame(group))
103
- for position in params[eval_name]:
104
- results[position] = summary
105
- return results
106
-
107
-
108
- def _get_stmt(
109
- segment: Segment,
110
- *eval_names: Param,
111
- ) -> Select[Any]:
112
- kind, project_rowid, (start_time, end_time), filter_condition = segment
113
- stmt = select()
114
- if kind == "span":
115
- msa = models.SpanAnnotation
116
- name_column, label_column, score_column = msa.name, msa.label, msa.score
117
- annotator_kind_column = msa.annotator_kind
118
- time_column = models.Span.start_time
119
- stmt = stmt.join(models.Span).join_from(models.Span, models.Trace)
120
- if filter_condition:
121
- sf = SpanFilter(filter_condition)
122
- stmt = sf(stmt)
123
- elif kind == "trace":
124
- mta = models.TraceAnnotation
125
- name_column, label_column, score_column = mta.name, mta.label, mta.score
126
- annotator_kind_column = mta.annotator_kind
127
- time_column = models.Trace.start_time
128
- stmt = stmt.join(models.Trace)
129
- else:
130
- assert_never(kind)
131
- stmt = stmt.add_columns(
132
- name_column,
133
- label_column,
134
- func.count().label("record_count"),
135
- func.count(label_column).label("label_count"),
136
- func.count(score_column).label("score_count"),
137
- func.sum(score_column).label("score_sum"),
138
- )
139
- stmt = stmt.group_by(name_column, label_column)
140
- stmt = stmt.order_by(name_column, label_column)
141
- stmt = stmt.where(models.Trace.project_rowid == project_rowid)
142
- stmt = stmt.where(annotator_kind_column == "LLM")
143
- stmt = stmt.where(or_(score_column.is_not(None), label_column.is_not(None)))
144
- stmt = stmt.where(name_column.in_(eval_names))
145
- if start_time:
146
- stmt = stmt.where(start_time <= time_column)
147
- if end_time:
148
- stmt = stmt.where(time_column < end_time)
149
- return stmt
@@ -1,35 +0,0 @@
1
- from collections import defaultdict
2
- from typing import (
3
- DefaultDict,
4
- List,
5
- )
6
-
7
- from sqlalchemy import select
8
- from strawberry.dataloader import DataLoader
9
- from typing_extensions import TypeAlias
10
-
11
- from phoenix.db import models
12
- from phoenix.server.api.types.Evaluation import SpanEvaluation
13
- from phoenix.server.types import DbSessionFactory
14
-
15
- Key: TypeAlias = int
16
- Result: TypeAlias = List[SpanEvaluation]
17
-
18
-
19
- class SpanEvaluationsDataLoader(DataLoader[Key, Result]):
20
- def __init__(self, db: DbSessionFactory) -> None:
21
- super().__init__(load_fn=self._load_fn)
22
- self._db = db
23
-
24
- async def _load_fn(self, keys: List[Key]) -> List[Result]:
25
- span_evaluations_by_id: DefaultDict[Key, Result] = defaultdict(list)
26
- msa = models.SpanAnnotation
27
- async with self._db() as session:
28
- data = await session.stream_scalars(
29
- select(msa).where(msa.span_rowid.in_(keys)).where(msa.annotator_kind == "LLM")
30
- )
31
- async for span_evaluation in data:
32
- span_evaluations_by_id[span_evaluation.span_rowid].append(
33
- SpanEvaluation.from_sql_span_annotation(span_evaluation)
34
- )
35
- return [span_evaluations_by_id[key] for key in keys]
@@ -1,35 +0,0 @@
1
- from collections import defaultdict
2
- from typing import (
3
- DefaultDict,
4
- List,
5
- )
6
-
7
- from sqlalchemy import select
8
- from strawberry.dataloader import DataLoader
9
- from typing_extensions import TypeAlias
10
-
11
- from phoenix.db import models
12
- from phoenix.server.api.types.Evaluation import TraceEvaluation
13
- from phoenix.server.types import DbSessionFactory
14
-
15
- Key: TypeAlias = int
16
- Result: TypeAlias = List[TraceEvaluation]
17
-
18
-
19
- class TraceEvaluationsDataLoader(DataLoader[Key, Result]):
20
- def __init__(self, db: DbSessionFactory) -> None:
21
- super().__init__(load_fn=self._load_fn)
22
- self._db = db
23
-
24
- async def _load_fn(self, keys: List[Key]) -> List[Result]:
25
- trace_evaluations_by_id: DefaultDict[Key, Result] = defaultdict(list)
26
- mta = models.TraceAnnotation
27
- async with self._db() as session:
28
- data = await session.stream_scalars(
29
- select(mta).where(mta.trace_rowid.in_(keys)).where(mta.annotator_kind == "LLM")
30
- )
31
- async for trace_evaluation in data:
32
- trace_evaluations_by_id[trace_evaluation.trace_rowid].append(
33
- TraceEvaluation.from_sql_trace_annotation(trace_evaluation)
34
- )
35
- return [trace_evaluations_by_id[key] for key in keys]