arize-phoenix 4.12.0rc1__py3-none-any.whl → 4.14.1__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-4.12.0rc1.dist-info → arize_phoenix-4.14.1.dist-info}/METADATA +10 -6
- {arize_phoenix-4.12.0rc1.dist-info → arize_phoenix-4.14.1.dist-info}/RECORD +35 -35
- phoenix/db/bulk_inserter.py +3 -1
- phoenix/experiments/evaluators/base.py +4 -0
- phoenix/experiments/evaluators/code_evaluators.py +80 -0
- phoenix/experiments/evaluators/llm_evaluators.py +77 -1
- phoenix/experiments/evaluators/utils.py +70 -21
- phoenix/experiments/functions.py +14 -14
- phoenix/server/api/dataloaders/average_experiment_run_latency.py +23 -23
- phoenix/server/api/dataloaders/experiment_error_rates.py +30 -10
- phoenix/server/api/dataloaders/experiment_run_counts.py +18 -5
- phoenix/server/api/input_types/{CreateSpanAnnotationsInput.py → CreateSpanAnnotationInput.py} +4 -2
- phoenix/server/api/input_types/{CreateTraceAnnotationsInput.py → CreateTraceAnnotationInput.py} +4 -2
- phoenix/server/api/input_types/{PatchAnnotationsInput.py → PatchAnnotationInput.py} +4 -2
- phoenix/server/api/mutations/span_annotations_mutations.py +12 -6
- phoenix/server/api/mutations/trace_annotations_mutations.py +12 -6
- phoenix/server/api/types/Experiment.py +2 -2
- phoenix/server/api/types/Inferences.py +1 -2
- phoenix/server/api/types/Model.py +1 -2
- phoenix/server/app.py +3 -7
- phoenix/server/static/.vite/manifest.json +31 -31
- phoenix/server/static/assets/{components-C8sm_r1F.js → components-DeS0YEmv.js} +2 -2
- phoenix/server/static/assets/index-CQgXRwU0.js +100 -0
- phoenix/server/static/assets/{pages-bN7juCjh.js → pages-hdjlFZhO.js} +275 -198
- phoenix/server/static/assets/{vendor-CUDAPm8e.js → vendor-DPvSDRn3.js} +1 -1
- phoenix/server/static/assets/{vendor-arizeai-Do2HOmcL.js → vendor-arizeai-CkvPT67c.js} +2 -2
- phoenix/server/static/assets/{vendor-codemirror-CrdxOlMs.js → vendor-codemirror-Cqwpwlua.js} +1 -1
- phoenix/server/static/assets/{vendor-recharts-PKRvByVe.js → vendor-recharts-5jlNaZuF.js} +1 -1
- phoenix/server/templates/index.html +51 -43
- phoenix/session/client.py +7 -5
- phoenix/trace/dsl/filter.py +40 -25
- phoenix/version.py +1 -1
- phoenix/server/static/assets/index-BEKPzgQs.js +0 -100
- {arize_phoenix-4.12.0rc1.dist-info → arize_phoenix-4.14.1.dist-info}/WHEEL +0 -0
- {arize_phoenix-4.12.0rc1.dist-info → arize_phoenix-4.14.1.dist-info}/licenses/IP_NOTICE +0 -0
- {arize_phoenix-4.12.0rc1.dist-info → arize_phoenix-4.14.1.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,43 +1,47 @@
|
|
|
1
|
-
{
|
|
2
|
-
{
|
|
3
|
-
|
|
4
|
-
{
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
1
|
+
{%- set rendered_chunks = [] -%}
|
|
2
|
+
{%- set css_links = [] -%}
|
|
3
|
+
{%- set js_scripts = [] -%}
|
|
4
|
+
{%- macro collect_assets(chunk_name, level=0) -%}
|
|
5
|
+
{% if chunk_name not in rendered_chunks %}
|
|
6
|
+
{% set _ = rendered_chunks.append(chunk_name) %}
|
|
7
|
+
{% set chunk = manifest[chunk_name] %}
|
|
8
|
+
{% if chunk.css %}
|
|
9
|
+
{% for css_file in chunk.css %}
|
|
10
|
+
{% if css_file not in css_links %}
|
|
11
|
+
{% set _ = css_links.append((basename, css_file)) %}
|
|
12
|
+
{% endif %}
|
|
13
|
+
{% endfor %}
|
|
14
|
+
{% endif %}
|
|
15
|
+
{% if chunk.imports %}
|
|
16
|
+
{% for import in chunk.imports %}
|
|
17
|
+
{% set _ = collect_assets(import, level + 1) %}
|
|
18
|
+
{% endfor %}
|
|
19
|
+
{% endif %}
|
|
20
|
+
{% if chunk.file.endswith('.js') %}
|
|
21
|
+
{% if chunk.file not in js_scripts %}
|
|
22
|
+
{% set _ = js_scripts.append((basename, chunk.file, level == 0)) %}
|
|
23
|
+
{% endif %}
|
|
24
|
+
{% elif chunk.file.endswith('.css') %}
|
|
25
|
+
{% if chunk.file not in css_links %}
|
|
26
|
+
{% set _ = css_links.append((basename, chunk.file)) %}
|
|
27
|
+
{% endif %}
|
|
14
28
|
{% endif %}
|
|
15
|
-
{% endfor %}
|
|
16
|
-
{% endif %}
|
|
17
|
-
|
|
18
|
-
{% if chunk.imports %}
|
|
19
|
-
{% for import in chunk.imports %}
|
|
20
|
-
{{ render_chunk(import, level + 1) }}
|
|
21
|
-
{% endfor %}
|
|
22
|
-
{% endif %}
|
|
23
|
-
|
|
24
|
-
{% if level == 0 %}
|
|
25
|
-
{% if chunk.file.endswith('.js') and chunk.file not in rendered_files %}
|
|
26
|
-
<script type="module" src="{{ basename }}/{{ chunk.file }}"></script>
|
|
27
|
-
{% set _ = rendered_files.append(chunk.file) %}
|
|
28
|
-
{% elif chunk.file.endswith('.css') and chunk.file not in rendered_files %}
|
|
29
|
-
<link rel="stylesheet" href="{{ basename }}/{{ chunk.file }}">
|
|
30
|
-
{% set _ = rendered_files.append(chunk.file) %}
|
|
31
|
-
{% endif %}
|
|
32
|
-
{% endif %}
|
|
33
|
-
|
|
34
|
-
{% if chunk.file.endswith('.js') and chunk.file not in rendered_files %}
|
|
35
|
-
<link rel="modulepreload" href="{{ basename }}/{{ chunk.file }}">
|
|
36
|
-
{% set _ = rendered_files.append(chunk.file) %}
|
|
37
29
|
{% endif %}
|
|
38
|
-
|
|
39
|
-
{
|
|
40
|
-
|
|
30
|
+
{%- endmacro -%}
|
|
31
|
+
{%- macro render_css() -%}
|
|
32
|
+
{%- for basename, css_file in css_links -%}
|
|
33
|
+
<link rel="stylesheet" href="{{ basename }}/{{ css_file }}">
|
|
34
|
+
{% endfor -%}
|
|
35
|
+
{%- endmacro -%}
|
|
36
|
+
{%- macro render_js() -%}
|
|
37
|
+
{%- for basename, js_file, is_entry in js_scripts -%}
|
|
38
|
+
{%- if is_entry -%}
|
|
39
|
+
<script type="module" src="{{ basename }}/{{ js_file }}"></script>
|
|
40
|
+
{% else -%}
|
|
41
|
+
<link rel="modulepreload" href="{{ basename }}/{{ js_file }}">
|
|
42
|
+
{% endif -%}
|
|
43
|
+
{%- endfor -%}
|
|
44
|
+
{%- endmacro -%}
|
|
41
45
|
<!DOCTYPE html>
|
|
42
46
|
<html>
|
|
43
47
|
<head>
|
|
@@ -55,6 +59,10 @@
|
|
|
55
59
|
rel="stylesheet"
|
|
56
60
|
href="https://fonts.googleapis.com/css2?family=Roboto:wght@100;300;400;500;700;900&display=swap"
|
|
57
61
|
/>
|
|
62
|
+
{% if not is_development -%}
|
|
63
|
+
{% set _ = collect_assets('index.tsx') -%}
|
|
64
|
+
{{- render_css() -}}
|
|
65
|
+
{%- endif -%}
|
|
58
66
|
<script src="{{basename}}/modernizr.js"></script>
|
|
59
67
|
</head>
|
|
60
68
|
<body>
|
|
@@ -82,7 +90,7 @@
|
|
|
82
90
|
writable: false
|
|
83
91
|
});
|
|
84
92
|
})()</script>
|
|
85
|
-
{% if is_development
|
|
93
|
+
{% if is_development -%}
|
|
86
94
|
<script type="module">
|
|
87
95
|
import RefreshRuntime from 'http://localhost:5173/@react-refresh'
|
|
88
96
|
RefreshRuntime.injectIntoGlobalHook(window)
|
|
@@ -92,8 +100,8 @@
|
|
|
92
100
|
</script>
|
|
93
101
|
<script type="module" src="http://localhost:5173/@vite/client"></script>
|
|
94
102
|
<script type="module" src="http://localhost:5173/index.tsx"></script>
|
|
95
|
-
{
|
|
96
|
-
{{
|
|
97
|
-
{
|
|
98
|
-
|
|
103
|
+
{%- else -%}
|
|
104
|
+
{{- render_js() -}}
|
|
105
|
+
{%- endif -%}
|
|
106
|
+
</body>
|
|
99
107
|
</html>
|
phoenix/session/client.py
CHANGED
|
@@ -22,6 +22,7 @@ from typing import (
|
|
|
22
22
|
cast,
|
|
23
23
|
)
|
|
24
24
|
from urllib.parse import quote, urljoin
|
|
25
|
+
from warnings import warn
|
|
25
26
|
|
|
26
27
|
import httpx
|
|
27
28
|
import pandas as pd
|
|
@@ -389,7 +390,6 @@ class Client(TraceDataExtractor):
|
|
|
389
390
|
def get_dataset_versions(
|
|
390
391
|
self,
|
|
391
392
|
dataset_id: str,
|
|
392
|
-
/,
|
|
393
393
|
*,
|
|
394
394
|
limit: Optional[int] = 100,
|
|
395
395
|
) -> pd.DataFrame:
|
|
@@ -410,7 +410,7 @@ class Client(TraceDataExtractor):
|
|
|
410
410
|
if not (records := response.json()["data"]):
|
|
411
411
|
return pd.DataFrame()
|
|
412
412
|
df = pd.DataFrame.from_records(records, index="version_id")
|
|
413
|
-
df["created_at"] =
|
|
413
|
+
df["created_at"] = df["created_at"].apply(datetime.fromisoformat)
|
|
414
414
|
return df
|
|
415
415
|
|
|
416
416
|
def upload_dataset(
|
|
@@ -531,11 +531,15 @@ class Client(TraceDataExtractor):
|
|
|
531
531
|
corresponding to an example in the dataset.
|
|
532
532
|
metadata (Iterable[Mapping[str, Any]]): List of dictionaries object each
|
|
533
533
|
corresponding to an example in the dataset.
|
|
534
|
-
dataset_description: (Optional[str]): Description of the dataset.
|
|
535
534
|
|
|
536
535
|
Returns:
|
|
537
536
|
A Dataset object with its examples.
|
|
538
537
|
"""
|
|
538
|
+
if dataset_description is not None:
|
|
539
|
+
warn(
|
|
540
|
+
"The `dataset_description` parameter has been deprecated "
|
|
541
|
+
"and will be removed in a future release."
|
|
542
|
+
)
|
|
539
543
|
if dataframe is not None or csv_file_path is not None:
|
|
540
544
|
if dataframe is not None and csv_file_path is not None:
|
|
541
545
|
raise ValueError(
|
|
@@ -555,7 +559,6 @@ class Client(TraceDataExtractor):
|
|
|
555
559
|
input_keys=input_keys,
|
|
556
560
|
output_keys=output_keys,
|
|
557
561
|
metadata_keys=metadata_keys,
|
|
558
|
-
dataset_description=dataset_description,
|
|
559
562
|
action="append",
|
|
560
563
|
)
|
|
561
564
|
return self._upload_json_dataset(
|
|
@@ -563,7 +566,6 @@ class Client(TraceDataExtractor):
|
|
|
563
566
|
inputs=inputs,
|
|
564
567
|
outputs=outputs,
|
|
565
568
|
metadata=metadata,
|
|
566
|
-
dataset_description=dataset_description,
|
|
567
569
|
action="append",
|
|
568
570
|
)
|
|
569
571
|
|
phoenix/trace/dsl/filter.py
CHANGED
|
@@ -5,8 +5,8 @@ import typing
|
|
|
5
5
|
from dataclasses import dataclass, field
|
|
6
6
|
from difflib import SequenceMatcher
|
|
7
7
|
from itertools import chain
|
|
8
|
-
from random import randint
|
|
9
8
|
from types import MappingProxyType
|
|
9
|
+
from uuid import uuid4
|
|
10
10
|
|
|
11
11
|
import sqlalchemy
|
|
12
12
|
from sqlalchemy.orm import Mapped, aliased
|
|
@@ -22,11 +22,14 @@ _VALID_EVAL_ATTRIBUTES: typing.Tuple[str, ...] = tuple(
|
|
|
22
22
|
)
|
|
23
23
|
|
|
24
24
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
AnnotationType: TypeAlias = typing.Literal["annotations", "evals"]
|
|
26
|
+
AnnotationAttribute: TypeAlias = typing.Literal["label", "score"]
|
|
27
|
+
AnnotationExpression: TypeAlias = str
|
|
28
|
+
AnnotationName: TypeAlias = str
|
|
28
29
|
|
|
29
|
-
EVAL_EXPRESSION_PATTERN = re.compile(
|
|
30
|
+
EVAL_EXPRESSION_PATTERN = re.compile(
|
|
31
|
+
r"""\b((annotations|evals)\[(".*?"|'.*?')\][.](label|score))\b"""
|
|
32
|
+
)
|
|
30
33
|
|
|
31
34
|
|
|
32
35
|
@dataclass(frozen=True)
|
|
@@ -46,9 +49,10 @@ class AliasedAnnotationRelation:
|
|
|
46
49
|
|
|
47
50
|
def __post_init__(self) -> None:
|
|
48
51
|
table_alias = f"span_annotation_{self.index}"
|
|
49
|
-
alias_id =
|
|
52
|
+
alias_id = uuid4().hex
|
|
50
53
|
label_attribute_alias = f"{table_alias}_label_{alias_id}"
|
|
51
54
|
score_attribute_alias = f"{table_alias}_score_{alias_id}"
|
|
55
|
+
|
|
52
56
|
table = aliased(models.SpanAnnotation, name=table_alias)
|
|
53
57
|
object.__setattr__(self, "_label_attribute_alias", label_attribute_alias)
|
|
54
58
|
object.__setattr__(self, "_score_attribute_alias", score_attribute_alias)
|
|
@@ -67,7 +71,7 @@ class AliasedAnnotationRelation:
|
|
|
67
71
|
yield self._label_attribute_alias, self.table.label
|
|
68
72
|
yield self._score_attribute_alias, self.table.score
|
|
69
73
|
|
|
70
|
-
def attribute_alias(self, attribute:
|
|
74
|
+
def attribute_alias(self, attribute: AnnotationAttribute) -> str:
|
|
71
75
|
"""
|
|
72
76
|
Returns an alias for the given attribute (i.e., column).
|
|
73
77
|
"""
|
|
@@ -579,7 +583,7 @@ def _validate_expression(
|
|
|
579
583
|
_is_subscript(node, "metadata") or _is_subscript(node, "attributes")
|
|
580
584
|
) and _get_attribute_keys_list(node) is not None:
|
|
581
585
|
continue
|
|
582
|
-
elif
|
|
586
|
+
elif _is_annotation(node) and _get_subscript_key(node) is not None:
|
|
583
587
|
# e.g. `evals["name"]`
|
|
584
588
|
if not (eval_name := _get_subscript_key(node)) or (
|
|
585
589
|
valid_eval_names is not None and eval_name not in valid_eval_names
|
|
@@ -601,7 +605,7 @@ def _validate_expression(
|
|
|
601
605
|
else ""
|
|
602
606
|
)
|
|
603
607
|
continue
|
|
604
|
-
elif isinstance(node, ast.Attribute) and
|
|
608
|
+
elif isinstance(node, ast.Attribute) and _is_annotation(node.value):
|
|
605
609
|
# e.g. `evals["name"].score`
|
|
606
610
|
if (attr := node.attr) not in valid_eval_attributes:
|
|
607
611
|
source_segment = typing.cast(str, ast.get_source_segment(source, node))
|
|
@@ -662,19 +666,19 @@ def _as_attribute(
|
|
|
662
666
|
) -> ast.Subscript:
|
|
663
667
|
return ast.Subscript(
|
|
664
668
|
value=ast.Name(id="attributes", ctx=ast.Load()),
|
|
665
|
-
slice=ast.List(elts=keys, ctx=ast.Load())
|
|
669
|
+
slice=ast.List(elts=keys, ctx=ast.Load()) # type: ignore[arg-type]
|
|
666
670
|
if sys.version_info >= (3, 9)
|
|
667
|
-
else ast.Index(value=ast.List(elts=keys, ctx=ast.Load())),
|
|
671
|
+
else ast.Index(value=ast.List(elts=keys, ctx=ast.Load())), # type: ignore
|
|
668
672
|
ctx=ast.Load(),
|
|
669
673
|
)
|
|
670
674
|
|
|
671
675
|
|
|
672
|
-
def
|
|
676
|
+
def _is_annotation(node: typing.Any) -> TypeGuard[ast.Subscript]:
|
|
673
677
|
# e.g. `evals["name"]`
|
|
674
678
|
return (
|
|
675
679
|
isinstance(node, ast.Subscript)
|
|
676
680
|
and isinstance(value := node.value, ast.Name)
|
|
677
|
-
and value.id
|
|
681
|
+
and value.id in ["evals", "annotations"]
|
|
678
682
|
)
|
|
679
683
|
|
|
680
684
|
|
|
@@ -817,34 +821,45 @@ def _apply_eval_aliasing(
|
|
|
817
821
|
span_annotation_0_label_123 == 'correct' or span_annotation_0_score_456 < 0.5
|
|
818
822
|
```
|
|
819
823
|
"""
|
|
820
|
-
eval_aliases: typing.Dict[
|
|
821
|
-
for
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
824
|
+
eval_aliases: typing.Dict[AnnotationName, AliasedAnnotationRelation] = {}
|
|
825
|
+
for (
|
|
826
|
+
annotation_expression,
|
|
827
|
+
annotation_type,
|
|
828
|
+
annotation_name,
|
|
829
|
+
annotation_attribute,
|
|
830
|
+
) in _parse_annotation_expressions_and_names(source):
|
|
831
|
+
if (eval_alias := eval_aliases.get(annotation_name)) is None:
|
|
832
|
+
eval_alias = AliasedAnnotationRelation(index=len(eval_aliases), name=annotation_name)
|
|
833
|
+
eval_aliases[annotation_name] = eval_alias
|
|
834
|
+
alias_name = eval_alias.attribute_alias(annotation_attribute)
|
|
835
|
+
source = source.replace(annotation_expression, alias_name)
|
|
827
836
|
return source, tuple(eval_aliases.values())
|
|
828
837
|
|
|
829
838
|
|
|
830
|
-
def
|
|
839
|
+
def _parse_annotation_expressions_and_names(
|
|
831
840
|
source: str,
|
|
832
|
-
) -> typing.Iterator[
|
|
841
|
+
) -> typing.Iterator[
|
|
842
|
+
typing.Tuple[AnnotationExpression, AnnotationType, AnnotationName, AnnotationAttribute]
|
|
843
|
+
]:
|
|
833
844
|
"""
|
|
834
845
|
Parses filter conditions for evaluation expressions of the form:
|
|
835
846
|
|
|
836
847
|
```
|
|
837
848
|
evals["<eval-name>"].<attribute>
|
|
849
|
+
annotations["eval-name"].<attribute>
|
|
838
850
|
```
|
|
839
851
|
"""
|
|
840
852
|
for match in EVAL_EXPRESSION_PATTERN.finditer(source):
|
|
841
853
|
(
|
|
842
|
-
|
|
854
|
+
annotation_expression,
|
|
855
|
+
annotation_type,
|
|
843
856
|
quoted_eval_name,
|
|
844
857
|
evaluation_attribute_name,
|
|
845
858
|
) = match.groups()
|
|
859
|
+
annotation_type = typing.cast(AnnotationType, annotation_type)
|
|
846
860
|
yield (
|
|
847
|
-
|
|
861
|
+
annotation_expression,
|
|
862
|
+
annotation_type,
|
|
848
863
|
quoted_eval_name[1:-1],
|
|
849
|
-
typing.cast(
|
|
864
|
+
typing.cast(AnnotationAttribute, evaluation_attribute_name),
|
|
850
865
|
)
|
phoenix/version.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
__version__ = "4.
|
|
1
|
+
__version__ = "4.14.1"
|
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
import{r as d,j as e,d2 as F,v as s,F as P,R as v,w as E,aN as L,d3 as R,d4 as S,d5 as a,d6 as w,d7 as z,b as A,d8 as j}from"./vendor-CUDAPm8e.js";import{Q as C,j as k,Y as _,S as $,t as I,a4 as O}from"./vendor-arizeai-Do2HOmcL.js";import{aY as D,d as T,R as N,aZ as G,a_ as M}from"./components-C8sm_r1F.js";import{L as B,E as U,h as Y,M as q,a as m,D as J,d as K,b as W,e as H,P as Q,c as V,f as Z,p as X,g as u,i as ee,j as re,k as g,l as ae,m as h,n as f,o as oe,q as te,r as ne,s as se,t as le,A as ie}from"./pages-bN7juCjh.js";import"./vendor-three-DwGkEfCM.js";import"./vendor-codemirror-CrdxOlMs.js";import"./vendor-recharts-PKRvByVe.js";(function(){const n=document.createElement("link").relList;if(n&&n.supports&&n.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))c(o);new MutationObserver(o=>{for(const t of o)if(t.type==="childList")for(const l of t.addedNodes)l.tagName==="LINK"&&l.rel==="modulepreload"&&c(l)}).observe(document,{childList:!0,subtree:!0});function i(o){const t={};return o.integrity&&(t.integrity=o.integrity),o.referrerPolicy&&(t.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?t.credentials="include":o.crossOrigin==="anonymous"?t.credentials="omit":t.credentials="same-origin",t}function c(o){if(o.ep)return;o.ep=!0;const t=i(o);fetch(o.href,t)}})();const x="arize-phoenix-feature-flags",p={__CLEAR__:!1};function ce(){const r=localStorage.getItem(x);if(!r)return p;try{const n=JSON.parse(r);return Object.assign({},p,n)}catch{return p}}const b=d.createContext(null);function de(){const r=v.useContext(b);if(r===null)throw new Error("useFeatureFlags must be used within a FeatureFlagsProvider");return r}function pe(r){const[n,i]=d.useState(ce()),c=o=>{localStorage.setItem(x,JSON.stringify(o)),i(o)};return e(b.Provider,{value:{featureFlags:n,setFeatureFlags:c},children:e(me,{children:r.children})})}function me(r){const{children:n}=r,{featureFlags:i,setFeatureFlags:c}=de(),[o,t]=d.useState(!1);return F("ctrl+shift+f",()=>t(!0)),s(P,{children:[n,e($,{type:"modal",isDismissable:!0,onDismiss:()=>t(!1),children:o&&e(C,{title:"Feature Flags",children:e(k,{height:"size-1000",padding:"size-100",children:Object.keys(i).map(l=>e(_,{isSelected:i[l],onChange:y=>c({...i,[l]:y}),children:l},l))})})})]})}function ue(){return e(L,{styles:r=>E`
|
|
2
|
-
body {
|
|
3
|
-
background-color: var(--ac-global-color-grey-75);
|
|
4
|
-
color: var(--ac-global-text-color-900);
|
|
5
|
-
font-family: "Roboto";
|
|
6
|
-
font-size: ${r.typography.sizes.medium.fontSize}px;
|
|
7
|
-
margin: 0;
|
|
8
|
-
#root,
|
|
9
|
-
#root > div[data-overlay-container="true"],
|
|
10
|
-
#root > div[data-overlay-container="true"] > .ac-theme {
|
|
11
|
-
height: 100vh;
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
/* Remove list styling */
|
|
16
|
-
ul {
|
|
17
|
-
display: block;
|
|
18
|
-
list-style-type: none;
|
|
19
|
-
margin-block-start: none;
|
|
20
|
-
margin-block-end: 0;
|
|
21
|
-
padding-inline-start: 0;
|
|
22
|
-
margin-block-start: 0;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
/* A reset style for buttons */
|
|
26
|
-
.button--reset {
|
|
27
|
-
background: none;
|
|
28
|
-
border: none;
|
|
29
|
-
padding: 0;
|
|
30
|
-
}
|
|
31
|
-
/* this css class is added to html via modernizr @see modernizr.js */
|
|
32
|
-
.no-hiddenscroll {
|
|
33
|
-
/* Works on Firefox */
|
|
34
|
-
* {
|
|
35
|
-
scrollbar-width: thin;
|
|
36
|
-
scrollbar-color: var(--ac-global-color-grey-300)
|
|
37
|
-
var(--ac-global-color-grey-400);
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
/* Works on Chrome, Edge, and Safari */
|
|
41
|
-
*::-webkit-scrollbar {
|
|
42
|
-
width: 14px;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
*::-webkit-scrollbar-track {
|
|
46
|
-
background: var(--ac-global-color-grey-100);
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
*::-webkit-scrollbar-thumb {
|
|
50
|
-
background-color: var(--ac-global-color-grey-75);
|
|
51
|
-
border-radius: 8px;
|
|
52
|
-
border: 1px solid var(--ac-global-color-grey-300);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
:root {
|
|
57
|
-
--px-blue-color: ${r.colors.arizeBlue};
|
|
58
|
-
|
|
59
|
-
--px-flex-gap-sm: ${r.spacing.margin4}px;
|
|
60
|
-
--px-flex-gap-sm: ${r.spacing.margin8}px;
|
|
61
|
-
|
|
62
|
-
--px-section-background-color: ${r.colors.gray500};
|
|
63
|
-
|
|
64
|
-
/* An item is a typically something in a list */
|
|
65
|
-
--px-item-background-color: ${r.colors.gray800};
|
|
66
|
-
--px-item-border-color: ${r.colors.gray600};
|
|
67
|
-
|
|
68
|
-
--px-spacing-sm: ${r.spacing.padding4}px;
|
|
69
|
-
--px-spacing-med: ${r.spacing.padding8}px;
|
|
70
|
-
--px-spacing-lg: ${r.spacing.padding16}px;
|
|
71
|
-
|
|
72
|
-
--px-border-radius-med: ${r.borderRadius.medium}px;
|
|
73
|
-
|
|
74
|
-
--px-font-size-sm: ${r.typography.sizes.small.fontSize}px;
|
|
75
|
-
--px-font-size-med: ${r.typography.sizes.medium.fontSize}px;
|
|
76
|
-
--px-font-size-lg: ${r.typography.sizes.large.fontSize}px;
|
|
77
|
-
|
|
78
|
-
--px-gradient-bar-height: 8px;
|
|
79
|
-
|
|
80
|
-
--px-nav-collapsed-width: 45px;
|
|
81
|
-
--px-nav-expanded-width: 200px;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
.ac-theme--dark {
|
|
85
|
-
--px-primary-color: #9efcfd;
|
|
86
|
-
--px-primary-color--transparent: rgb(158, 252, 253, 0.2);
|
|
87
|
-
--px-reference-color: #baa1f9;
|
|
88
|
-
--px-reference-color--transparent: #baa1f982;
|
|
89
|
-
--px-corpus-color: #92969c;
|
|
90
|
-
--px-corpus-color--transparent: #92969c63;
|
|
91
|
-
}
|
|
92
|
-
.ac-theme--light {
|
|
93
|
-
--px-primary-color: #00add0;
|
|
94
|
-
--px-primary-color--transparent: rgba(0, 173, 208, 0.2);
|
|
95
|
-
--px-reference-color: #4500d9;
|
|
96
|
-
--px-reference-color--transparent: rgba(69, 0, 217, 0.2);
|
|
97
|
-
--px-corpus-color: #92969c;
|
|
98
|
-
--px-corpus-color--transparent: #92969c63;
|
|
99
|
-
}
|
|
100
|
-
`})}const ge=R(S(s(a,{path:"/",element:e(B,{}),errorElement:e(U,{}),children:[e(a,{index:!0,loader:Y}),s(a,{path:"/model",handle:{crumb:()=>"model"},element:e(q,{}),children:[e(a,{index:!0,element:e(m,{})}),e(a,{element:e(m,{}),children:e(a,{path:"dimensions",children:e(a,{path:":dimensionId",element:e(J,{}),loader:K})})}),e(a,{path:"embeddings",children:e(a,{path:":embeddingDimensionId",element:e(W,{}),loader:H,handle:{crumb:r=>r.embedding.name}})})]}),s(a,{path:"/projects",handle:{crumb:()=>"projects"},element:e(Q,{}),children:[e(a,{index:!0,element:e(V,{})}),s(a,{path:":projectId",element:e(Z,{}),loader:X,handle:{crumb:r=>r.project.name},children:[e(a,{index:!0,element:e(u,{})}),e(a,{element:e(u,{}),children:e(a,{path:"traces/:traceId",element:e(ee,{})})})]})]}),s(a,{path:"/datasets",handle:{crumb:()=>"datasets"},children:[e(a,{index:!0,element:e(re,{})}),s(a,{path:":datasetId",loader:g,handle:{crumb:r=>r.dataset.name},children:[s(a,{element:e(ae,{}),loader:g,children:[e(a,{index:!0,element:e(h,{}),loader:f}),e(a,{path:"experiments",element:e(h,{}),loader:f}),e(a,{path:"examples",element:e(oe,{}),loader:te,children:e(a,{path:":exampleId",element:e(ne,{})})})]}),e(a,{path:"compare",handle:{crumb:()=>"compare"},loader:se,element:e(le,{})})]})]}),e(a,{path:"/apis",element:e(ie,{}),handle:{crumb:()=>"APIs"}})]})),{basename:window.Config.basename});function he(){return e(w,{router:ge})}function fe(){return e(D,{children:e(xe,{})})}function xe(){const{theme:r}=T();return e(O,{theme:r,children:e(z,{theme:I,children:s(A.RelayEnvironmentProvider,{environment:N,children:[e(ue,{}),e(pe,{children:e(G,{children:e(d.Suspense,{children:e(M,{children:e(he,{})})})})})]})})})}const be=document.getElementById("root"),ye=j.createRoot(be);ye.render(e(fe,{}));
|
|
File without changes
|
|
File without changes
|
|
File without changes
|