arize-phoenix 8.4.1__py3-none-any.whl → 8.6.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,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: arize-phoenix
3
- Version: 8.4.1
3
+ Version: 8.6.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
@@ -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=6yCd3vhnQem22chqsom8x3AUg4DeTLyaMeAcm2HpMtk,22
9
+ phoenix/version.py,sha256=L5qrX1zzvIkOeVl7vP_Kx44NHIZT14fKxoLPGspE9Yg,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
@@ -80,7 +80,7 @@ phoenix/pointcloud/pointcloud.py,sha256=SN_1wXZcwKrtSnHGZLDZGx71orqE1WyVF7E-D58d
80
80
  phoenix/pointcloud/projectors.py,sha256=TQgwc9cJDjJkin1WZyZzgl3HsYrLLiyWD7Czy4jNW3U,1088
81
81
  phoenix/pointcloud/umap_parameters.py,sha256=db_WEPoamuWtopZx7tQfAXPnoE0MS8FkAV0_ThjEx_Q,1735
82
82
  phoenix/server/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
83
- phoenix/server/app.py,sha256=MRy_pDDS0R63Wp8roLCxr_sDe_ZFZJLgwq7-n1mOYTo,39290
83
+ phoenix/server/app.py,sha256=3jSAFGkwr4Fqf0k3hKOkmhw1W1j9JI_7c2IOYZ2ewBk,39390
84
84
  phoenix/server/bearer_auth.py,sha256=0UudvkAS_dxna5JEJJhGUYwB6Ny-e22ssX5Mm79QwCk,5907
85
85
  phoenix/server/dml_event.py,sha256=MjJmVEKytq75chBOSyvYDusUnEbg1pHpIjR3pZkUaJA,2838
86
86
  phoenix/server/dml_event_handler.py,sha256=EZLXmCvx4pJrCkz29gxwKwmvmUkTtPCHw6klR-XM8qE,8258
@@ -96,14 +96,14 @@ phoenix/server/types.py,sha256=gJJPBcDRkQ9VHZIt_aLqG_OBbGt1oWp4e3W3Jp61oKs,7409
96
96
  phoenix/server/api/README.md,sha256=Pyq1PLPgTzXAswrfIhGXrjI3Skq8it2jTVnanT6Ba4Q,1162
97
97
  phoenix/server/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
98
98
  phoenix/server/api/auth.py,sha256=nywpmfMI1trZTbZRD3oBj4kFjzg_vnxDljcM431T1eY,1246
99
- phoenix/server/api/context.py,sha256=zeIANzIfUPfs3odkDGvFs6RNRXYmpsz1DJoYlXNR6nM,6375
99
+ phoenix/server/api/context.py,sha256=OopBkMnY48TzulTtfuay3MXmhbFIWPtPoAsbhCW-Pl0,6459
100
100
  phoenix/server/api/exceptions.py,sha256=TA0JuY2YRnj35qGuMSQ8d0ToHum9gWm9W--3fSKHrX0,1171
101
101
  phoenix/server/api/interceptor.py,sha256=ykDnoC_apUd-llVli3m1CW18kNSIgjz2qZ6m5JmPDu8,1294
102
- phoenix/server/api/queries.py,sha256=Zygu1nR2Ktkw0-Bc3vnpG5C9LSI_DHRxfujxlOJ7_BU,34542
102
+ phoenix/server/api/queries.py,sha256=QKZkLGzqDRa7EDfUADnk3jI0Rzsc_g_fe4y4oOBGbKw,34866
103
103
  phoenix/server/api/schema.py,sha256=fcs36xQwFF_Qe41_5cWR8wYpDvOrnbcyTeo5WNMbDsA,1702
104
104
  phoenix/server/api/subscriptions.py,sha256=DSIgQF6lQqkbc7D0AaI5R4g3hIHbU04H5Y2UIpwmpy0,22989
105
105
  phoenix/server/api/utils.py,sha256=quCBRcusc6PUq9tJq7M8PgwFZp7nXgVAxtbw8feribY,833
106
- phoenix/server/api/dataloaders/__init__.py,sha256=ZgJVbqIH-Y4M863fMIOsf4Ka9iVFmWtzqr0a4mQ92BU,4266
106
+ phoenix/server/api/dataloaders/__init__.py,sha256=LiOF9d95TPOD3pYuE906trLq-_q1VP8JQ9B6SHicbbM,4360
107
107
  phoenix/server/api/dataloaders/annotation_summaries.py,sha256=2sHmIDX7n8tuPeBTs9bMKtlMKWn_Ph9awTZqmwn2Owc,5505
