arize-phoenix 6.1.0__py3-none-any.whl → 7.0.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-6.1.0.dist-info → arize_phoenix-7.0.0.dist-info}/METADATA +9 -8
- {arize_phoenix-6.1.0.dist-info → arize_phoenix-7.0.0.dist-info}/RECORD +52 -38
- phoenix/config.py +4 -1
- phoenix/db/engines.py +1 -1
- phoenix/db/insertion/span.py +65 -30
- phoenix/db/migrate.py +4 -1
- phoenix/db/migrations/data_migration_scripts/__init__.py +0 -0
- phoenix/db/migrations/data_migration_scripts/populate_project_sessions.py +199 -0
- phoenix/db/migrations/versions/4ded9e43755f_create_project_sessions_table.py +66 -0
- phoenix/db/models.py +27 -0
- phoenix/metrics/wrappers.py +7 -1
- phoenix/server/api/context.py +15 -2
- phoenix/server/api/dataloaders/__init__.py +14 -2
- phoenix/server/api/dataloaders/session_io.py +75 -0
- phoenix/server/api/dataloaders/session_num_traces.py +30 -0
- phoenix/server/api/dataloaders/session_num_traces_with_error.py +32 -0
- phoenix/server/api/dataloaders/session_token_usages.py +41 -0
- phoenix/server/api/dataloaders/session_trace_latency_ms_quantile.py +55 -0
- phoenix/server/api/dataloaders/trace_by_trace_ids.py +25 -0
- phoenix/server/api/dataloaders/trace_root_spans.py +32 -0
- phoenix/server/api/input_types/ProjectSessionSort.py +29 -0
- phoenix/server/api/mutations/chat_mutations.py +5 -0
- phoenix/server/api/mutations/project_mutations.py +12 -2
- phoenix/server/api/queries.py +14 -9
- phoenix/server/api/subscriptions.py +6 -0
- phoenix/server/api/types/EmbeddingDimension.py +1 -1
- phoenix/server/api/types/ExperimentRun.py +3 -4
- phoenix/server/api/types/ExperimentRunAnnotation.py +3 -4
- phoenix/server/api/types/Project.py +150 -12
- phoenix/server/api/types/ProjectSession.py +139 -0
- phoenix/server/api/types/Span.py +6 -19
- phoenix/server/api/types/SpanIOValue.py +15 -0
- phoenix/server/api/types/TokenUsage.py +11 -0
- phoenix/server/api/types/Trace.py +59 -2
- phoenix/server/app.py +15 -2
- phoenix/server/static/.vite/manifest.json +40 -31
- phoenix/server/static/assets/{components-CdiZ1Osh.js → components-DKH6AzJw.js} +410 -351
- phoenix/server/static/assets/index-DLV87qiO.js +93 -0
- phoenix/server/static/assets/{pages-FArMEfgg.js → pages-CVY3Nv4Z.js} +638 -316
- phoenix/server/static/assets/vendor-Cb3zlNNd.js +894 -0
- phoenix/server/static/assets/{vendor-arizeai-BG6iwyLC.js → vendor-arizeai-Buo4e1A6.js} +2 -2
- phoenix/server/static/assets/{vendor-codemirror-BotnVFFX.js → vendor-codemirror-BuAQiUVf.js} +5 -5
- phoenix/server/static/assets/{vendor-recharts-Dy5gEFzQ.js → vendor-recharts-Cl9dK5tC.js} +1 -1
- phoenix/server/static/assets/{vendor-Bnv1dNRQ.js → vendor-shiki-CazYUixL.js} +5 -898
- phoenix/session/client.py +13 -4
- phoenix/trace/fixtures.py +8 -0
- phoenix/trace/schemas.py +16 -0
- phoenix/version.py +1 -1
- phoenix/server/api/dataloaders/trace_row_ids.py +0 -33
- phoenix/server/static/assets/index-D_sCOjlG.js +0 -101
- {arize_phoenix-6.1.0.dist-info → arize_phoenix-7.0.0.dist-info}/WHEEL +0 -0
- {arize_phoenix-6.1.0.dist-info → arize_phoenix-7.0.0.dist-info}/entry_points.txt +0 -0
- {arize_phoenix-6.1.0.dist-info → arize_phoenix-7.0.0.dist-info}/licenses/IP_NOTICE +0 -0
- {arize_phoenix-6.1.0.dist-info → arize_phoenix-7.0.0.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from
|
|
3
|
+
from datetime import datetime
|
|
4
|
+
from typing import TYPE_CHECKING, Annotated, Optional, Union
|
|
4
5
|
|
|
5
6
|
import strawberry
|
|
7
|
+
from openinference.semconv.trace import SpanAttributes
|
|
6
8
|
from sqlalchemy import desc, select
|
|
7
9
|
from sqlalchemy.orm import contains_eager
|
|
8
|
-
from strawberry import UNSET, Private
|
|
10
|
+
from strawberry import UNSET, Private, lazy
|
|
9
11
|
from strawberry.relay import Connection, GlobalID, Node, NodeID
|
|
10
12
|
from strawberry.types import Info
|
|
11
13
|
|
|
@@ -21,12 +23,18 @@ from phoenix.server.api.types.SortDir import SortDir
|
|
|
21
23
|
from phoenix.server.api.types.Span import Span, to_gql_span
|
|
22
24
|
from phoenix.server.api.types.TraceAnnotation import TraceAnnotation, to_gql_trace_annotation
|
|
23
25
|
|
|
26
|
+
if TYPE_CHECKING:
|
|
27
|
+
from phoenix.server.api.types.ProjectSession import ProjectSession
|
|
28
|
+
|
|
24
29
|
|
|
25
30
|
@strawberry.type
|
|
26
31
|
class Trace(Node):
|
|
27
32
|
id_attr: NodeID[int]
|
|
28
33
|
project_rowid: Private[int]
|
|
34
|
+
project_session_rowid: Private[Optional[int]]
|
|
29
35
|
trace_id: str
|
|
36
|
+
start_time: datetime
|
|
37
|
+
end_time: datetime
|
|
30
38
|
|
|
31
39
|
@strawberry.field
|
|
32
40
|
async def project_id(self) -> GlobalID:
|
|
@@ -34,6 +42,40 @@ class Trace(Node):
|
|
|
34
42
|
|
|
35
43
|
return GlobalID(type_name=Project.__name__, node_id=str(self.project_rowid))
|
|
36
44
|
|
|
45
|
+
@strawberry.field
|
|
46
|
+
async def project_session_id(self) -> Optional[GlobalID]:
|
|
47
|
+
if self.project_session_rowid is None:
|
|
48
|
+
return None
|
|
49
|
+
from phoenix.server.api.types.ProjectSession import ProjectSession
|
|
50
|
+
|
|
51
|
+
return GlobalID(type_name=ProjectSession.__name__, node_id=str(self.project_session_rowid))
|
|
52
|
+
|
|
53
|
+
@strawberry.field
|
|
54
|
+
async def session(
|
|
55
|
+
self,
|
|
56
|
+
info: Info[Context, None],
|
|
57
|
+
) -> Union[Annotated["ProjectSession", lazy(".ProjectSession")], None]:
|
|
58
|
+
if self.project_session_rowid is None:
|
|
59
|
+
return None
|
|
60
|
+
from phoenix.server.api.types.ProjectSession import to_gql_project_session
|
|
61
|
+
|
|
62
|
+
stmt = select(models.ProjectSession).filter_by(id=self.project_session_rowid)
|
|
63
|
+
async with info.context.db() as session:
|
|
64
|
+
project_session = await session.scalar(stmt)
|
|
65
|
+
if project_session is None:
|
|
66
|
+
return None
|
|
67
|
+
return to_gql_project_session(project_session)
|
|
68
|
+
|
|
69
|
+
@strawberry.field
|
|
70
|
+
async def root_span(
|
|
71
|
+
self,
|
|
72
|
+
info: Info[Context, None],
|
|
73
|
+
) -> Optional[Span]:
|
|
74
|
+
span = await info.context.data_loaders.trace_root_spans.load(self.id_attr)
|
|
75
|
+
if span is None:
|
|
76
|
+
return None
|
|
77
|
+
return to_gql_span(span)
|
|
78
|
+
|
|
37
79
|
@strawberry.field
|
|
38
80
|
async def spans(
|
|
39
81
|
self,
|
|
@@ -82,3 +124,18 @@ class Trace(Node):
|
|
|
82
124
|
stmt = stmt.order_by(models.TraceAnnotation.created_at.desc())
|
|
83
125
|
annotations = await session.scalars(stmt)
|
|
84
126
|
return [to_gql_trace_annotation(annotation) for annotation in annotations]
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
def to_gql_trace(trace: models.Trace) -> Trace:
|
|
130
|
+
return Trace(
|
|
131
|
+
id_attr=trace.id,
|
|
132
|
+
project_rowid=trace.project_rowid,
|
|
133
|
+
project_session_rowid=trace.project_session_rowid,
|
|
134
|
+
trace_id=trace.trace_id,
|
|
135
|
+
start_time=trace.start_time,
|
|
136
|
+
end_time=trace.end_time,
|
|
137
|
+
)
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
INPUT_VALUE = SpanAttributes.INPUT_VALUE.split(".")
|
|
141
|
+
OUTPUT_VALUE = SpanAttributes.OUTPUT_VALUE.split(".")
|
phoenix/server/app.py
CHANGED
|
@@ -87,12 +87,18 @@ from phoenix.server.api.dataloaders import (
|
|
|
87
87
|
MinStartOrMaxEndTimeDataLoader,
|
|
88
88
|
ProjectByNameDataLoader,
|
|
89
89
|
RecordCountDataLoader,
|
|
90
|
+
SessionIODataLoader,
|
|
91
|
+
SessionNumTracesDataLoader,
|
|
92
|
+
SessionNumTracesWithErrorDataLoader,
|
|
93
|
+
SessionTokenUsagesDataLoader,
|
|
94
|
+
SessionTraceLatencyMsQuantileDataLoader,
|
|
90
95
|
SpanAnnotationsDataLoader,
|
|
91
96
|
SpanDatasetExamplesDataLoader,
|
|
92
97
|
SpanDescendantsDataLoader,
|
|
93
98
|
SpanProjectsDataLoader,
|
|
94
99
|
TokenCountDataLoader,
|
|
95
|
-
|
|
100
|
+
TraceByTraceIdsDataLoader,
|
|
101
|
+
TraceRootSpansDataLoader,
|
|
96
102
|
UserRolesDataLoader,
|
|
97
103
|
UsersDataLoader,
|
|
98
104
|
)
|
|
@@ -609,6 +615,12 @@ def create_graphql_router(
|
|
|
609
615
|
db,
|
|
610
616
|
cache_map=cache_for_dataloaders.record_count if cache_for_dataloaders else None,
|
|
611
617
|
),
|
|
618
|
+
session_first_inputs=SessionIODataLoader(db, "first_input"),
|
|
619
|
+
session_last_outputs=SessionIODataLoader(db, "last_output"),
|
|
620
|
+
session_num_traces=SessionNumTracesDataLoader(db),
|
|
621
|
+
session_num_traces_with_error=SessionNumTracesWithErrorDataLoader(db),
|
|
622
|
+
session_token_usages=SessionTokenUsagesDataLoader(db),
|
|
623
|
+
session_trace_latency_ms_quantile=SessionTraceLatencyMsQuantileDataLoader(db),
|
|
612
624
|
span_annotations=SpanAnnotationsDataLoader(db),
|
|
613
625
|
span_dataset_examples=SpanDatasetExamplesDataLoader(db),
|
|
614
626
|
span_descendants=SpanDescendantsDataLoader(db),
|
|
@@ -617,7 +629,8 @@ def create_graphql_router(
|
|
|
617
629
|
db,
|
|
618
630
|
cache_map=cache_for_dataloaders.token_count if cache_for_dataloaders else None,
|
|
619
631
|
),
|
|
620
|
-
|
|
632
|
+
trace_by_trace_ids=TraceByTraceIdsDataLoader(db),
|
|
633
|
+
trace_root_spans=TraceRootSpansDataLoader(db),
|
|
621
634
|
project_by_name=ProjectByNameDataLoader(db),
|
|
622
635
|
users=UsersDataLoader(db),
|
|
623
636
|
user_roles=UserRolesDataLoader(db),
|
|
@@ -1,32 +1,32 @@
|
|
|
1
1
|
{
|
|
2
|
-
"_components-
|
|
3
|
-
"file": "assets/components-
|
|
2
|
+
"_components-DKH6AzJw.js": {
|
|
3
|
+
"file": "assets/components-DKH6AzJw.js",
|
|
4
4
|
"name": "components",
|
|
5
5
|
"imports": [
|
|
6
|
-
"_vendor-
|
|
7
|
-
"_pages-
|
|
8
|
-
"_vendor-arizeai-
|
|
9
|
-
"_vendor-codemirror-
|
|
6
|
+
"_vendor-Cb3zlNNd.js",
|
|
7
|
+
"_pages-CVY3Nv4Z.js",
|
|
8
|
+
"_vendor-arizeai-Buo4e1A6.js",
|
|
9
|
+
"_vendor-codemirror-BuAQiUVf.js",
|
|
10
10
|
"_vendor-three-DwGkEfCM.js"
|
|
11
11
|
]
|
|
12
12
|
},
|
|
13
|
-
"_pages-
|
|
14
|
-
"file": "assets/pages-
|
|
13
|
+
"_pages-CVY3Nv4Z.js": {
|
|
14
|
+
"file": "assets/pages-CVY3Nv4Z.js",
|
|
15
15
|
"name": "pages",
|
|
16
16
|
"imports": [
|
|
17
|
-
"_vendor-
|
|
18
|
-
"_vendor-arizeai-
|
|
19
|
-
"_components-
|
|
20
|
-
"_vendor-recharts-
|
|
21
|
-
"_vendor-codemirror-
|
|
17
|
+
"_vendor-Cb3zlNNd.js",
|
|
18
|
+
"_vendor-arizeai-Buo4e1A6.js",
|
|
19
|
+
"_components-DKH6AzJw.js",
|
|
20
|
+
"_vendor-recharts-Cl9dK5tC.js",
|
|
21
|
+
"_vendor-codemirror-BuAQiUVf.js"
|
|
22
22
|
]
|
|
23
23
|
},
|
|
24
24
|
"_vendor-!~{003}~.js": {
|
|
25
25
|
"file": "assets/vendor-DxkFTwjz.css",
|
|
26
26
|
"src": "_vendor-!~{003}~.js"
|
|
27
27
|
},
|
|
28
|
-
"_vendor-
|
|
29
|
-
"file": "assets/vendor-
|
|
28
|
+
"_vendor-Cb3zlNNd.js": {
|
|
29
|
+
"file": "assets/vendor-Cb3zlNNd.js",
|
|
30
30
|
"name": "vendor",
|
|
31
31
|
"imports": [
|
|
32
32
|
"_vendor-three-DwGkEfCM.js"
|
|
@@ -35,25 +35,33 @@
|
|
|
35
35
|
"assets/vendor-DxkFTwjz.css"
|
|
36
36
|
]
|
|
37
37
|
},
|
|
38
|
-
"_vendor-arizeai-
|
|
39
|
-
"file": "assets/vendor-arizeai-
|
|
38
|
+
"_vendor-arizeai-Buo4e1A6.js": {
|
|
39
|
+
"file": "assets/vendor-arizeai-Buo4e1A6.js",
|
|
40
40
|
"name": "vendor-arizeai",
|
|
41
41
|
"imports": [
|
|
42
|
-
"_vendor-
|
|
42
|
+
"_vendor-Cb3zlNNd.js"
|
|
43
43
|
]
|
|
44
44
|
},
|
|
45
|
-
"_vendor-codemirror-
|
|
46
|
-
"file": "assets/vendor-codemirror-
|
|
45
|
+
"_vendor-codemirror-BuAQiUVf.js": {
|
|
46
|
+
"file": "assets/vendor-codemirror-BuAQiUVf.js",
|
|
47
47
|
"name": "vendor-codemirror",
|
|
48
48
|
"imports": [
|
|
49
|
-
"_vendor-
|
|
49
|
+
"_vendor-Cb3zlNNd.js",
|
|
50
|
+
"_vendor-shiki-CazYUixL.js"
|
|
50
51
|
]
|
|
51
52
|
},
|
|
52
|
-
"_vendor-recharts-
|
|
53
|
-
"file": "assets/vendor-recharts-
|
|
53
|
+
"_vendor-recharts-Cl9dK5tC.js": {
|
|
54
|
+
"file": "assets/vendor-recharts-Cl9dK5tC.js",
|
|
54
55
|
"name": "vendor-recharts",
|
|
55
56
|
"imports": [
|
|
56
|
-
"_vendor-
|
|
57
|
+
"_vendor-Cb3zlNNd.js"
|
|
58
|
+
]
|
|
59
|
+
},
|
|
60
|
+
"_vendor-shiki-CazYUixL.js": {
|
|
61
|
+
"file": "assets/vendor-shiki-CazYUixL.js",
|
|
62
|
+
"name": "vendor-shiki",
|
|
63
|
+
"imports": [
|
|
64
|
+
"_vendor-Cb3zlNNd.js"
|
|
57
65
|
]
|
|
58
66
|
},
|
|
59
67
|
"_vendor-three-DwGkEfCM.js": {
|
|
@@ -61,18 +69,19 @@
|
|
|
61
69
|
"name": "vendor-three"
|
|
62
70
|
},
|
|
63
71
|
"index.tsx": {
|
|
64
|
-
"file": "assets/index-
|
|
72
|
+
"file": "assets/index-DLV87qiO.js",
|
|
65
73
|
"name": "index",
|
|
66
74
|
"src": "index.tsx",
|
|
67
75
|
"isEntry": true,
|
|
68
76
|
"imports": [
|
|
69
|
-
"_vendor-
|
|
70
|
-
"_vendor-arizeai-
|
|
71
|
-
"_pages-
|
|
72
|
-
"_components-
|
|
77
|
+
"_vendor-Cb3zlNNd.js",
|
|
78
|
+
"_vendor-arizeai-Buo4e1A6.js",
|
|
79
|
+
"_pages-CVY3Nv4Z.js",
|
|
80
|
+
"_components-DKH6AzJw.js",
|
|
73
81
|
"_vendor-three-DwGkEfCM.js",
|
|
74
|
-
"_vendor-recharts-
|
|
75
|
-
"_vendor-codemirror-
|
|
82
|
+
"_vendor-recharts-Cl9dK5tC.js",
|
|
83
|
+
"_vendor-codemirror-BuAQiUVf.js",
|
|
84
|
+
"_vendor-shiki-CazYUixL.js"
|
|
76
85
|
]
|
|
77
86
|
}
|
|
78
87
|
}
|