arize-phoenix 12.0.0__py3-none-any.whl → 12.3.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 (44) hide show
  1. {arize_phoenix-12.0.0.dist-info → arize_phoenix-12.3.0.dist-info}/METADATA +1 -1
  2. {arize_phoenix-12.0.0.dist-info → arize_phoenix-12.3.0.dist-info}/RECORD +43 -38
  3. phoenix/db/insertion/document_annotation.py +1 -1
  4. phoenix/db/insertion/session_annotation.py +1 -1
  5. phoenix/db/insertion/span_annotation.py +1 -1
  6. phoenix/db/insertion/trace_annotation.py +1 -1
  7. phoenix/db/insertion/types.py +0 -4
  8. phoenix/db/models.py +22 -1
  9. phoenix/server/api/auth_messages.py +46 -0
  10. phoenix/server/api/context.py +2 -0
  11. phoenix/server/api/dataloaders/__init__.py +2 -0
  12. phoenix/server/api/dataloaders/dataset_labels.py +36 -0
  13. phoenix/server/api/helpers/playground_clients.py +1 -0
  14. phoenix/server/api/mutations/__init__.py +2 -0
  15. phoenix/server/api/mutations/dataset_label_mutations.py +291 -0
  16. phoenix/server/api/mutations/dataset_split_mutations.py +38 -2
  17. phoenix/server/api/queries.py +21 -0
  18. phoenix/server/api/routers/auth.py +5 -5
  19. phoenix/server/api/routers/oauth2.py +53 -51
  20. phoenix/server/api/types/Dataset.py +8 -0
  21. phoenix/server/api/types/DatasetExample.py +7 -0
  22. phoenix/server/api/types/DatasetLabel.py +23 -0
  23. phoenix/server/api/types/Prompt.py +18 -1
  24. phoenix/server/app.py +12 -12
  25. phoenix/server/cost_tracking/model_cost_manifest.json +54 -54
  26. phoenix/server/oauth2.py +2 -4
  27. phoenix/server/static/.vite/manifest.json +39 -39
  28. phoenix/server/static/assets/{components-Dl9SUw1U.js → components-Bs8eJEpU.js} +699 -378
  29. phoenix/server/static/assets/{index-CqQS0dTo.js → index-C6WEu5UP.js} +3 -3
  30. phoenix/server/static/assets/{pages-DKSjVA_E.js → pages-D-n2pkoG.js} +1149 -1142
  31. phoenix/server/static/assets/vendor-D2eEI-6h.js +914 -0
  32. phoenix/server/static/assets/{vendor-arizeai-D-lWOwIS.js → vendor-arizeai-kfOei7nf.js} +15 -24
  33. phoenix/server/static/assets/{vendor-codemirror-BRBpy3_z.js → vendor-codemirror-1bq_t1Ec.js} +3 -3
  34. phoenix/server/static/assets/{vendor-recharts--KdSwB3m.js → vendor-recharts-DQ4xfrf4.js} +1 -1
  35. phoenix/server/static/assets/{vendor-shiki-CvRzZnIo.js → vendor-shiki-GGmcIQxA.js} +1 -1
  36. phoenix/server/templates/index.html +1 -0
  37. phoenix/server/utils.py +74 -0
  38. phoenix/session/session.py +25 -5
  39. phoenix/version.py +1 -1
  40. phoenix/server/static/assets/vendor-CtbHQYl8.js +0 -903
  41. {arize_phoenix-12.0.0.dist-info → arize_phoenix-12.3.0.dist-info}/WHEEL +0 -0
  42. {arize_phoenix-12.0.0.dist-info → arize_phoenix-12.3.0.dist-info}/entry_points.txt +0 -0
  43. {arize_phoenix-12.0.0.dist-info → arize_phoenix-12.3.0.dist-info}/licenses/IP_NOTICE +0 -0
  44. {arize_phoenix-12.0.0.dist-info → arize_phoenix-12.3.0.dist-info}/licenses/LICENSE +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: arize-phoenix
3
- Version: 12.0.0
3
+ Version: 12.3.0
4
4
  Summary: AI Observability and Evaluation
5
5
  Project-URL: Documentation, https://arize.com/docs/phoenix/
6
6
  Project-URL: Issues, https://github.com/Arize-ai/phoenix/issues
@@ -6,7 +6,7 @@ phoenix/exceptions.py,sha256=n2L2KKuecrdflB9MsCdAYCiSEvGJptIsfRkXMoJle7A,169
6
6
  phoenix/py.typed,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
7
7
  phoenix/services.py,sha256=ngkyKGVatX3cO2WJdo2hKdaVKP-xJCMvqthvga6kJss,5196
8
8
  phoenix/settings.py,sha256=2kHfT3BNOVd4dAO1bq-syEQbHSG8oX2-7NhOwK2QREk,896
9
- phoenix/version.py,sha256=Gy8VK6zBfgQMYkQowFCRx7XbG69zqutC1k6zgQIZ1tU,23
9
+ phoenix/version.py,sha256=joovLOjrezzyo7EzpCd_GmtqwFzRWnqjgTP-wu-ic5w,23
10
10
  phoenix/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
11
  phoenix/core/embedding_dimension.py,sha256=zKGbcvwOXgLf-yrJBpQyKtd-LEOPRKHnUToyAU8Owis,87
12
12
  phoenix/core/model.py,sha256=qBFraOtmwCCnWJltKNP18DDG0mULXigytlFsa6YOz6k,4837
@@ -22,19 +22,19 @@ phoenix/db/enums.py,sha256=w3O5YuJEEzVTwVDZb8b2UUFhU8yK_GosF081VVrrno0,188
22
22
  phoenix/db/facilitator.py,sha256=4MW9ZQOHEJAeG8KUeiWbp-WBWrtIe5FWPohvGO8zqiE,20255
23
23
  phoenix/db/helpers.py,sha256=Inc3g_F7QtiTe-AW11j5EohUJVvDsHohyzIgObimjVI,21514
24
24
  phoenix/db/migrate.py,sha256=oUrXH8yEbcpL4eh09aSCuUiSrhFli0eT5D_j4ZmYChY,2797
25
- phoenix/db/models.py,sha256=lw9xLgxx9YJPhg9n1KMxQm9Ws7f4uNN9gXN9RCKozWo,70636
25
+ phoenix/db/models.py,sha256=ojmInqTNCm0GTv8sNXzUJBL7eBpcy-5NzqPeaZvlnpw,71269
26
26
  phoenix/db/pg_config.py,sha256=h6mB7qF7t4Zk6VGvAiyefHGVu74o-yJynaWzeE39k9Y,6001
