arize-phoenix 3.10.0__py3-none-any.whl → 3.11.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-3.10.0.dist-info → arize_phoenix-3.11.1.dist-info}/METADATA +2 -2
- {arize_phoenix-3.10.0.dist-info → arize_phoenix-3.11.1.dist-info}/RECORD +17 -19
- phoenix/core/traces.py +2 -74
- phoenix/server/api/types/Project.py +1 -1
- phoenix/server/api/types/Span.py +9 -12
- phoenix/server/static/index.js +398 -398
- phoenix/session/session.py +5 -2
- phoenix/trace/__init__.py +16 -0
- phoenix/trace/exporter.py +5 -12
- phoenix/trace/langchain/__init__.py +2 -25
- phoenix/trace/langchain/instrumentor.py +0 -2
- phoenix/trace/llama_index/callback.py +0 -2
- phoenix/trace/openai/instrumentor.py +0 -2
- phoenix/version.py +1 -1
- phoenix/trace/langchain/tracer.py +0 -47
- phoenix/trace/tracer.py +0 -99
- {arize_phoenix-3.10.0.dist-info → arize_phoenix-3.11.1.dist-info}/WHEEL +0 -0
- {arize_phoenix-3.10.0.dist-info → arize_phoenix-3.11.1.dist-info}/licenses/IP_NOTICE +0 -0
- {arize_phoenix-3.10.0.dist-info → arize_phoenix-3.11.1.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: arize-phoenix
|
|
3
|
-
Version: 3.
|
|
4
|
-
Summary:
|
|
3
|
+
Version: 3.11.1
|
|
4
|
+
Summary: AI Observability and Evaluation
|
|
5
5
|
Project-URL: Documentation, https://docs.arize.com/phoenix/
|
|
6
6
|
Project-URL: Issues, https://github.com/Arize-ai/phoenix/issues
|
|
7
7
|
Project-URL: Source, https://github.com/Arize-ai/phoenix
|
|
@@ -4,14 +4,14 @@ phoenix/datetime_utils.py,sha256=D955QLrkgrrSdUM6NyqbCeAu2SMsjhR5rHVQEsVUdng,277
|
|
|
4
4
|
phoenix/exceptions.py,sha256=X5k9ipUDfwSCwZB-H5zFJLas86Gf9tAx0W4l5TZxp5k,108
|
|
5
5
|
phoenix/py.typed,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
|
6
6
|
phoenix/services.py,sha256=f6AeyKTuOpy9RCcTCjVH3gx5nYZhbTMFOuv1WSUOB5o,4992
|
|
7
|
-
phoenix/version.py,sha256=
|
|
7
|
+
phoenix/version.py,sha256=UuKR3QjWk9sJtn2huDFsPdSgtx1CgiEl2B4BUtVRd58,23
|
|
8
8
|
phoenix/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
9
9
|
phoenix/core/embedding_dimension.py,sha256=zKGbcvwOXgLf-yrJBpQyKtd-LEOPRKHnUToyAU8Owis,87
|
|
10
10
|
phoenix/core/model.py,sha256=C-kDATyJEgP-oqYVKOiQM76Ljs66F6VZdT93_b8kTGk,4725
|
|
11
11
|
phoenix/core/model_schema.py,sha256=lQaTvKS34yurHOJ53YD020uURLfgG3dqKC1NLQftOjA,50222
|
|
12
12
|
phoenix/core/model_schema_adapter.py,sha256=3GkyzqUST4fYi-Bgs8qAam5hwMCdQRZTDLjZ9Bnzdm4,8268
|
|
13
13
|
phoenix/core/project.py,sha256=5bitRrQ-aG70k21ht0HUDJZkMl3dpI_HyLmBO7rLB-c,24673
|
|
14
|
-
phoenix/core/traces.py,sha256=
|
|
14
|
+
phoenix/core/traces.py,sha256=OnvOo4epNGMptOF1-O2FQgDV1c9TywQq5yqvj9ph3Mw,2902
|
|
15
15
|
phoenix/datasets/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
16
16
|
phoenix/datasets/dataset.py,sha256=scKVZ7zc6Dpc_ntt-pWhzY-KWqOJEwKePuyNnKSVTGE,30515
|
|
17
17
|
phoenix/datasets/errors.py,sha256=cGp9vxnw4SewFoWBV3ZGMkhE0Kh73lPIv3Ppz_H_RoA,8261
|
|
@@ -103,13 +103,13 @@ phoenix/server/api/types/MimeType.py,sha256=VIUQBqveSctiRFStJjDUdZ85TeKhwNNEosMC
|
|
|
103
103
|
phoenix/server/api/types/Model.py,sha256=IFhO2nouLQoMPNhl8vnm7nEXXSpr14CL3ihw8RnVWNY,7826
|
|
104
104
|
phoenix/server/api/types/NumericRange.py,sha256=afEjgF97Go_OvmjMggbPBt-zGM8IONewAyEiKEHRds0,192
|
|
105
105
|
phoenix/server/api/types/PerformanceMetric.py,sha256=W92B7OghEOgzFvmY0LCqpgavHaQggTGshdgfD0yqHX4,350
|
|
106
|
-
phoenix/server/api/types/Project.py,sha256=
|
|
106
|
+
phoenix/server/api/types/Project.py,sha256=MqzQicNm7IHiJom5IXJvbgnOqCBHZ8k_wGTB5rchtkU,8126
|
|
107
107
|
phoenix/server/api/types/PromptResponse.py,sha256=Q8HKtpp8GpUOcxPCzZpkkokidDd6u0aZOv_SuPZZd5Q,630
|
|
108
108
|
phoenix/server/api/types/Retrieval.py,sha256=OhMK2ncjoyp5h1yjKhjlKpoTbQrMHuxmgSFw-AO1rWw,285
|
|
109
109
|
phoenix/server/api/types/ScalarDriftMetricEnum.py,sha256=IUAcRPpgL41WdoIgK6cNk2Te38SspXGyEs-S1fY23_A,232
|
|
110
110
|
phoenix/server/api/types/Segments.py,sha256=B6UUWjalZONjWjl_l61A6USPSu15ICXRgzZ4m3vA1yw,2921
|
|
111
111
|
phoenix/server/api/types/SortDir.py,sha256=OUpXhlCzCxPoXSDkJJygEs9Rw9pMymfaZUG5zPTrw4Y,152
|
|
112
|
-
phoenix/server/api/types/Span.py,sha256=
|
|
112
|
+
phoenix/server/api/types/Span.py,sha256=1o7DeeR7Ytj7XgXrS9Oy5N7ZjSOMXxEGCINs0sjh6Lc,12291
|
|
113
113
|
phoenix/server/api/types/TimeSeries.py,sha256=QbLfxHnwYsMsirpq4tx9us6ha7YtAVzK4m8mAL3fMt0,5200
|
|
114
114
|
phoenix/server/api/types/UMAPPoints.py,sha256=8l9RJXi308qty4MdHb2pBbiU6ZuLbrRRxXNbPhXoxKI,1639
|
|
115
115
|
phoenix/server/api/types/ValidationResult.py,sha256=pHwdYk4J7SJ5xhlWWHg_6qWkfk4rjOx-bSkGHvkDE3Q,142
|
|
@@ -127,7 +127,7 @@ phoenix/server/static/apple-touch-icon-76x76.png,sha256=CT_xT12I0u2i0WU8JzBZBuOQ
|
|
|
127
127
|
phoenix/server/static/apple-touch-icon.png,sha256=fOfpjqGpWYbJ0eAurKsyoZP1EAs6ZVooBJ_SGk2ZkDs,3801
|
|
128
128
|
phoenix/server/static/favicon.ico,sha256=bY0vvCKRftemZfPShwZtE93DiiQdaYaozkPGwNFr6H8,34494
|
|
129
129
|
phoenix/server/static/index.css,sha256=KKGpx4iwF91VGRm0YN-4cn8oC-oIqC6HecoPf0x3ZM8,1885
|
|
130
|
-
phoenix/server/static/index.js,sha256=
|
|
130
|
+
phoenix/server/static/index.js,sha256=OZGKVWu4fPQLtzthHYlixwpbUSsEsOIHzVkb2cFKHD0,3175609
|
|
131
131
|
phoenix/server/static/modernizr.js,sha256=mvK-XtkNqjOral-QvzoqsyOMECXIMu5BQwSVN_wcU9c,2564
|
|
132
132
|
phoenix/server/templates/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
133
133
|
phoenix/server/templates/index.html,sha256=lO2wGA5XsftPg03rw_VcyaYf_4vegtlWbIT5ms4fA_c,1982
|
|
@@ -135,11 +135,11 @@ phoenix/session/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
|
135
135
|
phoenix/session/client.py,sha256=9qlybwGGdPHql7n6Mye8feuh5_5AMq34xSajvcPn2yg,5853
|
|
136
136
|
phoenix/session/data_extractor.py,sha256=0Kf-2mKY_YbYoD2fZkAYpKdFgsXrC3OKQ5d2iZsGgAI,1947
|
|
137
137
|
phoenix/session/evaluation.py,sha256=YCv1XkWHi7vM_W5V7rorrrAxadv78wuMPeCVJvf5-oE,5444
|
|
138
|
-
phoenix/session/session.py,sha256=
|
|
139
|
-
phoenix/trace/__init__.py,sha256=
|
|
138
|
+
phoenix/session/session.py,sha256=1RV6FBNqNDDrPFYU2qLffmI4RCRKy22KCLZFcH9oqJA,24556
|
|
139
|
+
phoenix/trace/__init__.py,sha256=qMipNV47ahKsOOz8uQpoI4VnNRnjc5uh_0cJpL1ABvY,706
|
|
140
140
|
phoenix/trace/errors.py,sha256=wB1z8qdPckngdfU-TORToekvg3344oNFAA83_hC2yFY,180
|
|
141
141
|
phoenix/trace/evaluation_conventions.py,sha256=t8jydM3U0-T5YpiQKRJ3tWdWGlHtzKyttYdw-ddvPOk,1048
|
|
142
|
-
phoenix/trace/exporter.py,sha256=
|
|
142
|
+
phoenix/trace/exporter.py,sha256=vh2RO1CpP143HxIX94KV0qks8p1x66RE3Tgf8kcBCCg,4519
|
|
143
143
|
phoenix/trace/fixtures.py,sha256=HOjuYOB_xtR7JUeLz7WpEroiGj4E5_SxVLSjBYUy8RQ,7055
|
|
144
144
|
phoenix/trace/otel.py,sha256=mpuj_eOdBUPAcslpxk8XZflb9kkzpMJ8X9acJS8ACPA,15322
|
|
145
145
|
phoenix/trace/schemas.py,sha256=6PVPnQIIDsWijwCwU19TGKG3xhFCYFY9K_5IqR5dWF4,5904
|
|
@@ -147,28 +147,26 @@ phoenix/trace/span_evaluations.py,sha256=T67grfU71iANMM0g6dp2OQ_ZjtkON2viZz95_U9
|
|
|
147
147
|
phoenix/trace/span_json_decoder.py,sha256=IAFakPRqSMYxTPKYFMiXYxm7U-FipdN8_xbvapDS0Qc,3131
|
|
148
148
|
phoenix/trace/span_json_encoder.py,sha256=LKITl8Evuv3Qb1_EPW4Kg4Yu9BU9vyE1WCe8P2rE1-s,1776
|
|
149
149
|
phoenix/trace/trace_dataset.py,sha256=RpHIfZLbMmULOIb-fKXJkQLhIdC0sJlAOTjlyJppMYA,13776
|
|
150
|
-
phoenix/trace/tracer.py,sha256=9V3eFwKd-eAyMZ9ZzX8HyrGZEVlWx0Ni-_v1LG3J1kY,3640
|
|
151
150
|
phoenix/trace/utils.py,sha256=7LurVGXn245cjj4MJsc7v6jq4DSJkpK6YGBfIaSywuw,1307
|
|
152
151
|
phoenix/trace/dsl/__init__.py,sha256=WIQIjJg362XD3s50OsPJJ0xbDsGp41bSv7vDllLrPuA,144
|
|
153
152
|
phoenix/trace/dsl/filter.py,sha256=paLpcSMnHdgCfcvcroaqOoCe2retAZ5ocp_5cNTnv9s,14167
|
|
154
153
|
phoenix/trace/dsl/helpers.py,sha256=CP6WaJpP7_WdI1Yoip7tDWcYDXZRg6xgNBRS2gojjMc,1728
|
|
155
154
|
phoenix/trace/dsl/missing.py,sha256=BWPOHr2_tBkPDgVeq8GVXXVbNbJiBelu4NtwHBg6mTE,1435
|
|
156
155
|
phoenix/trace/dsl/query.py,sha256=k0guhWBEo6L7ZJH5FJs2-iGSnWXdUUqu09gd-8M4CGg,14783
|
|
157
|
-
phoenix/trace/langchain/__init__.py,sha256=
|
|
158
|
-
phoenix/trace/langchain/instrumentor.py,sha256=
|
|
159
|
-
phoenix/trace/langchain/tracer.py,sha256=gq5RDgFexw-4qpwf701hGsZGcT6XdPjRIbI5aZdBI2I,1425
|
|
156
|
+
phoenix/trace/langchain/__init__.py,sha256=F37GfD1pd5Kuw7R7iRUM1zXXpO8xEcycNZh5dwqBXNk,109
|
|
157
|
+
phoenix/trace/langchain/instrumentor.py,sha256=iy4seCcuTZutNmq0HFmdjIEFfUlg0zDAYXKPY8ApEwQ,1302
|
|
160
158
|
phoenix/trace/llama_index/__init__.py,sha256=4fpR5702Qh2t5TaXIx584EkA-BveCPftXPOKvI0Oi3I,105
|
|
161
|
-
phoenix/trace/llama_index/callback.py,sha256=
|
|
159
|
+
phoenix/trace/llama_index/callback.py,sha256=1U9-Br1aQHVNJH9geFeSfwa3S4lxQLvxXm_5Sv0oSaM,4381
|
|
162
160
|
phoenix/trace/openai/__init__.py,sha256=J3G0uqCxGdksUpaQVHds_Egv2drvh8UEqoLjiQAOveg,79
|
|
163
|
-
phoenix/trace/openai/instrumentor.py,sha256=
|
|
161
|
+
phoenix/trace/openai/instrumentor.py,sha256=Z7iN3lV6bS6lVEohQmJyaEApRVszcrVy0AffG-_7Ju4,1200
|
|
164
162
|
phoenix/trace/v1/__init__.py,sha256=-IbAD0ruESMjvQLvGAg9CTfjBUATFDx1OXseDPis6-0,88
|
|
165
163
|
phoenix/trace/v1/evaluation_pb2.py,sha256=8sXvv2BW_vqD30MOMbmkeE2zpmm7ncik21kl3e-HzeQ,2254
|
|
166
164
|
phoenix/trace/v1/evaluation_pb2.pyi,sha256=cCbbx06gwQmaH14s3J1X25TtaARh-k1abbxQdQCXGm8,4500
|
|
167
165
|
phoenix/utilities/__init__.py,sha256=8w1Ivw0KO9YKWrhcdnO73cSVqP9VHAp0pSfsi_oDiuQ,672
|
|
168
166
|
phoenix/utilities/error_handling.py,sha256=7b5rpGFj9EWZ8yrZK1IHvxB89suWk3lggDayUQcvZds,1946
|
|
169
167
|
phoenix/utilities/logging.py,sha256=lDXd6EGaamBNcQxL4vP1au9-i_SXe0OraUDiJOcszSw,222
|
|
170
|
-
arize_phoenix-3.
|
|
171
|
-
arize_phoenix-3.
|
|
172
|
-
arize_phoenix-3.
|
|
173
|
-
arize_phoenix-3.
|
|
174
|
-
arize_phoenix-3.
|
|
168
|
+
arize_phoenix-3.11.1.dist-info/METADATA,sha256=CxX1LnZOSawfGoh1H2Q222Rw7PWanWDpxUUzbAKWMAo,29080
|
|
169
|
+
arize_phoenix-3.11.1.dist-info/WHEEL,sha256=TJPnKdtrSue7xZ_AVGkp9YXcvDrobsjBds1du3Nx6dc,87
|
|
170
|
+
arize_phoenix-3.11.1.dist-info/licenses/IP_NOTICE,sha256=JBqyyCYYxGDfzQ0TtsQgjts41IJoa-hiwDrBjCb9gHM,469
|
|
171
|
+
arize_phoenix-3.11.1.dist-info/licenses/LICENSE,sha256=HFkW9REuMOkvKRACuwLPT0hRydHb3zNg-fdFt94td18,3794
|
|
172
|
+
arize_phoenix-3.11.1.dist-info/RECORD,,
|
phoenix/core/traces.py
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import weakref
|
|
2
2
|
from collections import defaultdict
|
|
3
|
-
from datetime import datetime
|
|
4
3
|
from queue import SimpleQueue
|
|
5
4
|
from threading import RLock, Thread
|
|
6
5
|
from types import MethodType
|
|
7
|
-
from typing import DefaultDict,
|
|
6
|
+
from typing import DefaultDict, Iterator, Optional, Tuple, Union
|
|
8
7
|
|
|
9
8
|
from typing_extensions import assert_never
|
|
10
9
|
|
|
@@ -13,10 +12,9 @@ from phoenix.core.project import (
|
|
|
13
12
|
DEFAULT_PROJECT_NAME,
|
|
14
13
|
END_OF_QUEUE,
|
|
15
14
|
Project,
|
|
16
|
-
WrappedSpan,
|
|
17
15
|
_ProjectName,
|
|
18
16
|
)
|
|
19
|
-
from phoenix.trace.schemas import Span
|
|
17
|
+
from phoenix.trace.schemas import Span
|
|
20
18
|
|
|
21
19
|
_SpanItem = Tuple[Span, _ProjectName]
|
|
22
20
|
_EvalItem = Tuple[pb.Evaluation, _ProjectName]
|
|
@@ -45,76 +43,6 @@ class Traces:
|
|
|
45
43
|
projects = tuple(self._projects.items())
|
|
46
44
|
yield from projects
|
|
47
45
|
|
|
48
|
-
def get_trace(self, trace_id: TraceID) -> Iterator[WrappedSpan]:
|
|
49
|
-
with self._lock:
|
|
50
|
-
if not (project := self._projects.get(DEFAULT_PROJECT_NAME)):
|
|
51
|
-
return
|
|
52
|
-
yield from project.get_trace(trace_id)
|
|
53
|
-
|
|
54
|
-
def get_spans(
|
|
55
|
-
self,
|
|
56
|
-
start_time: Optional[datetime] = None,
|
|
57
|
-
stop_time: Optional[datetime] = None,
|
|
58
|
-
root_spans_only: Optional[bool] = False,
|
|
59
|
-
span_ids: Optional[Iterable[SpanID]] = None,
|
|
60
|
-
) -> Iterator[WrappedSpan]:
|
|
61
|
-
with self._lock:
|
|
62
|
-
if not (project := self._projects.get(DEFAULT_PROJECT_NAME)):
|
|
63
|
-
return
|
|
64
|
-
yield from project.get_spans(start_time, stop_time, root_spans_only, span_ids)
|
|
65
|
-
|
|
66
|
-
def get_num_documents(self, span_id: SpanID) -> int:
|
|
67
|
-
with self._lock:
|
|
68
|
-
if not (project := self._projects.get(DEFAULT_PROJECT_NAME)):
|
|
69
|
-
return 0
|
|
70
|
-
return project.get_num_documents(span_id)
|
|
71
|
-
|
|
72
|
-
def root_span_latency_ms_quantiles(self, *probabilities: float) -> Iterator[Optional[float]]:
|
|
73
|
-
"""Root span latency quantiles in milliseconds"""
|
|
74
|
-
with self._lock:
|
|
75
|
-
if not (project := self._projects.get(DEFAULT_PROJECT_NAME)):
|
|
76
|
-
for _ in probabilities:
|
|
77
|
-
yield None
|
|
78
|
-
return
|
|
79
|
-
for probability in probabilities:
|
|
80
|
-
yield project.root_span_latency_ms_quantiles(probability)
|
|
81
|
-
|
|
82
|
-
def get_descendant_spans(self, span_id: SpanID) -> Iterator[WrappedSpan]:
|
|
83
|
-
with self._lock:
|
|
84
|
-
if not (project := self._projects.get(DEFAULT_PROJECT_NAME)):
|
|
85
|
-
return
|
|
86
|
-
yield from project.get_descendant_spans(span_id)
|
|
87
|
-
|
|
88
|
-
@property
|
|
89
|
-
def last_updated_at(self) -> Optional[datetime]:
|
|
90
|
-
with self._lock:
|
|
91
|
-
if not (project := self._projects.get(DEFAULT_PROJECT_NAME)):
|
|
92
|
-
return None
|
|
93
|
-
return project.last_updated_at
|
|
94
|
-
|
|
95
|
-
@property
|
|
96
|
-
def span_count(self) -> int:
|
|
97
|
-
"""Total number of spans"""
|
|
98
|
-
project_name = DEFAULT_PROJECT_NAME
|
|
99
|
-
with self._lock:
|
|
100
|
-
if not (project := self._projects.get(project_name)):
|
|
101
|
-
return 0
|
|
102
|
-
return project.span_count()
|
|
103
|
-
|
|
104
|
-
@property
|
|
105
|
-
def token_count_total(self) -> int:
|
|
106
|
-
with self._lock:
|
|
107
|
-
if not (project := self._projects.get(DEFAULT_PROJECT_NAME)):
|
|
108
|
-
return 0
|
|
109
|
-
return project.token_count_total
|
|
110
|
-
|
|
111
|
-
@property
|
|
112
|
-
def right_open_time_range(self) -> Tuple[Optional[datetime], Optional[datetime]]:
|
|
113
|
-
with self._lock:
|
|
114
|
-
if not (project := self._projects.get(DEFAULT_PROJECT_NAME)):
|
|
115
|
-
return None, None
|
|
116
|
-
return project.right_open_time_range
|
|
117
|
-
|
|
118
46
|
def put(
|
|
119
47
|
self,
|
|
120
48
|
item: Union[Span, pb.Evaluation],
|
|
@@ -112,7 +112,7 @@ class Project(Node):
|
|
|
112
112
|
spans = filter(predicate, spans)
|
|
113
113
|
if sort:
|
|
114
114
|
spans = sort(spans, evals=project)
|
|
115
|
-
data =
|
|
115
|
+
data = [to_gql_span(span, project) for span in spans]
|
|
116
116
|
return connection_from_list(data=data, args=args)
|
|
117
117
|
|
|
118
118
|
@strawberry.field(
|
phoenix/server/api/types/Span.py
CHANGED
|
@@ -10,7 +10,7 @@ from strawberry import ID, UNSET
|
|
|
10
10
|
from strawberry.types import Info
|
|
11
11
|
|
|
12
12
|
import phoenix.trace.schemas as trace_schema
|
|
13
|
-
from phoenix.core.project import DEFAULT_PROJECT_NAME, WrappedSpan
|
|
13
|
+
from phoenix.core.project import DEFAULT_PROJECT_NAME, Project, WrappedSpan
|
|
14
14
|
from phoenix.metrics.retrieval_metrics import RetrievalMetrics
|
|
15
15
|
from phoenix.server.api.context import Context
|
|
16
16
|
from phoenix.server.api.types.DocumentRetrievalMetrics import DocumentRetrievalMetrics
|
|
@@ -95,6 +95,7 @@ class SpanEvent:
|
|
|
95
95
|
|
|
96
96
|
@strawberry.type
|
|
97
97
|
class Span:
|
|
98
|
+
project: strawberry.Private[Project]
|
|
98
99
|
name: str
|
|
99
100
|
status_code: SpanStatusCode
|
|
100
101
|
status_message: str
|
|
@@ -185,14 +186,10 @@ class Span:
|
|
|
185
186
|
info: Info[Context, None],
|
|
186
187
|
evaluation_name: Optional[str] = UNSET,
|
|
187
188
|
) -> List[DocumentRetrievalMetrics]:
|
|
188
|
-
if
|
|
189
|
-
not self.num_documents
|
|
190
|
-
or not (traces := info.context.traces)
|
|
191
|
-
or not (project := traces.get_project(DEFAULT_PROJECT_NAME))
|
|
192
|
-
):
|
|
189
|
+
if not self.num_documents:
|
|
193
190
|
return []
|
|
194
191
|
span_id = SpanID(str(self.context.span_id))
|
|
195
|
-
all_document_evaluation_names = project.get_document_evaluation_names(span_id)
|
|
192
|
+
all_document_evaluation_names = self.project.get_document_evaluation_names(span_id)
|
|
196
193
|
if not all_document_evaluation_names:
|
|
197
194
|
return []
|
|
198
195
|
if evaluation_name is UNSET:
|
|
@@ -203,7 +200,7 @@ class Span:
|
|
|
203
200
|
evaluation_names = [evaluation_name]
|
|
204
201
|
retrieval_metrics = []
|
|
205
202
|
for name in evaluation_names:
|
|
206
|
-
evaluation_scores = project.get_document_evaluation_scores(
|
|
203
|
+
evaluation_scores = self.project.get_document_evaluation_scores(
|
|
207
204
|
span_id=span_id,
|
|
208
205
|
evaluation_name=name,
|
|
209
206
|
num_documents=self.num_documents,
|
|
@@ -223,20 +220,20 @@ class Span:
|
|
|
223
220
|
self,
|
|
224
221
|
info: Info[Context, None],
|
|
225
222
|
) -> List["Span"]:
|
|
226
|
-
if (traces := info.context.traces) is None:
|
|
227
|
-
return []
|
|
228
223
|
return [
|
|
229
|
-
to_gql_span(span
|
|
224
|
+
to_gql_span(span, self.project)
|
|
225
|
+
for span in self.project.get_descendant_spans(SpanID(self.context.span_id))
|
|
230
226
|
]
|
|
231
227
|
|
|
232
228
|
|
|
233
|
-
def to_gql_span(span: WrappedSpan) -> "Span":
|
|
229
|
+
def to_gql_span(span: WrappedSpan, project: Project) -> "Span":
|
|
234
230
|
events: List[SpanEvent] = list(map(SpanEvent.from_event, span.events))
|
|
235
231
|
input_value = cast(Optional[str], span.attributes.get(INPUT_VALUE))
|
|
236
232
|
output_value = cast(Optional[str], span.attributes.get(OUTPUT_VALUE))
|
|
237
233
|
retrieval_documents = span.attributes.get(RETRIEVAL_DOCUMENTS)
|
|
238
234
|
num_documents = len(retrieval_documents) if isinstance(retrieval_documents, Sized) else None
|
|
239
235
|
return Span(
|
|
236
|
+
project=project,
|
|
240
237
|
name=span.name,
|
|
241
238
|
status_code=SpanStatusCode(span.status_code),
|
|
242
239
|
status_message=span.status_message,
|