arize-phoenix 4.10.2rc2__py3-none-any.whl → 4.12.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.10.2rc2.dist-info → arize_phoenix-4.12.0.dist-info}/METADATA +3 -4
- {arize_phoenix-4.10.2rc2.dist-info → arize_phoenix-4.12.0.dist-info}/RECORD +29 -29
- phoenix/server/api/context.py +7 -3
- phoenix/server/api/openapi/main.py +2 -18
- phoenix/server/api/openapi/schema.py +12 -12
- phoenix/server/api/routers/v1/__init__.py +83 -36
- phoenix/server/api/routers/v1/dataset_examples.py +123 -102
- phoenix/server/api/routers/v1/datasets.py +507 -389
- phoenix/server/api/routers/v1/evaluations.py +66 -73
- phoenix/server/api/routers/v1/experiment_evaluations.py +91 -67
- phoenix/server/api/routers/v1/experiment_runs.py +155 -97
- phoenix/server/api/routers/v1/experiments.py +181 -131
- phoenix/server/api/routers/v1/spans.py +173 -143
- phoenix/server/api/routers/v1/traces.py +128 -114
- phoenix/server/api/types/Span.py +1 -0
- phoenix/server/app.py +176 -148
- phoenix/server/openapi/docs.py +221 -0
- phoenix/server/static/index.js +574 -573
- phoenix/server/thread_server.py +2 -2
- phoenix/session/client.py +5 -0
- phoenix/session/data_extractor.py +20 -1
- phoenix/session/session.py +4 -0
- phoenix/trace/attributes.py +2 -1
- phoenix/trace/schemas.py +1 -0
- phoenix/trace/span_json_decoder.py +1 -1
- phoenix/version.py +1 -1
- phoenix/server/api/routers/v1/utils.py +0 -94
- {arize_phoenix-4.10.2rc2.dist-info → arize_phoenix-4.12.0.dist-info}/WHEEL +0 -0
- {arize_phoenix-4.10.2rc2.dist-info → arize_phoenix-4.12.0.dist-info}/licenses/IP_NOTICE +0 -0
- {arize_phoenix-4.10.2rc2.dist-info → arize_phoenix-4.12.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.
|
|
3
|
+
Version: 4.12.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,7 +22,6 @@ 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
|
|
26
25
|
Requires-Dist: grpcio
|
|
27
26
|
Requires-Dist: hdbscan>=0.8.33
|
|
28
27
|
Requires-Dist: httpx
|
|
@@ -41,8 +40,8 @@ Requires-Dist: pandas>=1.0
|
|
|
41
40
|
Requires-Dist: protobuf<6.0,>=3.20
|
|
42
41
|
Requires-Dist: psutil
|
|
43
42
|
Requires-Dist: pyarrow
|
|
44
|
-
Requires-Dist: pydantic<3,>=1.0
|
|
45
43
|
Requires-Dist: python-multipart
|
|
44
|
+
Requires-Dist: pyyaml
|
|
46
45
|
Requires-Dist: scikit-learn
|
|
47
46
|
Requires-Dist: scipy
|
|
48
47
|
Requires-Dist: sqlalchemy[asyncio]<3,>=2.0.4
|
|
@@ -57,9 +56,9 @@ Requires-Dist: uvicorn
|
|
|
57
56
|
Requires-Dist: wrapt
|
|
58
57
|
Provides-Extra: container
|
|
59
58
|
Requires-Dist: opentelemetry-exporter-otlp; extra == 'container'
|
|
60
|
-
Requires-Dist: opentelemetry-instrumentation-fastapi; extra == 'container'
|
|
61
59
|
Requires-Dist: opentelemetry-instrumentation-grpc; extra == 'container'
|
|
62
60
|
Requires-Dist: opentelemetry-instrumentation-sqlalchemy; extra == 'container'
|
|
61
|
+
Requires-Dist: opentelemetry-instrumentation-starlette; extra == 'container'
|
|
63
62
|
Requires-Dist: opentelemetry-proto>=1.12.0; extra == 'container'
|
|
64
63
|
Requires-Dist: opentelemetry-sdk; extra == 'container'
|
|
65
64
|
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=
|
|
8
|
+
phoenix/version.py,sha256=9_rjNIUWzOiKovqqHwkK6uutw92pT3W8pK64nmjrESc,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
|
|
@@ -60,14 +60,14 @@ 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=
|
|
63
|
+
phoenix/server/app.py,sha256=KlvL1Rg9bC1khIip7Rv9ADR9mpEhCiu1in-8WLlw-bc,18647
|
|
64
64
|
phoenix/server/grpc_server.py,sha256=faktLxEtWGlCB1bPR4QwwTsRoQloahKMx0hAWqRGI5s,3379
|
|
65
65
|
phoenix/server/main.py,sha256=GpjmstVb4o-xjg0u7t4z1WXRmdxWMOw_XhQ7tPc7Fd8,11113
|
|
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=
|
|
68
|
+
phoenix/server/thread_server.py,sha256=dP6cm6Cf08jNhDA1TRlVZpziu1YgtPDmaeIJMm725eI,2154
|
|
69
69
|
phoenix/server/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
70
|
-
phoenix/server/api/context.py,sha256=
|
|
70
|
+
phoenix/server/api/context.py,sha256=DiK2IRMBbMvBF0uK20YBftApJXau4GSDHltVZX2yERQ,2957
|
|
71
71
|
phoenix/server/api/interceptor.py,sha256=ykDnoC_apUd-llVli3m1CW18kNSIgjz2qZ6m5JmPDu8,1294
|
|
72
72
|
phoenix/server/api/queries.py,sha256=eq2xHaQF-x4k6AGSY6b6mU2pie9bj-AJML6P2Mr0_DM,19886
|
|
73
73
|
phoenix/server/api/schema.py,sha256=BcxdqO5CSGqpKd-AAJHMjFlzaK9oJA8GJuxmMfcdjn4,434
|
|
@@ -134,20 +134,19 @@ phoenix/server/api/mutations/project_mutations.py,sha256=d_xtYkYfZ5flpVgEkGknKB8
|
|
|
134
134
|
phoenix/server/api/mutations/span_annotations_mutations.py,sha256=Pfaq4y-FGskPit4z_9GvsyWeBwK1g3CDi2UhGKxyjFE,4973
|
|
135
135
|
phoenix/server/api/mutations/trace_annotations_mutations.py,sha256=4xm-zg8PEjwjfVRsWzBD_iiOS94JI6UYtK3fV2dtA4M,5013
|
|
136
136
|
phoenix/server/api/openapi/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
137
|
-
phoenix/server/api/openapi/main.py,sha256=
|
|
138
|
-
phoenix/server/api/openapi/schema.py,sha256=
|
|
137
|
+
phoenix/server/api/openapi/main.py,sha256=WY0pj3B7siQyyYqKyhqnzWC7P8MtEtiukOBUjGwLXfw,153
|
|
138
|
+
phoenix/server/api/openapi/schema.py,sha256=uuSYe1Ecu72aXRgTNjyMu-9ZPE13DAHJPKtedS-MsSs,451
|
|
139
139
|
phoenix/server/api/routers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
140
140
|
phoenix/server/api/routers/utils.py,sha256=M41BoH-fl37izhRuN2aX7lWm7jOC20A_3uClv9TVUUY,583
|
|
141
|
-
phoenix/server/api/routers/v1/__init__.py,sha256=
|
|
142
|
-
phoenix/server/api/routers/v1/dataset_examples.py,sha256=
|
|
143
|
-
phoenix/server/api/routers/v1/datasets.py,sha256=
|
|
144
|
-
phoenix/server/api/routers/v1/evaluations.py,sha256=
|
|
145
|
-
phoenix/server/api/routers/v1/experiment_evaluations.py,sha256=
|
|
146
|
-
phoenix/server/api/routers/v1/experiment_runs.py,sha256=
|
|
147
|
-
phoenix/server/api/routers/v1/experiments.py,sha256=
|
|
148
|
-
phoenix/server/api/routers/v1/spans.py,sha256=
|
|
149
|
-
phoenix/server/api/routers/v1/traces.py,sha256=
|
|
150
|
-
phoenix/server/api/routers/v1/utils.py,sha256=R2WxEpTyi4Z94K8tyt-a4dMYGh4jP0a_lbJ33FG_dKc,3045
|
|
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
|
|
151
150
|
phoenix/server/api/types/Annotation.py,sha256=7Ym7iuVcbwHlw2yIRylz4nATAF_Cm-Z17qcjiooj1cc,751
|
|
152
151
|
phoenix/server/api/types/AnnotatorKind.py,sha256=rPgGdbN1Gvc109sGQ_ZH-gfJbp93V9wlarzTEJNtUwI,236
|
|
153
152
|
phoenix/server/api/types/Cluster.py,sha256=ac4YfT1OH3xLVmex7EUmB6b9IpULnhLTt554LR0jglE,5689
|
|
@@ -191,7 +190,7 @@ phoenix/server/api/types/Retrieval.py,sha256=OhMK2ncjoyp5h1yjKhjlKpoTbQrMHuxmgSF
|
|
|
191
190
|
phoenix/server/api/types/ScalarDriftMetricEnum.py,sha256=IUAcRPpgL41WdoIgK6cNk2Te38SspXGyEs-S1fY23_A,232
|
|
192
191
|
phoenix/server/api/types/Segments.py,sha256=m2yoegrxA1Tn7ZAy1rMjjD1isc752MaAXMoffkBlvrM,2921
|
|
193
192
|
phoenix/server/api/types/SortDir.py,sha256=OUpXhlCzCxPoXSDkJJygEs9Rw9pMymfaZUG5zPTrw4Y,152
|
|
194
|
-
phoenix/server/api/types/Span.py,sha256=
|
|
193
|
+
phoenix/server/api/types/Span.py,sha256=Qlz5G_gjyy_jpadfc7CD9xB6TekCCySeEqM_hihcrhM,14208
|
|
195
194
|
phoenix/server/api/types/SpanAnnotation.py,sha256=6b5G-b_OoRvDL2ayWk7MkbqarLK-F-pQMx21CpUuNGY,1168
|
|
196
195
|
phoenix/server/api/types/TimeSeries.py,sha256=wjzuxHFqCey0O7Ys25qiXyuqXK8an-osyNWUE8A_8G4,5227
|
|
197
196
|
phoenix/server/api/types/Trace.py,sha256=ep-mPexub1ijxAnBvc2KrGsNVXO2SfDR1WxqER2wcD8,2376
|
|
@@ -203,6 +202,7 @@ phoenix/server/api/types/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZ
|
|
|
203
202
|
phoenix/server/api/types/node.py,sha256=V0Xh9U4cGkz3iMg-vzEXtcs6cumU29JFPiU-JuGzjWI,848
|
|
204
203
|
phoenix/server/api/types/pagination.py,sha256=PcaJ0s4exsTKgCZC4aFm1cgZNrGpHSdo6PbkWzPcweg,9077
|
|
205
204
|
phoenix/server/openapi/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
205
|
+
phoenix/server/openapi/docs.py,sha256=fTb9q2oOSKC5bLVQy2Dsg3Bs0mGkCOKX1ypX7731sE0,7044
|
|
206
206
|
phoenix/server/static/apple-touch-icon-114x114.png,sha256=xtFVXAYQnJkpUApg2D1hltSTuyO4Is4sD4A0ZkikiVU,9486
|
|
207
207
|
phoenix/server/static/apple-touch-icon-120x120.png,sha256=iqZVAk634BbjJMozA8aHYyw15JjhIlIrG41FA2DFFaE,9957
|
|
208
208
|
phoenix/server/static/apple-touch-icon-144x144.png,sha256=VgARtkHKoU8zikb3_G83h_cb02kpPcoJqO78yRh1AfU,10047
|
|
@@ -213,26 +213,26 @@ phoenix/server/static/apple-touch-icon-76x76.png,sha256=CT_xT12I0u2i0WU8JzBZBuOQ
|
|
|
213
213
|
phoenix/server/static/apple-touch-icon.png,sha256=fOfpjqGpWYbJ0eAurKsyoZP1EAs6ZVooBJ_SGk2ZkDs,3801
|
|
214
214
|
phoenix/server/static/favicon.ico,sha256=bY0vvCKRftemZfPShwZtE93DiiQdaYaozkPGwNFr6H8,34494
|
|
215
215
|
phoenix/server/static/index.css,sha256=KKGpx4iwF91VGRm0YN-4cn8oC-oIqC6HecoPf0x3ZM8,1885
|
|
216
|
-
phoenix/server/static/index.js,sha256=
|
|
216
|
+
phoenix/server/static/index.js,sha256=zEiit1tVmnkPIG4f33wDlbC-G8mz0ubglGBiE2DE4D8,3536640
|
|
217
217
|
phoenix/server/static/modernizr.js,sha256=mvK-XtkNqjOral-QvzoqsyOMECXIMu5BQwSVN_wcU9c,2564
|
|
218
218
|
phoenix/server/templates/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
219
219
|
phoenix/server/templates/index.html,sha256=S4z7qSoNSwnKFAH9r96AR-YJEyoKMd-VMWVlJ_IdzME,2039
|
|
220
220
|
phoenix/session/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
221
|
-
phoenix/session/client.py,sha256=
|
|
222
|
-
phoenix/session/data_extractor.py,sha256=
|
|
221
|
+
phoenix/session/client.py,sha256=aq5AhgyoI-rJU5eTNFAk8SzdBl6hiZvj7fWrC09s4aI,32523
|
|
222
|
+
phoenix/session/data_extractor.py,sha256=gkEM3WWZAlWGMfRgQopAQlid4cSi6GNco-sdrGir0qc,2788
|
|
223
223
|
phoenix/session/evaluation.py,sha256=aKeV8UVOyq3b7CYOwt3cWuLz0xzvMjX7vlEPILJ_fcs,5311
|
|
224
|
-
phoenix/session/session.py,sha256=
|
|
224
|
+
phoenix/session/session.py,sha256=1ZGR0pBmah8bqX353MDf4sq7XuK904EfxNLo0B9z_sU,26714
|
|
225
225
|
phoenix/trace/__init__.py,sha256=ujk_uYjM8gmm-YqnyXxF-kekfwid0bcaPMTtNNcaw6U,407
|
|
226
|
-
phoenix/trace/attributes.py,sha256=
|
|
226
|
+
phoenix/trace/attributes.py,sha256=B_OrzVaxZwFkrAFXZyicYoIti1UdUysURsvUS2GyW1U,12488
|
|
227
227
|
phoenix/trace/errors.py,sha256=wB1z8qdPckngdfU-TORToekvg3344oNFAA83_hC2yFY,180
|
|
228
228
|
phoenix/trace/evaluation_conventions.py,sha256=t8jydM3U0-T5YpiQKRJ3tWdWGlHtzKyttYdw-ddvPOk,1048
|
|
229
229
|
phoenix/trace/exporter.py,sha256=eAYemdvDCHMugDJiaR29BFFMTQBdf3oerdkz34Cl3hE,4736
|
|
230
230
|
phoenix/trace/fixtures.py,sha256=tDso17oAYMBQ8GJsAlHFzrC0otXPzUOEh4TgIjEfB7M,14260
|
|
231
231
|
phoenix/trace/otel.py,sha256=WA720jvRadiZBAKjsYoPyXzypHwbyEK2OZRVUwtbjB8,9976
|
|
232
232
|
phoenix/trace/projects.py,sha256=2BwlNjFE-uwpqYtCu5YyBiYZk9wRPpM13vh3-Cv7GkA,2157
|
|
233
|
-
phoenix/trace/schemas.py,sha256=
|
|
233
|
+
phoenix/trace/schemas.py,sha256=HpWSyzec0yDHEQXEDuwyLbhpvKrqkGps8BJqGiIFj8Y,5978
|
|
234
234
|
phoenix/trace/span_evaluations.py,sha256=GaADtJLi2njra4aYaie0BIwkSgdxPB_SNseglI4ykZA,13104
|
|
235
|
-
phoenix/trace/span_json_decoder.py,sha256=
|
|
235
|
+
phoenix/trace/span_json_decoder.py,sha256=jkpYSmOUsSptvahOvetrPjVkPIuI4h6b87eizL8wHp8,3230
|
|
236
236
|
phoenix/trace/span_json_encoder.py,sha256=tzSCIQJbeFBm33K68G8A5M12n_86tCDyuU0WAobxEz4,2010
|
|
237
237
|
phoenix/trace/trace_dataset.py,sha256=Wq89jJ4hYQ1Qt-Uj11ZNzKQYQeKmGY6NqWStQiiTlMw,14351
|
|
238
238
|
phoenix/trace/utils.py,sha256=7LurVGXn245cjj4MJsc7v6jq4DSJkpK6YGBfIaSywuw,1307
|
|
@@ -258,8 +258,8 @@ phoenix/utilities/logging.py,sha256=lDXd6EGaamBNcQxL4vP1au9-i_SXe0OraUDiJOcszSw,
|
|
|
258
258
|
phoenix/utilities/project.py,sha256=qWsvKnG1oKhOFUowXf9qiOL2ia7jaFe_ijFFHEt8GJo,431
|
|
259
259
|
phoenix/utilities/re.py,sha256=PDve_OLjRTM8yQQJHC8-n3HdIONi7aNils3ZKRZ5uBM,2045
|
|
260
260
|
phoenix/utilities/span_store.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
261
|
-
arize_phoenix-4.
|
|
262
|
-
arize_phoenix-4.
|
|
263
|
-
arize_phoenix-4.
|
|
264
|
-
arize_phoenix-4.
|
|
265
|
-
arize_phoenix-4.
|
|
261
|
+
arize_phoenix-4.12.0.dist-info/METADATA,sha256=yRWT2d7_4-k9Rjp9J6zxChgtOf23SKqEYTblCmR_Bf4,11452
|
|
262
|
+
arize_phoenix-4.12.0.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
|
|
263
|
+
arize_phoenix-4.12.0.dist-info/licenses/IP_NOTICE,sha256=JBqyyCYYxGDfzQ0TtsQgjts41IJoa-hiwDrBjCb9gHM,469
|
|
264
|
+
arize_phoenix-4.12.0.dist-info/licenses/LICENSE,sha256=HFkW9REuMOkvKRACuwLPT0hRydHb3zNg-fdFt94td18,3794
|
|
265
|
+
arize_phoenix-4.12.0.dist-info/RECORD,,
|
phoenix/server/api/context.py
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
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
|
|
4
|
+
from typing import AsyncContextManager, Callable, Optional, Union
|
|
5
5
|
|
|
6
6
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
7
|
-
from
|
|
7
|
+
from starlette.requests import Request
|
|
8
|
+
from starlette.responses import Response
|
|
9
|
+
from starlette.websockets import WebSocket
|
|
8
10
|
from typing_extensions import TypeAlias
|
|
9
11
|
|
|
10
12
|
from phoenix.core.model_schema import Model
|
|
@@ -65,7 +67,9 @@ ProjectRowId: TypeAlias = int
|
|
|
65
67
|
|
|
66
68
|
|
|
67
69
|
@dataclass
|
|
68
|
-
class Context
|
|
70
|
+
class Context:
|
|
71
|
+
request: Union[Request, WebSocket]
|
|
72
|
+
response: Optional[Response]
|
|
69
73
|
db: Callable[[], AsyncContextManager[AsyncSession]]
|
|
70
74
|
data_loaders: DataLoaders
|
|
71
75
|
cache_for_dataloaders: Optional[CacheForDataLoaders]
|
|
@@ -1,22 +1,6 @@
|
|
|
1
|
-
import json
|
|
2
|
-
from argparse import ArgumentParser
|
|
3
|
-
from typing import Optional, Tuple
|
|
4
|
-
|
|
5
1
|
from .schema import get_openapi_schema
|
|
6
2
|
|
|
7
3
|
if __name__ == "__main__":
|
|
8
|
-
|
|
9
|
-
parser.add_argument(
|
|
10
|
-
"--compress",
|
|
11
|
-
action="store_true",
|
|
12
|
-
help="Whether to output a compressed version of the OpenAPI schema",
|
|
13
|
-
)
|
|
14
|
-
args = parser.parse_args()
|
|
4
|
+
import yaml # type: ignore
|
|
15
5
|
|
|
16
|
-
indent
|
|
17
|
-
separator: Optional[Tuple[str, str]] = None
|
|
18
|
-
if args.compress:
|
|
19
|
-
separator = (",", ":")
|
|
20
|
-
else:
|
|
21
|
-
indent = 2
|
|
22
|
-
print(json.dumps(get_openapi_schema(), indent=indent, separators=separator))
|
|
6
|
+
print(yaml.dump(get_openapi_schema(), indent=2))
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
from typing import Any
|
|
1
|
+
from typing import Any
|
|
2
2
|
|
|
3
|
-
from
|
|
3
|
+
from starlette.schemas import SchemaGenerator
|
|
4
4
|
|
|
5
|
-
from phoenix.server.api.routers.v1 import
|
|
6
|
-
from phoenix.server.api.routers.v1 import router as v1_router
|
|
5
|
+
from phoenix.server.api.routers.v1 import V1_ROUTES
|
|
7
6
|
|
|
7
|
+
OPENAPI_SCHEMA_GENERATOR = SchemaGenerator(
|
|
8
|
+
{"openapi": "3.0.0", "info": {"title": "Arize-Phoenix API", "version": "1.0"}}
|
|
9
|
+
)
|
|
8
10
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
routes=v1_router.routes,
|
|
16
|
-
)
|
|
11
|
+
|
|
12
|
+
def get_openapi_schema() -> Any:
|
|
13
|
+
"""
|
|
14
|
+
Exports an OpenAPI schema for the Phoenix REST API as a JSON object.
|
|
15
|
+
"""
|
|
16
|
+
return OPENAPI_SCHEMA_GENERATOR.get_schema(V1_ROUTES) # type: ignore
|
|
@@ -1,42 +1,89 @@
|
|
|
1
|
-
from
|
|
2
|
-
from starlette.status import HTTP_403_FORBIDDEN
|
|
1
|
+
from typing import Any, Awaitable, Callable, Mapping, Tuple
|
|
3
2
|
|
|
4
|
-
|
|
5
|
-
from
|
|
6
|
-
from .
|
|
7
|
-
from .
|
|
8
|
-
from .
|
|
9
|
-
from .spans import router as spans_router
|
|
10
|
-
from .traces import router as traces_router
|
|
11
|
-
from .utils import add_errors_to_responses
|
|
3
|
+
import wrapt
|
|
4
|
+
from starlette import routing
|
|
5
|
+
from starlette.requests import Request
|
|
6
|
+
from starlette.responses import Response
|
|
7
|
+
from starlette.status import HTTP_403_FORBIDDEN
|
|
12
8
|
|
|
13
|
-
|
|
9
|
+
from . import (
|
|
10
|
+
datasets,
|
|
11
|
+
evaluations,
|
|
12
|
+
experiment_evaluations,
|
|
13
|
+
experiment_runs,
|
|
14
|
+
experiments,
|
|
15
|
+
spans,
|
|
16
|
+
traces,
|
|
17
|
+
)
|
|
18
|
+
from .dataset_examples import list_dataset_examples
|
|
14
19
|
|
|
15
20
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
21
|
+
@wrapt.decorator # type: ignore
|
|
22
|
+
async def forbid_if_readonly(
|
|
23
|
+
wrapped: Callable[[Request], Awaitable[Response]],
|
|
24
|
+
_: Any,
|
|
25
|
+
args: Tuple[Request],
|
|
26
|
+
kwargs: Mapping[str, Any],
|
|
27
|
+
) -> Response:
|
|
28
|
+
request, *_ = args
|
|
20
29
|
if request.app.state.read_only:
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
30
|
+
return Response(status_code=HTTP_403_FORBIDDEN)
|
|
31
|
+
return await wrapped(*args, **kwargs)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
class Route(routing.Route):
|
|
35
|
+
def __init__(self, path: str, endpoint: Callable[..., Any], **kwargs: Any) -> None:
|
|
36
|
+
super().__init__(path, forbid_if_readonly(endpoint), **kwargs)
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
V1_ROUTES = [
|
|
40
|
+
Route("/v1/evaluations", evaluations.post_evaluations, methods=["POST"]),
|
|
41
|
+
Route("/v1/evaluations", evaluations.get_evaluations, methods=["GET"]),
|
|
42
|
+
Route("/v1/traces", traces.post_traces, methods=["POST"]),
|
|
43
|
+
Route("/v1/trace_annotations", traces.annotate_traces, methods=["POST"]),
|
|
44
|
+
Route("/v1/spans", spans.query_spans_handler, methods=["POST"]),
|
|
45
|
+
Route("/v1/spans", spans.get_spans_handler, methods=["GET"]),
|
|
46
|
+
Route("/v1/span_annotations", spans.annotate_spans, methods=["POST"]),
|
|
47
|
+
Route("/v1/datasets/upload", datasets.post_datasets_upload, methods=["POST"]),
|
|
48
|
+
Route("/v1/datasets", datasets.list_datasets, methods=["GET"]),
|
|
49
|
+
Route("/v1/datasets/{id:str}", datasets.delete_dataset_by_id, methods=["DELETE"]),
|
|
50
|
+
Route("/v1/datasets/{id:str}", datasets.get_dataset_by_id, methods=["GET"]),
|
|
51
|
+
Route("/v1/datasets/{id:str}/csv", datasets.get_dataset_csv, methods=["GET"]),
|
|
52
|
+
Route(
|
|
53
|
+
"/v1/datasets/{id:str}/jsonl/openai_ft",
|
|
54
|
+
datasets.get_dataset_jsonl_openai_ft,
|
|
55
|
+
methods=["GET"],
|
|
34
56
|
),
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
57
|
+
Route(
|
|
58
|
+
"/v1/datasets/{id:str}/jsonl/openai_evals",
|
|
59
|
+
datasets.get_dataset_jsonl_openai_evals,
|
|
60
|
+
methods=["GET"],
|
|
61
|
+
),
|
|
62
|
+
Route("/v1/datasets/{id:str}/examples", list_dataset_examples, methods=["GET"]),
|
|
63
|
+
Route("/v1/datasets/{id:str}/versions", datasets.get_dataset_versions, methods=["GET"]),
|
|
64
|
+
Route(
|
|
65
|
+
"/v1/datasets/{dataset_id:str}/experiments",
|
|
66
|
+
experiments.create_experiment,
|
|
67
|
+
methods=["POST"],
|
|
68
|
+
),
|
|
69
|
+
Route(
|
|
70
|
+
"/v1/experiments/{experiment_id:str}",
|
|
71
|
+
experiments.read_experiment,
|
|
72
|
+
methods=["GET"],
|
|
73
|
+
),
|
|
74
|
+
Route(
|
|
75
|
+
"/v1/experiments/{experiment_id:str}/runs",
|
|
76
|
+
experiment_runs.create_experiment_run,
|
|
77
|
+
methods=["POST"],
|
|
78
|
+
),
|
|
79
|
+
Route(
|
|
80
|
+
"/v1/experiments/{experiment_id:str}/runs",
|
|
81
|
+
experiment_runs.list_experiment_runs,
|
|
82
|
+
methods=["GET"],
|
|
83
|
+
),
|
|
84
|
+
Route(
|
|
85
|
+
"/v1/experiment_evaluations",
|
|
86
|
+
experiment_evaluations.upsert_experiment_evaluation,
|
|
87
|
+
methods=["POST"],
|
|
88
|
+
),
|
|
89
|
+
]
|