arize-phoenix 4.22.0__py3-none-any.whl → 4.23.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


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

Files changed (34) hide show
  1. {arize_phoenix-4.22.0.dist-info → arize_phoenix-4.23.0.dist-info}/METADATA +1 -1
  2. {arize_phoenix-4.22.0.dist-info → arize_phoenix-4.23.0.dist-info}/RECORD +30 -32
  3. phoenix/experiments/functions.py +4 -4
  4. phoenix/experiments/types.py +3 -3
  5. phoenix/server/api/context.py +0 -6
  6. phoenix/server/api/dataloaders/__init__.py +0 -9
  7. phoenix/server/api/mutations/dataset_mutations.py +52 -12
  8. phoenix/server/api/queries.py +30 -0
  9. phoenix/server/api/routers/v1/experiment_runs.py +7 -2
  10. phoenix/server/api/types/Evaluation.py +1 -26
  11. phoenix/server/api/types/Project.py +1 -60
  12. phoenix/server/api/types/Span.py +21 -11
  13. phoenix/server/api/types/User.py +13 -0
  14. phoenix/server/app.py +5 -11
  15. phoenix/server/dml_event_handler.py +0 -3
  16. phoenix/server/main.py +12 -0
  17. phoenix/server/static/.vite/manifest.json +31 -31
  18. phoenix/server/static/assets/{components-Bhx3QVW0.js → components-DBYPF96c.js} +48 -48
  19. phoenix/server/static/assets/index-DNxu4viw.js +100 -0
  20. phoenix/server/static/assets/{pages-DG-5zgoV.js → pages-BhOnrUmC.js} +229 -204
  21. phoenix/server/static/assets/{vendor-BMWfu6zp.js → vendor-CIqy43_9.js} +1 -1
  22. phoenix/server/static/assets/{vendor-arizeai-Sj74jm5V.js → vendor-arizeai-B1YgcWL8.js} +1 -1
  23. phoenix/server/static/assets/{vendor-codemirror-DO3VqEcD.js → vendor-codemirror-_bcwCA1C.js} +1 -1
  24. phoenix/server/static/assets/{vendor-recharts-BGN0SxgJ.js → vendor-recharts-C3pM_Wlg.js} +1 -1
  25. phoenix/server/templates/index.html +2 -1
  26. phoenix/session/session.py +1 -0
  27. phoenix/version.py +1 -1
  28. phoenix/server/api/dataloaders/evaluation_summaries.py +0 -149
  29. phoenix/server/api/dataloaders/span_evaluations.py +0 -35
  30. phoenix/server/api/dataloaders/trace_evaluations.py +0 -35
  31. phoenix/server/static/assets/index-CZg-95kd.js +0 -100
  32. {arize_phoenix-4.22.0.dist-info → arize_phoenix-4.23.0.dist-info}/WHEEL +0 -0
  33. {arize_phoenix-4.22.0.dist-info → arize_phoenix-4.23.0.dist-info}/licenses/IP_NOTICE +0 -0
  34. {arize_phoenix-4.22.0.dist-info → arize_phoenix-4.23.0.dist-info}/licenses/LICENSE +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: arize-phoenix
3
- Version: 4.22.0
3
+ Version: 4.23.0
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=TTTHw1vEKS6ovQizZmeh57pUpbxus30U324Wg3Hwd6s,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,22 +68,22 @@ 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=A0IIC7ONjBlRWqfAjoCqfoVS0xcnPfWk3gmxphgAjcM,19674
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
- phoenix/server/main.py,sha256=dvjv3g8ANpkvSGCUN02S2Yse643Nlwrp_bj4iXBSVTE,11082
75
+ phoenix/server/main.py,sha256=xxG650qi2bIX6HCcfSiLd1QyImiBoWbsVJ55m21GyNg,11471
76
76
  phoenix/server/prometheus.py,sha256=j9DHB2fERuq_ZKmwVaqR-9wx5WcPPuU1Cm5Bhg5241Y,2996
