arize-phoenix 11.31.0__py3-none-any.whl → 11.32.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: 11.31.0
3
+ Version: 11.32.0
4
4
  Summary: AI Observability and Evaluation
5
5
  Project-URL: Documentation, https://arize.com/docs/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=ngkyKGVatX3cO2WJdo2hKdaVKP-xJCMvqthvga6kJss,5196
8
8
  phoenix/settings.py,sha256=2kHfT3BNOVd4dAO1bq-syEQbHSG8oX2-7NhOwK2QREk,896
9
- phoenix/version.py,sha256=np-y_W3enAyHJplYVsNoeOIf4b0r7heOgEKw1jPc6io,24
9
+ phoenix/version.py,sha256=wTfhUKXJGuW6Cd3BIdlJ2UX7HyglNmvKt33CteybMx8,24
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
@@ -58,7 +58,7 @@ phoenix/db/types/model_provider.py,sha256=zKYGcEQqbAxtPwnq5dL0fYPgDC8nrh_ABLBMR9
58
58
  phoenix/db/types/token_price_customization.py,sha256=LAb8IwyFJGDCje7CvcPcxNp4NOU8si5hSYaf1fyi624,857
59
59
  phoenix/db/types/trace_retention.py,sha256=Y97xfqNa4AO2j6RhhUJIbO6duQ1oX7Vu5bC9laydf1g,9899
60
60
  phoenix/experiments/__init__.py,sha256=6JGwgUd7xCbGpuHqYZlsmErmYvVgv7N_j43bn3dUqsk,123
61
- phoenix/experiments/functions.py,sha256=J9Bfp7ptDB2g6DpSqgf2iw4cDL09P_h4UWAAtJNS9Mg,39971
61
+ phoenix/experiments/functions.py,sha256=7qFTJ2jYXNyXkWvO66RJuCybNVkUdiwxjGtcoPyqhDs,41285
62
62
  phoenix/experiments/tracing.py,sha256=X-wlgbWEzP1oHkLmjop3fGjONo6JK5a0kPXc9YYD014,2856
63
63
  phoenix/experiments/types.py,sha256=O4vvm9WOp0fevTDobStXEJpFKn3acveXgsRClxlnzCM,23477
64
64
  phoenix/experiments/utils.py,sha256=MZ1-OnTcavk_KUtbfGqt55Fk9TGtJpYG_K71WsN-zDk,785
@@ -262,7 +262,7 @@ phoenix/server/api/routers/v1/datasets.py,sha256=9iPORLmbOrPKgUUcRDMs6ZczSIz7hvc
262
262
  phoenix/server/api/routers/v1/documents.py,sha256=iA_vYU6_p2-pazh_Rp930kiOsiHYFIPPqsZSSXwPgVI,5733
263
263
  phoenix/server/api/routers/v1/evaluations.py,sha256=aBrPO-xCAWyTxydaHq7W2wQFm65k89uVR-H3VWsd6WQ,13062
264
264
  phoenix/server/api/routers/v1/experiment_evaluations.py,sha256=DZ3UK9OoYKElpRcEER7559-KiAqWr-1IXpZ27FbfP3k,5249
265
- phoenix/server/api/routers/v1/experiment_runs.py,sha256=LZeCQWQIEOZ9jK5Gp_C4JbiYY6AmnnWe85cVcvdkCLE,7107
265
+ phoenix/server/api/routers/v1/experiment_runs.py,sha256=H-WSEFuMSr-pDzP9IMsGktqMHMwMAhen6FSfYYu3ZZg,8372
266
266
  phoenix/server/api/routers/v1/experiments.py,sha256=hIBecGACzGZEgl93ap_JV52pUv-Ij03QJMRxQhBlktI,20611
267
267
  phoenix/server/api/routers/v1/models.py,sha256=p3gJN-9SWiUYTUTft4bZMsZVCBNTb4nN1Foy68eRZzQ,1997
268
268
  phoenix/server/api/routers/v1/projects.py,sha256=XR6uJxHXXtC1q8LNyS9W6iaj440sv1OKCu-OSBfxEys,12824
@@ -394,10 +394,10 @@ phoenix/server/static/apple-touch-icon-76x76.png,sha256=CT_xT12I0u2i0WU8JzBZBuOQ
394
394
  phoenix/server/static/apple-touch-icon.png,sha256=fOfpjqGpWYbJ0eAurKsyoZP1EAs6ZVooBJ_SGk2ZkDs,3801
395
395
  phoenix/server/static/favicon.ico,sha256=bY0vvCKRftemZfPShwZtE93DiiQdaYaozkPGwNFr6H8,34494
396
396
  phoenix/server/static/modernizr.js,sha256=mvK-XtkNqjOral-QvzoqsyOMECXIMu5BQwSVN_wcU9c,2564