27
27
  phoenix/db/insertion/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
28
28
  phoenix/db/insertion/constants.py,sha256=8wifm7X-1XvroZ__R2Gc96NsgLhTDn0zXl4lehlXtcA,70
29
29
  phoenix/db/insertion/dataset.py,sha256=rUKX2CHSjl8ZrRmiVraSithTNwgynFWjEXvx3QUHiY4,7441
30
- phoenix/db/insertion/document_annotation.py,sha256=Lo6pPEUNNBYFjN_PPKqX9aZdchyIOgX3wPZe7vPVwHA,6540
30
+ phoenix/db/insertion/document_annotation.py,sha256=jr-3IIFEUGrSqQW1xvdIi-LeMkOf0cDNkFQ9p3lSJBo,6544
31
31
  phoenix/db/insertion/evaluation.py,sha256=XIlDQMx9FFu_hO1TEao8_ScgKETw61AoeGezsmngXrY,6876
32
32
  phoenix/db/insertion/helpers.py,sha256=QDQFYjmAm1nZgDUCqtkJLP-f2ten0tRBWwvPS74mIuM,4136
33
- phoenix/db/insertion/session_annotation.py,sha256=ffnW2CnGJKOKvFQQKUo4ZuBSDjQiDha-u6A6Gmw58Tg,6114
33
+ phoenix/db/insertion/session_annotation.py,sha256=6933lu7Vuq-cqnjSU-VB3Nuw3rlngOOYoUbngj1RXcI,6118
34
34
  phoenix/db/insertion/span.py,sha256=UB4UR8QlkJdVzbJ7_-S6FXIHYjyKZSOEVzCOvwGw7cY,8414
35
- phoenix/db/insertion/span_annotation.py,sha256=WA9538nPNIgRucRkd2S1zCC2TUMlJPvgMm1cCnH50Y4,5724
36
- phoenix/db/insertion/trace_annotation.py,sha256=UKmAsSRd1mAwdGWu-i2aEGC3Yu16tqfbpzqMGtJnkVU,5764
37
- phoenix/db/insertion/types.py,sha256=0BKgpFfSHeiOjl5ulffV3bkbMcZygo2yzFKiTX4FONU,9646
35
+ phoenix/db/insertion/span_annotation.py,sha256=-rxUryjxd2eQRAMVQgY7h_owpVY5VtTUDFagD6winlc,5728
36
+ phoenix/db/insertion/trace_annotation.py,sha256=WZGNgtOuz1lbeJlckz_c7hz04ysq5FeeMqxLzlabJ9w,5768
37
+ phoenix/db/insertion/types.py,sha256=FkMa00l6Ra0aDsPiC_H1WjFykVQZ2sTFU0iyKXvpnUk,9530
38
38
  phoenix/db/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
39
39
  phoenix/db/migrations/env.py,sha256=tFO3ceuCx9Es5_2w_BXclaQMmNQKNX21b1UEV5mYdeo,3387
40
40
  phoenix/db/migrations/script.py.mako,sha256=MEqL-2qATlST9TAOeYgscMn1uy6HUS9NFvDgl93dMj8,635
@@ -102,7 +102,7 @@ phoenix/pointcloud/pointcloud.py,sha256=SN_1wXZcwKrtSnHGZLDZGx71orqE1WyVF7E-D58d
102
102
  phoenix/pointcloud/projectors.py,sha256=TQgwc9cJDjJkin1WZyZzgl3HsYrLLiyWD7Czy4jNW3U,1088
103
103
  phoenix/pointcloud/umap_parameters.py,sha256=db_WEPoamuWtopZx7tQfAXPnoE0MS8FkAV0_ThjEx_Q,1735
104
104
  phoenix/server/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
105
- phoenix/server/app.py,sha256=-Q7wHUj1ga88A2O34uO-Q1Tjar5ZRggzM2hBby4wMiY,50555
105
+ phoenix/server/app.py,sha256=Nkm7xwzed5H_ArLWiqn4Id5ERxB-k-1sJSsvvtWw4Pk,50868
106
106
  phoenix/server/authorization.py,sha256=OxROn7ibpKtCTrcgDkzWuNxVaQcSQ8MAx7zbjZiliK0,3201
107
107
  phoenix/server/bearer_auth.py,sha256=f4v4W94KyTdGGCPsK1tXOe0vouPuvanAEa03XSdCvPE,6650
108
108
  phoenix/server/dml_event.py,sha256=HgUsIkzyXxCGasjnrqubegWbNaAcAgjrtWrKc3aRwxA,3245
@@ -110,7 +110,7 @@ phoenix/server/dml_event_handler.py,sha256=71_iPcHiJ4E-8Z7sGL2j0vx_RpkmcMVEUFIBs
110
110
  phoenix/server/grpc_server.py,sha256=THDdkMKXQEC3gZjFG2nUgXHFbUnWsRHgFM9oh5WtAX0,4758
111
111
  phoenix/server/jwt_store.py,sha256=B6uVildN_dQDTG_-aHHvuVSI7wIVK1yvED-_y6se2GU,16905
112
112
  phoenix/server/main.py,sha256=UBwxrQIEE7ci-SbE6GAlRYmbMHooI6JYG6sG-UpBFFs,18905
113
- phoenix/server/oauth2.py,sha256=GvUqZBoZ5dG-l2G1RMl1SUcN10jNAjaMXFznMSWz2Zs,3336
113
+ phoenix/server/oauth2.py,sha256=l6jugh-lHq0h7h7TBzvk6oTrHKXe1aX9-j7UAat5Eac,3224
114
114
  phoenix/server/prometheus.py,sha256=ovh6Hrw2mLUC6KddGydT0_lv-yK0upV9mL-T9UjqlcE,9373
115
115
  phoenix/server/rate_limiters.py,sha256=cFc73D2NaxqNZZDbwfIDw4So-fRVOJPBtqxOZ8Qky_s,7155
116
116
  phoenix/server/retention.py,sha256=MQe1FWuc_NxhqgIq5q2hfFhWT8ddAmpppgI74xYEQ6c,3064
@@ -118,17 +118,19 @@ phoenix/server/session_filters.py,sha256=zEJHnF2sDCxjWti2eOz1Yx4r4-zS1rAzq0oUxzl
118
118
  phoenix/server/telemetry.py,sha256=4EluDDrhdDPxAjaW6lVSbi73xkB5XeUCZWOmZGdk0hg,2755