77
77
  phoenix/server/telemetry.py,sha256=T_2OKrxNViAeaANlNspEekg_Y5uZIFWvKAnpz8Aoqvk,2762
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
- phoenix/server/api/queries.py,sha256=Nuw74Nh1XhDkLNV8hTO3WPPNeqcSlNhUF76r5HaytGc,20268
83
+ phoenix/server/api/queries.py,sha256=c5beyU1JUYZTFySg4KJv0x8rbGk2x_fnY-jUHruYv-U,21341
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
@@ -142,7 +139,7 @@ phoenix/server/api/input_types/TraceAnnotationSort.py,sha256=BzwiUnMh2VsgQYnhDlb
142
139
  phoenix/server/api/input_types/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
143
140
  phoenix/server/api/mutations/__init__.py,sha256=UKUAhD5NY-ZI7XONnRRkaHoFuuU3idmE4fk6Sjgy18M,776
144
141
  phoenix/server/api/mutations/auth.py,sha256=vPRFoj7J6PV6QeODewG4K0PhoOebS5AfMRpbi_wuhyQ,311
145
- phoenix/server/api/mutations/dataset_mutations.py,sha256=p3cqYCLb6zf_Dx8ju0R8FMLT5ZBW_ZQXDyP1iw1zA3E,25280
142
+ phoenix/server/api/mutations/dataset_mutations.py,sha256=0feBUW_07FEIx6uzepjxfRVhk5lAck0AkrqS1GVdoF4,27041
146
143
  phoenix/server/api/mutations/experiment_mutations.py,sha256=OXtLYdLA33RGy1MFctfv6ug2sODcDElhJph_J9vkIjk,3157
147
144
  phoenix/server/api/mutations/export_events_mutations.py,sha256=t_wYBxaqvBJYRoHslh3Bmoxmwlzoy0u8SsBKWIKN5hE,4028
148
145
  phoenix/server/api/mutations/project_mutations.py,sha256=MLm7I97lJ85hTuc1tq8sdYA8Ps5WKMV-bGqeeN-Ey90,2279
@@ -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,18 +199,19 @@ 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=NzO1khZQS9LRoY23RciUaxLUR9WJF5pcV-pv8cnQPJA,15053
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
215
212
  phoenix/server/api/types/TraceAnnotation.py,sha256=OW6A2zr1gomOuG0XQe55dk15XXX2DSM0DzatRbHWH5A,1256
216
213
  phoenix/server/api/types/UMAPPoints.py,sha256=5sOuruzM8saXa8C2XiyUfk2XPrkVGmhqKpclMYRw1dk,1656
214
+ phoenix/server/api/types/User.py,sha256=bq2bW7h-7zWoJduzAw9-uAH1-fxTN1Y3-cbW4kKIPhc,249
217
215
  phoenix/server/api/types/ValidationResult.py,sha256=pHwdYk4J7SJ5xhlWWHg_6qWkfk4rjOx-bSkGHvkDE3Q,142
218
216
  phoenix/server/api/types/VectorDriftMetricEnum.py,sha256=etiJM5ZjQuD-oE7sY-FbdIKY050jk3IU49IMwmfJbEc,188
219
217
  phoenix/server/api/types/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -230,23 +228,23 @@ phoenix/server/static/apple-touch-icon-76x76.png,sha256=CT_xT12I0u2i0WU8JzBZBuOQ
230
228
  phoenix/server/static/apple-touch-icon.png,sha256=fOfpjqGpWYbJ0eAurKsyoZP1EAs6ZVooBJ_SGk2ZkDs,3801
231
229
  phoenix/server/static/favicon.ico,sha256=bY0vvCKRftemZfPShwZtE93DiiQdaYaozkPGwNFr6H8,34494
232
230
  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