397
- phoenix/server/static/.vite/manifest.json,sha256=-oRiGNtI_bi_1cZQ95g-a5uptY0yHoFkRH9om8VpChY,2328
398
- phoenix/server/static/assets/components-BjW5gAwL.js,sha256=VHX557qhyBcOfSYPZtR1TtOW1AMeAaJiqvYZ1cDaOf4,664533
399
- phoenix/server/static/assets/index-3OI8VV_W.js,sha256=K7HPjzp6bjscIw5R4KHQS32wo6oJhcrRTA7myP9dKlM,63396
400
- phoenix/server/static/assets/pages-CQfUODtD.js,sha256=7iODh8TLYLYZGeEAl3dW9jJcCyP1EkKS_OluUdNVMpc,1269654
397
+ phoenix/server/static/.vite/manifest.json,sha256=SftlYsrBTWT-YgHAEYzi01rPZZ4ICS4LX28rKBTiEAs,2328
398
+ phoenix/server/static/assets/components-Cs9c4Nxp.js,sha256=5e_FqxJ4cxQ2lSztbWI9bXdUd0tbXNZjOK_basUj_2s,664533
399
+ phoenix/server/static/assets/index-D1FDMBMV.js,sha256=sZ5WMvooPARvbjfKW_pMVOlJVuqcBI8tTZ8iVUGU4s8,63396
400
+ phoenix/server/static/assets/pages-Cbj9SjBx.js,sha256=Cc1SZLF_HyhwRlxlK_Zsmxmjsb_jFCZeObBG2E6Luns,1272157
401
401
  phoenix/server/static/assets/vendor-CqDb5u4o.css,sha256=zIyFiNJKxMaQk8AvtLgt1rR01oO10d1MFndSDKH9Clw,5517
402
402
  phoenix/server/static/assets/vendor-RdRDaQiR.js,sha256=oTxLetZZXJ20yoKNAYExto9V73y8X5zjddWV46K9CWM,2595492
403
403
  phoenix/server/static/assets/vendor-arizeai-DsYDNOqt.js,sha256=0HIkPJXbKTh85nqphdAXYeStRzdaim0IQxRXiXxa21U,121514
@@ -444,9 +444,9 @@ phoenix/utilities/project.py,sha256=auVpARXkDb-JgeX5f2aStyFIkeKvGwN9l7qrFeJMVxI,
444
444
  phoenix/utilities/re.py,sha256=6YyUWIkv0zc2SigsxfOWIHzdpjKA_TZo2iqKq7zJKvw,2081
445
445
  phoenix/utilities/span_store.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
446
446
  phoenix/utilities/template_formatters.py,sha256=gh9PJD6WEGw7TEYXfSst1UR4pWWwmjxMLrDVQ_CkpkQ,2779
447
- arize_phoenix-11.31.0.dist-info/METADATA,sha256=E2fweFHv4hduXa1oIQzqu4LX29_zspyxGa8bdGq13zs,32877
448
- arize_phoenix-11.31.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
449
- arize_phoenix-11.31.0.dist-info/entry_points.txt,sha256=Pgpn8Upxx9P8z8joPXZWl2LlnAlGc3gcQoVchb06X1Q,94
450
- arize_phoenix-11.31.0.dist-info/licenses/IP_NOTICE,sha256=JBqyyCYYxGDfzQ0TtsQgjts41IJoa-hiwDrBjCb9gHM,469
451
- arize_phoenix-11.31.0.dist-info/licenses/LICENSE,sha256=HFkW9REuMOkvKRACuwLPT0hRydHb3zNg-fdFt94td18,3794
452
- arize_phoenix-11.31.0.dist-info/RECORD,,
447
+ arize_phoenix-11.32.0.dist-info/METADATA,sha256=l937gONO1AEiuhgulspeCuLVxPdy-gmLrzzd_ZdP0Ms,32877
448
+ arize_phoenix-11.32.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
449
+ arize_phoenix-11.32.0.dist-info/entry_points.txt,sha256=Pgpn8Upxx9P8z8joPXZWl2LlnAlGc3gcQoVchb06X1Q,94
450
+ arize_phoenix-11.32.0.dist-info/licenses/IP_NOTICE,sha256=JBqyyCYYxGDfzQ0TtsQgjts41IJoa-hiwDrBjCb9gHM,469
451
+ arize_phoenix-11.32.0.dist-info/licenses/LICENSE,sha256=HFkW9REuMOkvKRACuwLPT0hRydHb3zNg-fdFt94td18,3794
452
+ arize_phoenix-11.32.0.dist-info/RECORD,,
@@ -109,6 +109,64 @@ def _phoenix_clients() -> tuple[httpx.Client, httpx.AsyncClient]:
109
109
  )
110
110
 
111
111
 