119
119
  phoenix/server/thread_server.py,sha256=W3U8aASh-vA01tvEnHfE9GpsOowINAATYt7ezjKSWvI,2088
120
120
  phoenix/server/types.py,sha256=j8erl9iRNaR8t0DCQG84-uDVbHy9Qnm7T2EuTtDNNsU,8013
121
+ phoenix/server/utils.py,sha256=zTgY07W9GOpAFvIIPVBfXAGQb6kwGla2lhj1VGTCeIU,3057
121
122
  phoenix/server/api/README.md,sha256=Pyq1PLPgTzXAswrfIhGXrjI3Skq8it2jTVnanT6Ba4Q,1162
122
123
  phoenix/server/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
123
124
  phoenix/server/api/auth.py,sha256=AyYhnZIbY9ALVjg2K6aC2UXSa3Pva5GVDBXyaZ3nD3o,2749
124
- phoenix/server/api/context.py,sha256=-H8pBYmd-gNEhagqgFLWxp4lN8TNKTNJrPLXgxQQMWs,10324
125
+ phoenix/server/api/auth_messages.py,sha256=15oqogBNS2BgJLLDecfXz62G9LdiOAEyzPv6jX9BxYE,1912
126
+ phoenix/server/api/context.py,sha256=rdjGb0Ce-XBFVF5lj-lA8VoyKmrrPpLdU_BKT0qhFyQ,10450
125
127
  phoenix/server/api/exceptions.py,sha256=9gB4nBRNX6k4_fsQZ12yxw6Tw53h_915l06DYK-qkPQ,1442
126
128
  phoenix/server/api/interceptor.py,sha256=ykDnoC_apUd-llVli3m1CW18kNSIgjz2qZ6m5JmPDu8,1294
127
- phoenix/server/api/queries.py,sha256=fFslR34BlAWNQwx0uDbzSQPsRfH1ribSX--qKeaJ0Rk,66444
129
+ phoenix/server/api/queries.py,sha256=eZ12poXJ08Pla-DIW8v5dS9gWKdIbS-WO0Df-iGbLOg,67341
128
130
  phoenix/server/api/schema.py,sha256=fcs36xQwFF_Qe41_5cWR8wYpDvOrnbcyTeo5WNMbDsA,1702
129
131
  phoenix/server/api/subscriptions.py,sha256=5J5_B6FUZav4UBzWETdcGNjClZa7-T1d7vxxeQCg63s,26167
130
132
  phoenix/server/api/utils.py,sha256=quCBRcusc6PUq9tJq7M8PgwFZp7nXgVAxtbw8feribY,833
131
- phoenix/server/api/dataloaders/__init__.py,sha256=nTdtgdhspQa-emKUKhaBrY1v9O5gefKDMWG6nHwAI7g,8046
133
+ phoenix/server/api/dataloaders/__init__.py,sha256=yDuF2Ci9ab8a-m3b4q-eVLXo9X3CaFX5SGgpZ35BGHk,8129
132
134
  phoenix/server/api/dataloaders/annotation_configs_by_project.py,sha256=_Nfiug9o01JimU3Z0LpZJ0uaMCjchXomyt_dYAxPFRY,1178
133
135
  phoenix/server/api/dataloaders/annotation_summaries.py,sha256=0b23-bucBKyL25RWb2QzCNJjQzrq403qMmHKUVD5W4M,14377
134
136
  phoenix/server/api/dataloaders/average_experiment_repeated_run_group_latency.py,sha256=BSNyrwuNadQ16-2g0nGixrB5LyDqlTLeM2bKikyIagY,1860
@@ -137,6 +139,7 @@ phoenix/server/api/dataloaders/dataset_example_revisions.py,sha256=MqRBkT3AE6b6A
137
139
  phoenix/server/api/dataloaders/dataset_example_spans.py,sha256=z_MFquqAcJ9wat7BBp7MVeJ9BYuu2EZEdaog52iWDno,1390
138
140
  phoenix/server/api/dataloaders/dataset_example_splits.py,sha256=u1XVZPvoB6qevuYN0kbKUnCFJsuvwBGsCZV8jfPAmwY,1524
139
141
  phoenix/server/api/dataloaders/dataset_examples_and_versions_by_experiment_run.py,sha256=uyq5-WkY_67pzRxX4eCpECjzykKNM6pCC3rjpboXbb8,1771
142
+ phoenix/server/api/dataloaders/dataset_labels.py,sha256=kCpKksIS1yXhkmkasGcVioNAtQ4rcI0o7IesNKXk-lw,1391
140
143
  phoenix/server/api/dataloaders/document_evaluation_summaries.py,sha256=9fdROnzp-mymggHwNvpRkCk93LUFxxLy55-j3HP_2HY,5565
141
144
  phoenix/server/api/dataloaders/document_evaluations.py,sha256=1bpBDydd-9YvhgkNoE5w-FGrjtnjUztcnjZTdMAazws,1072
142
145
  phoenix/server/api/dataloaders/document_retrieval_metrics.py,sha256=37EcAW7oYQuWYHMDHb0wcqbWj9lhSskvzDO7NJbT5Js,4136
@@ -196,7 +199,7 @@ phoenix/server/api/helpers/__init__.py,sha256=m2-xaSPqUiSs91k62JaRDjFNfl-1byxBfY
196
199
  phoenix/server/api/helpers/annotations.py,sha256=9gMXKpMTfWEChoSCnvdWYuyB0hlSnNOp-qUdar9Vono,262
197
200
  phoenix/server/api/helpers/dataset_helpers.py,sha256=3bdGBoUzqrtg-sr5p2wpQLOU6dhg_3TKFHNeJj8p0TU,9155
198
201
  phoenix/server/api/helpers/experiment_run_filters.py,sha256=DOnVwrmn39eAkk2mwuZP8kIcAnR5jrOgllEwWSjsw94,29893
199
- phoenix/server/api/helpers/playground_clients.py,sha256=IDjeU02X1gFrHmhV0j6BRNLOhOjRgSmRidF_acaaeg4,74885
202
+ phoenix/server/api/helpers/playground_clients.py,sha256=PWoW3hOPMrCMxSZfPBBIrF3-aFcq_XBp-D8YrCsmYvU,74914
200
203
  phoenix/server/api/helpers/playground_registry.py,sha256=n0v4-KnvZJxeaEwOla5qBbnOQjSWznKmMhZnh9ziJt0,2584
201
204
  phoenix/server/api/helpers/playground_spans.py,sha256=EDZ0NbkfOXAwGJvLqP2ARE5v6OTtKp9R-KU4AsvX_9U,17176
