arize-phoenix 7.1.0__py3-none-any.whl → 7.2.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.

@@ -1,19 +1,22 @@
1
- Metadata-Version: 2.3
1
+ Metadata-Version: 2.4
2
2
  Name: arize-phoenix
3
- Version: 7.1.0
3
+ Version: 7.2.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
7
7
  Project-URL: Source, https://github.com/Arize-ai/phoenix
8
8
  Author-email: Arize AI <phoenix-devs@arize.com>
9
9
  License: Elastic-2.0
10
+ License-File: IP_NOTICE
11
+ License-File: LICENSE
10
12
  Keywords: Explainability,Monitoring,Observability
11
13
  Classifier: Programming Language :: Python
12
14
  Classifier: Programming Language :: Python :: 3.9
13
15
  Classifier: Programming Language :: Python :: 3.10
14
16
  Classifier: Programming Language :: Python :: 3.11
15
17
  Classifier: Programming Language :: Python :: 3.12
16
- Requires-Python: <3.13,>=3.9
18
+ Classifier: Programming Language :: Python :: 3.13
19
+ Requires-Python: <3.14,>=3.9
17
20
  Requires-Dist: aioitertools
18
21
  Requires-Dist: aiosqlite
19
22
  Requires-Dist: alembic<2,>=1.3.0
@@ -44,13 +47,13 @@ Requires-Dist: scipy
44
47
  Requires-Dist: sqlalchemy[asyncio]<3,>=2.0.4
45
48
  Requires-Dist: sqlean-py>=3.45.1
46
49
  Requires-Dist: starlette
47
- Requires-Dist: strawberry-graphql==0.247.0
50
+ Requires-Dist: strawberry-graphql==0.253.1
48
51
  Requires-Dist: tqdm
49
52
  Requires-Dist: typing-extensions>=4.6
50
53
  Requires-Dist: uvicorn
51
54
  Requires-Dist: websockets
52
- Requires-Dist: wrapt; sys_platform != 'darwin'
53
- Requires-Dist: wrapt<1.17; sys_platform == 'darwin'
55
+ Requires-Dist: wrapt<1.17; sys_platform == 'darwin' and platform_machine == 'x86_64'
56
+ Requires-Dist: wrapt>=1.17; sys_platform != 'darwin' or platform_machine != 'x86_64'
54
57
  Provides-Extra: container
55
58
  Requires-Dist: anthropic; extra == 'container'
56
59
  Requires-Dist: fast-hdbscan>=0.2.0; extra == 'container'
@@ -66,7 +69,7 @@ Requires-Dist: opentelemetry-sdk; extra == 'container'
66
69
  Requires-Dist: opentelemetry-semantic-conventions; extra == 'container'
67
70
  Requires-Dist: prometheus-client; extra == 'container'
68
71
  Requires-Dist: py-grpc-prometheus; extra == 'container'
69
- Requires-Dist: strawberry-graphql[opentelemetry]==0.247.0; extra == 'container'
72
+ Requires-Dist: strawberry-graphql[opentelemetry]==0.253.1; extra == 'container'
70
73
  Requires-Dist: umap-learn; extra == 'container'
71
74
  Requires-Dist: uvloop; (platform_system != 'Windows') and extra == 'container'
72
75
  Provides-Extra: dev
@@ -97,7 +100,7 @@ Requires-Dist: pytest-postgresql; extra == 'dev'
97
100
  Requires-Dist: pytest-xdist; extra == 'dev'
98
101
  Requires-Dist: pytest==8.3.3; extra == 'dev'
99
102
  Requires-Dist: ruff==0.6.9; extra == 'dev'
100
- Requires-Dist: strawberry-graphql[debug-server,opentelemetry]==0.247.0; extra == 'dev'
103
+ Requires-Dist: strawberry-graphql[debug-server,opentelemetry]==0.253.1; extra == 'dev'
101
104
  Requires-Dist: tabulate; extra == 'dev'
102
105
  Requires-Dist: tox-uv==1.11.3; extra == 'dev'
103
106
  Requires-Dist: tox==4.18.1; extra == 'dev'
@@ -153,12 +156,12 @@ Description-Content-Type: text/markdown
153
156
 
154
157
  Phoenix is an open-source AI observability platform designed for experimentation, evaluation, and troubleshooting. It provides:
155
158
 
