arize-phoenix 4.14.1__py3-none-any.whl → 4.15.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 (72) hide show
  1. {arize_phoenix-4.14.1.dist-info → arize_phoenix-4.15.0.dist-info}/METADATA +4 -3
  2. {arize_phoenix-4.14.1.dist-info → arize_phoenix-4.15.0.dist-info}/RECORD +69 -66
  3. phoenix/db/bulk_inserter.py +2 -3
  4. phoenix/db/engines.py +2 -1
  5. phoenix/experiments/functions.py +3 -2
  6. phoenix/server/api/context.py +7 -9
  7. phoenix/server/api/dataloaders/__init__.py +2 -0
  8. phoenix/server/api/dataloaders/average_experiment_run_latency.py +3 -3
  9. phoenix/server/api/dataloaders/dataset_example_revisions.py +2 -4
  10. phoenix/server/api/dataloaders/dataset_example_spans.py +2 -4
  11. phoenix/server/api/dataloaders/document_evaluation_summaries.py +2 -4
  12. phoenix/server/api/dataloaders/document_evaluations.py +2 -4
  13. phoenix/server/api/dataloaders/document_retrieval_metrics.py +2 -4
  14. phoenix/server/api/dataloaders/evaluation_summaries.py +2 -4
  15. phoenix/server/api/dataloaders/experiment_annotation_summaries.py +2 -4
  16. phoenix/server/api/dataloaders/experiment_error_rates.py +2 -4
  17. phoenix/server/api/dataloaders/experiment_run_counts.py +2 -4
  18. phoenix/server/api/dataloaders/experiment_sequence_number.py +2 -4
  19. phoenix/server/api/dataloaders/latency_ms_quantile.py +2 -3
  20. phoenix/server/api/dataloaders/min_start_or_max_end_times.py +2 -4
  21. phoenix/server/api/dataloaders/project_by_name.py +3 -3
  22. phoenix/server/api/dataloaders/record_counts.py +2 -4
  23. phoenix/server/api/dataloaders/span_annotations.py +2 -4
  24. phoenix/server/api/dataloaders/span_dataset_examples.py +36 -0
  25. phoenix/server/api/dataloaders/span_descendants.py +2 -4
  26. phoenix/server/api/dataloaders/span_evaluations.py +2 -4
  27. phoenix/server/api/dataloaders/span_projects.py +3 -3
  28. phoenix/server/api/dataloaders/token_counts.py +2 -4
  29. phoenix/server/api/dataloaders/trace_evaluations.py +2 -4
  30. phoenix/server/api/dataloaders/trace_row_ids.py +2 -4
  31. phoenix/server/api/mutations/span_annotations_mutations.py +8 -3
  32. phoenix/server/api/mutations/trace_annotations_mutations.py +8 -3
  33. phoenix/server/api/openapi/main.py +18 -2
  34. phoenix/server/api/openapi/schema.py +12 -12
  35. phoenix/server/api/routers/v1/__init__.py +36 -83
  36. phoenix/server/api/routers/v1/datasets.py +515 -509
  37. phoenix/server/api/routers/v1/evaluations.py +75 -70
  38. phoenix/server/api/routers/v1/experiment_evaluations.py +68 -91
  39. phoenix/server/api/routers/v1/experiment_runs.py +98 -155
  40. phoenix/server/api/routers/v1/experiments.py +132 -181
  41. phoenix/server/api/routers/v1/pydantic_compat.py +78 -0
  42. phoenix/server/api/routers/v1/spans.py +144 -173
  43. phoenix/server/api/routers/v1/traces.py +115 -128
  44. phoenix/server/api/routers/v1/utils.py +95 -0
  45. phoenix/server/api/types/Span.py +5 -0
  46. phoenix/server/api/utils.py +4 -4
  47. phoenix/server/app.py +170 -192
  48. phoenix/server/grpc_server.py +2 -2
  49. phoenix/server/main.py +5 -9
  50. phoenix/server/static/.vite/manifest.json +31 -31
  51. phoenix/server/static/assets/{components-DeS0YEmv.js → components-kGgeFkHp.js} +150 -110
  52. phoenix/server/static/assets/{index-CQgXRwU0.js → index-BctFO6S7.js} +2 -2
  53. phoenix/server/static/assets/{pages-hdjlFZhO.js → pages-DabDCmVd.js} +372 -272
  54. phoenix/server/static/assets/{vendor-DPvSDRn3.js → vendor-CP0b0YG0.js} +2 -2
  55. phoenix/server/static/assets/{vendor-arizeai-CkvPT67c.js → vendor-arizeai-B5Hti8OB.js} +27 -27
  56. phoenix/server/static/assets/vendor-codemirror-DtdPDzrv.js +15 -0
  57. phoenix/server/static/assets/{vendor-recharts-5jlNaZuF.js → vendor-recharts-A0DA1O99.js} +1 -1
  58. phoenix/server/thread_server.py +2 -2
  59. phoenix/server/types.py +18 -0
  60. phoenix/session/client.py +5 -3
  61. phoenix/session/session.py +2 -2
  62. phoenix/trace/fixtures.py +17 -23
  63. phoenix/trace/utils.py +23 -0
  64. phoenix/utilities/client.py +116 -0
  65. phoenix/utilities/project.py +1 -1
  66. phoenix/version.py +1 -1
  67. phoenix/server/api/routers/v1/dataset_examples.py +0 -178
  68. phoenix/server/openapi/docs.py +0 -221
  69. phoenix/server/static/assets/vendor-codemirror-Cqwpwlua.js +0 -12
  70. {arize_phoenix-4.14.1.dist-info → arize_phoenix-4.15.0.dist-info}/WHEEL +0 -0
  71. {arize_phoenix-4.14.1.dist-info → arize_phoenix-4.15.0.dist-info}/licenses/IP_NOTICE +0 -0
  72. {arize_phoenix-4.14.1.dist-info → arize_phoenix-4.15.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.14.1
3
+ Version: 4.15.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
@@ -22,6 +22,7 @@ Requires-Dist: aiosqlite
22
22
  Requires-Dist: alembic<2,>=1.3.0
23
23
  Requires-Dist: arize-phoenix-evals>=0.13.1
24
24
  Requires-Dist: cachetools
25
+ Requires-Dist: fastapi
25
26
  Requires-Dist: grpcio
26
27
  Requires-Dist: hdbscan>=0.8.33
27
28
  Requires-Dist: httpx
@@ -40,8 +41,8 @@ Requires-Dist: pandas>=1.0
40
41
  Requires-Dist: protobuf<6.0,>=3.20
41
42
  Requires-Dist: psutil
42
43
  Requires-Dist: pyarrow
44
+ Requires-Dist: pydantic!=2.0.*,<3,>=1.0
43
45
  Requires-Dist: python-multipart
44
- Requires-Dist: pyyaml
45
46
  Requires-Dist: scikit-learn
46
47
  Requires-Dist: scipy
47
48
  Requires-Dist: sqlalchemy[asyncio]<3,>=2.0.4
@@ -56,9 +57,9 @@ Requires-Dist: uvicorn
56
57
  Requires-Dist: wrapt
57
58
  Provides-Extra: container
58
59
  Requires-Dist: opentelemetry-exporter-otlp; extra == 'container'
60
+ Requires-Dist: opentelemetry-instrumentation-fastapi; extra == 'container'
59
61
  Requires-Dist: opentelemetry-instrumentation-grpc; extra == 'container'
60
62
  Requires-Dist: opentelemetry-instrumentation-sqlalchemy; extra == 'container'
61
- Requires-Dist: opentelemetry-instrumentation-starlette; extra == 'container'
62
63
  Requires-Dist: opentelemetry-proto>=1.12.0; extra == 'container'
63
64
  Requires-Dist: opentelemetry-sdk; extra == 'container'
64
65
  Requires-Dist: opentelemetry-semantic-conventions; extra == 'container'
@@ -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=9Wn8BwD7EU7A8hupiqYQO3QNgiGcpbdgKgkCwHlUb-o,23
8
+ phoenix/version.py,sha256=n9j59G6rZwNZUyNaaFWTiRnQ1XtoroCAMfk4OtFuagc,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
@@ -14,8 +14,8 @@ phoenix/core/model_schema_adapter.py,sha256=0Tm_Y_gV-WED8fKBCaFXAEFwE3CTEZS1dowq
14
14
  phoenix/db/README.md,sha256=IvKaZyf9ECbGBYYePaRhBveKZwDbxAc-c7BMxJYZh6Q,595
15
15
  phoenix/db/__init__.py,sha256=pDjEFXukHmJBM-1D8RjmXkvLsz85YWNxMQczt81ec3A,118
16
16
  phoenix/db/alembic.ini,sha256=p8DjVqGUs_tTx8oU56JP7qj-rMUebNFizItUSv_hPhs,3763
17
- phoenix/db/bulk_inserter.py,sha256=pqyfgwBHU7as5ll56q-NEzADuqYzQ2P-Z7-X9JHM35U,11339
18
- phoenix/db/engines.py,sha256=vLWaZlToMtDI7rJDxSidYkfOoojamxaZxaz8ND3zTus,4770
17
+ phoenix/db/bulk_inserter.py,sha256=Hagqne0MiHXi9Y1uVsXpzIqNF9HpSZcmqv00TuHChTc,11285
18
+ phoenix/db/engines.py,sha256=R3btYTSOSd6BwRA59EmhhojL0HCQ7NnzFIXQrPYS0iU,4812
19
19
  phoenix/db/helpers.py,sha256=mTBhPzdy_aU9gD7hNzUZJkAnV77ko5CdaXyoWH3snPA,2982
20
20
  phoenix/db/migrate.py,sha256=MuhtNWnR24riROvarvKfbRb4_D5xuQi6P760vBUKl1E,2270
21
21
  phoenix/db/models.py,sha256=7DBWbxY3cx3ve2P1I0kkDKXzlt04zEFJuRPJWsVpH-I,20422
@@ -31,7 +31,7 @@ phoenix/db/migrations/types.py,sha256=Frq1AKSyBKQQ0FLzON-EmgTqE4kNkOpHMsbWnI-WgC
31
31
  phoenix/db/migrations/versions/10460e46d750_datasets.py,sha256=l69yZfScFrjfZZpY0gnqwhsDUEctLeo02qMgA_aOGDg,8155
32
32
  phoenix/db/migrations/versions/cf03bd6bae1d_init.py,sha256=CbWT3ZTR0CZqeT3zWLoTWhboFmnOy3Ju1z6Ztpq8WIM,8122
33
33
  phoenix/experiments/__init__.py,sha256=6JGwgUd7xCbGpuHqYZlsmErmYvVgv7N_j43bn3dUqsk,123
34
- phoenix/experiments/functions.py,sha256=lz5Add19Hf8EQnfkTLfHFtRJsXfruPC4tXhXUpglGMc,32128
34
+ phoenix/experiments/functions.py,sha256=4XaOLE1Co9sW_yjM1sypQClmOLtt9kwoxmhIEJ3f_rk,32209
35
35
  phoenix/experiments/tracing.py,sha256=wVpt8Ie9WNPoi1djJdcrkwCokHdTO0bicXViLg3O-1Y,2831
36
36
  phoenix/experiments/types.py,sha256=VuvDCcvUGeHIQuXS_xpz7Jq5xHdt3qu-O_C7IQ3DvF8,23397
37
37
  phoenix/experiments/utils.py,sha256=wLu5Kvt1b4a8rGPRWq5G8RQ9XSiV8fCIVm51zWBI3-g,758
@@ -60,41 +60,43 @@ phoenix/pointcloud/pointcloud.py,sha256=4zAIkKs2xOUbchpj4XDAV-iPMXrfAJ15TG6rlIYG
60
60
  phoenix/pointcloud/projectors.py,sha256=zO_RrtDYSv2rqVOfIP2_9Cv11Dc8EmcZR94xhFcBYPU,1057
61
61
  phoenix/pointcloud/umap_parameters.py,sha256=3UQSjrysVOvq2V4KNpTMqNqNiK0BsTZnPBHWZ4fyJtQ,1708
62
62
  phoenix/server/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
63
- phoenix/server/app.py,sha256=Agr0XLJGAEyBtV34qbsdBhabHxpPIxZL9SCaoFMeh2g,19479
64
- phoenix/server/grpc_server.py,sha256=faktLxEtWGlCB1bPR4QwwTsRoQloahKMx0hAWqRGI5s,3379
65
- phoenix/server/main.py,sha256=dRyODpwkNi_3as14fnZ8LWW_JLWtpXHldRy9SNjNtws,11251
63
+ phoenix/server/app.py,sha256=DaYK3-2YJVB6AWE_oJ1pX96H20pap9D60DoCm20p12A,19041
64
+ phoenix/server/grpc_server.py,sha256=jllxDNkpLQxDkvej4RhTokobowbvydF-SU8gSw1MTCc,3378
65
+ phoenix/server/main.py,sha256=dvjv3g8ANpkvSGCUN02S2Yse643Nlwrp_bj4iXBSVTE,11082
66
66
  phoenix/server/prometheus.py,sha256=j9DHB2fERuq_ZKmwVaqR-9wx5WcPPuU1Cm5Bhg5241Y,2996
67
67
  phoenix/server/telemetry.py,sha256=T_2OKrxNViAeaANlNspEekg_Y5uZIFWvKAnpz8Aoqvk,2762
68
- phoenix/server/thread_server.py,sha256=dP6cm6Cf08jNhDA1TRlVZpziu1YgtPDmaeIJMm725eI,2154
68
+ phoenix/server/thread_server.py,sha256=RwXQGP_QhGD7le6WB7xEygEEuwBl5Ck_Zo8xGIYGi9M,2135
69
+ phoenix/server/types.py,sha256=o3uwy8NvfLO-j86v2Dl3irko6er0hvB_x4Df3S1DveM,460
69
70
  phoenix/server/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
70
- phoenix/server/api/context.py,sha256=DiK2IRMBbMvBF0uK20YBftApJXau4GSDHltVZX2yERQ,2957
71
+ phoenix/server/api/context.py,sha256=IZNZB8VMOL_mKzTkvyS5RyIcZcI0gwUt2qZ6jppBDWc,2853
71
72
  phoenix/server/api/interceptor.py,sha256=ykDnoC_apUd-llVli3m1CW18kNSIgjz2qZ6m5JmPDu8,1294
72
73
  phoenix/server/api/queries.py,sha256=eq2xHaQF-x4k6AGSY6b6mU2pie9bj-AJML6P2Mr0_DM,19886
73
74
  phoenix/server/api/schema.py,sha256=BcxdqO5CSGqpKd-AAJHMjFlzaK9oJA8GJuxmMfcdjn4,434
74
- phoenix/server/api/utils.py,sha256=Y1lGu8J8r8BSBX9OzffgewI8QMziovbG-ePDvZrrwGI,949
75
- phoenix/server/api/dataloaders/__init__.py,sha256=F6-8dwb-aQ_T8LeRYg3LPR7T94__8Xe4ysM0VGQeQUQ,4936
76
- phoenix/server/api/dataloaders/average_experiment_run_latency.py,sha256=ITbbwEWuFqqAxY1CLuuG7VtZYfNXxjjibigNDYf7Yl0,1887
77
- phoenix/server/api/dataloaders/dataset_example_revisions.py,sha256=Vpr5IEKSR4QnAVxE5NM7u92fPNgeHQV2ieYc6JakCj0,3788
78
- phoenix/server/api/dataloaders/dataset_example_spans.py,sha256=_jLlo0KdUS65d4PNTtE9aXVyG_NZWgA7VcpNC9udQ8U,1484
79
- phoenix/server/api/dataloaders/document_evaluation_summaries.py,sha256=dgAAlD0n8X6oAPLaD-czoefNkDqP338MouWsKaW8bOY,5684
80
- phoenix/server/api/dataloaders/document_evaluations.py,sha256=V-y8eyAA0sZpQTjHvmydbRENbkL_MmPJ8VMBFwLI7RM,1364
81
- phoenix/server/api/dataloaders/document_retrieval_metrics.py,sha256=8tZYMNLZ7zxUmyTHHZRUTZTumvw6lK2tYOpFbATIPdI,4270
82
- phoenix/server/api/dataloaders/evaluation_summaries.py,sha256=z9aal3IQL_t30aNqpAS7x4tjq0xNkuEG8dWW-bhqZmo,5724
83
- phoenix/server/api/dataloaders/experiment_annotation_summaries.py,sha256=RsQ-o84kWVTYgIlh9VKkyw2kDMWIlHCRpS7RE2aw9vs,2881
84
- phoenix/server/api/dataloaders/experiment_error_rates.py,sha256=Q7Cga0IRnzJy1IW26LWQmUu8pdLlBVYj3p6CJL7fcIk,2017
85
- phoenix/server/api/dataloaders/experiment_run_counts.py,sha256=lnsX4GYll1EXaGYHxRL0HJol9DtqYYwLcMnoh-h994w,1729
86
- phoenix/server/api/dataloaders/experiment_sequence_number.py,sha256=Va1KuoHOd-wzvrlKykoV4kLRFW4JsJvGp_DUI4HYZX4,1631
87
- phoenix/server/api/dataloaders/latency_ms_quantile.py,sha256=pEc7QjB2iiNOQm_Fmo99F5O_DKOJWgGmcnT0OADJzYE,7423
88
- phoenix/server/api/dataloaders/min_start_or_max_end_times.py,sha256=IoFX5PtSpvQdMk_7-oB8TpIse3Q4PMxep4qKggkHpzo,2902
89
- phoenix/server/api/dataloaders/project_by_name.py,sha256=W4q-ddeVnja2DNwgg5l8mV2GNADNJf1CTXNcJaBWdfE,1165
90
- phoenix/server/api/dataloaders/record_counts.py,sha256=mp3KlhwFw-Iy7o6bFxtJKC6B5kGinPIh5PxxNkrxf8o,4283
91
- phoenix/server/api/dataloaders/span_annotations.py,sha256=pJQHF92b-CgBJFfZOf0siLsa-jHzr9ByfLiNGpb5oic,1262
92
- phoenix/server/api/dataloaders/span_descendants.py,sha256=djqXXwupWaXkFdscoy-iILYijuxlqr8hJcv6JawsV6s,2162
93
- phoenix/server/api/dataloaders/span_evaluations.py,sha256=quXGyj_OYvHrcWfzXlYIv7C1OCZiL1K7cWU-YEAlsNA,1316
94
- phoenix/server/api/dataloaders/span_projects.py,sha256=KV--NTLpdXyFUGYN69KHeVVHDBJR2oupo1cgLvqK6Ko,1304
95
- phoenix/server/api/dataloaders/token_counts.py,sha256=1t3jAyrxRCce6XLcn_9ymiQtVBh7r5x0A01yE6Ren4s,5015
96
- phoenix/server/api/dataloaders/trace_evaluations.py,sha256=kmo2llOAXQ7iPtCLSFr8g_I7KHH6hwarASiPNWq2ZEg,1330
97
- phoenix/server/api/dataloaders/trace_row_ids.py,sha256=yAWuVFWUjDdmmwfXsGs_l6LuGl0ihMRm5FS-TueSzTY,1168
75
+ phoenix/server/api/utils.py,sha256=Kl47G-1A7QKTDrc75BU2QK6HupsG6MWuXxy351FOfKQ,858
76
+ phoenix/server/api/dataloaders/__init__.py,sha256=C48-E6wkXSfAweypgH3BE_m0bAOLBVbIVzJxkva6t4g,5038
77
+ phoenix/server/api/dataloaders/average_experiment_run_latency.py,sha256=q091UmkXx37OBKh7L-GJ5LXHyRXfX2w4XTk1NMHtPpw,1827
78
+ phoenix/server/api/dataloaders/dataset_example_revisions.py,sha256=i0g8F4akEf3kQOzAvBjO27QwXNsq-kJEM8dtzduxQgY,3720
79
+ phoenix/server/api/dataloaders/dataset_example_spans.py,sha256=-TjdyyJv2c2JiN1OXu6MMmQ-BEKlHXucEDcuObeRVsU,1416
80
+ phoenix/server/api/dataloaders/document_evaluation_summaries.py,sha256=5XOom2KRAmCwPmtlraiZOSl3vhfaW-eiiYkmetAEalw,5616
81
+ phoenix/server/api/dataloaders/document_evaluations.py,sha256=V6sE34jON_qFxt7eArJbktykAsty-gnBZHlEkORcj0E,1296
82
+ phoenix/server/api/dataloaders/document_retrieval_metrics.py,sha256=JqDqkUuoeG6WfcmWSrmQptfF6IPX8XgzYzyECXTAjgg,4202
83
+ phoenix/server/api/dataloaders/evaluation_summaries.py,sha256=FEfUMKgk0uqQlJCS5ynmjkBoJVkqW9EVQ8vhgQ2ReKY,5656
84
+ phoenix/server/api/dataloaders/experiment_annotation_summaries.py,sha256=qDEBRo0XKJMYBYlXBgJ-69jwPK-0r4pi9ZhbjC_vx6M,2813
85
+ phoenix/server/api/dataloaders/experiment_error_rates.py,sha256=wWTFOO2UxGIYUu53nnzzLk04-mJxw-BQgJELA9gT5bY,1949
86
+ phoenix/server/api/dataloaders/experiment_run_counts.py,sha256=8VlKRaXwD56-7q_uonRr7L6QlEkyEQubkFKmKx6vuz0,1661
87
+ phoenix/server/api/dataloaders/experiment_sequence_number.py,sha256=hSpKyOz3ES4UTfOzOfHeQ1ZXat-bzcdKybVSbYmhrBw,1563
88
+ phoenix/server/api/dataloaders/latency_ms_quantile.py,sha256=5Y2OQ_GeH1My2573eOm7zPbqpwDZ_WeMLoZMq3KDoNQ,7403
89
+ phoenix/server/api/dataloaders/min_start_or_max_end_times.py,sha256=k82jVllBWkGI6xu2MAltqxdIqyw3DqoVCQcKbi-JsmM,2834
90
+ phoenix/server/api/dataloaders/project_by_name.py,sha256=9p6DW_zXrsB9YGILFV0wkRwiapyHbZ1IgWK9HuHxl30,1105
91
+ phoenix/server/api/dataloaders/record_counts.py,sha256=64OsyiQRDZASlibpQAXtRkzyA_ch89A3TvhSUByxoTI,4215
92
+ phoenix/server/api/dataloaders/span_annotations.py,sha256=QsbAGPFitFxOCI9yJPPlueuMh0LqN18hMo-Vx2P8EsI,1194
93
+ phoenix/server/api/dataloaders/span_dataset_examples.py,sha256=BtLZp11fyyeaWGGBPZj2StzFM0m5jxt52zB2nFMVybo,1306
94
+ phoenix/server/api/dataloaders/span_descendants.py,sha256=b7jGTn0Hi22gv2yskloLnf3BG3upS9z5hnKLMT9Sxac,2094
95
+ phoenix/server/api/dataloaders/span_evaluations.py,sha256=IfwXW23GQaWti8F49wSJocWf7Tklf2ZJ0F6aB4cSVHs,1248
96
+ phoenix/server/api/dataloaders/span_projects.py,sha256=LbQWiboCFqq4CHS18OzvRUwL9yORqP26fh5p7JbpFdg,1244
97
+ phoenix/server/api/dataloaders/token_counts.py,sha256=riJC3jGRJv2eyenk8Gkx7xwDaulb9SWla58wfcXZeCE,4947
98
+ phoenix/server/api/dataloaders/trace_evaluations.py,sha256=vraPehNsausR4dbdvq-HudRVNARJUbep3T-Ud9jwWYY,1262
99
+ phoenix/server/api/dataloaders/trace_row_ids.py,sha256=RODX4NULlBzMxHMrsq0dp1ij6ZlLH4ZzQBnafGdxOvU,1100
98
100
  phoenix/server/api/dataloaders/cache/__init__.py,sha256=SYoOM9n8FJaMdQarma5d1blu-jIg2GB8Shqg5ezSzZ8,106
99
101
  phoenix/server/api/dataloaders/cache/two_tier_cache.py,sha256=I38L1RsOis98OQftE7n1Q9QBZfFJO6OW_qIINkuJllo,2295
100
102
  phoenix/server/api/helpers/__init__.py,sha256=_V1eVkchZmTkhOfRC4QqR1sUB2xtIxdsMJkDouZq_IE,251
@@ -131,22 +133,23 @@ phoenix/server/api/mutations/dataset_mutations.py,sha256=CuKhxsYfvwVcdN_9EXhKxB6
131
133
  phoenix/server/api/mutations/experiment_mutations.py,sha256=vV2lbJ7ccXZqe-LY7nXx6QxWqhKQE4UNZAFcML-KQ8I,3011
132
134
  phoenix/server/api/mutations/export_events_mutations.py,sha256=t_wYBxaqvBJYRoHslh3Bmoxmwlzoy0u8SsBKWIKN5hE,4028
133
135
  phoenix/server/api/mutations/project_mutations.py,sha256=d_xtYkYfZ5flpVgEkGknKB8rsEux-zZraczzqAs4e8A,2255
134
- phoenix/server/api/mutations/span_annotations_mutations.py,sha256=Kig5hdH-Jw0UZBhQAqyHvF7HdCHCqKZaoLR-jCOVJUA,5197
135
- phoenix/server/api/mutations/trace_annotations_mutations.py,sha256=X0k49Ysu-su_hJbfjb_q3-G7qB9o_mpC6UXrDYhV5Sw,5237
136
+ phoenix/server/api/mutations/span_annotations_mutations.py,sha256=DJ1wLlvx7zZJZclw9cFHzrBFtSf98a7grHBb0rd-Hyc,5339
137
+ phoenix/server/api/mutations/trace_annotations_mutations.py,sha256=GtI_kDpzLDBFjh0CkYjCgVfdBCog7aKHlIVsEM2x92k,5379
136
138
  phoenix/server/api/openapi/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
137
- phoenix/server/api/openapi/main.py,sha256=WY0pj3B7siQyyYqKyhqnzWC7P8MtEtiukOBUjGwLXfw,153
138
- phoenix/server/api/openapi/schema.py,sha256=uuSYe1Ecu72aXRgTNjyMu-9ZPE13DAHJPKtedS-MsSs,451
139
+ phoenix/server/api/openapi/main.py,sha256=KNutA_7AvV_WlGX8cOkvvDujcJKQ7AD1HT6rTpCpR8A,616
140
+ phoenix/server/api/openapi/schema.py,sha256=oVZoflWMfzOrLKMIrjr3iLnJ13rmN-t_DOe9g6KoN5s,471
139
141
  phoenix/server/api/routers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
140
142
  phoenix/server/api/routers/utils.py,sha256=M41BoH-fl37izhRuN2aX7lWm7jOC20A_3uClv9TVUUY,583
141
- phoenix/server/api/routers/v1/__init__.py,sha256=D1EFRWG4PcsTubeF3A3ENlNatCRq26AA52FxW11BGjM,3048
142
- phoenix/server/api/routers/v1/dataset_examples.py,sha256=XfqOvDKF1oxb0pkeYfBycwwGt3LnSyyGdMLKC5VKoGQ,6690
143
- phoenix/server/api/routers/v1/datasets.py,sha256=r0WcNxF8SKVa3-4rrTIg4Andwr4NmRmW1ybpKuxR9qw,33639
144
- phoenix/server/api/routers/v1/evaluations.py,sha256=8g6P_e2BweV3RDU0esFmpkb0L5fCwonQPXiJ0y6HLwg,9126
145
- phoenix/server/api/routers/v1/experiment_evaluations.py,sha256=TE1GMSOLN_96uAaJpnRpIH2u9x6_ebtkECgZRHvqt-w,5098
146
- phoenix/server/api/routers/v1/experiment_runs.py,sha256=jy4SynmzdtQMoUzlowmG6wsVU14SsLAzfcW4JOhXjeQ,8154
147
- phoenix/server/api/routers/v1/experiments.py,sha256=uVdmhyJgYI-UqOiRSJ-8OcVpL8a6Z02B5H2Rt_7yboY,11829
148
- phoenix/server/api/routers/v1/spans.py,sha256=tryWFoJVFRLALzt6dfPmBBhKMS0s3hhlYdTathxVEU4,9638
149
- phoenix/server/api/routers/v1/traces.py,sha256=PBIrpdJHVJ9gyiukCy1Ck1w0xts0VEHtRKaF7Noa248,8434
143
+ phoenix/server/api/routers/v1/__init__.py,sha256=nb49zcOdAi3DSGuC9gUubN9Yri-o7-WFdlGak4jGuFw,1462
144
+ phoenix/server/api/routers/v1/datasets.py,sha256=QG6QeyfPi1tfBvVoa3jpNOcwtR5ntNfd3IW9rzP735Q,36920
145
+ phoenix/server/api/routers/v1/evaluations.py,sha256=xfBoieGa9bmkvomJFfveGIS6LcC4AgjS4OeoUsTlJWk,9484
146
+ phoenix/server/api/routers/v1/experiment_evaluations.py,sha256=xoVhU71U3c1QJSXiKsAa4yiH-UAqkyVc7uKPyIHjrYY,4682
147
+ phoenix/server/api/routers/v1/experiment_runs.py,sha256=7qvLYgqH58nxqhTnJ0hPf0PBfVmZnbxquodSnEGoQxk,6059
148
+ phoenix/server/api/routers/v1/experiments.py,sha256=AFJb8Pi6SDKbIbkDRWUtPjikZIoRhc7cFLWm40l3mPk,9817
149
+ phoenix/server/api/routers/v1/pydantic_compat.py,sha256=FeK8oe2brqu-djsoqRxiKL4tw5cHmi89OHVfCFxYsAo,2890
150
+ phoenix/server/api/routers/v1/spans.py,sha256=yMs3Sm6s6JLV2nlmpnQ-ZJ_In0aTY5M3uOlLi-Wzb9c,8967
151
+ phoenix/server/api/routers/v1/traces.py,sha256=Zl_hGHd-4rA0tXegH_GVoN9Ij84vbPB8oHu28fzGHA8,8029
152
+ phoenix/server/api/routers/v1/utils.py,sha256=xvl2v-BKUkqmFVMmgmmWGFKuRBTrUdoiAeT3mCYEE68,3086
150
153
  phoenix/server/api/types/Annotation.py,sha256=7Ym7iuVcbwHlw2yIRylz4nATAF_Cm-Z17qcjiooj1cc,751
151
154
  phoenix/server/api/types/AnnotatorKind.py,sha256=rPgGdbN1Gvc109sGQ_ZH-gfJbp93V9wlarzTEJNtUwI,236
152
155
  phoenix/server/api/types/Cluster.py,sha256=ac4YfT1OH3xLVmex7EUmB6b9IpULnhLTt554LR0jglE,5689
@@ -190,7 +193,7 @@ phoenix/server/api/types/Retrieval.py,sha256=OhMK2ncjoyp5h1yjKhjlKpoTbQrMHuxmgSF
190
193
  phoenix/server/api/types/ScalarDriftMetricEnum.py,sha256=IUAcRPpgL41WdoIgK6cNk2Te38SspXGyEs-S1fY23_A,232
191
194
  phoenix/server/api/types/Segments.py,sha256=m2yoegrxA1Tn7ZAy1rMjjD1isc752MaAXMoffkBlvrM,2921
192
195
  phoenix/server/api/types/SortDir.py,sha256=OUpXhlCzCxPoXSDkJJygEs9Rw9pMymfaZUG5zPTrw4Y,152
193
- phoenix/server/api/types/Span.py,sha256=Qlz5G_gjyy_jpadfc7CD9xB6TekCCySeEqM_hihcrhM,14208
196
+ phoenix/server/api/types/Span.py,sha256=0Ka8usQ8RscoeqZfz_AEHpfI2BXy0Q7caIAyo8LBc38,14511
194
197
  phoenix/server/api/types/SpanAnnotation.py,sha256=6b5G-b_OoRvDL2ayWk7MkbqarLK-F-pQMx21CpUuNGY,1168
195
198
  phoenix/server/api/types/TimeSeries.py,sha256=wjzuxHFqCey0O7Ys25qiXyuqXK8an-osyNWUE8A_8G4,5227
196
199
  phoenix/server/api/types/Trace.py,sha256=ep-mPexub1ijxAnBvc2KrGsNVXO2SfDR1WxqER2wcD8,2376
@@ -202,7 +205,6 @@ phoenix/server/api/types/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZ
202
205
  phoenix/server/api/types/node.py,sha256=V0Xh9U4cGkz3iMg-vzEXtcs6cumU29JFPiU-JuGzjWI,848
203
206
  phoenix/server/api/types/pagination.py,sha256=PcaJ0s4exsTKgCZC4aFm1cgZNrGpHSdo6PbkWzPcweg,9077
204
207
  phoenix/server/openapi/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
205
- phoenix/server/openapi/docs.py,sha256=fTb9q2oOSKC5bLVQy2Dsg3Bs0mGkCOKX1ypX7731sE0,7044
206
208
  phoenix/server/static/apple-touch-icon-114x114.png,sha256=xtFVXAYQnJkpUApg2D1hltSTuyO4Is4sD4A0ZkikiVU,9486
207
209
  phoenix/server/static/apple-touch-icon-120x120.png,sha256=iqZVAk634BbjJMozA8aHYyw15JjhIlIrG41FA2DFFaE,9957
208
210
  phoenix/server/static/apple-touch-icon-144x144.png,sha256=VgARtkHKoU8zikb3_G83h_cb02kpPcoJqO78yRh1AfU,10047
@@ -213,29 +215,29 @@ phoenix/server/static/apple-touch-icon-76x76.png,sha256=CT_xT12I0u2i0WU8JzBZBuOQ
213
215
  phoenix/server/static/apple-touch-icon.png,sha256=fOfpjqGpWYbJ0eAurKsyoZP1EAs6ZVooBJ_SGk2ZkDs,3801
214
216
  phoenix/server/static/favicon.ico,sha256=bY0vvCKRftemZfPShwZtE93DiiQdaYaozkPGwNFr6H8,34494
215
217
  phoenix/server/static/modernizr.js,sha256=mvK-XtkNqjOral-QvzoqsyOMECXIMu5BQwSVN_wcU9c,2564
216
- phoenix/server/static/.vite/manifest.json,sha256=10o8Ytfii6SAgHd91u81MQsDMIwhoNgzav27nED77Ow,1929
217
- phoenix/server/static/assets/components-DeS0YEmv.js,sha256=eE0JsxZZ0MI9DS9b8nDmBpmzCXNxqBGy8qVssaeHdj4,160991
218
- phoenix/server/static/assets/index-CQgXRwU0.js,sha256=hzyJ3S10rmimJlZny1IO3l0_noAurwHdJw0Nc38B1Bc,6342
219
- phoenix/server/static/assets/pages-hdjlFZhO.js,sha256=CRfgXRtrvdut-V-KmrKFtezUb_azfs-eCIbTrIPKX04,422269
220
- phoenix/server/static/assets/vendor-DPvSDRn3.js,sha256=Hc-RClavSPr5CtZbFYbQNrIPim9LJrD4e51QMOxF3Io,1355429
218
+ phoenix/server/static/.vite/manifest.json,sha256=9PYR8RFuxdsTxW7Ofs1P8Ehx2DktABRYGTx0jGtAX84,1929
219
+ phoenix/server/static/assets/components-kGgeFkHp.js,sha256=xUfFn5d7Q4ZltPMMQYFCHfXwGTeclBTSKjRQID0Fz9c,165411
220
+ phoenix/server/static/assets/index-BctFO6S7.js,sha256=Y3BkQU18R8sJnJAuq0cU7sVPFjDcqhskG0AmAtv5Q8k,6337
221
+ phoenix/server/static/assets/pages-DabDCmVd.js,sha256=cAiGKj0vFph9REng2JjQAVOax5IhgdSxkEBVs8u1Hh0,433015
222
+ phoenix/server/static/assets/vendor-CP0b0YG0.js,sha256=hoxXvVgcHofQrVahK5Q4hAMDaQiH6GygbQvdiXlhQAo,1355423
221
223
  phoenix/server/static/assets/vendor-DxkFTwjz.css,sha256=nZrkr0u6NNElFGvpWHk9GTHeGoibCXCli1bE7mXZGZg,1816
222
- phoenix/server/static/assets/vendor-arizeai-CkvPT67c.js,sha256=sD4eqJrzqLBhFUAe2TNFUkoGv2nJl_gv3cK3Lo_Iiqk,290966
223
- phoenix/server/static/assets/vendor-codemirror-Cqwpwlua.js,sha256=RSF9c9RG5ol0VSYXxItT5llkabRIUO1gIZVrF4-nX1o,357576
224
- phoenix/server/static/assets/vendor-recharts-5jlNaZuF.js,sha256=3LZ6-as7BKqU7ulx_f_2wE8LVc8IjFrIxJNTxrkPfps,282859
224
+ phoenix/server/static/assets/vendor-arizeai-B5Hti8OB.js,sha256=H1iwTiHB40STvEBQe1BnZpej-9slXsuOgEZvvVvnz3Y,296355
225
+ phoenix/server/static/assets/vendor-codemirror-DtdPDzrv.js,sha256=ngcX7xxWUANIvplBuEqkDowqRkknIoX3gXUeQk-jtMQ,503031
226
+ phoenix/server/static/assets/vendor-recharts-A0DA1O99.js,sha256=Zp6oIbsFZPDN-M7VNovxGfJkg9XUISg1fM7eRMtHCaw,282859
225
227
  phoenix/server/static/assets/vendor-three-DwGkEfCM.js,sha256=0D12ZgKzfKCTSdSTKJBFR2RZO_xxeMXrqDp0AszZqHY,620972
226
228
  phoenix/server/templates/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
227
229
  phoenix/server/templates/index.html,sha256=gVpjB8pCMiubdMh2DA9mTCtV5AVTXJH_9u5PmG2t7Vk,4238
228
230
  phoenix/session/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
229
- phoenix/session/client.py,sha256=AEqBnjWl1D1KounuUj5T269cqPAZIV_KdWezknj6nC0,32577
231
+ phoenix/session/client.py,sha256=RSaEALbFu-En5oJLv7K4BmwdkrsIC5ZbjMX7Mlny8_Y,32665
230
232
  phoenix/session/data_extractor.py,sha256=gkEM3WWZAlWGMfRgQopAQlid4cSi6GNco-sdrGir0qc,2788
231
233
  phoenix/session/evaluation.py,sha256=aKeV8UVOyq3b7CYOwt3cWuLz0xzvMjX7vlEPILJ_fcs,5311
232
- phoenix/session/session.py,sha256=1ZGR0pBmah8bqX353MDf4sq7XuK904EfxNLo0B9z_sU,26714
234
+ phoenix/session/session.py,sha256=RstuZpkdZcuyZXhWdY59YOr46wjGsRJObIC5Rr5QRO0,26733
233
235
  phoenix/trace/__init__.py,sha256=ujk_uYjM8gmm-YqnyXxF-kekfwid0bcaPMTtNNcaw6U,407
234
236
  phoenix/trace/attributes.py,sha256=B_OrzVaxZwFkrAFXZyicYoIti1UdUysURsvUS2GyW1U,12488
235
237
  phoenix/trace/errors.py,sha256=wB1z8qdPckngdfU-TORToekvg3344oNFAA83_hC2yFY,180
236
238
  phoenix/trace/evaluation_conventions.py,sha256=t8jydM3U0-T5YpiQKRJ3tWdWGlHtzKyttYdw-ddvPOk,1048
237
239
  phoenix/trace/exporter.py,sha256=eAYemdvDCHMugDJiaR29BFFMTQBdf3oerdkz34Cl3hE,4736
238
- phoenix/trace/fixtures.py,sha256=tDso17oAYMBQ8GJsAlHFzrC0otXPzUOEh4TgIjEfB7M,14260
240
+ phoenix/trace/fixtures.py,sha256=LABY-H6BdDA-fS9dZ13uTovXCPTdfWcvU8HsJ_qPspc,14106
239
241
  phoenix/trace/otel.py,sha256=WA720jvRadiZBAKjsYoPyXzypHwbyEK2OZRVUwtbjB8,9976
240
242
  phoenix/trace/projects.py,sha256=2BwlNjFE-uwpqYtCu5YyBiYZk9wRPpM13vh3-Cv7GkA,2157
241
243
  phoenix/trace/schemas.py,sha256=HpWSyzec0yDHEQXEDuwyLbhpvKrqkGps8BJqGiIFj8Y,5978
@@ -243,7 +245,7 @@ phoenix/trace/span_evaluations.py,sha256=GaADtJLi2njra4aYaie0BIwkSgdxPB_SNseglI4
243
245
  phoenix/trace/span_json_decoder.py,sha256=jkpYSmOUsSptvahOvetrPjVkPIuI4h6b87eizL8wHp8,3230
244
246
  phoenix/trace/span_json_encoder.py,sha256=tzSCIQJbeFBm33K68G8A5M12n_86tCDyuU0WAobxEz4,2010
245
247
  phoenix/trace/trace_dataset.py,sha256=Wq89jJ4hYQ1Qt-Uj11ZNzKQYQeKmGY6NqWStQiiTlMw,14351
246
- phoenix/trace/utils.py,sha256=7LurVGXn245cjj4MJsc7v6jq4DSJkpK6YGBfIaSywuw,1307
248
+ phoenix/trace/utils.py,sha256=1SEQr37cdHOM0P3BdL1dszArj3Zm-VJQyb1BcJs_qO8,1833
247
249
  phoenix/trace/dsl/README.md,sha256=ihmP9zGUC5V-TDbzKla76LuyDqPDQIBUH2BORwxNI68,2902
248
250
  phoenix/trace/dsl/__init__.py,sha256=WIQIjJg362XD3s50OsPJJ0xbDsGp41bSv7vDllLrPuA,144
249
251
  phoenix/trace/dsl/filter.py,sha256=DTDERSAexxDbTy5QvC48NSKhnr2pfIRDZ4PS-s3ZW80,32642
@@ -259,15 +261,16 @@ phoenix/trace/v1/__init__.py,sha256=-IbAD0ruESMjvQLvGAg9CTfjBUATFDx1OXseDPis6-0,
259
261
  phoenix/trace/v1/evaluation_pb2.py,sha256=8sXvv2BW_vqD30MOMbmkeE2zpmm7ncik21kl3e-HzeQ,2254
260
262
  phoenix/trace/v1/evaluation_pb2.pyi,sha256=cCbbx06gwQmaH14s3J1X25TtaARh-k1abbxQdQCXGm8,4500
261
263
  phoenix/utilities/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
264
+ phoenix/utilities/client.py,sha256=6Swxe4TVA481eKnmkCox83WY52b2nA-DWIzkkGu6wwo,4935
262
265
  phoenix/utilities/deprecation.py,sha256=cFuTVvjSYyRlrdxdJewjJVieIEHPk30BukSRGRydQ3k,1046
263
266
  phoenix/utilities/error_handling.py,sha256=7b5rpGFj9EWZ8yrZK1IHvxB89suWk3lggDayUQcvZds,1946
264
267
  phoenix/utilities/json.py,sha256=y_w-McDfvlTeGJT28sCtyjzVkwFicakxERG-sGRc8Ak,1948
265
268
  phoenix/utilities/logging.py,sha256=lDXd6EGaamBNcQxL4vP1au9-i_SXe0OraUDiJOcszSw,222
266
- phoenix/utilities/project.py,sha256=qWsvKnG1oKhOFUowXf9qiOL2ia7jaFe_ijFFHEt8GJo,431
269
+ phoenix/utilities/project.py,sha256=8IJuMM4yUMoooPi37sictGj8Etu9rGmq6RFtc9848cQ,436
267
270
  phoenix/utilities/re.py,sha256=PDve_OLjRTM8yQQJHC8-n3HdIONi7aNils3ZKRZ5uBM,2045
268
271
  phoenix/utilities/span_store.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
269
- arize_phoenix-4.14.1.dist-info/METADATA,sha256=FgEpDDxRhJOIbBjm9IWUQxHltEu7XB1XjtsEHMl23W8,11736
270
- arize_phoenix-4.14.1.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
271
- arize_phoenix-4.14.1.dist-info/licenses/IP_NOTICE,sha256=JBqyyCYYxGDfzQ0TtsQgjts41IJoa-hiwDrBjCb9gHM,469
272
- arize_phoenix-4.14.1.dist-info/licenses/LICENSE,sha256=HFkW9REuMOkvKRACuwLPT0hRydHb3zNg-fdFt94td18,3794
273
- arize_phoenix-4.14.1.dist-info/RECORD,,
272
+ arize_phoenix-4.15.0.dist-info/METADATA,sha256=dGRIIc2CR5BuCgVqrzfF5kJphORO_AmyoqhVX7mVrS0,11775
273
+ arize_phoenix-4.15.0.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
274
+ arize_phoenix-4.15.0.dist-info/licenses/IP_NOTICE,sha256=JBqyyCYYxGDfzQ0TtsQgjts41IJoa-hiwDrBjCb9gHM,469
275
+ arize_phoenix-4.15.0.dist-info/licenses/LICENSE,sha256=HFkW9REuMOkvKRACuwLPT0hRydHb3zNg-fdFt94td18,3794
276
+ arize_phoenix-4.15.0.dist-info/RECORD,,
@@ -7,7 +7,6 @@ from itertools import islice
7
7
  from time import perf_counter
8
8
  from typing import (
9
9
  Any,
10
- AsyncContextManager,
11
10
  Awaitable,
12
11
  Callable,
13
12
  Iterable,
@@ -19,7 +18,6 @@ from typing import (
19
18
  )
20
19
 
21
20
  from cachetools import LRUCache
22
- from sqlalchemy.ext.asyncio import AsyncSession
23
21
  from typing_extensions import TypeAlias
24
22
 
25
23
  import phoenix.trace.v1 as pb
@@ -31,6 +29,7 @@ from phoenix.db.insertion.evaluation import (
31
29
  from phoenix.db.insertion.helpers import DataManipulation, DataManipulationEvent
32
30
  from phoenix.db.insertion.span import SpanInsertionEvent, insert_span
33
31
  from phoenix.server.api.dataloaders import CacheForDataLoaders
32
+ from phoenix.server.types import DbSessionFactory
34
33
  from phoenix.trace.schemas import Span
35
34
 
36
35
  logger = logging.getLogger(__name__)
@@ -46,7 +45,7 @@ class TransactionResult:
46
45
  class BulkInserter:
47
46
  def __init__(
48
47
  self,
49
- db: Callable[[], AsyncContextManager[AsyncSession]],
48
+ db: DbSessionFactory,
50
49
  *,
51
50
  cache_for_dataloaders: Optional[CacheForDataLoaders] = None,
52
51
  initial_batch_of_operations: Iterable[DataManipulation] = (),
phoenix/db/engines.py CHANGED
@@ -8,7 +8,7 @@ from typing import Any
8
8
  import aiosqlite
9
9
  import numpy as np
10
10
  import sqlean
11
- from sqlalchemy import URL, event, make_url
11
+ from sqlalchemy import URL, StaticPool, event, make_url
12
12
  from sqlalchemy.ext.asyncio import AsyncEngine, create_async_engine
13
13
  from typing_extensions import assert_never
14
14
 
@@ -105,6 +105,7 @@ def aio_sqlite_engine(
105
105
  echo=echo,
106
106
  json_serializer=_dumps,
107
107
  async_creator=async_creator,
108
+ poolclass=StaticPool,
108
109
  )
109
110
  event.listen(engine.sync_engine, "connect", set_sqlite_pragma)
110
111
  if not migrate:
@@ -72,15 +72,16 @@ from phoenix.experiments.types import (
72
72
  )
73
73
  from phoenix.experiments.utils import get_dataset_experiments_url, get_experiment_url, get_func_name
74
74
  from phoenix.trace.attributes import flatten
75
+ from phoenix.utilities.client import VersionedAsyncClient, VersionedClient
75
76
  from phoenix.utilities.json import jsonify
76
77
 
77
78
 
78
79
  def _phoenix_clients() -> Tuple[httpx.Client, httpx.AsyncClient]:
79
80
  headers = get_env_client_headers()
80
- return httpx.Client(
81
+ return VersionedClient(
81
82
  base_url=get_base_url(),
82
83
  headers=headers,
83
- ), httpx.AsyncClient(
84
+ ), VersionedAsyncClient(
84
85
  base_url=get_base_url(),
85
86
  headers=headers,
86
87
  )
@@ -1,12 +1,9 @@
1
1
  from dataclasses import dataclass
2
2
  from datetime import datetime
3
3
  from pathlib import Path
4
- from typing import AsyncContextManager, Callable, Optional, Union
4
+ from typing import Callable, Optional
5
5
 
6
- from sqlalchemy.ext.asyncio import AsyncSession
7
- from starlette.requests import Request
8
- from starlette.responses import Response
9
- from starlette.websockets import WebSocket
6
+ from strawberry.fastapi import BaseContext
10
7
  from typing_extensions import TypeAlias
11
8
 
12
9
  from phoenix.core.model_schema import Model
@@ -28,6 +25,7 @@ from phoenix.server.api.dataloaders import (
28
25
  ProjectByNameDataLoader,
29
26
  RecordCountDataLoader,
30
27
  SpanAnnotationsDataLoader,
28
+ SpanDatasetExamplesDataLoader,
31
29
  SpanDescendantsDataLoader,
32
30
  SpanEvaluationsDataLoader,
33
31
  SpanProjectsDataLoader,
@@ -35,6 +33,7 @@ from phoenix.server.api.dataloaders import (
35
33
  TraceEvaluationsDataLoader,
36
34
  TraceRowIdsDataLoader,
37
35
  )
36
+ from phoenix.server.types import DbSessionFactory
38
37
 
39
38
 
40
39
  @dataclass
@@ -53,6 +52,7 @@ class DataLoaders:
53
52
  latency_ms_quantile: LatencyMsQuantileDataLoader
54
53
  min_start_or_max_end_times: MinStartOrMaxEndTimeDataLoader
55
54
  record_counts: RecordCountDataLoader
55
+ span_dataset_examples: SpanDatasetExamplesDataLoader
56
56
  span_descendants: SpanDescendantsDataLoader
57
57
  span_evaluations: SpanEvaluationsDataLoader
58
58
  span_projects: SpanProjectsDataLoader
@@ -67,10 +67,8 @@ ProjectRowId: TypeAlias = int
67
67
 
68
68
 
69
69
  @dataclass
70
- class Context:
71
- request: Union[Request, WebSocket]
72
- response: Optional[Response]
73
- db: Callable[[], AsyncContextManager[AsyncSession]]
70
+ class Context(BaseContext):
71
+ db: DbSessionFactory
74
72
  data_loaders: DataLoaders
75
73
  cache_for_dataloaders: Optional[CacheForDataLoaders]
76
74
  model: Model
@@ -27,6 +27,7 @@ from .min_start_or_max_end_times import MinStartOrMaxEndTimeCache, MinStartOrMax
27
27
  from .project_by_name import ProjectByNameDataLoader
28
28
  from .record_counts import RecordCountCache, RecordCountDataLoader
29
29
  from .span_annotations import SpanAnnotationsDataLoader
30
+ from .span_dataset_examples import SpanDatasetExamplesDataLoader
30
31
  from .span_descendants import SpanDescendantsDataLoader
31
32
  from .span_evaluations import SpanEvaluationsDataLoader
32
33
  from .span_projects import SpanProjectsDataLoader
@@ -50,6 +51,7 @@ __all__ = [
50
51
  "LatencyMsQuantileDataLoader",
51
52
  "MinStartOrMaxEndTimeDataLoader",
52
53
  "RecordCountDataLoader",
54
+ "SpanDatasetExamplesDataLoader",
53
55
  "SpanDescendantsDataLoader",
54
56
  "SpanEvaluationsDataLoader",
55
57
  "SpanProjectsDataLoader",
@@ -1,11 +1,11 @@
1
- from typing import AsyncContextManager, Callable, List, Optional
1
+ from typing import List, Optional
2
2
 
3
3
  from sqlalchemy import func, select
4
- from sqlalchemy.ext.asyncio import AsyncSession
5
4
  from strawberry.dataloader import DataLoader
6
5
  from typing_extensions import TypeAlias
7
6
 
8
7
  from phoenix.db import models
8
+ from phoenix.server.types import DbSessionFactory
9
9
 
10
10
  ExperimentID: TypeAlias = int
11
11
  RunLatency: TypeAlias = Optional[float]
@@ -16,7 +16,7 @@ Result: TypeAlias = RunLatency
16
16
  class AverageExperimentRunLatencyDataLoader(DataLoader[Key, Result]):
17
17
  def __init__(
18
18
  self,
19
- db: Callable[[], AsyncContextManager[AsyncSession]],
19
+ db: DbSessionFactory,
20
20
  ) -> None:
21
21
  super().__init__(load_fn=self._load_fn)
22
22
  self._db = db
@@ -1,6 +1,4 @@
1
1
  from typing import (
2
- AsyncContextManager,
3
- Callable,
4
2
  List,
5
3
  Optional,
6
4
  Tuple,
@@ -8,12 +6,12 @@ from typing import (
8
6
  )
9
7
 
10
8
  from sqlalchemy import Integer, case, func, literal, or_, select, union
11
- from sqlalchemy.ext.asyncio import AsyncSession
12
9
  from strawberry.dataloader import DataLoader
13
10
  from typing_extensions import TypeAlias
14
11
 
15
12
  from phoenix.db import models
16
13
  from phoenix.server.api.types.DatasetExampleRevision import DatasetExampleRevision
14
+ from phoenix.server.types import DbSessionFactory
17
15
 
18
16
  ExampleID: TypeAlias = int
19
17
  VersionID: TypeAlias = Optional[int]
@@ -22,7 +20,7 @@ Result: TypeAlias = DatasetExampleRevision
22
20
 
23
21
 
24
22
  class DatasetExampleRevisionsDataLoader(DataLoader[Key, Result]):
25
- def __init__(self, db: Callable[[], AsyncContextManager[AsyncSession]]) -> None:
23
+ def __init__(self, db: DbSessionFactory) -> None:
26
24
  super().__init__(load_fn=self._load_fn)
27
25
  self._db = db
28
26
 
@@ -1,17 +1,15 @@
1
1
  from typing import (
2
- AsyncContextManager,
3
- Callable,
4
2
  List,
5
3
  Optional,
6
4
  )
7
5
 
8
6
  from sqlalchemy import select
9
- from sqlalchemy.ext.asyncio import AsyncSession
10
7
  from sqlalchemy.orm import joinedload
11
8
  from strawberry.dataloader import DataLoader
12
9
  from typing_extensions import TypeAlias
13
10
 
14
11
  from phoenix.db import models
12
+ from phoenix.server.types import DbSessionFactory
15
13
 
16
14
  ExampleID: TypeAlias = int
17
15
  Key: TypeAlias = ExampleID
@@ -19,7 +17,7 @@ Result: TypeAlias = Optional[models.Span]
19
17
 
20
18
 
21
19
  class DatasetExampleSpansDataLoader(DataLoader[Key, Result]):
22
- def __init__(self, db: Callable[[], AsyncContextManager[AsyncSession]]) -> None:
20
+ def __init__(self, db: DbSessionFactory) -> None:
23
21
  super().__init__(load_fn=self._load_fn)
24
22
  self._db = db
25
23
 
@@ -2,8 +2,6 @@ from collections import defaultdict
2
2
  from datetime import datetime
3
3
  from typing import (
4
4
  Any,
5
- AsyncContextManager,
6
- Callable,
7
5
  DefaultDict,
8
6
  List,
9
7
  Optional,
@@ -14,7 +12,6 @@ import numpy as np
14
12
  from aioitertools.itertools import groupby
15
13
  from cachetools import LFUCache, TTLCache
16
14
  from sqlalchemy import Select, select
17
- from sqlalchemy.ext.asyncio import AsyncSession
18
15
  from strawberry.dataloader import AbstractCache, DataLoader
19
16
  from typing_extensions import TypeAlias
20
17
 
@@ -24,6 +21,7 @@ from phoenix.metrics.retrieval_metrics import RetrievalMetrics
24
21
  from phoenix.server.api.dataloaders.cache import TwoTierCache
25
22
  from phoenix.server.api.input_types.TimeRange import TimeRange
26
23
  from phoenix.server.api.types.DocumentEvaluationSummary import DocumentEvaluationSummary
24
+ from phoenix.server.types import DbSessionFactory
27
25
  from phoenix.trace.dsl import SpanFilter
28
26
 
29
27
  ProjectRowId: TypeAlias = int
@@ -77,7 +75,7 @@ class DocumentEvaluationSummaryCache(
77
75
  class DocumentEvaluationSummaryDataLoader(DataLoader[Key, Result]):
78
76
  def __init__(
79
77
  self,
80
- db: Callable[[], AsyncContextManager[AsyncSession]],
78
+ db: DbSessionFactory,
81
79
  cache_map: Optional[AbstractCache[Key, Result]] = None,
82
80
  ) -> None:
83
81
  super().__init__(
@@ -1,25 +1,23 @@
1
1
  from collections import defaultdict
2
2
  from typing import (
3
- AsyncContextManager,
4
- Callable,
5
3
  DefaultDict,
6
4
  List,
7
5
  )
8
6
 
9
7
  from sqlalchemy import select
10
- from sqlalchemy.ext.asyncio import AsyncSession
11
8
  from strawberry.dataloader import DataLoader
12
9
  from typing_extensions import TypeAlias
13
10
 
14
11
  from phoenix.db import models
15
12
  from phoenix.server.api.types.Evaluation import DocumentEvaluation
13
+ from phoenix.server.types import DbSessionFactory
16
14
 
17
15
  Key: TypeAlias = int
18
16
  Result: TypeAlias = List[DocumentEvaluation]
19
17
 
20
18
 
21
19
  class DocumentEvaluationsDataLoader(DataLoader[Key, Result]):
22
- def __init__(self, db: Callable[[], AsyncContextManager[AsyncSession]]) -> None:
20
+ def __init__(self, db: DbSessionFactory) -> None:
23
21
  super().__init__(load_fn=self._load_fn)
24
22
  self._db = db
25
23
 
@@ -1,7 +1,5 @@
1
1
  from collections import defaultdict
2
2
  from typing import (
3
- AsyncContextManager,
4
- Callable,
5
3
  DefaultDict,
6
4
  Dict,
7
5
  List,
@@ -13,13 +11,13 @@ from typing import (
13
11
  import numpy as np
14
12
  from aioitertools.itertools import groupby
15
13
  from sqlalchemy import select
16
- from sqlalchemy.ext.asyncio import AsyncSession
17
14
  from strawberry.dataloader import DataLoader
18
15
  from typing_extensions import TypeAlias
19
16
 
20
17
  from phoenix.db import models
21
18
  from phoenix.metrics.retrieval_metrics import RetrievalMetrics
22
19
  from phoenix.server.api.types.DocumentRetrievalMetrics import DocumentRetrievalMetrics
20
+ from phoenix.server.types import DbSessionFactory
23
21
 
24
22
  RowId: TypeAlias = int
25
23
  NumDocs: TypeAlias = int
@@ -30,7 +28,7 @@ Result: TypeAlias = List[DocumentRetrievalMetrics]
30
28
 
31
29
 
32
30
  class DocumentRetrievalMetricsDataLoader(DataLoader[Key, Result]):
33
- def __init__(self, db: Callable[[], AsyncContextManager[AsyncSession]]) -> None:
31
+ def __init__(self, db: DbSessionFactory) -> None:
34
32
  super().__init__(load_fn=self._load_fn)
35
33
  self._db = db
36
34
 
@@ -2,8 +2,6 @@ from collections import defaultdict
2
2
  from datetime import datetime
3
3
  from typing import (
4
4
  Any,
5
- AsyncContextManager,
6
- Callable,
7
5
  DefaultDict,
8
6
  List,
9
7
  Literal,
@@ -15,7 +13,6 @@ import pandas as pd
15
13
  from aioitertools.itertools import groupby
16
14
  from cachetools import LFUCache, TTLCache
17
15
  from sqlalchemy import Select, func, or_, select
18
- from sqlalchemy.ext.asyncio import AsyncSession
19
16
  from strawberry.dataloader import AbstractCache, DataLoader
20
17
  from typing_extensions import TypeAlias, assert_never
21
18
 
@@ -23,6 +20,7 @@ from phoenix.db import models
23
20
  from phoenix.server.api.dataloaders.cache import TwoTierCache
24
21
  from phoenix.server.api.input_types.TimeRange import TimeRange
25
22
  from phoenix.server.api.types.EvaluationSummary import EvaluationSummary
23
+ from phoenix.server.types import DbSessionFactory
26
24
  from phoenix.trace.dsl import SpanFilter
27
25
 
28
26
  Kind: TypeAlias = Literal["span", "trace"]
@@ -77,7 +75,7 @@ class EvaluationSummaryCache(
77
75
  class EvaluationSummaryDataLoader(DataLoader[Key, Result]):
78
76
  def __init__(
79
77
  self,
80
- db: Callable[[], AsyncContextManager[AsyncSession]],
78
+ db: DbSessionFactory,
81
79
  cache_map: Optional[AbstractCache[Key, Result]] = None,
82
80
  ) -> None:
83
81
  super().__init__(