202
205
  phoenix/server/api/helpers/playground_users.py,sha256=s02cLyDrg_LsE_sWkzTixNZVWAl6LquL5hJltPuUE_Y,880
@@ -252,12 +255,13 @@ phoenix/server/api/input_types/TraceAnnotationSort.py,sha256=BzwiUnMh2VsgQYnhDlb
252
255
  phoenix/server/api/input_types/UpdateAnnotationInput.py,sha256=ZhWmu6eQ2jJ9_e99mN_eIe1yB2VG8k3quy6cTyBqDTo,1227
253
256
  phoenix/server/api/input_types/UserRoleInput.py,sha256=xxhFe0ITZOgRVEJbVem_W6F1Ip_H6xDENdQqMMx-kKE,129
254
257
  phoenix/server/api/input_types/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
255
- phoenix/server/api/mutations/__init__.py,sha256=3KI0vxDfMnh5fGgGNlaLMbXJmlj4ZZC0ejOmodlrvQM,2263
258
+ phoenix/server/api/mutations/__init__.py,sha256=83V5Ia8ijsajSLo_gzAuHXo4hgDlUGLIUrerxzKKVn8,2385
256
259
  phoenix/server/api/mutations/annotation_config_mutations.py,sha256=i7NsQhYICcQ-I-tnFjGtVAYc8WVmMBacmRaqHWJ25t4,15433
257
260
  phoenix/server/api/mutations/api_key_mutations.py,sha256=nfnRjALCaQMi_jIbEPW4G3Dn3tPnmZVU11tpBbBijGA,6242
258
261
  phoenix/server/api/mutations/chat_mutations.py,sha256=HoO1V_ZvJ_TRIPCftmwyVrD3AaIsznWczOTZB9euO2Q,25306
262
+ phoenix/server/api/mutations/dataset_label_mutations.py,sha256=nVw2IaycdscAX2CJ1Jk4icRNvu61hWvb1UeN0sgC9Tk,11582
259
263
  phoenix/server/api/mutations/dataset_mutations.py,sha256=D7LULYXnQeb7kep_b5SmSEGYxZXVt5U9gvOvwd0aI2E,28033
260
- phoenix/server/api/mutations/dataset_split_mutations.py,sha256=ICyLXUG172f6wY9PB-S-Tdqk1HJ3yLpSE2_b9CdbQqI,15995
264
+ phoenix/server/api/mutations/dataset_split_mutations.py,sha256=RgFy2i02az-ckGkQ89VljTVnGXsUmr5Hvv7j7QRebQI,17324
261
265
  phoenix/server/api/mutations/experiment_mutations.py,sha256=p3CoLAa8nFPa3D759Y2A7De_PVJNGOL98mA3HoZBrRQ,3188
262
266
  phoenix/server/api/mutations/export_events_mutations.py,sha256=xoDnVWC7eA_8wNQP0-oyiHojyUZ0EhVVSrsAnztetC0,3993
263
267
  phoenix/server/api/mutations/model_mutations.py,sha256=eh-QIKww3EDrDewS3NTWTqnE2bwLJJ5WgRFvSPRksZg,7199
@@ -275,9 +279,9 @@ phoenix/server/api/openapi/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJ
275
279
  phoenix/server/api/openapi/main.py,sha256=yKdzJYI4cxy_1mFcK4_7YObIcuRviBIfwNjB23RG14k,461
276
280
  phoenix/server/api/openapi/schema.py,sha256=WGmHWSIyJhtc5EIh_M3vlXU-EgHkFuTlyVofgS0kj1I,529
277
281
  phoenix/server/api/routers/__init__.py,sha256=YIzHsIFOOXuCRbDkMUHx-McrANFJK5UfUn6a4BNIzmo,277
278
- phoenix/server/api/routers/auth.py,sha256=PKGwWdw7O015KmjMY1mIxlvXeU7OrmqIPF5TWTOGmp4,11871
282
+ phoenix/server/api/routers/auth.py,sha256=hPkMmLgy9oV-V8WSlwemIbb3jiwXzzLZDW10GAfkY-o,11928
279
283
  phoenix/server/api/routers/embeddings.py,sha256=BpZGJee0pdL0W5Rp1L0b30dEtZTgJeVqXky8LgZ0ZXw,898
280
- phoenix/server/api/routers/oauth2.py,sha256=rPcKFvfijzBYLjfwbCNzCn0ihn4wGWh4xh6BRqg9Ay4,24524
284
+ phoenix/server/api/routers/oauth2.py,sha256=AwfWqTQyHpXdJ3BUTkIvsgUiALAlFbERPs1pyJOM3Lo,25313
281
285
  phoenix/server/api/routers/utils.py,sha256=M41BoH-fl37izhRuN2aX7lWm7jOC20A_3uClv9TVUUY,583
282
286
  phoenix/server/api/routers/v1/__init__.py,sha256=Ga6SjcX6X6Aw5VTvbiPOIXfzQS8lbVERY0BHdx5Dlks,2881
283
287
  phoenix/server/api/routers/v1/annotation_configs.py,sha256=xp5lJmKYlRsINCUrRD9-lTAElw2v4hdFndS5BWrxICA,16048
@@ -310,10 +314,11 @@ phoenix/server/api/types/CostBreakdown.py,sha256=yw9dlb0blGIB_dWNP8yEvDHJztHjpiV
310
314
  phoenix/server/api/types/CreateDatasetPayload.py,sha256=R-6zCmuD0f76RU9Giu78xwTHlASQs6Aq8yzvX1Kxc3g,140
311
315
  phoenix/server/api/types/CronExpression.py,sha256=R7oxuSSX_eTUHQWaoaSueQqWDmkkHr5dBKRN6q-6ROk,331
312
316
  phoenix/server/api/types/DataQualityMetric.py,sha256=Aieg3bHeBFaAf4mqeRcH1zT04sXAtQD8ATSHJt7FaBQ,1538
313
- phoenix/server/api/types/Dataset.py,sha256=OvCgbqqNF-bj0iaQldIeEfZiMjyXGFsozIIBsbJJwq4,12648
314
- phoenix/server/api/types/DatasetExample.py,sha256=-nADawYls4-kEuIESbblSWlGuGkfRzoCqIjORA3p38M,5470
317
+ phoenix/server/api/types/Dataset.py,sha256=zDmvMl3J2pIX4VwjX-PAek5jC1_jk7ME-p0wHXW3Des,12991
318
+ phoenix/server/api/types/DatasetExample.py,sha256=9xEdDVj8rNK3LOs98Ekm67sz56yfpjj9Vn9CXIndW74,5650
315
319
  phoenix/server/api/types/DatasetExampleRevision.py,sha256=c-jWR6dTguEZTm54IMlFr0Ic84I3nefyDnZb7nF5hnI,874