108
108
  phoenix/server/api/dataloaders/average_experiment_run_latency.py,sha256=GLFoFAbztOH-0FVzzZ77mATIO63UcjB50j3qXiNi-tE,1811
109
109
  phoenix/server/api/dataloaders/dataset_example_revisions.py,sha256=xF7M2dg3UmjhdCrscnztCIBBI0cg3RF48IIqvilpc18,4623
@@ -119,6 +119,7 @@ phoenix/server/api/dataloaders/experiment_sequence_number.py,sha256=zM_f78fnqhpp
119
119
  phoenix/server/api/dataloaders/latency_ms_quantile.py,sha256=CHWV9nvEEM3xqpXWubywtLtFLzbwyLU85EaP_kQajJU,7363
120
120
  phoenix/server/api/dataloaders/min_start_or_max_end_times.py,sha256=1jYglTXv4S8k7OWSGdgeJ2OxVCmZtX8a6sjJp9GPZ04,2783
121
121
  phoenix/server/api/dataloaders/num_child_spans.py,sha256=655g9SP_3gfT4qqukfgKzLy5uBLQmnVQBP-mZL3in0s,1200
122
+ phoenix/server/api/dataloaders/num_spans_per_trace.py,sha256=nNAxj6QYcTc8oykfJZxH0vtS9tE83oXoArVwQTJHzTw,922
122
123
  phoenix/server/api/dataloaders/project_by_name.py,sha256=O24Rjs0ZQaYtSnPfA6YBQfbHfUgNsHKUcc_gIKyK9vo,1086
123
124
  phoenix/server/api/dataloaders/prompt_version_sequence_number.py,sha256=tBaCbpI9KgjCACvpd-5hZy5TDSHH7PJPn4bd1xJuN-g,1314
124
125
  phoenix/server/api/dataloaders/record_counts.py,sha256=NLlMEaJ-HxiJavqbSkMbzOrIRzqzYxO8-t2mfp1vXqM,4160
@@ -285,7 +286,7 @@ phoenix/server/api/types/SystemApiKey.py,sha256=2ym8EgsTBIvxx1l9xZ-2YMovz58ZwYb_
285
286
  phoenix/server/api/types/TimeSeries.py,sha256=nuuZtfHmOhTjeB8_SvZ5PUQexAkTcPScwYeFC5RUlRU,5491
286
287
  phoenix/server/api/types/TokenUsage.py,sha256=g-PjAGVigpchQgkXAuC5sc53fn2YwAgfeXkGmFPi_TE,201
287
288
  phoenix/server/api/types/ToolDefinition.py,sha256=T6UH2vcbuPBDy7jKYOqMth2NdqxMPgDBf11Tpbt5Yb8,187
288
- phoenix/server/api/types/Trace.py,sha256=kH0Tv3m8chVbxMiQ27_W5v8gz6RsvGvl2qS9eoELXlw,7992
289
+ phoenix/server/api/types/Trace.py,sha256=Yhy3olalZ03k3kJkg2DHwYhBM2sUe_HIRtDY258gvFc,8193
289
290
  phoenix/server/api/types/TraceAnnotation.py,sha256=OW6A2zr1gomOuG0XQe55dk15XXX2DSM0DzatRbHWH5A,1256
290
291
  phoenix/server/api/types/UMAPPoints.py,sha256=49sWnxjcAJKRzqUY71Fa0tOPti5XjIIFT5cSg6oNu_U,1650
291
292
  phoenix/server/api/types/User.py,sha256=iTVUrI8U6-asOhBt1bOZNtoRAaRNC4WHgR1Uv2rHnWQ,1975
@@ -312,10 +313,10 @@ phoenix/server/static/apple-touch-icon-76x76.png,sha256=CT_xT12I0u2i0WU8JzBZBuOQ
312
313
  phoenix/server/static/apple-touch-icon.png,sha256=fOfpjqGpWYbJ0eAurKsyoZP1EAs6ZVooBJ_SGk2ZkDs,3801
313
314
  phoenix/server/static/favicon.ico,sha256=bY0vvCKRftemZfPShwZtE93DiiQdaYaozkPGwNFr6H8,34494
314
315
  phoenix/server/static/modernizr.js,sha256=mvK-XtkNqjOral-QvzoqsyOMECXIMu5BQwSVN_wcU9c,2564