156
- - [**_Tracing_**](https://docs.arize.com/phoenix/tracing/integrations-tracing/llm-traces) - Trace your LLM application's runtime using OpenTelemetry-based instrumentation.
159
+ - [**_Tracing_**](https://docs.arize.com/phoenix/tracing/llm-traces) - Trace your LLM application's runtime using OpenTelemetry-based instrumentation.
157
160
  - [**_Evaluation_**](https://docs.arize.com/phoenix/evaluation/llm-evals) - Leverage LLMs to benchmark your application's performance using response and retrieval evals.
158
161
  - [**_Datasets_**](https://docs.arize.com/phoenix/datasets-and-experiments/overview-datasets) - Create versioned datasets of examples for experimentation, evaluation, and fine-tuning.
159
162
  - [**_Experiments_**](https://docs.arize.com/phoenix/datasets-and-experiments/overview-datasets#experiments) - Track and evaluate changes to prompts, LLMs, and retrieval.
160
163
 
161
- Phoenix is vendor and language agnostic with out-of-the-box support for popular frameworks (🦙[LlamaIndex](https://docs.arize.com/phoenix/tracing/integrations-tracing/integrations-tracing/llamaindex), 🦜⛓[LangChain](https://docs.arize.com/phoenix/tracing/integrations-tracing/integrations-tracing/langchain), [Haystack](https://docs.arize.com/phoenix/tracing/integrations-tracing/integrations-tracing/haystack), 🧩[DSPy](https://docs.arize.com/phoenix/tracing/integrations-tracing/integrations-tracing/dspy)) and LLM providers ([OpenAI](https://docs.arize.com/phoenix/tracing/integrations-tracing/integrations-tracing/openai), [Bedrock](https://docs.arize.com/phoenix/tracing/integrations-tracing/integrations-tracing/bedrock), [MistralAI](https://docs.arize.com/phoenix/tracing/integrations-tracing/integrations-tracing/mistralai), [VertexAI](https://docs.arize.com/phoenix/tracing/integrations-tracing/integrations-tracing/vertexai), [LiteLLM](https://docs.arize.com/phoenix/tracing/integrations-tracing/integrations-tracing/litellm), and more). For details on auto-instrumentation, check out the [OpenInference](https://github.com/Arize-ai/openinference) project.
164
+ Phoenix is vendor and language agnostic with out-of-the-box support for popular frameworks (🦙[LlamaIndex](https://docs.arize.com/phoenix/tracing/integrations-tracing/llamaindex), 🦜⛓[LangChain](https://docs.arize.com/phoenix/tracing/integrations-tracing/langchain), [Haystack](https://docs.arize.com/phoenix/tracing/integrations-tracing/haystack), 🧩[DSPy](https://docs.arize.com/phoenix/tracing/integrations-tracing/dspy)) and LLM providers ([OpenAI](https://docs.arize.com/phoenix/tracing/integrations-tracing/openai), [Bedrock](https://docs.arize.com/phoenix/tracing/integrations-tracing/bedrock), [MistralAI](https://docs.arize.com/phoenix/tracing/integrations-tracing/mistralai), [VertexAI](https://docs.arize.com/phoenix/tracing/integrations-tracing/vertexai), [LiteLLM](https://docs.arize.com/phoenix/tracing/integrations-tracing/litellm), and more). For details on auto-instrumentation, check out the [OpenInference](https://github.com/Arize-ai/openinference) project.
162
165
 
163
166
  Phoenix runs practically anywhere, including your Jupyter notebook, local machine, containerized deployment, or in the cloud.
164
167
 
@@ -191,9 +194,9 @@ Phoenix container images are available via [Docker Hub](https://hub.docker.com/r
191
194
  | REST API | ✅ |
192
195
  | GraphQL API | ✅ |
193
196
  | Data Retention | Customizable |
194
- | Authentication | ✅ |
195
- | Social Login | ✅ |
196
- | RBAC | ✅ |
197
+ | [Authentication](https://docs.arize.com/phoenix/deployment/authentication) | ✅ |
198
+ | [Social Login](https://docs.arize.com/phoenix/deployment/authentication#configuring-oauth2-identity-providers) | ✅ |
199
+ | [RBAC](https://docs.arize.com/phoenix/deployment/authentication#permissions) | ✅ |
197
200
  | Projects | ✅ |
198
201
  | [Self-Hosting](https://docs.arize.com/phoenix/deployment) | ✅ |
199
202
  | Jupyter Notebooks | ✅ |
@@ -243,7 +246,6 @@ Join our community to connect with thousands of AI builders.
243
246
  - 🌟 Leave a star on our [GitHub](https://github.com/Arize-ai/phoenix).
244
247
  - 🐞 Report bugs with [GitHub Issues](https://github.com/Arize-ai/phoenix/issues).
245
248
  - 𝕏 Follow us on [𝕏](https://twitter.com/ArizePhoenix).
246
- - 💌️ Sign up for our [mailing list](https://phoenix.arize.com/#updates).
247
249
  - 🗺️ Check out our [roadmap](https://github.com/orgs/Arize-ai/projects/45) to see where we're heading next.
248
250
 
249
251
  ## Breaking Changes
@@ -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=kpW1WL0kiB8XJsO6XycvZVJ-lBkNoenhQ7atCvBoSe8,5365
8
8
  phoenix/settings.py,sha256=ht-0oN-sMV6SPXrk7Tu1EZlngpAYkGNLYPhO8DyrdQI,661
9
- phoenix/version.py,sha256=vrQk6cOG_uk0gOqN4qh7NRCxezXfvhv9tT7bwYHyTck,22
9
+ phoenix/version.py,sha256=LltgKarREAvEui2nrEP4Zpe6CPFpqvS_Hp12Nz9Xgi4,22
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
@@ -88,7 +88,7 @@ phoenix/server/prometheus.py,sha256=x9zV3M8VeZ9GS32SLr5OxNdi1VaxvdHCZPx2zI8Hoa4,
88
88
  phoenix/server/rate_limiters.py,sha256=cFc73D2NaxqNZZDbwfIDw4So-fRVOJPBtqxOZ8Qky_s,7155
89
89
  phoenix/server/telemetry.py,sha256=4EluDDrhdDPxAjaW6lVSbi73xkB5XeUCZWOmZGdk0hg,2755
90
90
  phoenix/server/thread_server.py,sha256=Ea2AWreN1lwJsT2wYvGaRaiXrzBqH4kgkZpx0FO5Ocw,2144
91
- phoenix/server/types.py,sha256=Ur73LKRB3VlvBDN95gKJoDIdmauuR-r1rpO1rNHm9kA,7209
91
+ phoenix/server/types.py,sha256=gJJPBcDRkQ9VHZIt_aLqG_OBbGt1oWp4e3W3Jp61oKs,7409
92
92
  phoenix/server/api/README.md,sha256=Pyq1PLPgTzXAswrfIhGXrjI3Skq8it2jTVnanT6Ba4Q,1162
93
93
  phoenix/server/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
94
94
  phoenix/server/api/auth.py,sha256=nywpmfMI1trZTbZRD3oBj4kFjzg_vnxDljcM431T1eY,1246
@@ -116,7 +116,7 @@ phoenix/server/api/dataloaders/latency_ms_quantile.py,sha256=CHWV9nvEEM3xqpXWuby
116
116
  phoenix/server/api/dataloaders/min_start_or_max_end_times.py,sha256=1jYglTXv4S8k7OWSGdgeJ2OxVCmZtX8a6sjJp9GPZ04,2783
117
117
  phoenix/server/api/dataloaders/project_by_name.py,sha256=O24Rjs0ZQaYtSnPfA6YBQfbHfUgNsHKUcc_gIKyK9vo,1086
118
118
  phoenix/server/api/dataloaders/record_counts.py,sha256=NLlMEaJ-HxiJavqbSkMbzOrIRzqzYxO8-t2mfp1vXqM,4160
119
- phoenix/server/api/dataloaders/session_io.py,sha256=r-Zvn19qOo_JWATHtt5zwuwhHjiATLAGHRjoi4czd6U,3038
119
+ phoenix/server/api/dataloaders/session_io.py,sha256=1c2b-87KGHuF2sgeQvXmIv1-kFHEt6CfAvuH11jKfh4,3168
120
120
  phoenix/server/api/dataloaders/session_num_traces.py,sha256=lu5EMdQWQzEr_4wCiu7FycnIShjGf0yQXpwBG_DDzGs,1050
121
121
  phoenix/server/api/dataloaders/session_num_traces_with_error.py,sha256=Y5xmr4Nme2ZMfvJljW9yhBfuCNdGlxTRka0h9VdXdqA,1149
122
122
  phoenix/server/api/dataloaders/session_token_usages.py,sha256=9RXZUyzDmzp5WDp_BpmvvDhk5gIIaV97x0xxUM1H9bA,1586
@@ -147,7 +147,7 @@ phoenix/server/api/input_types/Coordinates.py,sha256=meTwbIjwTfqx5DGD2DBlH9wQzdQ
147
147
  phoenix/server/api/input_types/CreateDatasetInput.py,sha256=Q3MwouIx9jTQBRWDju75iMQXEGJCrL4aD4ESQp771nc,248
148
148
  phoenix/server/api/input_types/CreateSpanAnnotationInput.py,sha256=bKgT7bdA9-gYpJmqnMq9TEfjNDEYoldc17EjAglXVlU,474
149
149
  phoenix/server/api/input_types/CreateTraceAnnotationInput.py,sha256=iSukKAxt-gTTykpkttse3MVOTD3AOk6fWD-N5PaZ2yY,476
150
- phoenix/server/api/input_types/DataQualityMetricInput.py,sha256=LazvmQCCM5m9SDZTpyxQXO1rYF4cmsc3lsR2S9S65X4,1292
150
+ phoenix/server/api/input_types/DataQualityMetricInput.py,sha256=WPWRlqSejOnxlLqsbEwPCDgz8ocsyGSb-9SptdCjZEc,1361
151
151
  phoenix/server/api/input_types/DatasetExampleInput.py,sha256=9oJ6pCFxFd02IWJuK4YAUvz-jCgFGDUCDDb2--GAzCw,289
152
152
  phoenix/server/api/input_types/DatasetSort.py,sha256=KDKjx5L8WFNwx7O-g1pDzCMMwY-ErgDd1_HkkZBAvCY,333
153
153
  phoenix/server/api/input_types/DatasetVersionSort.py,sha256=w9HyP9rQKsZGiGc2f33ZNmiO9g7FN8r77T7GA85kb40,344
@@ -163,7 +163,7 @@ phoenix/server/api/input_types/InvocationParameters.py,sha256=Lg6-SKsx72Lb-jzjJL
163
163
  phoenix/server/api/input_types/PatchAnnotationInput.py,sha256=NWhkcbcGNPwfOYsN3wm5YFNNrSc5T-8Y5my74RK99HE,520
164
164
  phoenix/server/api/input_types/PatchDatasetExamplesInput.py,sha256=_uMqkAInhLDvzUSASl6HgLNulTsekMcYzyd5J6LF90I,884
165
165
  phoenix/server/api/input_types/PatchDatasetInput.py,sha256=OURtTVY8Z_oFEDtKwT1LCMaOK5D4QYo5TVQ6mDrex-g,328
166
- phoenix/server/api/input_types/PerformanceMetricInput.py,sha256=fElsLTSEYYgGFGMYTEGcYid39tXUKFdV_JkdHavMcbA,591
166
+ phoenix/server/api/input_types/PerformanceMetricInput.py,sha256=4SG5AymxV2dMeCrK7eREThdt9SuC43irMYZtY-Oq-bg,658
167
167
  phoenix/server/api/input_types/ProjectSessionSort.py,sha256=qFgLmKYeyFpx7An9ZNdDNkkt7tghrG6XXruQbFLiFt8,919
168
168
  phoenix/server/api/input_types/SpanAnnotationSort.py,sha256=T5pAGzmh4MiJp9JMAzNDByFVTczfw02FH4WFWwFezyI,361
169
169
  phoenix/server/api/input_types/SpanSort.py,sha256=Dhvl8BIoV52yHoqntfOax_gUc15uH8ITI_00Ha7PvYc,5959
@@ -209,7 +209,7 @@ phoenix/server/api/types/ChatCompletionMessageRole.py,sha256=kmQOilOlVntlmqbaHkq
209
209
  phoenix/server/api/types/ChatCompletionSubscriptionPayload.py,sha256=G0YsirJzDMFDqEK7I_FCkPmIugAof-8D9fNfFlHdhjY,1031
210
210
  phoenix/server/api/types/Cluster.py,sha256=duX0pSC7P3YT1IztduuJtPsRj1x6oOOLfmWf2Y-FdEk,5699
211
211
  phoenix/server/api/types/CreateDatasetPayload.py,sha256=R-6zCmuD0f76RU9Giu78xwTHlASQs6Aq8yzvX1Kxc3g,140
212
- phoenix/server/api/types/DataQualityMetric.py,sha256=zRKsNvHBu-NdcsunuLhqFpZhi6ks-HMqA1PJD27jTak,590
212
+ phoenix/server/api/types/DataQualityMetric.py,sha256=Aieg3bHeBFaAf4mqeRcH1zT04sXAtQD8ATSHJt7FaBQ,1538
213
213
  phoenix/server/api/types/Dataset.py,sha256=1NACY8_s-TZGgTwv6pkFlYPJDy14EVcQlrjgNd7dQ_U,11732
214
214
  phoenix/server/api/types/DatasetExample.py,sha256=5f7DO6jRec1G5jaJW5FrykFU9R07jDn8jxDkNbQX0Ek,3107
215
215
  phoenix/server/api/types/DatasetExampleRevision.py,sha256=c-jWR6dTguEZTm54IMlFr0Ic84I3nefyDnZb7nF5hnI,874
@@ -244,7 +244,7 @@ phoenix/server/api/types/LabelFraction.py,sha256=zsDxdFALrNiGA1eNykeP8o65gbA0HOh
244
244
  phoenix/server/api/types/MimeType.py,sha256=Zpi6zCalkSFgsvhzvOs-O1gYA04usAi9H__QZUmFlO0,365
245
245
  phoenix/server/api/types/Model.py,sha256=dirXGnOqLFNaOlXUwqyAjiJjcOrWpryO_5N6V0pAxtk,8045
246
246
  phoenix/server/api/types/NumericRange.py,sha256=afEjgF97Go_OvmjMggbPBt-zGM8IONewAyEiKEHRds0,192
247
- phoenix/server/api/types/PerformanceMetric.py,sha256=W92B7OghEOgzFvmY0LCqpgavHaQggTGshdgfD0yqHX4,350
247
+ phoenix/server/api/types/PerformanceMetric.py,sha256=KFkmJDqP43eDUtARQOUqR7NYcxvL6Vh2uisHWU6H3ko,387
248
248
  phoenix/server/api/types/Project.py,sha256=xbV15SOHcPQeE1TMSWFpXk7ZQkfxCD4ZjFS4C83K4tU,18852
249
249
  phoenix/server/api/types/ProjectSession.py,sha256=j3RJrTG9umruav7d81AqnQVz-Zpi60nXmnsr2Wplpac,4646
250
250
  phoenix/server/api/types/PromptResponse.py,sha256=Q8HKtpp8GpUOcxPCzZpkkokidDd6u0aZOv_SuPZZd5Q,630
@@ -257,7 +257,7 @@ phoenix/server/api/types/SpanAnnotation.py,sha256=6b5G-b_OoRvDL2ayWk7MkbqarLK-F-
257
257
  phoenix/server/api/types/SpanIOValue.py,sha256=u_g9QrX-E3fwneoucire73KY5gf3fE4V9IBN3qx2cvU,445
258
258
  phoenix/server/api/types/SystemApiKey.py,sha256=2ym8EgsTBIvxx1l9xZ-2YMovz58ZwYb_MaHBTJ9NH2E,166
259
259
  phoenix/server/api/types/TemplateLanguage.py,sha256=6j_0uwO_GZIeCpR7sTOnxySXudT7qBSC6LFsjzbvW1o,160
260
- phoenix/server/api/types/TimeSeries.py,sha256=IIeGVRFdSMozYXxPg736DW_mKvj4-3WjYSYEnn4UEJc,5241
260
+ phoenix/server/api/types/TimeSeries.py,sha256=nnZnEQvjKhdyVYBGwjQ76UdUVDsZ_8OuDS319LmMhUI,5310
261
261
  phoenix/server/api/types/TokenUsage.py,sha256=g-PjAGVigpchQgkXAuC5sc53fn2YwAgfeXkGmFPi_TE,201
262
262
  phoenix/server/api/types/Trace.py,sha256=Nwof2FlcZtCFnKTS5UqvNZBlY-VcN5QMK7Zm9xEQUrU,5597
263
263
  phoenix/server/api/types/TraceAnnotation.py,sha256=OW6A2zr1gomOuG0XQe55dk15XXX2DSM0DzatRbHWH5A,1256
@@ -286,10 +286,10 @@ phoenix/server/static/apple-touch-icon-76x76.png,sha256=CT_xT12I0u2i0WU8JzBZBuOQ
286
286
  phoenix/server/static/apple-touch-icon.png,sha256=fOfpjqGpWYbJ0eAurKsyoZP1EAs6ZVooBJ_SGk2ZkDs,3801
287
287
  phoenix/server/static/favicon.ico,sha256=bY0vvCKRftemZfPShwZtE93DiiQdaYaozkPGwNFr6H8,34494
288
288
  phoenix/server/static/modernizr.js,sha256=mvK-XtkNqjOral-QvzoqsyOMECXIMu5BQwSVN_wcU9c,2564
289
- phoenix/server/static/.vite/manifest.json,sha256=dASJhLUwLkOKmaGUwiuHdmiMH_GZkrPQhERmV6OvJ2s,2163
290
- phoenix/server/static/assets/components-DaxEPah8.js,sha256=GV3Mea9qXl18_S--F0Zw4BgnPlyyfdXV-657356jt8w,320171
291
- phoenix/server/static/assets/index-DxfKd3lv.js,sha256=5uRq90XqUQyaxUlYkWeR04VNEOXhgccy2mtLfQoBmTY,8033
292
- phoenix/server/static/assets/pages-CY7Swxhi.js,sha256=9XaSLhbNNnfK1EOek9kINb6DCl2iHI97W4t2NN_tc1A,670374
289
+ phoenix/server/static/.vite/manifest.json,sha256=bWCD8LegGOEw6HtjfT85fNDY_-Mky0utk5k7uMGJ59U,2163
290
+ phoenix/server/static/assets/components-Fbz1fA9N.js,sha256=1U-Oq2dQO2RzlhfalR7TG0Ayp-lBlaF0GufXe3zQhx4,320186
291
+ phoenix/server/static/assets/index-BmwKNkwH.js,sha256=WKIMeUsjZp9UB3Frm3gQVPSixHNMlroQeVyVvUgWI8g,8033
292
+ phoenix/server/static/assets/pages-mOmTzhTQ.js,sha256=UhQc_0DRh2a762LLgH-PYMB09zkDc_tOiPpAMJPi7xE,670588
293
293
  phoenix/server/static/assets/vendor-DwOx_a-2.js,sha256=BSQT2H6j3XW9U4TYNJ_dAQvroHbfRpHbfIuOoAQW_V0,2168792
294
294
  phoenix/server/static/assets/vendor-DxkFTwjz.css,sha256=nZrkr0u6NNElFGvpWHk9GTHeGoibCXCli1bE7mXZGZg,1816
295
295
  phoenix/server/static/assets/vendor-arizeai-BWSsCZNG.js,sha256=7aYt8L3aEr48jfoP4GLHy68Dq9uukkRxKnTB3fauZ_4,308489
@@ -298,7 +298,7 @@ phoenix/server/static/assets/vendor-recharts-Bj7q9ORc.js,sha256=U0I8gAmVnd3X5EE1
298
298
  phoenix/server/static/assets/vendor-shiki-RnWcZtzE.js,sha256=payARpCB4810gC7J5exnbQWbipfhNtukzQfszI8r2fw,8980328
299
299
  phoenix/server/static/assets/vendor-three-DwGkEfCM.js,sha256=0D12ZgKzfKCTSdSTKJBFR2RZO_xxeMXrqDp0AszZqHY,620972
300
300
  phoenix/server/templates/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
301
- phoenix/server/templates/index.html,sha256=ram6sfy2obf_F053ay35V30v-mnRWZ86rK-PstXLy1c,4457
301
+ phoenix/server/templates/index.html,sha256=e8_jdi7Eo19SK7DI_gglkTW094D17E0VAegoMmmmvIc,4330
302
302
  phoenix/session/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
303
303
  phoenix/session/client.py,sha256=jGc-jQuFUPdJc4AGcPPkVbnw7Qui8Lm7V6fjPntxkzo,35330
304
304
  phoenix/session/data_extractor.py,sha256=Y0RzYFaNy9fQj8PEIeQ76TBZ90_E1FW7bXu3K5x0EZY,2782
@@ -336,9 +336,9 @@ phoenix/utilities/project.py,sha256=auVpARXkDb-JgeX5f2aStyFIkeKvGwN9l7qrFeJMVxI,
336
336
  phoenix/utilities/re.py,sha256=x8Xbk-Wa6qDMAtUd_7JtZvKtrYEuMY-bchB0n163_5c,2006
337
337
  phoenix/utilities/span_store.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
338
338
  phoenix/utilities/template_formatters.py,sha256=gh9PJD6WEGw7TEYXfSst1UR4pWWwmjxMLrDVQ_CkpkQ,2779
339
- arize_phoenix-7.1.0.dist-info/METADATA,sha256=W-mKXcqjxH5YgxMnSikUtwUsz_DbidfGqS35ldPSqUk,23172
340
- arize_phoenix-7.1.0.dist-info/WHEEL,sha256=C2FUgwZgiLbznR-k0b_5k3Ai_1aASOXDss3lzCUsUug,87
341
- arize_phoenix-7.1.0.dist-info/entry_points.txt,sha256=Pgpn8Upxx9P8z8joPXZWl2LlnAlGc3gcQoVchb06X1Q,94
342
- arize_phoenix-7.1.0.dist-info/licenses/IP_NOTICE,sha256=JBqyyCYYxGDfzQ0TtsQgjts41IJoa-hiwDrBjCb9gHM,469
343
- arize_phoenix-7.1.0.dist-info/licenses/LICENSE,sha256=HFkW9REuMOkvKRACuwLPT0hRydHb3zNg-fdFt94td18,3794
344
- arize_phoenix-7.1.0.dist-info/RECORD,,
339
+ arize_phoenix-7.2.0.dist-info/METADATA,sha256=ATXByhVFmYTUz9oHJKMqI6egZaaSnVbENzdQmhVsdSU,23052
340
+ arize_phoenix-7.2.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
341
+ arize_phoenix-7.2.0.dist-info/entry_points.txt,sha256=Pgpn8Upxx9P8z8joPXZWl2LlnAlGc3gcQoVchb06X1Q,94
342
+ arize_phoenix-7.2.0.dist-info/licenses/IP_NOTICE,sha256=JBqyyCYYxGDfzQ0TtsQgjts41IJoa-hiwDrBjCb9gHM,469
343
+ arize_phoenix-7.2.0.dist-info/licenses/LICENSE,sha256=HFkW9REuMOkvKRACuwLPT0hRydHb3zNg-fdFt94td18,3794
344
+ arize_phoenix-7.2.0.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: hatchling 1.26.3
2
+ Generator: hatchling 1.27.0
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
@@ -31,8 +31,8 @@ class SessionIODataLoader(DataLoader[Key, Result]):
31
31
  )
32
32
  if self._kind == "first_input":
33
33
  stmt = stmt.add_columns(
34
- models.Span.attributes[INPUT_VALUE].label("value"),
35
- models.Span.attributes[INPUT_MIME_TYPE].label("mime_type"),
34
+ models.Span.attributes[INPUT_VALUE].as_string().label("value"),
35
+ models.Span.attributes[INPUT_MIME_TYPE].as_string().label("mime_type"),
36
36
  func.row_number()
37
37
  .over(
38
38
  partition_by=models.Trace.project_session_rowid,
@@ -42,8 +42,8 @@ class SessionIODataLoader(DataLoader[Key, Result]):
42
42
  )
43
43
  elif self._kind == "last_output":
44
44
  stmt = stmt.add_columns(
45
- models.Span.attributes[OUTPUT_VALUE].label("value"),
46
- models.Span.attributes[OUTPUT_MIME_TYPE].label("mime_type"),
45
+ models.Span.attributes[OUTPUT_VALUE].as_string().label("value"),
46
+ models.Span.attributes[OUTPUT_MIME_TYPE].as_string().label("mime_type"),
47
47
  func.row_number()
48
48
  .over(
49
49
  partition_by=models.Trace.project_session_rowid,
@@ -57,7 +57,11 @@ class SessionIODataLoader(DataLoader[Key, Result]):
57
57
 
58
58
  def _stmt(self, *keys: Key) -> Select[tuple[int, str, str]]:
59
59
  subq = self._subq.where(models.Trace.project_session_rowid.in_(keys)).subquery()
60
- return select(subq.c.id_, subq.c.value, subq.c.mime_type).filter_by(rank=1)
60
+ return (
61
+ select(subq.c.id_, subq.c.value, subq.c.mime_type)
62
+ .filter_by(rank=1)
63
+ .where(subq.c.value.isnot(None))
64
+ )
61
65
 
62
66
  async def _load_fn(self, keys: list[Key]) -> list[Result]:
63
67
  async with self._db() as session:
@@ -8,7 +8,10 @@ from typing_extensions import Annotated
8
8
  from phoenix.core.model_schema import Column
9
9
  from phoenix.metrics import Metric
10
10
  from phoenix.metrics.mixins import UnaryOperator
11
- from phoenix.server.api.types.DataQualityMetric import DataQualityMetric
11
+ from phoenix.server.api.types.DataQualityMetric import (
12
+ DATA_QUALITY_METRIC_FACTORIES,
13
+ DataQualityMetric,
14
+ )
12
15
 
13
16
 
14
17
  @strawberry.input
@@ -26,7 +29,7 @@ class DataQualityMetricInput:
26
29
  metric_instance: strawberry.Private[Metric] = field(init=False)
27
30
 
28
31
  def __post_init__(self) -> None:
29
- metric_instance = self.metric.value()
32
+ metric_instance = DATA_QUALITY_METRIC_FACTORIES[self.metric]()
30
33
  if isinstance(metric_instance, UnaryOperator):
31
34
  if not isinstance(self.column_name, str):
32
35
  raise ValueError(f"column name must not be null for {self.metric.name}")
@@ -3,7 +3,10 @@ import strawberry
3
3
  from phoenix.core.model_schema import ACTUAL_LABEL, PREDICTION_LABEL, Column, Model
4
4
  from phoenix.metrics import Metric
5
5
  from phoenix.metrics.mixins import EvaluationMetric
6
- from phoenix.server.api.types.PerformanceMetric import PerformanceMetric
6
+ from phoenix.server.api.types.PerformanceMetric import (
7
+ PERFORMANCE_METRIC_FUNCTIONS,
8
+ PerformanceMetric,
9
+ )
7
10
 
8
11
 
9
12
  @strawberry.input
@@ -14,5 +17,5 @@ class PerformanceMetricInput:
14
17
  return EvaluationMetric(
15
18
  actual=Column(model[ACTUAL_LABEL].name),
16
19
  predicted=Column(model[PREDICTION_LABEL].name),
17
- eval=self.metric.value,
20
+ eval=PERFORMANCE_METRIC_FUNCTIONS[self.metric],
18
21
  )
@@ -1,22 +1,40 @@
1
- from enum import Enum
1
+ from enum import Enum, auto
2
2
  from functools import partial
3
+ from typing import Callable, Mapping, cast
3
4
 
4
5
  import strawberry
5
6
 
7
+ from phoenix.metrics import Metric
6
8
  from phoenix.metrics.metrics import Cardinality, Count, Max, Mean, Min, PercentEmpty, Quantile, Sum
7
9
 
8
10
 
9
11
  @strawberry.enum
10
12
  class DataQualityMetric(Enum):
11
- cardinality = Cardinality
12
- percentEmpty = PercentEmpty
13
- mean = Mean
14
- sum = Sum
15
- min = Min
16
- max = Max
17
- count = Count
18
- p01 = partial(Quantile, probability=0.01)
19
- p25 = partial(Quantile, probability=0.25)
20
- p50 = partial(Quantile, probability=0.50)
21
- p75 = partial(Quantile, probability=0.75)
22
- p99 = partial(Quantile, probability=0.99)
13
+ cardinality = auto()
14
+ percentEmpty = auto()
15
+ mean = auto()
16
+ sum = auto()
17
+ min = auto()
18
+ max = auto()
19
+ count = auto()
20
+ p01 = auto()
21
+ p25 = auto()
22
+ p50 = auto()
23
+ p75 = auto()
24
+ p99 = auto()
25
+
26
+
27
+ DATA_QUALITY_METRIC_FACTORIES: Mapping[DataQualityMetric, Callable[[], Metric]] = {
28
+ DataQualityMetric.cardinality: cast(Callable[[], Metric], Cardinality),
29
+ DataQualityMetric.percentEmpty: cast(Callable[[], Metric], PercentEmpty),
30
+ DataQualityMetric.mean: cast(Callable[[], Metric], Mean),
31
+ DataQualityMetric.sum: cast(Callable[[], Metric], Sum),
32
+ DataQualityMetric.min: cast(Callable[[], Metric], Min),
33
+ DataQualityMetric.max: cast(Callable[[], Metric], Max),
34
+ DataQualityMetric.count: cast(Callable[[], Metric], Count),
35
+ DataQualityMetric.p01: cast(Callable[[], Metric], partial(Quantile, probability=0.01)),
36
+ DataQualityMetric.p25: cast(Callable[[], Metric], partial(Quantile, probability=0.25)),
37
+ DataQualityMetric.p50: cast(Callable[[], Metric], partial(Quantile, probability=0.50)),
38
+ DataQualityMetric.p75: cast(Callable[[], Metric], partial(Quantile, probability=0.75)),
39
+ DataQualityMetric.p99: cast(Callable[[], Metric], partial(Quantile, probability=0.99)),
40
+ }
@@ -1,5 +1,5 @@
1
- from enum import Enum
2
- from functools import partial
1
+ from enum import Enum, auto
2
+ from typing import Callable, Mapping, cast
3
3
 
4
4
  import strawberry
5
5
 
@@ -8,6 +8,9 @@ from phoenix.metrics.wrappers import SkEval
8
8
 
9
9
  @strawberry.enum
10
10
  class PerformanceMetric(Enum):
11
- # To become enum values, functions need to be wrapped in partial.
12
- # See https://stackoverflow.com/a/40339397
13
- accuracyScore = partial(SkEval.accuracy_score) # type: ignore
11
+ accuracyScore = auto()
12
+
13
+
14
+ PERFORMANCE_METRIC_FUNCTIONS: Mapping[PerformanceMetric, Callable[..., float]] = {
15
+ PerformanceMetric.accuracyScore: cast(Callable[..., float], SkEval.accuracy_score),
16
+ }
@@ -15,7 +15,10 @@ from phoenix.metrics.timeseries import timeseries
15
15
  from phoenix.server.api.input_types.Granularity import Granularity, to_timestamps
16
16
  from phoenix.server.api.input_types.TimeRange import TimeRange
17
17
  from phoenix.server.api.interceptor import GqlValueMediator
18
- from phoenix.server.api.types.DataQualityMetric import DataQualityMetric
18
+ from phoenix.server.api.types.DataQualityMetric import (
19
+ DATA_QUALITY_METRIC_FACTORIES,
20
+ DataQualityMetric,
21
+ )
19
22
  from phoenix.server.api.types.InferencesRole import InferencesRole
20
23
  from phoenix.server.api.types.ScalarDriftMetricEnum import ScalarDriftMetric
21
24
  from phoenix.server.api.types.VectorDriftMetricEnum import VectorDriftMetric
@@ -100,7 +103,7 @@ def get_data_quality_timeseries_data(
100
103
  granularity: Granularity,
101
104
  inferences_role: InferencesRole,
102
105
  ) -> list[TimeSeriesDataPoint]:
103
- metric_instance = metric.value()
106
+ metric_instance = DATA_QUALITY_METRIC_FACTORIES[metric]()
104
107
  if isinstance(metric_instance, UnaryOperator):
105
108
  metric_instance = replace(
106
109
  metric_instance,
@@ -1,22 +1,22 @@
1
1
  {
2
- "_components-DaxEPah8.js": {
3
- "file": "assets/components-DaxEPah8.js",
2
+ "_components-Fbz1fA9N.js": {
3
+ "file": "assets/components-Fbz1fA9N.js",
4
4
  "name": "components",
5
5
  "imports": [
6
6
  "_vendor-DwOx_a-2.js",
7
- "_pages-CY7Swxhi.js",
7
+ "_pages-mOmTzhTQ.js",
8
8
  "_vendor-arizeai-BWSsCZNG.js",
9
9
  "_vendor-codemirror-WrxmCiOZ.js",
10
10
  "_vendor-three-DwGkEfCM.js"
11
11
  ]
12
12
  },
13
- "_pages-CY7Swxhi.js": {
14
- "file": "assets/pages-CY7Swxhi.js",
13
+ "_pages-mOmTzhTQ.js": {
14
+ "file": "assets/pages-mOmTzhTQ.js",
15
15
  "name": "pages",
16
16
  "imports": [
17
17
  "_vendor-DwOx_a-2.js",
18
18
  "_vendor-arizeai-BWSsCZNG.js",
19
- "_components-DaxEPah8.js",
19
+ "_components-Fbz1fA9N.js",
20
20
  "_vendor-codemirror-WrxmCiOZ.js",
21
21
  "_vendor-recharts-Bj7q9ORc.js"
22
22
  ]
@@ -69,15 +69,15 @@
69
69
  "name": "vendor-three"
70
70
  },
71
71
  "index.tsx": {
72
- "file": "assets/index-DxfKd3lv.js",
72
+ "file": "assets/index-BmwKNkwH.js",
73
73
  "name": "index",
74
74
  "src": "index.tsx",
75
75
  "isEntry": true,
76
76
  "imports": [
77
77
  "_vendor-DwOx_a-2.js",
78
78
  "_vendor-arizeai-BWSsCZNG.js",
79
- "_pages-CY7Swxhi.js",
80
- "_components-DaxEPah8.js",
79
+ "_pages-mOmTzhTQ.js",
80
+ "_components-Fbz1fA9N.js",
81
81
  "_vendor-three-DwGkEfCM.js",
82
82
  "_vendor-codemirror-WrxmCiOZ.js",
83
83
  "_vendor-shiki-RnWcZtzE.js",