237
- phoenix/server/static/assets/vendor-BMWfu6zp.js,sha256=AAVTM5SjGUI_CmAWFUFmhpp5VDhvCD-MrEoh-pXXADY,1355423
231
+ phoenix/server/static/.vite/manifest.json,sha256=E4foEp6f2D90C8OLyqi729mCx3uwE_Ylkzv0cJqxOy0,1929
232
+ phoenix/server/static/assets/components-DBYPF96c.js,sha256=C5UB6W8UwlM5rP2BpvS1JXhXBXtSa3B39kYsF_u5ahE,187160
233
+ phoenix/server/static/assets/index-DNxu4viw.js,sha256=g-zFucEZZvso7zPns7fKmWq1-eYMktUep4tWW4sSzn0,7466
234
+ phoenix/server/static/assets/pages-BhOnrUmC.js,sha256=riUthPfmrbayRnoDakz47MmNrnUTVaaygrZXdkL-Q00,456974
235
+ phoenix/server/static/assets/vendor-CIqy43_9.js,sha256=YclKUblIZ8JB6hhl36BtG_7FEsrNYbgnsW0d0w6zIxk,1355423
238
236
  phoenix/server/static/assets/vendor-DxkFTwjz.css,sha256=nZrkr0u6NNElFGvpWHk9GTHeGoibCXCli1bE7mXZGZg,1816
239
- phoenix/server/static/assets/vendor-arizeai-Sj74jm5V.js,sha256=9lD4YeMt5WtyfrqIApcH9WFQxyJJUtth0syWabkzX-I,304008
240
- phoenix/server/static/assets/vendor-codemirror-DO3VqEcD.js,sha256=M7t6xd6WpgKes25OOeGyxT1MU1dDrEKdmUBHgy5zslw,503031
241
- phoenix/server/static/assets/vendor-recharts-BGN0SxgJ.js,sha256=L9LAYSjuf0GHh1_PQh9bF4l9euWCDVQcnQN1RgMDMBw,282859
237
+ phoenix/server/static/assets/vendor-arizeai-B1YgcWL8.js,sha256=b-Q3bHiEkWo29daqYevZItyECmgFu0LMjYgpbDK3mSc,304008
238
+ phoenix/server/static/assets/vendor-codemirror-_bcwCA1C.js,sha256=oqAOjM0IviW-Si9fscZsSTR3_aj2vdp8H6acoyIFzek,503031
239
+ phoenix/server/static/assets/vendor-recharts-C3pM_Wlg.js,sha256=gnMIx0IktJjLzrgDehKdRebp3EkFAGli_067pIMVXFY,282859
242
240
  phoenix/server/static/assets/vendor-three-DwGkEfCM.js,sha256=0D12ZgKzfKCTSdSTKJBFR2RZO_xxeMXrqDp0AszZqHY,620972
243
241
  phoenix/server/templates/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
244
- phoenix/server/templates/index.html,sha256=gVpjB8pCMiubdMh2DA9mTCtV5AVTXJH_9u5PmG2t7Vk,4238
242
+ phoenix/server/templates/index.html,sha256=dAm0IClgJUdT5AOmjZvtgMg8F_xGrRGv95SAkUyx_kg,4325
245
243
  phoenix/session/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
246
244
  phoenix/session/client.py,sha256=C-NpmDkcyGZHR0vv5gWtteUi01cIorjWnqie9WuZb9s,32663
247
245
  phoenix/session/data_extractor.py,sha256=gkEM3WWZAlWGMfRgQopAQlid4cSi6GNco-sdrGir0qc,2788
248
246
  phoenix/session/evaluation.py,sha256=aKeV8UVOyq3b7CYOwt3cWuLz0xzvMjX7vlEPILJ_fcs,5311
249
- phoenix/session/session.py,sha256=l10fiotlO1b-SFehcm8N3aVupdFUYYLiLSBrOCJO9as,26911
247
+ phoenix/session/session.py,sha256=LOdcO7_XMArUMnyRlikLMZq41jgZ0Vl_BxDEpYxF4UU,26953
250
248
  phoenix/trace/__init__.py,sha256=ujk_uYjM8gmm-YqnyXxF-kekfwid0bcaPMTtNNcaw6U,407