315
- phoenix/server/static/.vite/manifest.json,sha256=sQ_lHc6TkDsvc2g9rCZb9s_G0YvJMBpzB4MslJGv7Qo,2165
316
- phoenix/server/static/assets/components-CRlSj2mp.js,sha256=ZN4Xq4Fbtdwg81XezQGRogB0upxqx9MZA4uvPsIo8wc,420595
317
- phoenix/server/static/assets/index-YUNmSSFA.js,sha256=QQKgYv2KwukZh449x-BfcWEd1DDydJRIZt1bqIhWhNw,59131
318
- phoenix/server/static/assets/pages-o_YaLL0c.js,sha256=7GvBpyRWdkzw31J2Rx29pz3gGFE9Fha45R---hF2GyM,829587
316
+ phoenix/server/static/.vite/manifest.json,sha256=luCFNUeHPVshRd78xnNZreAR3XvhJkhyGdgSS7yyyP0,2165
317
+ phoenix/server/static/assets/components-CKK--O4E.js,sha256=eo2djbxR-LTaZAf4CESyOJIxVEg3PLAYWtAweI9R9oY,420930
318
+ phoenix/server/static/assets/index-DqyEzUrX.js,sha256=TcU9eL7uVGb2eQ-urd34X6dxtmEJO9QGDom4QcSuN3E,59131
319
+ phoenix/server/static/assets/pages-BsW87AAs.js,sha256=str6WZPgXHwot8bIrUs_iiZcq5-O1nT6J_gstH1KiNU,831608
319
320
  phoenix/server/static/assets/vendor-CRRq3WgM.js,sha256=J5mIL57AMCQb5lg2CVj-4e5dGb4NOhDeZNBN61fIROM,2235517
320
321
  phoenix/server/static/assets/vendor-Cg6lcjUC.css,sha256=nZrkr0u6NNElFGvpWHk9GTHeGoibCXCli1bE7mXZGZg,1816
321
322
  phoenix/server/static/assets/vendor-arizeai-Dq64X_0o.js,sha256=jAFsbq-7Q6v08obSM4NW5oMHsouV6Nd9DDV5A9YqsRE,202331
@@ -362,9 +363,9 @@ phoenix/utilities/project.py,sha256=auVpARXkDb-JgeX5f2aStyFIkeKvGwN9l7qrFeJMVxI,
362
363
  phoenix/utilities/re.py,sha256=6YyUWIkv0zc2SigsxfOWIHzdpjKA_TZo2iqKq7zJKvw,2081
363
364
  phoenix/utilities/span_store.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
364
365
  phoenix/utilities/template_formatters.py,sha256=gh9PJD6WEGw7TEYXfSst1UR4pWWwmjxMLrDVQ_CkpkQ,2779
