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.
- {arize_phoenix-4.22.0.dist-info → arize_phoenix-4.23.0.dist-info}/METADATA +1 -1
- {arize_phoenix-4.22.0.dist-info → arize_phoenix-4.23.0.dist-info}/RECORD +30 -32
- phoenix/experiments/functions.py +4 -4
- phoenix/experiments/types.py +3 -3
- phoenix/server/api/context.py +0 -6
- phoenix/server/api/dataloaders/__init__.py +0 -9
- phoenix/server/api/mutations/dataset_mutations.py +52 -12
- phoenix/server/api/queries.py +30 -0
- phoenix/server/api/routers/v1/experiment_runs.py +7 -2
- phoenix/server/api/types/Evaluation.py +1 -26
- phoenix/server/api/types/Project.py +1 -60
- phoenix/server/api/types/Span.py +21 -11
- phoenix/server/api/types/User.py +13 -0
- phoenix/server/app.py +5 -11
- phoenix/server/dml_event_handler.py +0 -3
- phoenix/server/main.py +12 -0
- phoenix/server/static/.vite/manifest.json +31 -31
- phoenix/server/static/assets/{components-Bhx3QVW0.js → components-DBYPF96c.js} +48 -48
- phoenix/server/static/assets/index-DNxu4viw.js +100 -0
- phoenix/server/static/assets/{pages-DG-5zgoV.js → pages-BhOnrUmC.js} +229 -204
- phoenix/server/static/assets/{vendor-BMWfu6zp.js → vendor-CIqy43_9.js} +1 -1
- phoenix/server/static/assets/{vendor-arizeai-Sj74jm5V.js → vendor-arizeai-B1YgcWL8.js} +1 -1
- phoenix/server/static/assets/{vendor-codemirror-DO3VqEcD.js → vendor-codemirror-_bcwCA1C.js} +1 -1
- phoenix/server/static/assets/{vendor-recharts-BGN0SxgJ.js → vendor-recharts-C3pM_Wlg.js} +1 -1
- phoenix/server/templates/index.html +2 -1
- phoenix/session/session.py +1 -0
- phoenix/version.py +1 -1
- phoenix/server/api/dataloaders/evaluation_summaries.py +0 -149
- phoenix/server/api/dataloaders/span_evaluations.py +0 -35
- phoenix/server/api/dataloaders/trace_evaluations.py +0 -35
- phoenix/server/static/assets/index-CZg-95kd.js +0 -100
- {arize_phoenix-4.22.0.dist-info → arize_phoenix-4.23.0.dist-info}/WHEEL +0 -0
- {arize_phoenix-4.22.0.dist-info → arize_phoenix-4.23.0.dist-info}/licenses/IP_NOTICE +0 -0
- {arize_phoenix-4.22.0.dist-info → arize_phoenix-4.23.0.dist-info}/licenses/LICENSE +0 -0
|
@@ -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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
234
|
-
phoenix/server/static/assets/components-
|
|
235
|
-
phoenix/server/static/assets/index-
|
|
236
|
-
phoenix/server/static/assets/pages-
|
|
237
|
-
phoenix/server/static/assets/vendor-
|
|
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-
|
|
240
|
-
phoenix/server/static/assets/vendor-codemirror-
|
|
241
|
-
phoenix/server/static/assets/vendor-recharts-
|
|
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=
|
|
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=
|
|
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.
|
|
288
|
-
arize_phoenix-4.
|
|
289
|
-
arize_phoenix-4.
|
|
290
|
-
arize_phoenix-4.
|
|
291
|
-
arize_phoenix-4.
|
|
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,,
|
phoenix/experiments/functions.py
CHANGED
|
@@ -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 =
|
|
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,
|
phoenix/experiments/types.py
CHANGED
|
@@ -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["
|
|
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
|
|
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
|
|
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
|
|
phoenix/server/api/context.py
CHANGED
|
@@ -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 =
|
|
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
|
-
|
|
271
|
-
|
|
272
|
-
|
|
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
|
-
|
|
295
|
-
|
|
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:
|
|
339
|
+
DatasetExampleRevision.metadata_.key: {
|
|
340
|
+
**(example.metadata or {}),
|
|
341
|
+
"annotations": span_annotation,
|
|
342
|
+
},
|
|
303
343
|
DatasetExampleRevision.revision_kind.key: "CREATE",
|
|
304
344
|
}
|
|
305
|
-
|
|
306
|
-
|
|
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))
|
phoenix/server/api/queries.py
CHANGED
|
@@ -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
|
|
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
|
-
|
|
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,
|
|
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.
|
|
349
|
+
# valid_eval_names = await self.span_annotation_names()
|
|
409
350
|
try:
|
|
410
351
|
SpanFilter(
|
|
411
352
|
condition=condition,
|