251
249
  phoenix/trace/attributes.py,sha256=B_OrzVaxZwFkrAFXZyicYoIti1UdUysURsvUS2GyW1U,12488
252
250
  phoenix/trace/errors.py,sha256=wB1z8qdPckngdfU-TORToekvg3344oNFAA83_hC2yFY,180
@@ -284,8 +282,8 @@ phoenix/utilities/logging.py,sha256=lDXd6EGaamBNcQxL4vP1au9-i_SXe0OraUDiJOcszSw,
284
282
  phoenix/utilities/project.py,sha256=8IJuMM4yUMoooPi37sictGj8Etu9rGmq6RFtc9848cQ,436
285
283
  phoenix/utilities/re.py,sha256=PDve_OLjRTM8yQQJHC8-n3HdIONi7aNils3ZKRZ5uBM,2045
286
284
  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,,
285
+ arize_phoenix-4.23.0.dist-info/METADATA,sha256=gHdCepPUbWpwWYNgkM1Tek-oR8i-JGP9x84pyTPsTCc,11902
286
+ arize_phoenix-4.23.0.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
287
+ arize_phoenix-4.23.0.dist-info/licenses/IP_NOTICE,sha256=JBqyyCYYxGDfzQ0TtsQgjts41IJoa-hiwDrBjCb9gHM,469
288
+ arize_phoenix-4.23.0.dist-info/licenses/LICENSE,sha256=HFkW9REuMOkvKRACuwLPT0hRydHb3zNg-fdFt94td18,3794
289
+ arize_phoenix-4.23.0.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
  )
@@ -230,7 +230,7 @@ class DatasetMutationMixin:
230
230
  ) -> DatasetMutationPayload:
231
231
  dataset_id = input.dataset_id
232
232
  # Extract the span rowids from the input examples if they exist
233
- span_ids = span_ids = [example.span_id for example in input.examples if example.span_id]
233
+ span_ids = [example.span_id for example in input.examples if example.span_id]
234
234
  span_rowids = {
235
235
  from_global_id_with_expected_type(global_id=span_id, expected_type_name=Span.__name__)
236
236
  for span_id in set(span_ids)
@@ -260,6 +260,8 @@ class DatasetMutationMixin:
260
260
  )
261
261
  .returning(models.DatasetVersion.id)
262
262
  )
263
+
264
+ # Fetch spans and span annotations
263
265
  spans = (
264
266
  await session.execute(
265
267
  select(models.Span.id)
@@ -267,9 +269,36 @@ class DatasetMutationMixin:
267
269
  .where(models.Span.id.in_(span_rowids))
268
270
  )
269
271
  ).all()
270
- # Just validate that the number of spans matches the number of span_ids
271
- # to ensure that the span_ids are valid
272
- assert len(spans) == len(span_rowids)
272
+
273
+ span_annotations = (
274
+ await session.execute(
275
+ select(
276
+ models.SpanAnnotation.span_rowid,
277
+ models.SpanAnnotation.name,
278
+ models.SpanAnnotation.label,
279
+ models.SpanAnnotation.score,
280
+ models.SpanAnnotation.explanation,
281
+ models.SpanAnnotation.metadata_,
282
+ models.SpanAnnotation.annotator_kind,
283
+ )
284
+ .select_from(models.SpanAnnotation)
285
+ .where(models.SpanAnnotation.span_rowid.in_(span_rowids))
286
+ )
287
+ ).all()
288
+
289
+ span_annotations_by_span: Dict[int, Dict[Any, Any]] = {span.id: {} for span in spans}
290
+ for annotation in span_annotations:
291
+ span_id = annotation.span_rowid
292
+ if span_id not in span_annotations_by_span:
293
+ span_annotations_by_span[span_id] = dict()
294
+ span_annotations_by_span[span_id][annotation.name] = {
295
+ "label": annotation.label,
296
+ "score": annotation.score,
297
+ "explanation": annotation.explanation,
298
+ "metadata": annotation.metadata_,
299
+ "annotator_kind": annotation.annotator_kind,
300
+ }
301
+
273
302
  DatasetExample = models.DatasetExample