316
320
  phoenix/server/api/types/DatasetExperimentAnnotationSummary.py,sha256=EVXz6zfbdYsU5SZ6FUrAA_VQqQCnBE_mbKgmAmFoDLI,195
321
+ phoenix/server/api/types/DatasetLabel.py,sha256=nIiggJQEBygvLWIWUL-mUKoG_Et9iLHvbvU7-WNnWPU,510
317
322
  phoenix/server/api/types/DatasetSplit.py,sha256=FMdst-6WV4kGBzGr_GefX5vCYuKo-kFJWFJU5MNPIpk,862
318
323
  phoenix/server/api/types/DatasetValues.py,sha256=7VbCOLlzOXpZN80-zYF2UGuafRcPsZF-8WQNc0YsKFc,1119
319
324
  phoenix/server/api/types/DatasetVersion.py,sha256=NnDriqQUE20N_Jhyu3-IxHWJQE9wmdHEJIQAKyTVJpo,302
@@ -356,7 +361,7 @@ phoenix/server/api/types/Project.py,sha256=D6S4hgcSXD1V2brV1x-NImWfoTcU4u9BceIBX
356
361
  phoenix/server/api/types/ProjectSession.py,sha256=YvRqj9qXXY4FvYN9Nhie9qdHcNCEPz7SoBdflrbLGRk,9795
357
362
  phoenix/server/api/types/ProjectSessionAnnotation.py,sha256=yerdFlW_dhCxDeoyE-75n6I_k4uUWn0m3S4XSdplS6E,2102
358
363
  phoenix/server/api/types/ProjectTraceRetentionPolicy.py,sha256=tYy2kgalPDyuaYZr0VUHjH0YpXaiF_QOzg5yfaV_c7c,3782
359
- phoenix/server/api/types/Prompt.py,sha256=ad52KVQ1yJrAWXd3HdOKKHzyaUJqrp2mtFEe1QGEE4E,5455
364
+ phoenix/server/api/types/Prompt.py,sha256=UlZNllvXtH5J-zLS_OpvKusbhcN_4CKTIv-XN5rU0is,6266
360
365
  phoenix/server/api/types/PromptLabel.py,sha256=kREZ219VB1xJkvOI8W6aeXBJkQx5bOccNa7g7fbRTt0,570
361
366
  phoenix/server/api/types/PromptResponse.py,sha256=Q8HKtpp8GpUOcxPCzZpkkokidDd6u0aZOv_SuPZZd5Q,630
362
367
  phoenix/server/api/types/PromptVersion.py,sha256=hLPwOwj1h0gH4fqpLS-xwcC2TQYLCmvaCiEkyXvTS1g,5494
@@ -394,7 +399,7 @@ phoenix/server/cost_tracking/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NM
394
399
  phoenix/server/cost_tracking/cost_details_calculator.py,sha256=Tt0YcuLhgPuXKWJemWVmYQfG0xQUvH4VziIj6KcDnoA,8945
395
400
  phoenix/server/cost_tracking/cost_model_lookup.py,sha256=jhtVdnQBzrTUHeOGPWgOebk-Io5hpJ1vAgWOu8ojeJ4,6801
396
401
  phoenix/server/cost_tracking/helpers.py,sha256=Pk6ECjnYreTxrldtRwxnwFcxIPVsvDq_yAwDA_spkOc,2122
397
- phoenix/server/cost_tracking/model_cost_manifest.json,sha256=rS_jFEJijHH93LDnh3Zadmfwzr7GJAlcjvWZ0xR4He4,68561
402
+ phoenix/server/cost_tracking/model_cost_manifest.json,sha256=qPDorKVjL9O9OtBTcHUW38yq6WfGSw2lYjnDTAlbb6s,68581
398
403
  phoenix/server/cost_tracking/regex_specificity.py,sha256=9kqWuQ68C-hlwW25hr7BhFlRt5y2Nnpy0Ax3n9UN6Xk,11622
399
404
  phoenix/server/cost_tracking/token_cost_calculator.py,sha256=2JEZnvusx2-xbhp8krp9EarjWuyGH2KO4e-ZwJX-K0s,1598
400
405
  phoenix/server/daemons/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -423,24 +428,24 @@ phoenix/server/static/apple-touch-icon-76x76.png,sha256=CT_xT12I0u2i0WU8JzBZBuOQ
423
428
  phoenix/server/static/apple-touch-icon.png,sha256=fOfpjqGpWYbJ0eAurKsyoZP1EAs6ZVooBJ_SGk2ZkDs,3801
424
429
  phoenix/server/static/favicon.ico,sha256=bY0vvCKRftemZfPShwZtE93DiiQdaYaozkPGwNFr6H8,34494
425
430
  phoenix/server/static/modernizr.js,sha256=mvK-XtkNqjOral-QvzoqsyOMECXIMu5BQwSVN_wcU9c,2564
426
- phoenix/server/static/.vite/manifest.json,sha256=zwloCUkfRTnXio9xvzKKcqbotRPg029ZsJ8LUfFV56Y,2328
427
- phoenix/server/static/assets/components-Dl9SUw1U.js,sha256=DInXlFJoNa4bZM_hA5Uin8_FFDHxzi3Bn5sDwYdSHcs,695895
428
- phoenix/server/static/assets/index-CqQS0dTo.js,sha256=VbcHauWl1AENzfq641yRgJj7aw-Ta7wR6H2Bwq_H-IE,63435
429
- phoenix/server/static/assets/pages-DKSjVA_E.js,sha256=YaKoAKUduxdas-Layv4-Mq_o4Bfm2oQeqKUOce29vaI,1326719
431
+ phoenix/server/static/.vite/manifest.json,sha256=Pu8-OxoLf8RlAl-i0K8pAuKfVy6h7ZuOBJR9psD5frE,2328
432
+ phoenix/server/static/assets/components-Bs8eJEpU.js,sha256=ml92PuSdVdsbHS8q6c4sHSWJ9nBSjo1l1qvjzM6EVF4,723590
433
+ phoenix/server/static/assets/index-C6WEu5UP.js,sha256=mY6KSmhD7Okipz8iEqbzZpyFQG_fVUIpNfKiT8ND8OM,63680
434
+ phoenix/server/static/assets/pages-D-n2pkoG.js,sha256=rtkn8DSkEKuvyFlbSF6dUn_uGCVyUBZZh--yByZSEmI,1341008
430
435
  phoenix/server/static/assets/vendor-BGzfc4EU.css,sha256=Nx5Lmx-bqYR7nsO_O4kEBcrJ8cwknWjZ6seHN3_s4UQ,3171
