arize-phoenix 11.33.0__py3-none-any.whl → 11.34.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-11.33.0.dist-info → arize_phoenix-11.34.0.dist-info}/METADATA +1 -1
- {arize_phoenix-11.33.0.dist-info → arize_phoenix-11.34.0.dist-info}/RECORD +26 -26
- phoenix/config.py +44 -0
- phoenix/db/bulk_inserter.py +111 -116
- phoenix/server/api/routers/v1/documents.py +1 -1
- phoenix/server/api/routers/v1/evaluations.py +4 -4
- phoenix/server/api/routers/v1/spans.py +2 -2
- phoenix/server/api/routers/v1/traces.py +18 -3
- phoenix/server/app.py +56 -18
- phoenix/server/daemons/span_cost_calculator.py +10 -8
- phoenix/server/grpc_server.py +9 -9
- phoenix/server/prometheus.py +30 -6
- phoenix/server/static/.vite/manifest.json +39 -39
- phoenix/server/static/assets/{components-YTHUASXI.js → components-CdQiQTvs.js} +1 -1
- phoenix/server/static/assets/{index-CugQp26L.js → index-B1VuXYRI.js} +2 -2
- phoenix/server/static/assets/{pages-4Qu8GNlt.js → pages-CnfZ3RhB.js} +498 -494
- phoenix/server/static/assets/{vendor-CRRxHwSp.js → vendor-Cfrr9FCF.js} +135 -135
- phoenix/server/static/assets/{vendor-arizeai-CUN6lRd9.js → vendor-arizeai-Dz0kN-lQ.js} +1 -1
- phoenix/server/static/assets/{vendor-codemirror-sJXwoqrE.js → vendor-codemirror-ClqtONZQ.js} +11 -11
- phoenix/server/static/assets/{vendor-recharts-BT_PeGhc.js → vendor-recharts-D6kvOpmb.js} +1 -1
- phoenix/server/static/assets/{vendor-shiki-1F3op0QC.js → vendor-shiki-xSOiKxt0.js} +1 -1
- phoenix/version.py +1 -1
- {arize_phoenix-11.33.0.dist-info → arize_phoenix-11.34.0.dist-info}/WHEEL +0 -0
- {arize_phoenix-11.33.0.dist-info → arize_phoenix-11.34.0.dist-info}/entry_points.txt +0 -0
- {arize_phoenix-11.33.0.dist-info → arize_phoenix-11.34.0.dist-info}/licenses/IP_NOTICE +0 -0
- {arize_phoenix-11.33.0.dist-info → arize_phoenix-11.34.0.dist-info}/licenses/LICENSE +0 -0
|
@@ -18,6 +18,7 @@ from starlette.status import (
|
|
|
18
18
|
HTTP_404_NOT_FOUND,
|
|
19
19
|
HTTP_415_UNSUPPORTED_MEDIA_TYPE,
|
|
20
20
|
HTTP_422_UNPROCESSABLE_ENTITY,
|
|
21
|
+
HTTP_503_SERVICE_UNAVAILABLE,
|
|
21
22
|
)
|
|
22
23
|
from strawberry.relay import GlobalID
|
|
23
24
|
|
|
@@ -29,6 +30,7 @@ from phoenix.server.api.types.node import from_global_id_with_expected_type
|
|
|
29
30
|
from phoenix.server.authorization import is_not_locked
|
|
30
31
|
from phoenix.server.bearer_auth import PhoenixUser
|
|
31
32
|
from phoenix.server.dml_event import SpanDeleteEvent, TraceAnnotationInsertEvent
|
|
33
|
+
from phoenix.server.prometheus import SPAN_QUEUE_REJECTIONS
|
|
32
34
|
from phoenix.trace.otel import decode_otlp_span
|
|
33
35
|
from phoenix.utilities.project import get_project_name
|
|
34
36
|
|
|
@@ -42,9 +44,18 @@ from .utils import (
|
|
|
42
44
|
router = APIRouter(tags=["traces"])
|
|
43
45
|
|
|
44
46
|
|
|
47
|
+
def is_not_at_capacity(request: Request) -> None:
|
|
48
|
+
if request.app.state.span_queue_is_full():
|
|
49
|
+
SPAN_QUEUE_REJECTIONS.inc()
|
|
50
|
+
raise HTTPException(
|
|
51
|
+
detail="Server is at capacity and cannot process more requests",
|
|
52
|
+
status_code=HTTP_503_SERVICE_UNAVAILABLE,
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
|
|
45
56
|
@router.post(
|
|
46
57
|
"/traces",
|
|
47
|
-
dependencies=[Depends(is_not_locked)],
|
|
58
|
+
dependencies=[Depends(is_not_locked), Depends(is_not_at_capacity)],
|
|
48
59
|
operation_id="addTraces",
|
|
49
60
|
summary="Send traces",
|
|
50
61
|
responses=add_errors_to_responses(
|
|
@@ -56,6 +67,10 @@ router = APIRouter(tags=["traces"])
|
|
|
56
67
|
),
|
|
57
68
|
},
|
|
58
69
|
{"status_code": HTTP_422_UNPROCESSABLE_ENTITY, "description": "Invalid request body"},
|
|
70
|
+
{
|
|
71
|
+
"status_code": HTTP_503_SERVICE_UNAVAILABLE,
|
|
72
|
+
"description": "Server is at capacity and cannot process more requests",
|
|
73
|
+
},
|
|
59
74
|
]
|
|
60
75
|
),
|
|
61
76
|
openapi_extra={
|
|
@@ -145,7 +160,7 @@ async def annotate_traces(
|
|
|
145
160
|
|
|
146
161
|
precursors = [d.as_precursor(user_id=user_id) for d in request_body.data]
|
|
147
162
|
if not sync:
|
|
148
|
-
await request.state.
|
|
163
|
+
await request.state.enqueue_annotations(*precursors)
|
|
149
164
|
return AnnotateTracesResponseBody(data=[])
|
|
150
165
|
|
|
151
166
|
trace_ids = {p.trace_id for p in precursors}
|
|
@@ -193,7 +208,7 @@ async def _add_spans(req: ExportTraceServiceRequest, state: State) -> None:
|
|
|
193
208
|
for scope_span in resource_spans.scope_spans:
|
|
194
209
|
for otlp_span in scope_span.spans:
|
|
195
210
|
span = await run_in_threadpool(decode_otlp_span, otlp_span)
|
|
196
|
-
await state.
|
|
211
|
+
await state.enqueue_span(span, project_name)
|
|
197
212
|
|
|
198
213
|
|
|
199
214
|
@router.delete(
|
phoenix/server/app.py
CHANGED
|
@@ -4,7 +4,6 @@ import importlib
|
|
|
4
4
|
import json
|
|
5
5
|
import logging
|
|
6
6
|
import os
|
|
7
|
-
from collections.abc import AsyncIterator, Awaitable, Callable, Iterable, Sequence
|
|
8
7
|
from contextlib import AbstractAsyncContextManager, AsyncExitStack
|
|
9
8
|
from dataclasses import dataclass, field
|
|
10
9
|
from datetime import datetime, timedelta, timezone
|
|
@@ -14,9 +13,14 @@ from types import MethodType
|
|
|
14
13
|
from typing import (
|
|
15
14
|
TYPE_CHECKING,
|
|
16
15
|
Any,
|
|
16
|
+
AsyncIterator,
|
|
17
|
+
Awaitable,
|
|
18
|
+
Callable,
|
|
19
|
+
Iterable,
|
|
17
20
|
NamedTuple,
|
|
18
21
|
Optional,
|
|
19
22
|
Protocol,
|
|
23
|
+
Sequence,
|
|
20
24
|
TypedDict,
|
|
21
25
|
Union,
|
|
22
26
|
cast,
|
|
@@ -64,6 +68,7 @@ from phoenix.config import (
|
|
|
64
68
|
get_env_grpc_interceptor_paths,
|
|
65
69
|
get_env_host,
|
|
66
70
|
get_env_host_root_path,
|
|
71
|
+
get_env_max_spans_queue_size,
|
|
67
72
|
get_env_port,
|
|
68
73
|
get_env_support_email,
|
|
69
74
|
server_instrumentation_is_enabled,
|
|
@@ -157,6 +162,7 @@ from phoenix.server.grpc_server import GrpcServer
|
|
|
157
162
|
from phoenix.server.jwt_store import JwtStore
|
|
158
163
|
from phoenix.server.middleware.gzip import GZipMiddleware
|
|
159
164
|
from phoenix.server.oauth2 import OAuth2Clients
|
|
165
|
+
from phoenix.server.prometheus import SPAN_QUEUE_REJECTIONS
|
|
160
166
|
from phoenix.server.retention import TraceDataSweeper
|
|
161
167
|
from phoenix.server.telemetry import initialize_opentelemetry_tracer_provider
|
|
162
168
|
from phoenix.server.types import (
|
|
@@ -433,13 +439,13 @@ class Scaffolder(DaemonTask):
|
|
|
433
439
|
def __init__(
|
|
434
440
|
self,
|
|
435
441
|
config: ScaffolderConfig,
|
|
436
|
-
|
|
437
|
-
|
|
442
|
+
enqueue_span: Callable[[Span, ProjectName], Awaitable[None]],
|
|
443
|
+
enqueue_evaluation: Callable[[pb.Evaluation], Awaitable[None]],
|
|
438
444
|
) -> None:
|
|
439
445
|
super().__init__()
|
|
440
446
|
self._db = config.db
|
|
441
|
-
self.
|
|
442
|
-
self.
|
|
447
|
+
self._enqueue_span = enqueue_span
|
|
448
|
+
self._enqueue_evaluation = enqueue_evaluation
|
|
443
449
|
self._tracing_fixtures = [
|
|
444
450
|
get_trace_fixture_by_name(name) for name in set(config.tracing_fixture_names)
|
|
445
451
|
]
|
|
@@ -510,9 +516,9 @@ class Scaffolder(DaemonTask):
|
|
|
510
516
|
project_name = fixture.project_name or fixture.name
|
|
511
517
|
logger.info(f"Loading '{project_name}' fixtures...")
|
|
512
518
|
for span in fixture_spans:
|
|
513
|
-
await self.
|
|
519
|
+
await self._enqueue_span(span, project_name)
|
|
514
520
|
for evaluation in fixture_evals:
|
|
515
|
-
await self.
|
|
521
|
+
await self._enqueue_evaluation(evaluation)
|
|
516
522
|
|
|
517
523
|
except FileNotFoundError:
|
|
518
524
|
logger.warning(f"Fixture file not found for '{fixture.name}'")
|
|
@@ -535,6 +541,32 @@ class Scaffolder(DaemonTask):
|
|
|
535
541
|
logger.error(f"Error processing dataset fixture: {e}")
|
|
536
542
|
|
|
537
543
|
|
|
544
|
+
class _CapacityIndicator(Protocol):
|
|
545
|
+
@property
|
|
546
|
+
def is_full(self) -> bool: ...
|
|
547
|
+
|
|
548
|
+
|
|
549
|
+
class CapacityInterceptor(AsyncServerInterceptor):
|
|
550
|
+
def __init__(self, indicator: _CapacityIndicator):
|
|
551
|
+
self._indicator = indicator
|
|
552
|
+
|
|
553
|
+
@override
|
|
554
|
+
async def intercept(
|
|
555
|
+
self,
|
|
556
|
+
method: Callable[[Any, grpc.aio.ServicerContext], Awaitable[Any]],
|
|
557
|
+
request_or_iterator: Any,
|
|
558
|
+
context: grpc.aio.ServicerContext,
|
|
559
|
+
method_name: str,
|
|
560
|
+
) -> Any:
|
|
561
|
+
if self._indicator.is_full:
|
|
562
|
+
SPAN_QUEUE_REJECTIONS.inc()
|
|
563
|
+
context.set_code(grpc.StatusCode.RESOURCE_EXHAUSTED)
|
|
564
|
+
context.set_details("Server is at capacity and cannot process more requests")
|
|
565
|
+
return
|
|
566
|
+
|
|
567
|
+
return await method(request_or_iterator, context)
|
|
568
|
+
|
|
569
|
+
|
|
538
570
|
def _lifespan(
|
|
539
571
|
*,
|
|
540
572
|
db: DbSessionFactory,
|
|
@@ -561,18 +593,23 @@ def _lifespan(
|
|
|
561
593
|
db.lock = asyncio.Lock() if db.dialect is SupportedSQLDialect.SQLITE else None
|
|
562
594
|
async with AsyncExitStack() as stack:
|
|
563
595
|
(
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
596
|
+
enqueue_annotations,
|
|
597
|
+
enqueue_span,
|
|
598
|
+
enqueue_evaluation,
|
|
567
599
|
enqueue_operation,
|
|
568
600
|
) = await stack.enter_async_context(bulk_inserter)
|
|
601
|
+
interceptors = [
|
|
602
|
+
CapacityInterceptor(bulk_inserter),
|
|
603
|
+
*user_grpc_interceptors(),
|
|
604
|
+
*grpc_interceptors,
|
|
605
|
+
]
|
|
569
606
|
grpc_server = GrpcServer(
|
|
570
|
-
|
|
607
|
+
enqueue_span,
|
|
571
608
|
disabled=read_only,
|
|
572
609
|
tracer_provider=tracer_provider,
|
|
573
610
|
enable_prometheus=enable_prometheus,
|
|
574
611
|
token_store=token_store,
|
|
575
|
-
interceptors=
|
|
612
|
+
interceptors=interceptors,
|
|
576
613
|
)
|
|
577
614
|
await stack.enter_async_context(grpc_server)
|
|
578
615
|
await stack.enter_async_context(dml_event_handler)
|
|
@@ -584,17 +621,17 @@ def _lifespan(
|
|
|
584
621
|
if scaffolder_config:
|
|
585
622
|
scaffolder = Scaffolder(
|
|
586
623
|
config=scaffolder_config,
|
|
587
|
-
|
|
588
|
-
|
|
624
|
+
enqueue_span=enqueue_span,
|
|
625
|
+
enqueue_evaluation=enqueue_evaluation,
|
|
589
626
|
)
|
|
590
627
|
await stack.enter_async_context(scaffolder)
|
|
591
628
|
if isinstance(token_store, AbstractAsyncContextManager):
|
|
592
629
|
await stack.enter_async_context(token_store)
|
|
593
630
|
yield {
|
|
594
631
|
"event_queue": dml_event_handler,
|
|
595
|
-
"
|
|
596
|
-
"
|
|
597
|
-
"
|
|
632
|
+
"enqueue_annotations": enqueue_annotations,
|
|
633
|
+
"enqueue_span": enqueue_span,
|
|
634
|
+
"enqueue_evaluation": enqueue_evaluation,
|
|
598
635
|
"enqueue_operation": enqueue_operation,
|
|
599
636
|
}
|
|
600
637
|
for callback in shutdown_callbacks:
|
|
@@ -989,11 +1026,11 @@ def create_app(
|
|
|
989
1026
|
span_cost_calculator = SpanCostCalculator(db, generative_model_store)
|
|
990
1027
|
bulk_inserter = bulk_inserter_factory(
|
|
991
1028
|
db,
|
|
992
|
-
enable_prometheus=enable_prometheus,
|
|
993
1029
|
span_cost_calculator=span_cost_calculator,
|
|
994
1030
|
event_queue=dml_event_handler,
|
|
995
1031
|
initial_batch_of_spans=initial_batch_of_spans,
|
|
996
1032
|
initial_batch_of_evaluations=initial_batch_of_evaluations,
|
|
1033
|
+
max_spans_queue_size=get_env_max_spans_queue_size(),
|
|
997
1034
|
)
|
|
998
1035
|
tracer_provider = None
|
|
999
1036
|
graphql_schema_extensions: list[Union[type[SchemaExtension], SchemaExtension]] = []
|
|
@@ -1124,6 +1161,7 @@ def create_app(
|
|
|
1124
1161
|
app.state.db = db
|
|
1125
1162
|
app.state.email_sender = email_sender
|
|
1126
1163
|
app.state.span_cost_calculator = span_cost_calculator
|
|
1164
|
+
app.state.span_queue_is_full = lambda: bulk_inserter.is_full
|
|
1127
1165
|
app = _add_get_secret_method(app=app, secret=secret)
|
|
1128
1166
|
app = _add_get_token_store_method(app=app, token_store=token_store)
|
|
1129
1167
|
if tracer_provider:
|
|
@@ -2,6 +2,7 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
import logging
|
|
4
4
|
from asyncio import sleep
|
|
5
|
+
from collections import deque
|
|
5
6
|
from datetime import datetime
|
|
6
7
|
from typing import Any, Mapping, NamedTuple, Optional
|
|
7
8
|
|
|
@@ -35,21 +36,25 @@ class SpanCostCalculator(DaemonTask):
|
|
|
35
36
|
super().__init__()
|
|
36
37
|
self._db = db
|
|
37
38
|
self._model_store = model_store
|
|
38
|
-
self._queue:
|
|
39
|
+
self._queue: deque[SpanCostCalculatorQueueItem] = deque()
|
|
40
|
+
self._max_items_per_transaction = 1000
|
|
39
41
|
|
|
40
42
|
async def _run(self) -> None:
|
|
41
43
|
while self._running:
|
|
44
|
+
num_items_to_insert = min(self._max_items_per_transaction, len(self._queue))
|
|
42
45
|
try:
|
|
43
|
-
await self._insert_costs()
|
|
46
|
+
await self._insert_costs(num_items_to_insert)
|
|
44
47
|
except Exception as e:
|
|
45
48
|
logger.exception(f"Failed to insert costs: {e}")
|
|
46
49
|
await sleep(self._SLEEP_INTERVAL)
|
|
47
50
|
|
|
48
|
-
async def _insert_costs(self) -> None:
|
|
49
|
-
if not self._queue:
|
|
51
|
+
async def _insert_costs(self, num_items_to_insert: int) -> None:
|
|
52
|
+
if not num_items_to_insert or not self._queue:
|
|
50
53
|
return
|
|
51
54
|
costs: list[models.SpanCost] = []
|
|
52
|
-
|
|
55
|
+
while num_items_to_insert > 0:
|
|
56
|
+
num_items_to_insert -= 1
|
|
57
|
+
item = self._queue.popleft()
|
|
53
58
|
try:
|
|
54
59
|
cost = self.calculate_cost(item.span_start_time, item.attributes)
|
|
55
60
|
except Exception as e:
|
|
@@ -65,9 +70,6 @@ class SpanCostCalculator(DaemonTask):
|
|
|
65
70
|
session.add_all(costs)
|
|
66
71
|
except Exception as e:
|
|
67
72
|
logger.exception(f"Failed to insert costs: {e}")
|
|
68
|
-
finally:
|
|
69
|
-
# Clear the queue after processing
|
|
70
|
-
self._queue.clear()
|
|
71
73
|
|
|
72
74
|
def put_nowait(self, item: SpanCostCalculatorQueueItem) -> None:
|
|
73
75
|
self._queue.append(item)
|
phoenix/server/grpc_server.py
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
from
|
|
2
|
-
from typing import TYPE_CHECKING, Any, Iterable, Optional
|
|
1
|
+
from typing import TYPE_CHECKING, Any, Awaitable, Callable, Iterable, Optional
|
|
3
2
|
|
|
4
3
|
import grpc
|
|
5
4
|
from grpc.aio import RpcContext, Server, ServerInterceptor
|
|
@@ -11,6 +10,7 @@ from opentelemetry.proto.collector.trace.v1.trace_service_pb2_grpc import (
|
|
|
11
10
|
TraceServiceServicer,
|
|
12
11
|
add_TraceServiceServicer_to_server,
|
|
13
12
|
)
|
|
13
|
+
from starlette.concurrency import run_in_threadpool
|
|
14
14
|
from typing_extensions import TypeAlias
|
|
15
15
|
|
|
16
16
|
from phoenix.auth import CanReadToken
|
|
@@ -34,10 +34,10 @@ ProjectName: TypeAlias = str
|
|
|
34
34
|
class Servicer(TraceServiceServicer): # type: ignore[misc,unused-ignore]
|
|
35
35
|
def __init__(
|
|
36
36
|
self,
|
|
37
|
-
|
|
37
|
+
enqueue_span: Callable[[Span, ProjectName], Awaitable[None]],
|
|
38
38
|
) -> None:
|
|
39
39
|
super().__init__()
|
|
40
|
-
self.
|
|
40
|
+
self._enqueue_span = enqueue_span
|
|
41
41
|
|
|
42
42
|
async def Export(
|
|
43
43
|
self,
|
|
@@ -48,22 +48,22 @@ class Servicer(TraceServiceServicer): # type: ignore[misc,unused-ignore]
|
|
|
48
48
|
project_name = get_project_name(resource_spans.resource.attributes)
|
|
49
49
|
for scope_span in resource_spans.scope_spans:
|
|
50
50
|
for otlp_span in scope_span.spans:
|
|
51
|
-
span = decode_otlp_span
|
|
52
|
-
await self.
|
|
51
|
+
span = await run_in_threadpool(decode_otlp_span, otlp_span)
|
|
52
|
+
await self._enqueue_span(span, project_name)
|
|
53
53
|
return ExportTraceServiceResponse()
|
|
54
54
|
|
|
55
55
|
|
|
56
56
|
class GrpcServer:
|
|
57
57
|
def __init__(
|
|
58
58
|
self,
|
|
59
|
-
|
|
59
|
+
enqueue_span: Callable[[Span, ProjectName], Awaitable[None]],
|
|
60
60
|
tracer_provider: Optional["TracerProvider"] = None,
|
|
61
61
|
enable_prometheus: bool = False,
|
|
62
62
|
disabled: bool = False,
|
|
63
63
|
token_store: Optional[CanReadToken] = None,
|
|
64
64
|
interceptors: Iterable[ServerInterceptor] = (),
|
|
65
65
|
) -> None:
|
|
66
|
-
self.
|
|
66
|
+
self._enqueue_span = enqueue_span
|
|
67
67
|
self._server: Optional[Server] = None
|
|
68
68
|
self._tracer_provider = tracer_provider
|
|
69
69
|
self._enable_prometheus = enable_prometheus
|
|
@@ -106,7 +106,7 @@ class GrpcServer:
|
|
|
106
106
|
server.add_secure_port(f"[::]:{get_env_grpc_port()}", server_credentials)
|
|
107
107
|
else:
|
|
108
108
|
server.add_insecure_port(f"[::]:{get_env_grpc_port()}")
|
|
109
|
-
add_TraceServiceServicer_to_server(Servicer(self.
|
|
109
|
+
add_TraceServiceServicer_to_server(Servicer(self._enqueue_span), server) # type: ignore[no-untyped-call,unused-ignore]
|
|
110
110
|
await server.start()
|
|
111
111
|
self._server = server
|
|
112
112
|
|
phoenix/server/prometheus.py
CHANGED
|
@@ -9,6 +9,7 @@ import psutil
|
|
|
9
9
|
from prometheus_client import (
|
|
10
10
|
Counter,
|
|
11
11
|
Gauge,
|
|
12
|
+
Histogram,
|
|
12
13
|
Summary,
|
|
13
14
|
start_http_server,
|
|
14
15
|
)
|
|
@@ -36,14 +37,19 @@ CPU_METRIC = Gauge(
|
|
|
36
37
|
name="cpu_usage_percent",
|
|
37
38
|
documentation="CPU usage percent",
|
|
38
39
|
)
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
40
|
+
BULK_LOADER_SPAN_INSERTION_TIME = Histogram(
|
|
41
|
+
namespace="phoenix",
|
|
42
|
+
name="bulk_loader_span_insertion_time_seconds",
|
|
43
|
+
documentation="Histogram of span database insertion time (seconds)",
|
|
44
|
+
buckets=[0.5, 1.0, 2.0, 5.0, 10.0, 30.0, 60.0, 180.0], # 500ms to 3min
|
|
42
45
|
)
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
+
|
|
47
|
+
BULK_LOADER_SPAN_EXCEPTIONS = Counter(
|
|
48
|
+
namespace="phoenix",
|
|
49
|
+
name="bulk_loader_span_exceptions_total",
|
|
50
|
+
documentation="Total count of span insertion exceptions",
|
|
46
51
|
)
|
|
52
|
+
|
|
47
53
|
BULK_LOADER_EVALUATION_INSERTIONS = Counter(
|
|
48
54
|
name="bulk_loader_evaluation_insertions_total",
|
|
49
55
|
documentation="Total count of bulk loader evaluation insertions",
|
|
@@ -95,6 +101,24 @@ DB_DISK_USAGE_WARNING_EMAIL_ERRORS = Counter(
|
|
|
95
101
|
documentation="Total count of database disk usage warning email send errors",
|
|
96
102
|
)
|
|
97
103
|
|
|
104
|
+
SPAN_QUEUE_REJECTIONS = Counter(
|
|
105
|
+
namespace="phoenix",
|
|
106
|
+
name="span_queue_rejections_total",
|
|
107
|
+
documentation="Total count of requests rejected due to span queue being full",
|
|
108
|
+
)
|
|
109
|
+
|
|
110
|
+
SPAN_QUEUE_SIZE = Gauge(
|
|
111
|
+
namespace="phoenix",
|
|
112
|
+
name="span_queue_size",
|
|
113
|
+
documentation="Current number of spans in the processing queue",
|
|
114
|
+
)
|
|
115
|
+
|
|
116
|
+
BULK_LOADER_LAST_ACTIVITY = Gauge(
|
|
117
|
+
namespace="phoenix",
|
|
118
|
+
name="bulk_loader_last_activity_timestamp_seconds",
|
|
119
|
+
documentation="Unix timestamp when bulk loader last processed items",
|
|
120
|
+
)
|
|
121
|
+
|
|
98
122
|
|
|
99
123
|
class PrometheusMiddleware(BaseHTTPMiddleware):
|
|
100
124
|
async def dispatch(self, request: Request, call_next: RequestResponseEndpoint) -> Response:
|
|
@@ -1,32 +1,32 @@
|
|
|
1
1
|
{
|
|
2
|
-
"_components-
|
|
3
|
-
"file": "assets/components-
|
|
2
|
+
"_components-CdQiQTvs.js": {
|
|
3
|
+
"file": "assets/components-CdQiQTvs.js",
|
|
4
4
|
"name": "components",
|
|
5
5
|
"imports": [
|
|
6
|
-
"_vendor-
|
|
7
|
-
"_pages-
|
|
8
|
-
"_vendor-arizeai-
|
|
9
|
-
"_vendor-codemirror-
|
|
6
|
+
"_vendor-Cfrr9FCF.js",
|
|
7
|
+
"_pages-CnfZ3RhB.js",
|
|
8
|
+
"_vendor-arizeai-Dz0kN-lQ.js",
|
|
9
|
+
"_vendor-codemirror-ClqtONZQ.js",
|
|
10
10
|
"_vendor-three-BLWp5bic.js"
|
|
11
11
|
]
|
|
12
12
|
},
|
|
13
|
-
"_pages-
|
|
14
|
-
"file": "assets/pages-
|
|
13
|
+
"_pages-CnfZ3RhB.js": {
|
|
14
|
+
"file": "assets/pages-CnfZ3RhB.js",
|
|
15
15
|
"name": "pages",
|
|
16
16
|
"imports": [
|
|
17
|
-
"_vendor-
|
|
18
|
-
"_vendor-arizeai-
|
|
19
|
-
"_components-
|
|
20
|
-
"_vendor-codemirror-
|
|
21
|
-
"_vendor-recharts-
|
|
17
|
+
"_vendor-Cfrr9FCF.js",
|
|
18
|
+
"_vendor-arizeai-Dz0kN-lQ.js",
|
|
19
|
+
"_components-CdQiQTvs.js",
|
|
20
|
+
"_vendor-codemirror-ClqtONZQ.js",
|
|
21
|
+
"_vendor-recharts-D6kvOpmb.js"
|
|
22
22
|
]
|
|
23
23
|
},
|
|
24
24
|
"_vendor-BGzfc4EU.css": {
|
|
25
25
|
"file": "assets/vendor-BGzfc4EU.css",
|
|
26
26
|
"src": "_vendor-BGzfc4EU.css"
|
|
27
27
|
},
|
|
28
|
-
"_vendor-
|
|
29
|
-
"file": "assets/vendor-
|
|
28
|
+
"_vendor-Cfrr9FCF.js": {
|
|
29
|
+
"file": "assets/vendor-Cfrr9FCF.js",
|
|
30
30
|
"name": "vendor",
|
|
31
31
|
"imports": [
|
|
32
32
|
"_vendor-three-BLWp5bic.js"
|
|
@@ -35,39 +35,39 @@
|
|
|
35
35
|
"assets/vendor-BGzfc4EU.css"
|
|
36
36
|
]
|
|
37
37
|
},
|
|
38
|
-
"_vendor-arizeai-
|
|
39
|
-
"file": "assets/vendor-arizeai-
|
|
38
|
+
"_vendor-arizeai-Dz0kN-lQ.js": {
|
|
39
|
+
"file": "assets/vendor-arizeai-Dz0kN-lQ.js",
|
|
40
40
|
"name": "vendor-arizeai",
|
|
41
41
|
"imports": [
|
|
42
|
-
"_vendor-
|
|
42
|
+
"_vendor-Cfrr9FCF.js"
|
|
43
43
|
]
|
|
44
44
|
},
|
|
45
|
-
"_vendor-codemirror-
|
|
46
|
-
"file": "assets/vendor-codemirror-
|
|
45
|
+
"_vendor-codemirror-ClqtONZQ.js": {
|
|
46
|
+
"file": "assets/vendor-codemirror-ClqtONZQ.js",
|
|
47
47
|
"name": "vendor-codemirror",
|
|
48
48
|
"imports": [
|
|
49
|
-
"_vendor-
|
|
50
|
-
"_vendor-shiki-
|
|
49
|
+
"_vendor-Cfrr9FCF.js",
|
|
50
|
+
"_vendor-shiki-xSOiKxt0.js"
|
|
51
51
|
],
|
|
52
52
|
"dynamicImports": [
|
|
53
|
-
"_vendor-shiki-
|
|
54
|
-
"_vendor-shiki-
|
|
55
|
-
"_vendor-shiki-
|
|
53
|
+
"_vendor-shiki-xSOiKxt0.js",
|
|
54
|
+
"_vendor-shiki-xSOiKxt0.js",
|
|
55
|
+
"_vendor-shiki-xSOiKxt0.js"
|
|
56
56
|
]
|
|
57
57
|
},
|
|
58
|
-
"_vendor-recharts-
|
|
59
|
-
"file": "assets/vendor-recharts-
|
|
58
|
+
"_vendor-recharts-D6kvOpmb.js": {
|
|
59
|
+
"file": "assets/vendor-recharts-D6kvOpmb.js",
|
|
60
60
|
"name": "vendor-recharts",
|
|
61
61
|
"imports": [
|
|
62
|
-
"_vendor-
|
|
62
|
+
"_vendor-Cfrr9FCF.js"
|
|
63
63
|
]
|
|
64
64
|
},
|
|
65
|
-
"_vendor-shiki-
|
|
66
|
-
"file": "assets/vendor-shiki-
|
|
65
|
+
"_vendor-shiki-xSOiKxt0.js": {
|
|
66
|
+
"file": "assets/vendor-shiki-xSOiKxt0.js",
|
|
67
67
|
"name": "vendor-shiki",
|
|
68
68
|
"isDynamicEntry": true,
|
|
69
69
|
"imports": [
|
|
70
|
-
"_vendor-
|
|
70
|
+
"_vendor-Cfrr9FCF.js"
|
|
71
71
|
]
|
|
72
72
|
},
|
|
73
73
|
"_vendor-three-BLWp5bic.js": {
|
|
@@ -75,19 +75,19 @@
|
|
|
75
75
|
"name": "vendor-three"
|
|
76
76
|
},
|
|
77
77
|
"index.tsx": {
|
|
78
|
-
"file": "assets/index-
|
|
78
|
+
"file": "assets/index-B1VuXYRI.js",
|
|
79
79
|
"name": "index",
|
|
80
80
|
"src": "index.tsx",
|
|
81
81
|
"isEntry": true,
|
|
82
82
|
"imports": [
|
|
83
|
-
"_vendor-
|
|
84
|
-
"_vendor-arizeai-
|
|
85
|
-
"_pages-
|
|
86
|
-
"_components-
|
|
83
|
+
"_vendor-Cfrr9FCF.js",
|
|
84
|
+
"_vendor-arizeai-Dz0kN-lQ.js",
|
|
85
|
+
"_pages-CnfZ3RhB.js",
|
|
86
|
+
"_components-CdQiQTvs.js",
|
|
87
87
|
"_vendor-three-BLWp5bic.js",
|
|
88
|
-
"_vendor-codemirror-
|
|
89
|
-
"_vendor-shiki-
|
|
90
|
-
"_vendor-recharts-
|
|
88
|
+
"_vendor-codemirror-ClqtONZQ.js",
|
|
89
|
+
"_vendor-shiki-xSOiKxt0.js",
|
|
90
|
+
"_vendor-recharts-D6kvOpmb.js"
|
|
91
91
|
]
|
|
92
92
|
}
|
|
93
93
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{r as m,j as e,u as ut,a as un,e as Yn,s as za,b as Ma,c as En,d as Qa,f as xo,g as Je,h as To,i as Ao,k as Wa,l as s,m as Ln,p as ua,n as Bn,R as rn,o as z,q as gt,t as Dn,v as Io,C as ta,w as zo,x as Mo,L as Kl,y as Pl,z as Vl,A as Be,B as on,D as q,E as Fo,F as pn,G as Eo,H as Do,I as Ue,J as tn,K as j,M as _o,N as ce,O as wn,P as Pn,Q as Rl,S as An,T as ga,U as p,V as Ol,$ as R,W as Ko,X as V,Y as Nl,Z as $l,_ as Po,a0 as Me,a1 as Vo,a2 as Ro,a3 as Sn,a4 as Oo,a5 as U,a6 as bn,a7 as K,a8 as Z,a9 as W,aa as Bl,ab as Hl,ac as No,ad as jl,ae as $o,af as Zl,ag as Bo,ah as Ho,ai as Ul,aj as jo,ak as Zo,al as Uo,am as Gl,an as Go,ao as Qo,ap as Wo,aq as Ie,ar as Ql,as as _e,at as qo,au as Xo,av as Re,aw as qa,ax as Xa,ay as Ya,az as $,aA as sn,aB as Qt,aC as Wl,aD as ql,aE as Yo,aF as Jo,aG as e1,aH as n1,aI as a1,aJ as t1,aK as Xl,aL as l1,aM as i1,aN as r1,aO as o1,aP as s1,aQ as c1,aR as d1,aS as mt,aT as te,aU as u1,aV as g1,aW as Yl,aX as m1,aY as p1,aZ as Oe,a_ as Jl,a$ as Wt,b0 as h1,b1 as ei,b2 as he,b3 as f1,b4 as ma,b5 as b1,b6 as y1,b7 as v1,b8 as C1,b9 as qt,ba as ni,bb as k1,bc as L1,bd as w1,be as S1,bf as ye,bg as x1,bh as pt,bi as T1,bj as A1,bk as pa,bl as I1,bm as z1,bn as M1,bo as F1,bp as ai,bq as E1,br as D1,bs as _1,bt as K1,bu as P1,bv as V1,bw as R1,bx as Xt,by as O1,bz as Fa,bA as N1,bB as $1,bC as B1,bD as H1,bE as j1,bF as Z1,bG as U1,bH as G1,bI as Q1,bJ as Jn}from"./vendor-
|
|
1
|
+
import{r as m,j as e,u as ut,a as un,e as Yn,s as za,b as Ma,c as En,d as Qa,f as xo,g as Je,h as To,i as Ao,k as Wa,l as s,m as Ln,p as ua,n as Bn,R as rn,o as z,q as gt,t as Dn,v as Io,C as ta,w as zo,x as Mo,L as Kl,y as Pl,z as Vl,A as Be,B as on,D as q,E as Fo,F as pn,G as Eo,H as Do,I as Ue,J as tn,K as j,M as _o,N as ce,O as wn,P as Pn,Q as Rl,S as An,T as ga,U as p,V as Ol,$ as R,W as Ko,X as V,Y as Nl,Z as $l,_ as Po,a0 as Me,a1 as Vo,a2 as Ro,a3 as Sn,a4 as Oo,a5 as U,a6 as bn,a7 as K,a8 as Z,a9 as W,aa as Bl,ab as Hl,ac as No,ad as jl,ae as $o,af as Zl,ag as Bo,ah as Ho,ai as Ul,aj as jo,ak as Zo,al as Uo,am as Gl,an as Go,ao as Qo,ap as Wo,aq as Ie,ar as Ql,as as _e,at as qo,au as Xo,av as Re,aw as qa,ax as Xa,ay as Ya,az as $,aA as sn,aB as Qt,aC as Wl,aD as ql,aE as Yo,aF as Jo,aG as e1,aH as n1,aI as a1,aJ as t1,aK as Xl,aL as l1,aM as i1,aN as r1,aO as o1,aP as s1,aQ as c1,aR as d1,aS as mt,aT as te,aU as u1,aV as g1,aW as Yl,aX as m1,aY as p1,aZ as Oe,a_ as Jl,a$ as Wt,b0 as h1,b1 as ei,b2 as he,b3 as f1,b4 as ma,b5 as b1,b6 as y1,b7 as v1,b8 as C1,b9 as qt,ba as ni,bb as k1,bc as L1,bd as w1,be as S1,bf as ye,bg as x1,bh as pt,bi as T1,bj as A1,bk as pa,bl as I1,bm as z1,bn as M1,bo as F1,bp as ai,bq as E1,br as D1,bs as _1,bt as K1,bu as P1,bv as V1,bw as R1,bx as Xt,by as O1,bz as Fa,bA as N1,bB as $1,bC as B1,bD as H1,bE as j1,bF as Z1,bG as U1,bH as G1,bI as Q1,bJ as Jn}from"./vendor-Cfrr9FCF.js";import{a as Yt,R as W1,b as q1,c as X1,m as Y1,T as J1,A as es,S as ns,d as as,e as ts,f as ls,u as is}from"./pages-CnfZ3RhB.js";import{u as rs,_ as os,F as ti,I as ss,a as cs,b as ds,c as us,d as gs,e as ms,f as ps,P as hs,g as fs,h as bs,i as ys,T as vs,j as Cs}from"./vendor-arizeai-Dz0kN-lQ.js";import{L as li,a as ii,j as ri,E as ht,k as oi,d as si,l as Ja,b as ci,h as ks,c as Ls,e as ws,f as Ss,g as xs,i as Ts,s as As,m as Hn,n as jn,R as Zn,p as Is,o as zs}from"./vendor-codemirror-ClqtONZQ.js";import{V as Ms}from"./vendor-three-BLWp5bic.js";const di=(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,d0 as f,
|
|
1
|
+
import{U as g,j as o,d0 as f,eG as v,eH as h,eI as y,l as c,cp as x,eJ as a,r as z,o as w,eK as P}from"./vendor-Cfrr9FCF.js";import{r as k,s as S}from"./vendor-arizeai-Dz0kN-lQ.js";import{L,g as C,r as R,h as E,i as I,F as j,j as A,P as D,k as F,M as t,l as T,D as G,n as M,E as O,o as _,p as V,q as N,s as W,t as d,v as q,w as U,x as B,y as K,z as $,B as H,C as J,G as Q,H as X,I as Y,J as Z,K as m,N as p,O as oo,Q as ao,U as lo,V as ro,W as co,X as go,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 vo,a7 as ho,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 Eo,aj as Io,ak as jo,al as Ao,am as Do,an as Fo,ao as To,ap as Go,aq as Mo,ar as Oo,as as _o,at as Vo,au as n,av as No,aw as Wo,ax as qo,ay as Uo,az as Bo,aA as Ko,aB as $o}from"./pages-CnfZ3RhB.js";import{fU as Ho,cO as Jo,U as Qo,fV as Xo,fW as Yo}from"./components-CdQiQTvs.js";import"./vendor-three-BLWp5bic.js";import"./vendor-codemirror-ClqtONZQ.js";import"./vendor-shiki-xSOiKxt0.js";import"./vendor-recharts-D6kvOpmb.js";(function(){const b=document.createElement("link").relList;if(b&&b.supports&&b.supports("modulepreload"))return;for(const r of document.querySelectorAll('link[rel="modulepreload"]'))s(r);new MutationObserver(r=>{for(const e of r)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(r){const e={};return r.integrity&&(e.integrity=r.integrity),r.referrerPolicy&&(e.referrerPolicy=r.referrerPolicy),r.crossOrigin==="use-credentials"?e.credentials="include":r.crossOrigin==="anonymous"?e.credentials="omit":e.credentials="same-origin",e}function s(r){if(r.ep)return;r.ep=!0;const e=u(r);fetch(r.href,e)}})();const Zo=g`
|
|
2
2
|
:root,
|
|
3
3
|
.ac-theme {
|
|
4
4
|
--ac-global-dimension-scale-factor: 1;
|
|
@@ -1252,4 +1252,4 @@ import{U as g,j as o,d0 as f,eF as v,eG as h,eH as y,l as c,co as x,eI as a,r as
|
|
|
1252
1252
|
font-family: "Geist Mono", monospace;
|
|
1253
1253
|
font-optical-sizing: auto;
|
|
1254
1254
|
}
|
|
1255
|
-
`;function sa(){const{theme:l="dark"}=k();return o(f,{styles:g(aa,oa,l==="dark"?la:ra,ca(l),Zo,ga,ea,ba,na,ia)})}const ta=v(h(c(a,{path:"/",errorElement:o(n,{}),children:[o(a,{path:"/v1/*",element:o(x,{to:"/",replace:!0})}),o(a,{path:"/login",element:o(L,{})}),o(a,{path:"/logout",element:o(C,{})}),o(a,{path:"/reset-password",element:o(E,{}),loader:R}),o(a,{path:"/reset-password-with-token",element:o(I,{})}),o(a,{path:"/forgot-password",element:o(j,{})}),o(a,{element:o(Uo,{}),loader:A,children:c(a,{element:o(qo,{}),children:[o(a,{path:"/profile",handle:{crumb:()=>"profile"},element:o(D,{})}),o(a,{index:!0,loader:F}),c(a,{path:"/model",handle:{crumb:()=>"model"},element:o(_,{}),children:[o(a,{index:!0,element:o(t,{})}),o(a,{element:o(t,{}),children:o(a,{path:"dimensions",children:o(a,{path:":dimensionId",element:o(G,{}),loader:T})})}),o(a,{path:"embeddings",children:o(a,{path:":embeddingDimensionId",element:o(O,{}),loader:M,handle:{crumb:l=>l.embedding.name}})})]}),c(a,{path:"/projects",handle:{crumb:()=>"Projects"},element:o(Y,{}),children:[o(a,{index:!0,element:o(V,{})}),c(a,{path:":projectId",loader:N,handle:{crumb:l=>l.project.name},element:o(X,{}),children:[o(a,{index:!0,element:o(W,{})}),c(a,{element:o(Q,{}),children:[o(a,{path:"traces",element:o(q,{}),children:o(a,{path:":traceId",element:o(d,{})})}),o(a,{path:"spans",element:o(U,{}),children:o(a,{path:":traceId",element:o(d,{})})}),o(a,{path:"sessions",element:o(
|
|
1255
|
+
`;function sa(){const{theme:l="dark"}=k();return o(f,{styles:g(aa,oa,l==="dark"?la:ra,ca(l),Zo,ga,ea,ba,na,ia)})}const ta=v(h(c(a,{path:"/",errorElement:o(n,{}),children:[o(a,{path:"/v1/*",element:o(x,{to:"/",replace:!0})}),o(a,{path:"/login",element:o(L,{})}),o(a,{path:"/logout",element:o(C,{})}),o(a,{path:"/reset-password",element:o(E,{}),loader:R}),o(a,{path:"/reset-password-with-token",element:o(I,{})}),o(a,{path:"/forgot-password",element:o(j,{})}),o(a,{element:o(Uo,{}),loader:A,children:c(a,{element:o(qo,{}),children:[o(a,{path:"/profile",handle:{crumb:()=>"profile"},element:o(D,{})}),o(a,{index:!0,loader:F}),c(a,{path:"/model",handle:{crumb:()=>"model"},element:o(_,{}),children:[o(a,{index:!0,element:o(t,{})}),o(a,{element:o(t,{}),children:o(a,{path:"dimensions",children:o(a,{path:":dimensionId",element:o(G,{}),loader:T})})}),o(a,{path:"embeddings",children:o(a,{path:":embeddingDimensionId",element:o(O,{}),loader:M,handle:{crumb:l=>l.embedding.name}})})]}),c(a,{path:"/projects",handle:{crumb:()=>"Projects"},element:o(Y,{}),children:[o(a,{index:!0,element:o(V,{})}),c(a,{path:":projectId",loader:N,handle:{crumb:l=>l.project.name},element:o(X,{}),children:[o(a,{index:!0,element:o(W,{})}),c(a,{element:o(Q,{}),children:[o(a,{path:"traces",element:o(q,{}),children:o(a,{path:":traceId",element:o(d,{})})}),o(a,{path:"spans",element:o(U,{}),children:o(a,{path:":traceId",element:o(d,{})})}),o(a,{path:"sessions",element:o($,{}),children:o(a,{path:":sessionId",element:o(K,{}),loader:B})}),o(a,{path:"config",element:o(H,{})}),o(a,{path:"metrics",element:o(J,{})})]})]})]}),c(a,{path:"/datasets",handle:{crumb:()=>"Datasets"},children:[o(a,{index:!0,element:o(Z,{})}),c(a,{path:":datasetId",loader:m,handle:{crumb:l=>l.dataset.name},children:[c(a,{element:o(eo,{}),loader:m,children:[o(a,{index:!0,element:o(p,{})}),o(a,{path:"experiments",element:o(p,{})}),o(a,{path:"examples",element:o(lo,{}),loader:oo,children:o(a,{path:":exampleId",element:o(ao,{})})}),o(a,{path:"versions",element:o(co,{}),loader:ro}),o(a,{path:"evaluators",element:o(go,{})})]}),o(a,{path:"compare",element:o(no,{}),loader:bo,handle:{crumb:()=>"compare"}})]})]}),c(a,{path:"/playground",handle:{crumb:()=>"Playground"},children:[o(a,{index:!0,element:o(io,{})}),o(a,{path:"spans/:spanId",element:o(to,{}),loader:so,handle:{crumb:l=>l.span.__typename==="Span"?`span ${l.span.spanId}`:"span unknown"}})]}),c(a,{path:"/prompts",handle:{crumb:()=>"Prompts"},children:[o(a,{index:!0,element:o(po,{}),loader:mo}),c(a,{path:":promptId",loader:uo,shouldRevalidate:()=>!0,handle:{crumb:l=>l.prompt.__typename==="Prompt"?l.prompt.name:"unknown"},children:[c(a,{element:o(Po,{}),children:[o(a,{index:!0,element:o(fo,{})}),o(a,{path:"versions",loader:vo,element:o(xo,{}),children:o(a,{path:":versionId",loader:ho,element:o(yo,{})})}),o(a,{path:"config",element:o(wo,{}),loader:zo})]}),o(a,{path:"playground",element:o(So,{}),loader:ko,handle:{crumb:()=>"playground"}})]})]}),o(a,{path:"/apis",element:o(Lo,{}),handle:{crumb:()=>"APIs"}}),o(a,{path:"/support",element:o(Co,{}),handle:{crumb:()=>"Support"}}),c(a,{path:"/settings",element:o(_o,{}),handle:{crumb:()=>"Settings"},children:[o(a,{path:"general",loader:Ro,element:o(Eo,{}),handle:{crumb:()=>"General"}}),o(a,{path:"providers",loader:Io,element:o(jo,{}),handle:{crumb:()=>"AI Providers"}}),o(a,{path:"models",loader:Ao,element:o(Do,{}),handle:{crumb:()=>"Models"}}),o(a,{path:"annotations",loader:Fo,element:o(To,{}),handle:{crumb:()=>"Annotations"}}),o(a,{path:"data",element:o(Mo,{}),handle:{crumb:()=>"Data Retention"},loader:Go}),o(a,{path:"prompts",element:o(Oo,{}),handle:{crumb:()=>"Prompts"}})]}),o(a,{path:"/redirects/spans/:span_otel_id",loader:Vo,errorElement:o(n,{})}),o(a,{path:"/redirects/traces/:trace_otel_id",loader:No,errorElement:o(n,{})}),o(a,{path:"/redirects/sessions/:session_id",loader:Wo,errorElement:o(n,{})})]})})]})),{basename:window.Config.basename});function da(){return o(y,{router:ta})}function ma(){return o(Bo,{children:o(Ho,{children:o(pa,{})})})}function pa(){const{theme:l}=Jo();return o(S,{theme:l,mountGlobalStyles:!1,children:c(w.RelayEnvironmentProvider,{environment:Qo,children:[o(sa,{}),o(Ko,{children:o(Xo,{children:o($o,{children:o(z.Suspense,{children:o(Yo,{children:o(da,{})})})})})})]})})}const ua=document.getElementById("root"),fa=P.createRoot(ua);fa.render(o(ma,{}));
|