274
303
  dataset_example_rowids = (
275
304
  await session.scalars(
@@ -291,21 +320,32 @@ class DatasetMutationMixin:
291
320
  assert len(dataset_example_rowids) == len(input.examples)
292
321
  assert all(map(lambda id: isinstance(id, int), dataset_example_rowids))
293
322
  DatasetExampleRevision = models.DatasetExampleRevision
294
- await session.execute(
295
- insert(DatasetExampleRevision),
296
- [
323
+
324
+ dataset_example_revisions = []
325
+ for dataset_example_rowid, example in zip(dataset_example_rowids, input.examples):
326
+ span_annotation = {}
327
+ if example.span_id:
328
+ span_id = from_global_id_with_expected_type(
329
+ global_id=example.span_id,
330
+ expected_type_name=Span.__name__,
331
+ )
332
+ span_annotation = span_annotations_by_span.get(span_id, {})
333
+ dataset_example_revisions.append(
297
334
  {
298
335
  DatasetExampleRevision.dataset_example_id.key: dataset_example_rowid,
299
336
  DatasetExampleRevision.dataset_version_id.key: dataset_version_rowid,
300
337
  DatasetExampleRevision.input.key: example.input,
301
338
  DatasetExampleRevision.output.key: example.output,
302
- DatasetExampleRevision.metadata_.key: example.metadata,
339
+ DatasetExampleRevision.metadata_.key: {
340
+ **(example.metadata or {}),
341
+ "annotations": span_annotation,
342
+ },
303
343
  DatasetExampleRevision.revision_kind.key: "CREATE",
304
344
  }
305
- for dataset_example_rowid, example in zip(
306
- dataset_example_rowids, input.examples
307
- )
308
- ],
345
+ )
346
+ await session.execute(
347
+ insert(DatasetExampleRevision),
348
+ dataset_example_revisions,
309
349
  )
310
350
  info.context.event_queue.put(DatasetInsertEvent((dataset.id,)))
311
351
  return DatasetMutationPayload(dataset=to_gql_dataset(dataset))
@@ -67,10 +67,40 @@ from phoenix.server.api.types.Project import Project
67
67
  from phoenix.server.api.types.SortDir import SortDir
68
68
  from phoenix.server.api.types.Span import Span, to_gql_span
69
69
  from phoenix.server.api.types.Trace import Trace
70
+ from phoenix.server.api.types.User import User
70
71
 
71
72
 
72
73
  @strawberry.type
73
74
  class Query:
75
+ @strawberry.field
76
+ async def users(
77
+ self,
78
+ info: Info[Context, None],
79
+ first: Optional[int] = 50,
80
+ last: Optional[int] = UNSET,
81
+ after: Optional[CursorString] = UNSET,
82
+ before: Optional[CursorString] = UNSET,
83
+ ) -> Connection[User]:
84
+ args = ConnectionArgs(
85
+ first=first,
86
+ after=after if isinstance(after, CursorString) else None,
87
+ last=last,
88
+ before=before if isinstance(before, CursorString) else None,
89
+ )
90
+ stmt = select(models.User).order_by(models.User.email)
91
+ async with info.context.db() as session:
92
+ users = await session.stream_scalars(stmt)
93
+ data = [
94
+ User(
95
+ id_attr=user.id,
96
+ email=user.email,
97
+ username=user.username,
98
+ created_at=user.created_at,
99
+ )
100
+ async for user in users
101
+ ]
102
+ return connection_from_list(data=data, args=args)
103
+
74
104
  @strawberry.field
75
105
  async def projects(
76
106
  self,
@@ -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,