431
- phoenix/server/static/assets/vendor-CtbHQYl8.js,sha256=MJ4w4myY71ohebq8jvWn54Q6GkrBexGLeRBb8_D_cJw,2591438
432
- phoenix/server/static/assets/vendor-arizeai-D-lWOwIS.js,sha256=1PoeAX4Edv-L3XN_x-sizwTvIbayp3iXJrEBWodMBq0,112652
433
- phoenix/server/static/assets/vendor-codemirror-BRBpy3_z.js,sha256=n9pXl3SPrB3ogNzES9taTQI6DrdPmC6fe5Yq1E9uXcI,413213
434
- phoenix/server/static/assets/vendor-recharts--KdSwB3m.js,sha256=pVfgxJG_bnXurl_gBfIbOBK3P-48XtIHe7K6wUF-VyQ,231654
435
- phoenix/server/static/assets/vendor-shiki-CvRzZnIo.js,sha256=UWSJ0Bu6nSdmqtIcb5ZgjDqb8zbSU0pfp6m0jtZHbiM,305160
436
+ phoenix/server/static/assets/vendor-D2eEI-6h.js,sha256=DcZ_ov-x3PP13qfDh2X0hhQTuuSnxoMnYVBW98YBo0Q,2709850
437
+ phoenix/server/static/assets/vendor-arizeai-kfOei7nf.js,sha256=AlUQvzFvgUY2d5qzujvi4N7VXbhmpcnrKAYk9Ilpzt4,107788
438
+ phoenix/server/static/assets/vendor-codemirror-1bq_t1Ec.js,sha256=cjHHniUz2eOaXgg3iPcyd3d8hRz_2z7tW_UTPiMyGiA,413211
439
+ phoenix/server/static/assets/vendor-recharts-DQ4xfrf4.js,sha256=tTNG6AAxOGuPbEnjQkr3EzR7COVhDnN37QJFV6BNQg8,231652
440
+ phoenix/server/static/assets/vendor-shiki-GGmcIQxA.js,sha256=U357g2RSPGwucCoww2yscGQcLyWIcP3EQxlkMgR9CJg,305160
436
441
  phoenix/server/static/assets/vendor-three-BLWp5bic.js,sha256=vfSCVXS20jA0Ceo_O0mDxYBcROinWMdPE6RR4JXmtec,620972
437
442
  phoenix/server/templates/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
438
- phoenix/server/templates/index.html,sha256=QAYh0TG5mg-GvDQUR09aD9ebl9Sfq0fYAcfIa5G7J6E,7148
443
+ phoenix/server/templates/index.html,sha256=_iKIyXEDDr5cTTnrUCjCd617U6Alc1k-IXtdKSt8g14,7215
439
444
  phoenix/session/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
440
445
  phoenix/session/client.py,sha256=bFw3RzSdCCQBDNDbgxgaao4kCsP9_YWXG1VQfJvNveA,38532
441
446
  phoenix/session/data_extractor.py,sha256=y_21QYW5emZ-SFYN9GtpUwDBMPCWtbRk3ZGxfR3k8K0,3178
442
447
  phoenix/session/evaluation.py,sha256=l0IMuAmqIqgr_Ye15VCr4Z-_e4g9OCT1XYwsdT7DuGQ,5528
443
- phoenix/session/session.py,sha256=iIC-Khgs3oQr9McsltInB6oD9hf7cZSqsBvGrrrXDls,28318
448
+ phoenix/session/session.py,sha256=SUQcBBA5H_pM1DXoKT6zfK_Fhlc9XCja-WwSfBUXnSI,29199
444
449
  phoenix/trace/__init__.py,sha256=ujk_uYjM8gmm-YqnyXxF-kekfwid0bcaPMTtNNcaw6U,407
445
450
  phoenix/trace/attributes.py,sha256=hyEKYZWPCP4NRmW7VmiC2voa3TH7FYKUBR9DYiVfXlw,12627
446
451
  phoenix/trace/errors.py,sha256=wB1z8qdPckngdfU-TORToekvg3344oNFAA83_hC2yFY,180
@@ -472,9 +477,9 @@ phoenix/utilities/project.py,sha256=auVpARXkDb-JgeX5f2aStyFIkeKvGwN9l7qrFeJMVxI,
472
477
  phoenix/utilities/re.py,sha256=6YyUWIkv0zc2SigsxfOWIHzdpjKA_TZo2iqKq7zJKvw,2081
473
478
  phoenix/utilities/span_store.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
474
479
  phoenix/utilities/template_formatters.py,sha256=gh9PJD6WEGw7TEYXfSst1UR4pWWwmjxMLrDVQ_CkpkQ,2779
475
- arize_phoenix-12.0.0.dist-info/METADATA,sha256=9riA1qKAB1k5kTBUYJmADDY6OZrCLAFw6qpTO_8CqUM,34045
476
- arize_phoenix-12.0.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
477
- arize_phoenix-12.0.0.dist-info/entry_points.txt,sha256=Pgpn8Upxx9P8z8joPXZWl2LlnAlGc3gcQoVchb06X1Q,94
478
- arize_phoenix-12.0.0.dist-info/licenses/IP_NOTICE,sha256=JBqyyCYYxGDfzQ0TtsQgjts41IJoa-hiwDrBjCb9gHM,469
479
- arize_phoenix-12.0.0.dist-info/licenses/LICENSE,sha256=HFkW9REuMOkvKRACuwLPT0hRydHb3zNg-fdFt94td18,3794
480
- arize_phoenix-12.0.0.dist-info/RECORD,,
480
+ arize_phoenix-12.3.0.dist-info/METADATA,sha256=NBdFfBR6OscGNJ7RHEM0IhHe2mnvNAie9rm_UlWvHmA,34045
481
+ arize_phoenix-12.3.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
482
+ arize_phoenix-12.3.0.dist-info/entry_points.txt,sha256=Pgpn8Upxx9P8z8joPXZWl2LlnAlGc3gcQoVchb06X1Q,94
483
+ arize_phoenix-12.3.0.dist-info/licenses/IP_NOTICE,sha256=JBqyyCYYxGDfzQ0TtsQgjts41IJoa-hiwDrBjCb9gHM,469
484
+ arize_phoenix-12.3.0.dist-info/licenses/LICENSE,sha256=HFkW9REuMOkvKRACuwLPT0hRydHb3zNg-fdFt94td18,3794
485
+ arize_phoenix-12.3.0.dist-info/RECORD,,
@@ -181,7 +181,7 @@ def _key(p: Received[Precursors.DocumentAnnotation]) -> _Key:
181
181
 