112
+ def _get_all_experiment_runs(
113
+ client: httpx.Client,
114
+ experiment_id: str,
115
+ page_size: int = 50,
116
+ ) -> list[ExperimentRun]:
117
+ """
118
+ Fetch all experiment runs using pagination to handle large datasets.
119
+
120
+ Args:
121
+ client: The HTTP client to use for requests.
122
+ experiment_id: The ID of the experiment.
123
+ page_size: Number of runs to fetch per page. Defaults to 50.
124
+
125
+ Returns:
126
+ List of all experiment runs as ExperimentRun objects.
127
+ """
128
+ all_runs: list[dict[str, Any]] = []
129
+ cursor = None
130
+
131
+ while True:
132
+ params: dict[str, Any] = {"limit": page_size}
133
+ if cursor:
134
+ params["cursor"] = cursor
135
+
136
+ try:
137
+ response = client.get(
138
+ f"v1/experiments/{experiment_id}/runs",
139
+ params=params,
140
+ )
141
+ response.raise_for_status()
142
+ data = response.json()
143
+
144
+ runs = data["data"]
145
+ all_runs.extend(runs)
146
+
147
+ # Check if there are more pages
148
+ cursor = data.get("next_cursor")
149
+ if not cursor:
150
+ break
151
+
152
+ except HTTPStatusError as e:
153
+ if e.response.status_code == 404:
154
+ # Experiment doesn't exist - treat as empty result
155
+ break
156
+ else:
157
+ raise
158
+
159
+ # Convert dicts to ExperimentRun objects
160
+ experiment_runs: list[ExperimentRun] = []
161
+ for run in all_runs:
162
+ # Parse datetime strings
163
+ run["start_time"] = datetime.fromisoformat(run["start_time"])
164
+ run["end_time"] = datetime.fromisoformat(run["end_time"])
165
+ experiment_runs.append(ExperimentRun.from_dict(run))
166
+
167
+ return experiment_runs
168
+
169
+
112
170
  Evaluators: TypeAlias = Union[
113
171
  ExperimentEvaluator,
114
172
  Sequence[ExperimentEvaluator],
@@ -231,7 +289,7 @@ def run_experiment(
231
289
  }
232
290
  if not dry_run:
233
291
  experiment_response = sync_client.post(
234
- f"/v1/datasets/{normalized_dataset.id}/experiments",
292
+ f"v1/datasets/{normalized_dataset.id}/experiments",
235
293
  json=payload,
236
294
  )
237
295
  experiment_response.raise_for_status()
@@ -303,7 +361,7 @@ def run_experiment(
303
361
  try:
304
362
  # Try to create the run directly
305
363
  resp = sync_client.post(
306
- f"/v1/experiments/{experiment.id}/runs", json=jsonify(exp_run)
364
+ f"v1/experiments/{experiment.id}/runs", json=jsonify(exp_run)
307
365
  )
308
366
  resp.raise_for_status()
309
367
  exp_run = replace(exp_run, id=resp.json()["data"]["id"])
@@ -381,7 +439,7 @@ def run_experiment(
381
439
  try:
382
440
  # Try to create the run directly
383
441
  resp = sync_client.post(
384
- f"/v1/experiments/{experiment.id}/runs", json=jsonify(exp_run)
442
+ f"v1/experiments/{experiment.id}/runs", json=jsonify(exp_run)
385
443
  )
386
444
  resp.raise_for_status()
387
445
  exp_run = replace(exp_run, id=resp.json()["data"]["id"])
@@ -420,7 +478,7 @@ def run_experiment(
420
478
  None,
421
479
  functools.partial(
422
480
  sync_client.post,
423
- url=f"/v1/experiments/{experiment.id}/runs",
481
+ url=f"v1/experiments/{experiment.id}/runs",
424
482
  json=jsonify(exp_run),
425
483
  ),
426
484
  )
@@ -498,7 +556,7 @@ def run_experiment(
498
556
  None,
499
557
  functools.partial(
500
558
  sync_client.post,
501
- url=f"/v1/experiments/{experiment.id}/runs",
559
+ url=f"v1/experiments/{experiment.id}/runs",
502
560
  json=jsonify(exp_run),
503
561
  ),
504
562
  )
@@ -548,13 +606,7 @@ def run_experiment(
548
606
 
549
607
  # Get the final state of runs from the database
550
608
  if not dry_run:
551
- all_runs = sync_client.get(f"/v1/experiments/{experiment.id}/runs").json()["data"]
552
- task_runs = []
553
- for run in all_runs:
554
- # Parse datetime strings
555
- run["start_time"] = datetime.fromisoformat(run["start_time"])
556
- run["end_time"] = datetime.fromisoformat(run["end_time"])
557
- task_runs.append(ExperimentRun.from_dict(run))
609
+ task_runs = _get_all_experiment_runs(sync_client, experiment.id)
558
610
 
559
611
  # Check if we got all expected runs
560
612
  expected_runs = len(normalized_dataset.examples) * repetitions
@@ -613,16 +665,14 @@ def evaluate_experiment(
613
665
  else:
614
666
  dataset = Dataset.from_dict(
615
667
  sync_client.get(
616
- f"/v1/datasets/{dataset_id}/examples",
668
+ f"v1/datasets/{dataset_id}/examples",
617
669
  params={"version_id": str(dataset_version_id)},
618
670
  ).json()["data"]
619
671
  )
620
672
  if not dataset.examples:
621
673
  raise ValueError(f"Dataset has no examples: {dataset_id=}, {dataset_version_id=}")
622
- experiment_runs = {
623
- exp_run["id"]: ExperimentRun.from_dict(exp_run)
624
- for exp_run in sync_client.get(f"/v1/experiments/{experiment.id}/runs").json()["data"]
625
- }
674
+ all_runs = _get_all_experiment_runs(sync_client, experiment.id)
675
+ experiment_runs = {exp_run.id: exp_run for exp_run in all_runs}
626
676
  if not experiment_runs:
627
677
  raise ValueError("Experiment has not been run")
628
678
  params = ExperimentParameters(n_examples=len(dataset.examples))
@@ -715,7 +765,7 @@ def evaluate_experiment(
715
765
  trace_id=_str_trace_id(span.get_span_context().trace_id), # type: ignore[no-untyped-call]
716
766
  )
717
767
  if not dry_run:
718
- resp = sync_client.post("/v1/experiment_evaluations", json=jsonify(eval_run))
768
+ resp = sync_client.post("v1/experiment_evaluations", json=jsonify(eval_run))
719
769
  resp.raise_for_status()
720
770
  eval_run = replace(eval_run, id=resp.json()["data"]["id"])
721
771
  return eval_run
@@ -777,7 +827,7 @@ def evaluate_experiment(
777
827
  None,
778
828
  functools.partial(
779
829
  sync_client.post,
780
- url="/v1/experiment_evaluations",
830
+ url="v1/experiment_evaluations",
781
831
  json=jsonify(eval_run),
782
832
  ),
783
833
  )
@@ -1,13 +1,13 @@
1
1
  from datetime import datetime
2
2
  from typing import Any, Optional
3
3
 
4
- from fastapi import APIRouter, Depends, HTTPException
4
+ from fastapi import APIRouter, Depends, HTTPException, Query
5
5
  from pydantic import Field
6
6
  from sqlalchemy import select
7
7
  from sqlalchemy.exc import IntegrityError as PostgreSQLIntegrityError
8
8
  from sqlean.dbapi2 import IntegrityError as SQLiteIntegrityError # type: ignore[import-untyped]
9
9
  from starlette.requests import Request
10
- from starlette.status import HTTP_404_NOT_FOUND, HTTP_409_CONFLICT
10
+ from starlette.status import HTTP_404_NOT_FOUND, HTTP_409_CONFLICT, HTTP_422_UNPROCESSABLE_ENTITY
11
11
  from strawberry.relay import GlobalID
12
12
 
13
13
  from phoenix.db import models
@@ -17,7 +17,7 @@ from phoenix.server.authorization import is_not_locked
17
17
  from phoenix.server.dml_event import ExperimentRunInsertEvent
18
18
 
19
19
  from .models import V1RoutesBaseModel
20
- from .utils import ResponseBody, add_errors_to_responses
20
+ from .utils import PaginatedResponseBody, ResponseBody, add_errors_to_responses
21
21
 
22
22
  router = APIRouter(tags=["experiments"], include_in_schema=True)
23
23
 
@@ -129,7 +129,7 @@ class ExperimentRunResponse(ExperimentRun):
129
129
  experiment_id: str = Field(description="The ID of the experiment")
130
130
 
131
131
 
132
- class ListExperimentRunsResponseBody(ResponseBody[list[ExperimentRunResponse]]):
132
+ class ListExperimentRunsResponseBody(PaginatedResponseBody[ExperimentRunResponse]):
133
133
  pass
134
134
 
135
135
 
@@ -137,13 +137,28 @@ class ListExperimentRunsResponseBody(ResponseBody[list[ExperimentRunResponse]]):
137
137
  "/experiments/{experiment_id}/runs",
138
138
  operation_id="listExperimentRuns",
139
139
  summary="List runs for an experiment",
140
+ description="Retrieve a paginated list of runs for an experiment",
140
141
  response_description="Experiment runs retrieved successfully",
141
142
  responses=add_errors_to_responses(
142
- [{"status_code": HTTP_404_NOT_FOUND, "description": "Experiment not found"}]
143
+ [
144
+ {"status_code": HTTP_404_NOT_FOUND, "description": "Experiment not found"},
145
+ {"status_code": HTTP_422_UNPROCESSABLE_ENTITY, "description": "Invalid cursor format"},
146
+ ]
143
147
  ),
144
148
  )
145
149
  async def list_experiment_runs(
146
- request: Request, experiment_id: str
150
+ request: Request,
151
+ experiment_id: str,
152
+ cursor: Optional[str] = Query(
153
+ default=None,
154
+ description="Cursor for pagination (base64-encoded experiment run ID)",
155
+ ),
156
+ limit: Optional[int] = Query(
157
+ default=None,
158
+ description="The max number of experiment runs to return at a time. "
159
+ "If not specified, returns all results.",
160
+ gt=0,
161
+ ),
147
162
  ) -> ListExperimentRunsResponseBody:
148
163
  experiment_gid = GlobalID.from_id(experiment_id)
149
164
  try:
@@ -154,30 +169,55 @@ async def list_experiment_runs(
154
169
  status_code=HTTP_404_NOT_FOUND,
155
170
  )
156
171
 
172
+ stmt = (
173
+ select(models.ExperimentRun)
174
+ .filter_by(experiment_id=experiment_rowid)
175
+ .order_by(models.ExperimentRun.id.desc())
176
+ )
177
+
178
+ if cursor:
179
+ try:
180
+ cursor_id = GlobalID.from_id(cursor).node_id
181
+ stmt = stmt.where(models.ExperimentRun.id <= int(cursor_id))
182
+ except ValueError:
183
+ raise HTTPException(
184
+ detail=f"Invalid cursor format: {cursor}",
185
+ status_code=HTTP_422_UNPROCESSABLE_ENTITY,
186
+ )
187
+
188
+ # Apply limit only if specified for pagination
189
+ if limit is not None:
190
+ stmt = stmt.limit(limit + 1)
191
+
157
192
  async with request.app.state.db() as session:
158
- experiment_runs = await session.execute(
159
- select(models.ExperimentRun)
160
- .where(models.ExperimentRun.experiment_id == experiment_rowid)
161
- # order by dataset_example_id to be consistent with `list_dataset_examples`
162
- .order_by(models.ExperimentRun.dataset_example_id.asc())
163
- )
164
- experiment_runs = experiment_runs.scalars().all()
165
- runs = []
166
- for exp_run in experiment_runs:
167
- run_gid = GlobalID("ExperimentRun", str(exp_run.id))
168
- experiment_gid = GlobalID("Experiment", str(exp_run.experiment_id))
169
- example_gid = GlobalID("DatasetExample", str(exp_run.dataset_example_id))
170
- runs.append(
171
- ExperimentRunResponse(
172
- start_time=exp_run.start_time,
173
- end_time=exp_run.end_time,
174
- experiment_id=str(experiment_gid),
175
- dataset_example_id=str(example_gid),
176
- repetition_number=exp_run.repetition_number,
177
- output=exp_run.output.get("task_output"),
178
- error=exp_run.error,
179
- id=str(run_gid),
180
- trace_id=exp_run.trace_id,
181
- )
193
+ experiment_runs = (await session.scalars(stmt)).all()
194
+
195
+ if not experiment_runs:
196
+ return ListExperimentRunsResponseBody(next_cursor=None, data=[])
197
+
198
+ next_cursor = None
199
+ # Only check for next cursor if limit was specified
200
+ if limit is not None and len(experiment_runs) == limit + 1:
201
+ last_run = experiment_runs[-1]
202
+ next_cursor = str(GlobalID("ExperimentRun", str(last_run.id)))
203
+ experiment_runs = experiment_runs[:-1]
204
+
205
+ runs = []
206
+ for exp_run in experiment_runs:
207
+ run_gid = GlobalID("ExperimentRun", str(exp_run.id))
208
+ experiment_gid = GlobalID("Experiment", str(exp_run.experiment_id))
209
+ example_gid = GlobalID("DatasetExample", str(exp_run.dataset_example_id))
210
+ runs.append(
211
+ ExperimentRunResponse(
212
+ start_time=exp_run.start_time,
213
+ end_time=exp_run.end_time,
214
+ experiment_id=str(experiment_gid),
215
+ dataset_example_id=str(example_gid),
216
+ repetition_number=exp_run.repetition_number,
217
+ output=exp_run.output.get("task_output"),
218
+ error=exp_run.error,
219
+ id=str(run_gid),
220
+ trace_id=exp_run.trace_id,
182
221
  )
183
- return ListExperimentRunsResponseBody(data=runs)
222
+ )
223
+ return ListExperimentRunsResponseBody(data=runs, next_cursor=next_cursor)
@@ -1,22 +1,22 @@
1
1
  {
2
- "_components-BjW5gAwL.js": {
3
- "file": "assets/components-BjW5gAwL.js",
2
+ "_components-Cs9c4Nxp.js": {
3
+ "file": "assets/components-Cs9c4Nxp.js",
4
4
  "name": "components",
5
5
  "imports": [
6
6
  "_vendor-RdRDaQiR.js",
7
- "_pages-CQfUODtD.js",
7
+ "_pages-Cbj9SjBx.js",
8
8
  "_vendor-arizeai-DsYDNOqt.js",
9
9
  "_vendor-codemirror-BzJDUbEx.js",
10
10
  "_vendor-three-BLWp5bic.js"
11
11
  ]
12
12
  },
13
- "_pages-CQfUODtD.js": {
14
- "file": "assets/pages-CQfUODtD.js",
13
+ "_pages-Cbj9SjBx.js": {
14
+ "file": "assets/pages-Cbj9SjBx.js",
15
15
  "name": "pages",
16
16
  "imports": [
17
17
  "_vendor-RdRDaQiR.js",
18
18
  "_vendor-arizeai-DsYDNOqt.js",
19
- "_components-BjW5gAwL.js",
19
+ "_components-Cs9c4Nxp.js",
20
20
  "_vendor-codemirror-BzJDUbEx.js",
21
21
  "_vendor-recharts-BTHn5Y2R.js"
22
22
  ]
@@ -75,15 +75,15 @@
75
75
  "name": "vendor-three"
76
76
  },
77
77
  "index.tsx": {
78
- "file": "assets/index-3OI8VV_W.js",
78
+ "file": "assets/index-D1FDMBMV.js",
79
79
  "name": "index",
80
80
  "src": "index.tsx",
81
81
  "isEntry": true,
82
82
  "imports": [
83
83
  "_vendor-RdRDaQiR.js",
84
84
  "_vendor-arizeai-DsYDNOqt.js",
85
- "_pages-CQfUODtD.js",
86
- "_components-BjW5gAwL.js",
85
+ "_pages-Cbj9SjBx.js",
86
+ "_components-Cs9c4Nxp.js",
87
87
  "_vendor-three-BLWp5bic.js",
88
88
  "_vendor-codemirror-BzJDUbEx.js",
89
89
  "_vendor-shiki-BAcocHFl.js",
@@ -1,4 +1,4 @@
1
- import{r as p,j as e,u as st,a as rn,e as qn,s as xa,b as Ta,c as zn,d as Za,f as So,g as Xe,h as xo,i as To,k as Ua,l as s,m as bn,p as ca,n as Nn,R as Ge,o as E,q as ct,t as Fn,v as Ao,C as na,w as Io,x as Mo,L as _l,y as Dl,z as Kl,A as Oe,B as tn,D as W,E as zo,F as cn,G as Fo,H as Eo,I as $e,J as an,K as j,M as _o,N as oe,O as yn,P as Dn,Q as Pl,S as xn,T as da,U as m,V as Vl,$ as N,W as Do,X as V,Y as Ol,Z as Rl,_ as Ae,a0 as Ko,a1 as Po,a2 as vn,a3 as Vo,a4 as B,a5 as gn,a6 as P,a7 as G,a8 as ee,a9 as Nl,aa as $l,ab as Oo,ac as Bl,ad as Ro,ae as Hl,af as No,ag as $o,ah as jl,ai as Bo,aj as Ho,ak as jo,al as Zl,am as Zo,an as Uo,ao as Go,ap as Te,aq as Ul,ar as Be,as as Qo,at as Wo,au as Qe,av as Ga,aw as Qa,ax as Wa,ay as U,az as Cn,aA as Ut,aB as Gl,aC as Ql,aD as qo,aE as Xo,aF as Yo,aG as Jo,aH as e1,aI as n1,aJ as Wl,aK as a1,aL as t1,aM as l1,aN as i1,aO as r1,aP as o1,aQ as s1,aR as dt,aS as te,aT as c1,aU as d1,aV as ql,aW as u1,aX as g1,aY as Xl,aZ as Ke,a_ as Yl,a$ as Gt,b0 as m1,b1 as Jl,b2 as pe,b3 as p1,b4 as ut,b5 as h1,b6 as f1,b7 as b1,b8 as y1,b9 as Qt,ba as ei,bb as v1,bc as C1,bd as k1,be as gt,bf as L1,bg as w1,bh as ua,bi as S1,bj as x1,bk as T1,bl as ni,bm as A1,bn as I1,bo as M1,bp as z1,bq as F1,br as E1,bs as _1,bt as Wt,bu as D1,bv as Aa,bw as K1,bx as P1,by as V1,bz as O1,bA as R1,bB as N1,bC as $1,bD as B1,bE as H1,bF as Xn}from"./vendor-RdRDaQiR.js";import{a as qt,R as j1,b as Z1,c as U1,m as G1,T as Q1,A as W1,S as q1,d as X1,e as Y1,f as J1,u as es}from"./pages-CQfUODtD.js";import{u as ns,_ as as,a as ts,F as ai,I as ls,b as is,c as rs,d as os,e as ss,f as cs,g as ds,P as us,h as gs,i as ms,j as ps,T as hs,k as fs}from"./vendor-arizeai-DsYDNOqt.js";import{L as ti,a as li,j as ii,E as mt,k as ri,d as oi,l as qa,b as si,h as bs,c as ys,e as vs,f as Cs,g as ks,i as Ls,s as ws,m as $n,n as Bn,R as Hn,p as Ss,o as xs}from"./vendor-codemirror-BzJDUbEx.js";import{V as Ts}from"./vendor-three-BLWp5bic.js";const ci=function(){var n={defaultValue:null,kind:"LocalArgument",name:"clusters"},a={defaultValue:null,kind:"LocalArgument",name:"dataQualityMetricColumnName"},t={defaultValue:null,kind:"LocalArgument",name:"fetchDataQualityMetric"},l={defaultValue:null,kind:"LocalArgument",name:"fetchPerformanceMetric"},i={defaultValue:null,kind:"LocalArgument",name:"performanceMetric"},r=[{alias:null,args:null,kind:"ScalarField",name:"primaryValue",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"referenceValue",storageKey:null}],o=[{alias:null,args:[{kind:"Variable",name:"clusters",variableName:"clusters"}],concreteType:"Cluster",kind:"LinkedField",name:"clusters",plural:!0,selections:[{alias:null,args:null,kind:"ScalarField",name:"id",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"eventIds",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"driftRatio",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"primaryToCorpusRatio",storageKey:null},{condition:"fetchDataQualityMetric",kind:"Condition",passingValue:!0,selections:[{alias:null,args:[{fields:[{kind:"Variable",name:"columnName",variableName:"dataQualityMetricColumnName"},{kind:"Literal",name:"metric",value:"mean"}],kind:"ObjectValue",name:"metric"}],concreteType:"DatasetValues",kind:"LinkedField",name:"dataQualityMetric",plural:!1,selections:r,storageKey:null}]},{condition:"fetchPerformanceMetric",kind:"Condition",passingValue:!0,selections:[{alias:null,args:[{fields:[{kind:"Variable",name:"metric",variableName:"performanceMetric"}],kind:"ObjectValue",name:"metric"}],concreteType:"DatasetValues",kind:"LinkedField",name:"performanceMetric",plural:!1,selections:r,storageKey:null}]}],storageKey:null}];return{fragment:{argumentDefinitions:[n,a,t,l,i],kind:"Fragment",metadata:null,name:"pointCloudStore_clusterMetricsQuery",selections:o,type:"Query",abstractKey:null},kind:"Request",operation:{argumentDefinitions:[n,t,a,l,i],kind:"Operation",name:"pointCloudStore_clusterMetricsQuery",selections:o},params:{cacheID:"86666967012812887ac0a0149d2d2535",id:null,metadata:{},name:"pointCloudStore_clusterMetricsQuery",operationKind:"query",text:`query pointCloudStore_clusterMetricsQuery(
1
+ import{r as p,j as e,u as st,a as rn,e as qn,s as xa,b as Ta,c as zn,d as Za,f as So,g as Xe,h as xo,i as To,k as Ua,l as s,m as bn,p as ca,n as Nn,R as Ge,o as E,q as ct,t as Fn,v as Ao,C as na,w as Io,x as Mo,L as _l,y as Dl,z as Kl,A as Oe,B as tn,D as W,E as zo,F as cn,G as Fo,H as Eo,I as $e,J as an,K as j,M as _o,N as oe,O as yn,P as Dn,Q as Pl,S as xn,T as da,U as m,V as Vl,$ as N,W as Do,X as V,Y as Ol,Z as Rl,_ as Ae,a0 as Ko,a1 as Po,a2 as vn,a3 as Vo,a4 as B,a5 as gn,a6 as P,a7 as G,a8 as ee,a9 as Nl,aa as $l,ab as Oo,ac as Bl,ad as Ro,ae as Hl,af as No,ag as $o,ah as jl,ai as Bo,aj as Ho,ak as jo,al as Zl,am as Zo,an as Uo,ao as Go,ap as Te,aq as Ul,ar as Be,as as Qo,at as Wo,au as Qe,av as Ga,aw as Qa,ax as Wa,ay as U,az as Cn,aA as Ut,aB as Gl,aC as Ql,aD as qo,aE as Xo,aF as Yo,aG as Jo,aH as e1,aI as n1,aJ as Wl,aK as a1,aL as t1,aM as l1,aN as i1,aO as r1,aP as o1,aQ as s1,aR as dt,aS as te,aT as c1,aU as d1,aV as ql,aW as u1,aX as g1,aY as Xl,aZ as Ke,a_ as Yl,a$ as Gt,b0 as m1,b1 as Jl,b2 as pe,b3 as p1,b4 as ut,b5 as h1,b6 as f1,b7 as b1,b8 as y1,b9 as Qt,ba as ei,bb as v1,bc as C1,bd as k1,be as gt,bf as L1,bg as w1,bh as ua,bi as S1,bj as x1,bk as T1,bl as ni,bm as A1,bn as I1,bo as M1,bp as z1,bq as F1,br as E1,bs as _1,bt as Wt,bu as D1,bv as Aa,bw as K1,bx as P1,by as V1,bz as O1,bA as R1,bB as N1,bC as $1,bD as B1,bE as H1,bF as Xn}from"./vendor-RdRDaQiR.js";import{a as qt,R as j1,b as Z1,c as U1,m as G1,T as Q1,A as W1,S as q1,d as X1,e as Y1,f as J1,u as es}from"./pages-Cbj9SjBx.js";import{u as ns,_ as as,a as ts,F as ai,I as ls,b as is,c as rs,d as os,e as ss,f as cs,g as ds,P as us,h as gs,i as ms,j as ps,T as hs,k as fs}from"./vendor-arizeai-DsYDNOqt.js";import{L as ti,a as li,j as ii,E as mt,k as ri,d as oi,l as qa,b as si,h as bs,c as ys,e as vs,f as Cs,g as ks,i as Ls,s as ws,m as $n,n as Bn,R as Hn,p as Ss,o as xs}from"./vendor-codemirror-BzJDUbEx.js";import{V as Ts}from"./vendor-three-BLWp5bic.js";const ci=function(){var n={defaultValue:null,kind:"LocalArgument",name:"clusters"},a={defaultValue:null,kind:"LocalArgument",name:"dataQualityMetricColumnName"},t={defaultValue:null,kind:"LocalArgument",name:"fetchDataQualityMetric"},l={defaultValue:null,kind:"LocalArgument",name:"fetchPerformanceMetric"},i={defaultValue:null,kind:"LocalArgument",name:"performanceMetric"},r=[{alias:null,args:null,kind:"ScalarField",name:"primaryValue",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"referenceValue",storageKey:null}],o=[{alias:null,args:[{kind:"Variable",name:"clusters",variableName:"clusters"}],concreteType:"Cluster",kind:"LinkedField",name:"clusters",plural:!0,selections:[{alias:null,args:null,kind:"ScalarField",name:"id",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"eventIds",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"driftRatio",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"primaryToCorpusRatio",storageKey:null},{condition:"fetchDataQualityMetric",kind:"Condition",passingValue:!0,selections:[{alias:null,args:[{fields:[{kind:"Variable",name:"columnName",variableName:"dataQualityMetricColumnName"},{kind:"Literal",name:"metric",value:"mean"}],kind:"ObjectValue",name:"metric"}],concreteType:"DatasetValues",kind:"LinkedField",name:"dataQualityMetric",plural:!1,selections:r,storageKey:null}]},{condition:"fetchPerformanceMetric",kind:"Condition",passingValue:!0,selections:[{alias:null,args:[{fields:[{kind:"Variable",name:"metric",variableName:"performanceMetric"}],kind:"ObjectValue",name:"metric"}],concreteType:"DatasetValues",kind:"LinkedField",name:"performanceMetric",plural:!1,selections:r,storageKey:null}]}],storageKey:null}];return{fragment:{argumentDefinitions:[n,a,t,l,i],kind:"Fragment",metadata:null,name:"pointCloudStore_clusterMetricsQuery",selections:o,type:"Query",abstractKey:null},kind:"Request",operation:{argumentDefinitions:[n,t,a,l,i],kind:"Operation",name:"pointCloudStore_clusterMetricsQuery",selections:o},params:{cacheID:"86666967012812887ac0a0149d2d2535",id:null,metadata:{},name:"pointCloudStore_clusterMetricsQuery",operationKind:"query",text:`query pointCloudStore_clusterMetricsQuery(
2
2
  $clusters: [ClusterInput!]!
3
3
  $fetchDataQualityMetric: Boolean!
4
4
  $dataQualityMetricColumnName: String
@@ -1,4 +1,4 @@
1
- import{U as g,j as o,c_ as f,eD as h,eE as v,eF as y,l as r,cl as x,eG as a,r as z,o as w,eH as P}from"./vendor-RdRDaQiR.js";import{r as k,s as S}from"./vendor-arizeai-DsYDNOqt.js";import{L,g as C,r as R,h as j,i as E,F as I,j as D,P as A,k as F,M as t,l as T,D as G,n as M,E as _,o as O,p as N,q as V,s as q,t as d,v as U,w as W,x as B,y as $,z as H,B as K,C as Y,G as J,H as Q,I as X,J as Z,K as oo,N as ao,O as lo,Q as ro,U as co,V as go,W as m,X as p,Y as eo,Z as bo,_ as no,$ as io,a0 as so,a1 as to,a2 as mo,a3 as po,a4 as uo,a5 as fo,a6 as ho,a7 as vo,a8 as yo,a9 as xo,aa as zo,ab as wo,ac as Po,ad as ko,ae as So,af as Lo,ag as Co,ah as Ro,ai as jo,aj as Eo,ak as Io,al as Do,am as Ao,an as Fo,ao as To,ap as Go,aq as Mo,ar as _o,as as Oo,at as No,au as Vo,av as qo,aw as Uo,ax as Wo,ay as n,az as Bo,aA as $o,aB as Ho,aC as Ko,aD as Yo,aE as Jo}from"./pages-CQfUODtD.js";import{fR as Qo,cY as Xo,U as Zo,fS as oa,fT as aa,fU as la}from"./components-BjW5gAwL.js";import"./vendor-three-BLWp5bic.js";import"./vendor-codemirror-BzJDUbEx.js";import"./vendor-shiki-BAcocHFl.js";import"./vendor-recharts-BTHn5Y2R.js";(function(){const b=document.createElement("link").relList;if(b&&b.supports&&b.supports("modulepreload"))return;for(const c of document.querySelectorAll('link[rel="modulepreload"]'))s(c);new MutationObserver(c=>{for(const e of c)if(e.type==="childList")for(const i of e.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&s(i)}).observe(document,{childList:!0,subtree:!0});function u(c){const e={};return c.integrity&&(e.integrity=c.integrity),c.referrerPolicy&&(e.referrerPolicy=c.referrerPolicy),c.crossOrigin==="use-credentials"?e.credentials="include":c.crossOrigin==="anonymous"?e.credentials="omit":e.credentials="same-origin",e}function s(c){if(c.ep)return;c.ep=!0;const e=u(c);fetch(c.href,e)}})();const ra=g`
1
+ import{U as g,j as o,c_ as f,eD as h,eE as v,eF as y,l as r,cl as x,eG as a,r as z,o as w,eH as P}from"./vendor-RdRDaQiR.js";import{r as k,s as S}from"./vendor-arizeai-DsYDNOqt.js";import{L,g as C,r as R,h as j,i as E,F as I,j as D,P as A,k as F,M as t,l as T,D as G,n as M,E as _,o as O,p as N,q as V,s as q,t as d,v as U,w as W,x as B,y as $,z as H,B as K,C as Y,G as J,H as Q,I as X,J as Z,K as oo,N as ao,O as lo,Q as ro,U as co,V as go,W as m,X as p,Y as eo,Z as bo,_ as no,$ as io,a0 as so,a1 as to,a2 as mo,a3 as po,a4 as uo,a5 as fo,a6 as ho,a7 as vo,a8 as yo,a9 as xo,aa as zo,ab as wo,ac as Po,ad as ko,ae as So,af as Lo,ag as Co,ah as Ro,ai as jo,aj as Eo,ak as Io,al as Do,am as Ao,an as Fo,ao as To,ap as Go,aq as Mo,ar as _o,as as Oo,at as No,au as Vo,av as qo,aw as Uo,ax as Wo,ay as n,az as Bo,aA as $o,aB as Ho,aC as Ko,aD as Yo,aE as Jo}from"./pages-Cbj9SjBx.js";import{fR as Qo,cY as Xo,U as Zo,fS as oa,fT as aa,fU as la}from"./components-Cs9c4Nxp.js";import"./vendor-three-BLWp5bic.js";import"./vendor-codemirror-BzJDUbEx.js";import"./vendor-shiki-BAcocHFl.js";import"./vendor-recharts-BTHn5Y2R.js";(function(){const b=document.createElement("link").relList;if(b&&b.supports&&b.supports("modulepreload"))return;for(const c of document.querySelectorAll('link[rel="modulepreload"]'))s(c);new MutationObserver(c=>{for(const e of c)if(e.type==="childList")for(const i of e.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&s(i)}).observe(document,{childList:!0,subtree:!0});function u(c){const e={};return c.integrity&&(e.integrity=c.integrity),c.referrerPolicy&&(e.referrerPolicy=c.referrerPolicy),c.crossOrigin==="use-credentials"?e.credentials="include":c.crossOrigin==="anonymous"?e.credentials="omit":e.credentials="same-origin",e}function s(c){if(c.ep)return;c.ep=!0;const e=u(c);fetch(c.href,e)}})();const ra=g`
2
2
  :root,
3
3
  .ac-theme {
4
4
  --ac-global-dimension-scale-factor: 1;