arize-phoenix 10.2.1__py3-none-any.whl → 10.2.2__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,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: arize-phoenix
3
- Version: 10.2.1
3
+ Version: 10.2.2
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
@@ -226,6 +226,9 @@ Phoenix is built on top of OpenTelemetry and is vendor, language, and framework
226
226
  | [Smolagents](https://huggingface.co/docs/smolagents/en/tutorials/inspect_runs) | `openinference-instrumentation-smolagents` | [![PyPI Version](https://img.shields.io/pypi/v/openinference-instrumentation-smolagents.svg)](https://pypi.python.org/pypi/openinference-instrumentation-smolagents) |
227
227
  | [Agno](https://docs.arize.com/phoenix/tracing/integrations-tracing/agno) | `openinference-instrumentation-agno` | [![PyPI Version](https://img.shields.io/pypi/v/openinference-instrumentation-agno.svg)](https://pypi.python.org/pypi/openinference-instrumentation-agno) |
228
228
  | [MCP](https://docs.arize.com/phoenix/tracing/integrations-tracing/model-context-protocol-mcp) | `openinference-instrumentation-mcp` | [![PyPI Version](https://img.shields.io/pypi/v/openinference-instrumentation-mcp.svg)](https://pypi.python.org/pypi/openinference-instrumentation-mcp) |
229
+ | [Pydantic AI](https://docs.arize.com/phoenix/integrations/pydantic) | `openinference-instrumentation-pydantic-ai` | [![PyPI Version](https://img.shields.io/pypi/v/openinference-instrumentation-pydantic-ai.svg)](https://pypi.python.org/pypi/openinference-instrumentation-pydantic-ai) |
230
+ | [Autogen AgentChat](https://docs.arize.com/phoenix/integrations/frameworks/autogen/autogen-tracing) | `openinference-instrumentation-autogen-agentchat` | [![PyPI Version](https://img.shields.io/pypi/v/openinference-instrumentation-autogen-agentchat.svg)](https://pypi.python.org/pypi/openinference-instrumentation-autogen-agentchat) |
231
+ | [Portkey](https://docs.arize.com/phoenix/integrations/portkey) | `openinference-instrumentation-portkey` | [![PyPI Version](https://img.shields.io/pypi/v/openinference-instrumentation-portkey.svg)](https://pypi.python.org/pypi/openinference-instrumentation-portkey) |
229
232
 
230
233
  ### JavaScript Integrations
231
234
 
@@ -235,6 +238,7 @@ Phoenix is built on top of OpenTelemetry and is vendor, language, and framework
235
238
  | [LangChain.js](https://docs.arize.com/phoenix/tracing/integrations-tracing/langchain.js) | `@arizeai/openinference-instrumentation-langchain` | [![NPM Version](https://img.shields.io/npm/v/@arizeai/openinference-instrumentation-langchain.svg)](https://www.npmjs.com/package/@arizeai/openinference-instrumentation-langchain) |
236
239
  | [Vercel AI SDK](https://docs.arize.com/phoenix/tracing/integrations-tracing/vercel-ai-sdk) | `@arizeai/openinference-vercel` | [![NPM Version](https://img.shields.io/npm/v/@arizeai/openinference-vercel)](https://www.npmjs.com/package/@arizeai/openinference-vercel) |
237
240
  | [BeeAI](https://docs.arize.com/phoenix/tracing/integrations-tracing/beeai) | `@arizeai/openinference-instrumentation-beeai` | [![NPM Version](https://img.shields.io/npm/v/@arizeai/openinference-vercel)](https://www.npmjs.com/package/@arizeai/openinference-instrumentation-beeai) |
241
+ | [Mastra](https://docs.arize.com/phoenix/integrations/mastra) | `@arizeai/openinference-instrumentation-mastra` | [![NPM Version](https://img.shields.io/npm/v/@arizeai/openinference-instrumentation-mastra.svg)](https://www.npmjs.com/package/@arizeai/openinference-mastra) |
238
242
 
239
243
  ### Platforms
240
244
 
@@ -6,7 +6,7 @@ phoenix/exceptions.py,sha256=n2L2KKuecrdflB9MsCdAYCiSEvGJptIsfRkXMoJle7A,169
6
6
  phoenix/py.typed,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
7
7
  phoenix/services.py,sha256=ngkyKGVatX3cO2WJdo2hKdaVKP-xJCMvqthvga6kJss,5196
8
8
  phoenix/settings.py,sha256=x87BX7hWGQQZbrW_vrYqFR_izCGfO9gFc--JXUG4Tdk,754
9
- phoenix/version.py,sha256=Mq6Iv4ZCSW_K7nXrizX1m8LmW6znKXH7OPCQPOv_Dec,23
9
+ phoenix/version.py,sha256=ABrnvMD1B1q5-JnF_zTnewrPlIqJicGO3er4zwRQWpU,23
10
10
  phoenix/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
11
  phoenix/core/embedding_dimension.py,sha256=zKGbcvwOXgLf-yrJBpQyKtd-LEOPRKHnUToyAU8Owis,87
12
12
  phoenix/core/model.py,sha256=qBFraOtmwCCnWJltKNP18DDG0mULXigytlFsa6YOz6k,4837
@@ -54,7 +54,7 @@ phoenix/db/types/annotation_configs.py,sha256=keiQ9mzLZWE8Eqsu1xFxQBXvBiym0s-yPz
54
54
  phoenix/db/types/db_models.py,sha256=nMSd9gWHwObnVO3_slztlHqoeh04czS-Jxu-omS6M6E,1135
55
55
  phoenix/db/types/identifier.py,sha256=Opr3_1di6e5ncrBDn30WfBSr-jN_VGBnkkA4BMuSoyc,244
56
56
  phoenix/db/types/model_provider.py,sha256=M5SKYtK176SxYhZ-c5gQSiTTuDk8VeAxqM8jrGyfGTo,183
57
- phoenix/db/types/trace_retention.py,sha256=UoLVX4efhv-mcF32zHpMX_hXWe8474cmhEyPmYqeMfI,9573
57
+ phoenix/db/types/trace_retention.py,sha256=fyqAQCvDiD7mpJ_WUqbPyQvuSdERof4DpKpHLJsdROk,9897
58
58
  phoenix/experiments/__init__.py,sha256=6JGwgUd7xCbGpuHqYZlsmErmYvVgv7N_j43bn3dUqsk,123
59
59
  phoenix/experiments/functions.py,sha256=6cSS_5O5V1EZ_5CIQ6lGOUwFyNNsADP7Uu__GmuOz4A,37983
60
60
  phoenix/experiments/tracing.py,sha256=seNh9rBH-rtQe8_FPI_VJj1rbo3ADcP6wDvERkMoxNc,2858
@@ -397,9 +397,9 @@ phoenix/utilities/project.py,sha256=auVpARXkDb-JgeX5f2aStyFIkeKvGwN9l7qrFeJMVxI,
397
397
  phoenix/utilities/re.py,sha256=6YyUWIkv0zc2SigsxfOWIHzdpjKA_TZo2iqKq7zJKvw,2081
398
398
  phoenix/utilities/span_store.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
399
399
  phoenix/utilities/template_formatters.py,sha256=gh9PJD6WEGw7TEYXfSst1UR4pWWwmjxMLrDVQ_CkpkQ,2779
400
- arize_phoenix-10.2.1.dist-info/METADATA,sha256=AAgYk-BYLXAQLilEDE_l7LuHzUtiaH7esyZDhkfdigY,25592
401
- arize_phoenix-10.2.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
402
- arize_phoenix-10.2.1.dist-info/entry_points.txt,sha256=Pgpn8Upxx9P8z8joPXZWl2LlnAlGc3gcQoVchb06X1Q,94
403
- arize_phoenix-10.2.1.dist-info/licenses/IP_NOTICE,sha256=JBqyyCYYxGDfzQ0TtsQgjts41IJoa-hiwDrBjCb9gHM,469
404
- arize_phoenix-10.2.1.dist-info/licenses/LICENSE,sha256=HFkW9REuMOkvKRACuwLPT0hRydHb3zNg-fdFt94td18,3794
405
- arize_phoenix-10.2.1.dist-info/RECORD,,
400
+ arize_phoenix-10.2.2.dist-info/METADATA,sha256=IDFKRGlqJiS1SwJHhj310VMmYvG2H_GDCdOnSdYkUGg,26816
401
+ arize_phoenix-10.2.2.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
402
+ arize_phoenix-10.2.2.dist-info/entry_points.txt,sha256=Pgpn8Upxx9P8z8joPXZWl2LlnAlGc3gcQoVchb06X1Q,94
403
+ arize_phoenix-10.2.2.dist-info/licenses/IP_NOTICE,sha256=JBqyyCYYxGDfzQ0TtsQgjts41IJoa-hiwDrBjCb9gHM,469
404
+ arize_phoenix-10.2.2.dist-info/licenses/LICENSE,sha256=HFkW9REuMOkvKRACuwLPT0hRydHb3zNg-fdFt94td18,3794
405
+ arize_phoenix-10.2.2.dist-info/RECORD,,
@@ -5,6 +5,7 @@ from typing import Annotated, Iterable, Literal, Optional, Union
5
5
 
6
6
  import sqlalchemy as sa
7
7
  from pydantic import AfterValidator, BaseModel, Field, RootModel
8
+ from sqlalchemy import func
8
9
  from sqlalchemy.ext.asyncio import AsyncSession
9
10
 
10
11
  from phoenix.utilities import hour_of_week
@@ -25,19 +26,25 @@ class _MaxDays(BaseModel):
25
26
  class _MaxCount(BaseModel):
26
27
  max_count: Annotated[int, Field(ge=0)]
27
28
 
28
- @property
29
- def max_count_filter(self) -> sa.ColumnElement[bool]:
29
+ def max_count_filter(
30
+ self,
31
+ project_rowids: Union[Iterable[int], sa.ScalarSelect[int]],
32
+ ) -> sa.ColumnElement[bool]:
30
33
  if self.max_count <= 0:
31
34
  return sa.literal(False)
32
35
  from phoenix.db.models import Trace
33
36
 
34
- return Trace.start_time < (
35
- sa.select(Trace.start_time)
36
- .order_by(Trace.start_time.desc())
37
- .offset(self.max_count - 1)
38
- .limit(1)
39
- .scalar_subquery()
37
+ ranked = (
38
+ sa.select(
39
+ Trace.id,
40
+ func.row_number()
41
+ .over(partition_by=Trace.project_rowid, order_by=Trace.start_time.desc())
42
+ .label("rn"),
43
+ )
44
+ .where(Trace.project_rowid.in_(project_rowids))
45
+ .cte("ranked")
40
46
  )
47
+ return Trace.id.in_(sa.select(ranked.c.id).where(ranked.c.rn > self.max_count))
41
48
 
42
49
 
43
50
  class MaxDaysRule(_MaxDays, BaseModel):
@@ -82,7 +89,7 @@ class MaxCountRule(_MaxCount, BaseModel):
82
89
  stmt = (
83
90
  sa.delete(Trace)
84
91
  .where(Trace.project_rowid.in_(project_rowids))
85
- .where(self.max_count_filter)
92
+ .where(self.max_count_filter(project_rowids))
86
93
  .returning(Trace.project_rowid)
87
94
  )
88
95
  return set(await session.scalars(stmt))
@@ -106,7 +113,7 @@ class MaxDaysOrCountRule(_MaxDays, _MaxCount, BaseModel):
106
113
  stmt = (
107
114
  sa.delete(Trace)
108
115
  .where(Trace.project_rowid.in_(project_rowids))
109
- .where(sa.or_(self.max_days_filter, self.max_count_filter))
116
+ .where(sa.or_(self.max_days_filter, self.max_count_filter(project_rowids)))
110
117
  .returning(Trace.project_rowid)
111
118
  )
112
119
  return set(await session.scalars(stmt))
phoenix/version.py CHANGED
@@ -1 +1 @@
1
- __version__ = "10.2.1"
1
+ __version__ = "10.2.2"