182
182
 
183
183
  def _unique_by(p: Received[Insertables.DocumentAnnotation]) -> _UniqueBy:
184
- return p.item.obj.name, p.item.span_rowid, p.item.document_position, p.item.identifier
184
+ return p.item.obj.name, p.item.span_rowid, p.item.document_position, p.item.obj.identifier
185
185
 
186
186
 
187
187
  def _time(p: Received[Any]) -> datetime:
@@ -169,7 +169,7 @@ def _key(p: Received[Precursors.SessionAnnotation]) -> _Key:
169
169
 
170
170
 
171
171
  def _unique_by(p: Received[Insertables.SessionAnnotation]) -> _UniqueBy:
172
- return p.item.obj.name, p.item.project_session_rowid, p.item.identifier
172
+ return p.item.obj.name, p.item.project_session_rowid, p.item.obj.identifier
173
173
 
174
174
 
175
175
  def _time(p: Received[Any]) -> datetime:
@@ -167,7 +167,7 @@ def _key(p: Received[Precursors.SpanAnnotation]) -> _Key:
167
167
 
168
168
 
169
169
  def _unique_by(p: Received[Insertables.SpanAnnotation]) -> _UniqueBy:
170
- return p.item.obj.name, p.item.span_rowid, p.item.identifier
170
+ return p.item.obj.name, p.item.span_rowid, p.item.obj.identifier
171
171
 
172
172
 
173
173
  def _time(p: Received[Any]) -> datetime:
@@ -166,7 +166,7 @@ def _key(p: Received[Precursors.TraceAnnotation]) -> _Key:
166
166
 
167
167
 
168
168
  def _unique_by(p: Received[Insertables.TraceAnnotation]) -> _UniqueBy:
169
- return p.item.obj.name, p.item.trace_rowid, p.item.identifier
169
+ return p.item.obj.name, p.item.trace_rowid, p.item.obj.identifier
170
170
 
171
171
 
172
172
  def _time(p: Received[Any]) -> datetime:
@@ -248,7 +248,6 @@ class Insertables(ABC):
248
248
  class SpanAnnotation(Precursors.SpanAnnotation):
249
249
  updated_at: datetime
250
250
  span_rowid: int
251
- identifier: str = ""
252
251
 
253
252
  @property
254
253
  def row(self) -> models.SpanAnnotation:
@@ -261,7 +260,6 @@ class Insertables(ABC):
261
260
  class TraceAnnotation(Precursors.TraceAnnotation):
262
261
  updated_at: datetime
263
262
  trace_rowid: int
264
- identifier: str = ""
265
263
 
266
264
  @property
267
265
  def row(self) -> models.TraceAnnotation:
@@ -274,7 +272,6 @@ class Insertables(ABC):
274
272
  class DocumentAnnotation(Precursors.DocumentAnnotation):
275
273
  updated_at: datetime
276
274
  span_rowid: int
277
- identifier: str = ""
278
275
 
279
276
  @property
280
277
  def row(self) -> models.DocumentAnnotation:
@@ -287,7 +284,6 @@ class Insertables(ABC):
287
284
  class SessionAnnotation(Precursors.SessionAnnotation):
288
285
  updated_at: datetime
289
286
  project_session_rowid: int
290
- identifier: str = ""
291
287
 
292
288
  @property
293
289
  def row(self) -> models.ProjectSessionAnnotation:
phoenix/db/models.py CHANGED
@@ -443,6 +443,27 @@ class _RegexStr(TypeDecorator[re.Pattern[str]]):
443
443
  return re.compile(value)
444
444
 
445
445
 
446
+ _HEX_COLOR_PATTERN = re.compile(r"^#([0-9a-f]{6})$")
447
+
448
+
449
+ class _HexColor(TypeDecorator[str]):
450
+ # See https://docs.sqlalchemy.org/en/20/core/custom_types.html
451
+ cache_ok = True
452
+ impl = String
453
+
454
+ def process_bind_param(self, value: Optional[str], _: Dialect) -> Optional[str]:
455
+ if value is None:
456
+ return None
457
+ if not _HEX_COLOR_PATTERN.match(value):
458
+ raise ValueError(f"Expected a hex color, got {value}")
459
+ return value
460
+
461
+ def process_result_value(self, value: Optional[str], _: Dialect) -> Optional[str]:
462
+ if value is None:
463
+ return None
464
+ return value
465
+
466
+
446
467
  class ExperimentRunOutput(TypedDict, total=False):
447
468
  task_output: Any
448
469
 
@@ -1125,7 +1146,7 @@ class DatasetLabel(HasId):
1125
1146
  __tablename__ = "dataset_labels"
1126
1147
  name: Mapped[str] = mapped_column(unique=True)
1127
1148
  description: Mapped[Optional[str]]
1128
- color: Mapped[str] = mapped_column(String, nullable=False)
1149
+ color: Mapped[str] = mapped_column(_HexColor, nullable=False)
1129
1150
  datasets_dataset_labels: Mapped[list["DatasetsDatasetLabel"]] = relationship(
1130
1151
  "DatasetsDatasetLabel", back_populates="dataset_label"
1131
1152
  )