365
- arize_phoenix-8.4.1.dist-info/METADATA,sha256=XLNuzNF17bXHp3CKKOqfoAG5DwB_-pP6fRj_AicKVbs,23646
366
- arize_phoenix-8.4.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
367
- arize_phoenix-8.4.1.dist-info/entry_points.txt,sha256=Pgpn8Upxx9P8z8joPXZWl2LlnAlGc3gcQoVchb06X1Q,94
368
- arize_phoenix-8.4.1.dist-info/licenses/IP_NOTICE,sha256=JBqyyCYYxGDfzQ0TtsQgjts41IJoa-hiwDrBjCb9gHM,469
369
- arize_phoenix-8.4.1.dist-info/licenses/LICENSE,sha256=HFkW9REuMOkvKRACuwLPT0hRydHb3zNg-fdFt94td18,3794
370
- arize_phoenix-8.4.1.dist-info/RECORD,,
366
+ arize_phoenix-8.6.0.dist-info/METADATA,sha256=wCzR7lODUmq8aN0V5thNYNJpYFjd6Mvxb6tkLuHMbtk,23646
367
+ arize_phoenix-8.6.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
368
+ arize_phoenix-8.6.0.dist-info/entry_points.txt,sha256=Pgpn8Upxx9P8z8joPXZWl2LlnAlGc3gcQoVchb06X1Q,94
369
+ arize_phoenix-8.6.0.dist-info/licenses/IP_NOTICE,sha256=JBqyyCYYxGDfzQ0TtsQgjts41IJoa-hiwDrBjCb9gHM,469
370
+ arize_phoenix-8.6.0.dist-info/licenses/LICENSE,sha256=HFkW9REuMOkvKRACuwLPT0hRydHb3zNg-fdFt94td18,3794
371
+ arize_phoenix-8.6.0.dist-info/RECORD,,
@@ -30,6 +30,7 @@ from phoenix.server.api.dataloaders import (
30
30
  LatencyMsQuantileDataLoader,
31
31
  MinStartOrMaxEndTimeDataLoader,
32
32
  NumChildSpansDataLoader,
33
+ NumSpansPerTraceDataLoader,
33
34
  ProjectByNameDataLoader,
34
35
  PromptVersionSequenceNumberDataLoader,
35
36
  RecordCountDataLoader,
@@ -78,6 +79,7 @@ class DataLoaders:
78
79
  latency_ms_quantile: LatencyMsQuantileDataLoader
79
80
  min_start_or_max_end_times: MinStartOrMaxEndTimeDataLoader
80
81
  num_child_spans: NumChildSpansDataLoader
82
+ num_spans_per_trace: NumSpansPerTraceDataLoader
81
83
  project_fields: TableFieldsDataLoader
82
84
  prompt_version_sequence_number: PromptVersionSequenceNumberDataLoader
83
85
  record_counts: RecordCountDataLoader
@@ -18,6 +18,7 @@ from .experiment_sequence_number import ExperimentSequenceNumberDataLoader
18
18
  from .latency_ms_quantile import LatencyMsQuantileCache, LatencyMsQuantileDataLoader
19
19
  from .min_start_or_max_end_times import MinStartOrMaxEndTimeCache, MinStartOrMaxEndTimeDataLoader
20
20
  from .num_child_spans import NumChildSpansDataLoader
21
+ from .num_spans_per_trace import NumSpansPerTraceDataLoader
21
22
  from .project_by_name import ProjectByNameDataLoader
22
23
  from .prompt_version_sequence_number import PromptVersionSequenceNumberDataLoader
23
24
  from .record_counts import RecordCountCache, RecordCountDataLoader
@@ -55,6 +56,7 @@ __all__ = [
55
56
  "LatencyMsQuantileDataLoader",
56
57
  "MinStartOrMaxEndTimeDataLoader",
57
58
  "NumChildSpansDataLoader",
59
+ "NumSpansPerTraceDataLoader",
58
60
  "PromptVersionSequenceNumberDataLoader",
59
61
  "RecordCountDataLoader",
60
62
  "SessionIODataLoader",
@@ -0,0 +1,28 @@
1
+ from typing import Iterable
2
+
3
+ from sqlalchemy import func, select
4
+ from strawberry.dataloader import DataLoader
5
+ from typing_extensions import TypeAlias
6
+
7
+ from phoenix.db.models import Span, Trace
8
+ from phoenix.server.types import DbSessionFactory
9
+
10
+ TraceRowId: TypeAlias = int
11
+
12
+ Key: TypeAlias = TraceRowId
13
+ Result: TypeAlias = int
14
+
15
+
16
+ class NumSpansPerTraceDataLoader(DataLoader[Key, Result]):
17
+ def __init__(self, db: DbSessionFactory) -> None:
18
+ super().__init__(load_fn=self._load_fn)
19
+ self._db = db
20
+
21
+ async def _load_fn(self, keys: Iterable[Key]) -> list[Result]:
22
+ stmt = (
23
+ select(Trace.id, func.count()).join(Span).where(Trace.id.in_(keys)).group_by(Trace.id)
24
+ )
25
+ async with self._db() as session:
26
+ data = await session.stream(stmt)
27
+ result: dict[Key, Result] = {id_: cnt async for id_, cnt in data}
28
+ return [result.get(id_, 0) for id_ in keys]
@@ -86,7 +86,7 @@ class ModelsInput:
86
86
  @strawberry.type
87
87
  class DbTableStats:
88
88
  table_name: str
89
- num_bytes: int
89
+ num_bytes: float
90
90
 
91
91
 
92
92
  @strawberry.type
@@ -796,9 +796,13 @@ class Query:
796
796
  ) -> list[DbTableStats]:
797
797
  if info.context.db.dialect is SupportedSQLDialect.SQLITE:
798
798
  stmt = text("SELECT name, sum(pgsize) FROM dbstat group by name;")
799
- async with info.context.db() as session:
800
- stats = cast(Iterable[tuple[str, int]], await session.execute(stmt))
801
- stats = _consolidate_sqlite_db_table_stats(stats)
799
+ try:
800
+ async with info.context.db() as session:
801
+ stats = cast(Iterable[tuple[str, int]], await session.execute(stmt))
802
+ stats = _consolidate_sqlite_db_table_stats(stats)
803
+ except Exception:
804
+ # TODO: temporary workaround until we can reproduce the error
805
+ return []
802
806
  elif info.context.db.dialect is SupportedSQLDialect.POSTGRESQL:
803
807
  stmt = text(f"""\
804
808
  SELECT c.relname, pg_total_relation_size(c.oid)
@@ -807,8 +811,12 @@ class Query:
807
811
  WHERE c.relkind = 'r'
808
812
  AND n.nspname = '{getenv(ENV_PHOENIX_SQL_DATABASE_SCHEMA) or "public"}';
809
813
  """)
810
- async with info.context.db() as session:
811
- stats = cast(Iterable[tuple[str, int]], await session.execute(stmt))
814
+ try:
815
+ async with info.context.db() as session:
816
+ stats = cast(Iterable[tuple[str, int]], await session.execute(stmt))
817
+ except Exception:
818
+ # TODO: temporary workaround until we can reproduce the error
819
+ return []
812
820
  else:
813
821
  assert_never(info.context.db.dialect)
814
822
  return [
@@ -171,6 +171,13 @@ class Trace(Node):
171
171
  return None
172
172
  return Span(span_rowid=span_rowid)
173
173
 
174
+ @strawberry.field
175
+ async def num_spans(
176
+ self,
177
+ info: Info[Context, None],
178
+ ) -> int:
179
+ return await info.context.data_loaders.num_spans_per_trace.load(self.trace_rowid)
180
+
174
181
  @strawberry.field
175
182
  async def spans(
176
183
  self,
phoenix/server/app.py CHANGED
@@ -86,6 +86,7 @@ from phoenix.server.api.dataloaders import (
86
86
  LatencyMsQuantileDataLoader,
87
87
  MinStartOrMaxEndTimeDataLoader,
88
88
  NumChildSpansDataLoader,
89
+ NumSpansPerTraceDataLoader,
89
90
  ProjectByNameDataLoader,
90
91
  PromptVersionSequenceNumberDataLoader,
91
92
  RecordCountDataLoader,
@@ -616,6 +617,7 @@ def create_graphql_router(
616
617
  ),
617
618
  ),
618
619
  num_child_spans=NumChildSpansDataLoader(db),
620
+ num_spans_per_trace=NumSpansPerTraceDataLoader(db),
619
621
  project_fields=TableFieldsDataLoader(db, models.Project),
620
622
  prompt_version_sequence_number=PromptVersionSequenceNumberDataLoader(db),
621
623
  record_counts=RecordCountDataLoader(
@@ -1,22 +1,22 @@
1
1
  {
2
- "_components-CRlSj2mp.js": {
3
- "file": "assets/components-CRlSj2mp.js",
2
+ "_components-CKK--O4E.js": {
3
+ "file": "assets/components-CKK--O4E.js",
4
4
  "name": "components",
5
5
  "imports": [
6
6
  "_vendor-CRRq3WgM.js",
7
- "_pages-o_YaLL0c.js",
7
+ "_pages-BsW87AAs.js",
8
8
  "_vendor-arizeai-Dq64X_0o.js",
9
9
  "_vendor-codemirror-C1oevlym.js",
10
10
  "_vendor-three-C-AGeJYv.js"
11
11
  ]
12
12
  },
13
- "_pages-o_YaLL0c.js": {
14
- "file": "assets/pages-o_YaLL0c.js",
13
+ "_pages-BsW87AAs.js": {
14
+ "file": "assets/pages-BsW87AAs.js",
15
15
  "name": "pages",
16
16
  "imports": [
17
17
  "_vendor-CRRq3WgM.js",
18
18
  "_vendor-arizeai-Dq64X_0o.js",
19
- "_components-CRlSj2mp.js",
19
+ "_components-CKK--O4E.js",
20
20
  "_vendor-codemirror-C1oevlym.js",
21
21
  "_vendor-recharts-CPj01S89.js"
22
22
  ]
@@ -69,15 +69,15 @@
69
69
  "name": "vendor-three"
70
70
  },
71
71
  "index.tsx": {
72
- "file": "assets/index-YUNmSSFA.js",
72
+ "file": "assets/index-DqyEzUrX.js",
73
73
  "name": "index",
74
74
  "src": "index.tsx",
75
75
  "isEntry": true,
76
76
  "imports": [
77
77
  "_vendor-CRRq3WgM.js",
78
78
  "_vendor-arizeai-Dq64X_0o.js",
79
- "_pages-o_YaLL0c.js",
80
- "_components-CRlSj2mp.js",
79
+ "_pages-BsW87AAs.js",
80
+ "_components-CKK--O4E.js",
81
81
  "_vendor-three-C-AGeJYv.js",
82
82
  "_vendor-codemirror-C1oevlym.js",
83
83
  "_vendor-shiki-aY7rz1pm.js",