@@ -0,0 +1,46 @@
1
+ # ruff: noqa: E501
2
+ """
3
+ Authentication error and success message codes.
4
+
5
+ These codes are used in authentication flows to safely communicate status
6
+ to users via query parameters. Using codes instead of raw messages prevents
7
+ social engineering and phishing attacks.
8
+
9
+ The messages are passed to the frontend via window.Config to ensure a single
10
+ source of truth between backend and frontend.
11
+ """
12
+
13
+ from types import MappingProxyType
14
+ from typing import Literal, Mapping, get_args
15
+
16
+ # Error code type - used for type hints in redirect functions
17
+ AuthErrorCode = Literal[
18
+ "unknown_idp",
19
+ "auth_failed",
20
+ "invalid_state",
21
+ "unsafe_return_url",
22
+ "oauth_error",
23
+ "no_oidc_support",
24
+ "missing_email_scope",
25
+ "email_in_use",
26
+ "sign_in_not_allowed",
27
+ ]
28
+
29
+ # Error messages - passed to frontend via window.Config.authErrorMessages
30
+ # Backend generates these codes when redirecting users after OAuth errors
31
+ AUTH_ERROR_MESSAGES: Mapping[AuthErrorCode, str] = MappingProxyType(
32
+ {
33
+ "unknown_idp": "Unknown identity provider.",
34
+ "auth_failed": "Authentication failed. Please contact your administrator.",
35
+ "invalid_state": "Invalid authentication state. Please try again.",
36
+ "unsafe_return_url": "Invalid return URL. Please try again.",
37
+ "oauth_error": "Authentication failed. Please try again.",
38
+ "no_oidc_support": "Your identity provider does not appear to support OpenID Connect. Please contact your administrator.",
39
+ "missing_email_scope": "Please ensure your identity provider is configured to use the 'email' scope.",
40
+ "email_in_use": "An account with this email already exists.",
41
+ "sign_in_not_allowed": "Sign in is not allowed. Please contact your administrator.",
42
+ }
43
+ )
44
+
45
+ # Runtime assertion to ensure AUTH_ERROR_MESSAGES keys match AuthErrorCode Literal values
46
+ assert set(AUTH_ERROR_MESSAGES.keys()) == set(get_args(AuthErrorCode))
@@ -76,6 +76,7 @@ from phoenix.server.api.dataloaders import (
76
76
  UserRolesDataLoader,
77
77
  UsersDataLoader,
78
78
  )
79
+ from phoenix.server.api.dataloaders.dataset_labels import DatasetLabelsDataLoader
79
80
  from phoenix.server.bearer_auth import PhoenixUser
80
81
  from phoenix.server.daemons.span_cost_calculator import SpanCostCalculator
81
82
  from phoenix.server.dml_event import DmlEvent
@@ -99,6 +100,7 @@ class DataLoaders:
99
100
  average_experiment_run_latency: AverageExperimentRunLatencyDataLoader
100
101
  dataset_example_revisions: DatasetExampleRevisionsDataLoader
101
102
  dataset_example_spans: DatasetExampleSpansDataLoader
103
+ dataset_labels: DatasetLabelsDataLoader
102
104
  dataset_examples_and_versions_by_experiment_run: (
103
105
  DatasetExamplesAndVersionsByExperimentRunDataLoader
104
106
  )
@@ -16,6 +16,7 @@ from .dataset_example_splits import DatasetExampleSplitsDataLoader
16
16
  from .dataset_examples_and_versions_by_experiment_run import (
17
17
  DatasetExamplesAndVersionsByExperimentRunDataLoader,
18
18
  )
19
+ from .dataset_labels import DatasetLabelsDataLoader
19
20
  from .document_evaluation_summaries import (
20
21
  DocumentEvaluationSummaryCache,
21
22
  DocumentEvaluationSummaryDataLoader,
@@ -87,6 +88,7 @@ __all__ = [
87
88
  "DatasetExampleSpansDataLoader",
88
89
  "DatasetExamplesAndVersionsByExperimentRunDataLoader",
89
90
  "DatasetExampleSplitsDataLoader",
91
+ "DatasetLabelsDataLoader",
90
92
  "DocumentEvaluationSummaryDataLoader",
91
93
  "DocumentEvaluationsDataLoader",
92
94
  "DocumentRetrievalMetricsDataLoader",
@@ -0,0 +1,36 @@
1
+ from sqlalchemy import select
2
+ from strawberry.dataloader import DataLoader
3
+ from typing_extensions import TypeAlias
4
+
5
+ from phoenix.db import models
6
+ from phoenix.server.types import DbSessionFactory
7
+
8
+ DatasetID: TypeAlias = int
9
+ Key: TypeAlias = DatasetID
10
+ Result: TypeAlias = list[models.DatasetLabel]
11
+
12
+
13
+ class DatasetLabelsDataLoader(DataLoader[Key, Result]):
14
+ def __init__(self, db: DbSessionFactory) -> None:
15
+ super().__init__(load_fn=self._load_fn)
16
+ self._db = db
17
+
18
+ async def _load_fn(self, keys: list[Key]) -> list[Result]:
19
+ dataset_ids = keys
20
+ async with self._db() as session:
21
+ labels: dict[Key, Result] = {}
22
+ for dataset_id, label in await session.execute(
23
+ select(models.DatasetsDatasetLabel.dataset_id, models.DatasetLabel)
24
+ .select_from(models.DatasetLabel)
25
+ .join(
26
+ models.DatasetsDatasetLabel,
27
+ models.DatasetLabel.id == models.DatasetsDatasetLabel.dataset_label_id,
28
+ )
29
+ .where(models.DatasetsDatasetLabel.dataset_id.in_(dataset_ids))
30
+ ):
31
+ if dataset_id not in labels:
32
+ labels[dataset_id] = []
33
+ labels[dataset_id].append(label)
34
+ return [
35
+ sorted(labels.get(dataset_id, []), key=lambda label: label.name) for dataset_id in keys
36
+ ]
@@ -1677,6 +1677,7 @@ class AnthropicStreamingClient(PlaygroundStreamingClient):
1677
1677
  @register_llm_client(
1678
1678
  provider_key=GenerativeProviderKey.ANTHROPIC,
1679
1679
  model_names=[
1680
+ "claude-sonnet-4-5",
1680
1681
  "claude-sonnet-4-0",
1681
1682
  "claude-sonnet-4-20250514",
1682
1683
  "claude-opus-4-1",
@@ -5,6 +5,7 @@ from phoenix.server.api.mutations.api_key_mutations import ApiKeyMutationMixin
5
5
  from phoenix.server.api.mutations.chat_mutations import (
6
6
  ChatCompletionMutationMixin,
7
7
  )
8
+ from phoenix.server.api.mutations.dataset_label_mutations import DatasetLabelMutationMixin
8
9
  from phoenix.server.api.mutations.dataset_mutations import DatasetMutationMixin
9
10
  from phoenix.server.api.mutations.dataset_split_mutations import DatasetSplitMutationMixin
10
11
  from phoenix.server.api.mutations.experiment_mutations import ExperimentMutationMixin
@@ -31,6 +32,7 @@ class Mutation(
31
32
  AnnotationConfigMutationMixin,
32
33
  ApiKeyMutationMixin,
33
34
  ChatCompletionMutationMixin,
35
+ DatasetLabelMutationMixin,
34
36
  DatasetMutationMixin,
35
37
  DatasetSplitMutationMixin,
36
38
  ExperimentMutationMixin,