arize-phoenix 3.22.0__py3-none-any.whl → 3.24.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of arize-phoenix might be problematic. Click here for more details.

@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: arize-phoenix
3
- Version: 3.22.0
3
+ Version: 3.24.0
4
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
@@ -26,7 +26,7 @@ Requires-Dist: openinference-instrumentation-llama-index>=1.2.0
26
26
  Requires-Dist: openinference-instrumentation-openai>=0.1.4
27
27
  Requires-Dist: openinference-semantic-conventions>=0.1.5
28
28
  Requires-Dist: opentelemetry-exporter-otlp
29
- Requires-Dist: opentelemetry-proto
29
+ Requires-Dist: opentelemetry-proto>=1.12.0
30
30
  Requires-Dist: opentelemetry-sdk
31
31
  Requires-Dist: pandas
32
32
  Requires-Dist: protobuf<6.0,>=3.20
@@ -4,7 +4,7 @@ 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=x3T39dw3H8eGDej-Y0jaguyUerrE7bTqWl_cTqwt5aM,23
7
+ phoenix/version.py,sha256=gjTZjq4DQfML3iAhAud_iXc-_X0aEBW4kipWwG8SoVs,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=SBO8BZg_CeQuH5LrSgzlQfqMModzirkQePdhnbLw7dE,4756
@@ -30,7 +30,7 @@ phoenix/experimental/evals/models/anthropic.py,sha256=BZmLvepkSMj_opCWsZoL34a3yA
30
30
  phoenix/experimental/evals/models/base.py,sha256=qOX36f4H1PA7YW3fckUsoh4apSz3bzURVtqlXw6Xcqo,6274
31
31
  phoenix/experimental/evals/models/bedrock.py,sha256=nVOXRZr-iDwHEINozpO2bqZR2KEeDHNyj6jgQPONQYs,8565
32
32
  phoenix/experimental/evals/models/litellm.py,sha256=YHZvwBHo4Y0_b589gjtwPN8N7sYgyIm9Hy5nnBiUtzA,4788
33
- phoenix/experimental/evals/models/openai.py,sha256=v2qkdFZc-u0ZAfxnV4v5UMWkMc9P3k4Gx1XaTnVFTz4,17922
33
+ phoenix/experimental/evals/models/openai.py,sha256=UOM0GZLZ_kVWHvP1Z3mttt6DPnn876GmvK5GYtFTztQ,18164
34
34
  phoenix/experimental/evals/models/rate_limiters.py,sha256=L8xf7mc2d6axmWNjg2wwWIHWeTZ-tiI8m1GoBNFfJd0,10156
35
35
  phoenix/experimental/evals/models/vertex.py,sha256=3kj0tdwyCcgs39x1XnMgFoSbZwXvvBAPL7AwHYe-qIE,6236
36
36
  phoenix/experimental/evals/models/vertexai.py,sha256=nFN5isv1GPNsvUA4OxSnQd1hTMi-3BcxfDz1y7QcoA0,6189
@@ -60,7 +60,7 @@ phoenix/pointcloud/projectors.py,sha256=zO_RrtDYSv2rqVOfIP2_9Cv11Dc8EmcZR94xhFcB
60
60
  phoenix/pointcloud/umap_parameters.py,sha256=lJsEOrbSuSiqI7g4Yt6xj7kgYxEqoep4ZHWLr6VWBqw,1760
61
61
  phoenix/server/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
62
62
  phoenix/server/app.py,sha256=eUw5tygCYmsQ5TAJTM_ZwRKkxDD3-bMJSH-H9YpF0eA,7246
63
- phoenix/server/main.py,sha256=Su68-BSyN3wQm8od2TvT6iMOL84IvZdwtDCzsbMBmTk,9752
63
+ phoenix/server/main.py,sha256=JoVQo4i2lcEQrXs59f5RiSI7csn-mQCs9JaqI7YTWVw,9798
64
64
  phoenix/server/prometheus.py,sha256=YQXwXZt3kxXN5JqGKDMH_jI9r4IL23xn6c8Bdrvg15A,2368
65
65
  phoenix/server/thread_server.py,sha256=dP6cm6Cf08jNhDA1TRlVZpziu1YgtPDmaeIJMm725eI,2154
66
66
  phoenix/server/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -81,7 +81,7 @@ phoenix/server/api/input_types/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5
81
81
  phoenix/server/api/routers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
82
82
  phoenix/server/api/routers/evaluation_handler.py,sha256=U7poPu9ezEEL5KEWXM-SX9LdvADpZiay1p6h4VAs08A,4058
83
83
  phoenix/server/api/routers/span_handler.py,sha256=IM4eiQ7GMU7JVyf0oMbrzEcItVudLy_CeYaWcwHOby4,2387
84
- phoenix/server/api/routers/trace_handler.py,sha256=0Y9QlePySJZyhKJLWM-m1e837HMZm5QcKR-iXshQdG4,2413
84
+ phoenix/server/api/routers/trace_handler.py,sha256=2AQkYrio9r3DCmLMOL2vq3oB5ncnCm8XwEMLLUu4Eko,2433
85
85
  phoenix/server/api/routers/utils.py,sha256=M41BoH-fl37izhRuN2aX7lWm7jOC20A_3uClv9TVUUY,583
86
86
  phoenix/server/api/types/Cluster.py,sha256=R08ZKrLl1KK8colxHU57N5XIOTMUwg5ZI50ofPoxxSM,5618
87
87
  phoenix/server/api/types/DataQualityMetric.py,sha256=zRKsNvHBu-NdcsunuLhqFpZhi6ks-HMqA1PJD27jTak,590
@@ -138,7 +138,7 @@ phoenix/server/static/modernizr.js,sha256=mvK-XtkNqjOral-QvzoqsyOMECXIMu5BQwSVN_
138
138
  phoenix/server/templates/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
139
139
  phoenix/server/templates/index.html,sha256=lO2wGA5XsftPg03rw_VcyaYf_4vegtlWbIT5ms4fA_c,1982
140
140
  phoenix/session/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
141
- phoenix/session/client.py,sha256=cYLRxV6YfCcWgZdJaStACVIhaN9j5p8S72tCKrT0RZ4,9612
141
+ phoenix/session/client.py,sha256=zaAH7lTlRoWAgwoiCoL8giwG44FliDnEhaflHY5LoUM,10127
142
142
  phoenix/session/data_extractor.py,sha256=0Kf-2mKY_YbYoD2fZkAYpKdFgsXrC3OKQ5d2iZsGgAI,1947
143
143
  phoenix/session/evaluation.py,sha256=mR5HeBDmoS9oCb-X-2lpLCyMRoOgBufofbsjyEqCpMg,5390
144
144
  phoenix/session/session.py,sha256=P75qklh2HMgCCNiBghN3gjwRJiLIWzg1OshGt-fnzdM,24983
@@ -150,7 +150,7 @@ phoenix/trace/errors.py,sha256=wB1z8qdPckngdfU-TORToekvg3344oNFAA83_hC2yFY,180
150
150
  phoenix/trace/evaluation_conventions.py,sha256=t8jydM3U0-T5YpiQKRJ3tWdWGlHtzKyttYdw-ddvPOk,1048
151
151
  phoenix/trace/exporter.py,sha256=vh2RO1CpP143HxIX94KV0qks8p1x66RE3Tgf8kcBCCg,4519
152
152
  phoenix/trace/fixtures.py,sha256=HOjuYOB_xtR7JUeLz7WpEroiGj4E5_SxVLSjBYUy8RQ,7055
153
- phoenix/trace/otel.py,sha256=mpuj_eOdBUPAcslpxk8XZflb9kkzpMJ8X9acJS8ACPA,15322
153
+ phoenix/trace/otel.py,sha256=d8i8VPCJfkmT4f_o40kSNWFE94YddUPif0iQEjTQUCo,15368
154
154
  phoenix/trace/projects.py,sha256=2BwlNjFE-uwpqYtCu5YyBiYZk9wRPpM13vh3-Cv7GkA,2157
155
155
  phoenix/trace/schemas.py,sha256=6PVPnQIIDsWijwCwU19TGKG3xhFCYFY9K_5IqR5dWF4,5904
156
156
  phoenix/trace/span_evaluations.py,sha256=T67grfU71iANMM0g6dp2OQ_ZjtkON2viZz95_U9FLQA,12954
@@ -177,9 +177,9 @@ phoenix/utilities/deprecation.py,sha256=cFuTVvjSYyRlrdxdJewjJVieIEHPk30BukSRGRyd
177
177
  phoenix/utilities/error_handling.py,sha256=7b5rpGFj9EWZ8yrZK1IHvxB89suWk3lggDayUQcvZds,1946
178
178
  phoenix/utilities/logging.py,sha256=lDXd6EGaamBNcQxL4vP1au9-i_SXe0OraUDiJOcszSw,222
179
179
  phoenix/utilities/project.py,sha256=qWsvKnG1oKhOFUowXf9qiOL2ia7jaFe_ijFFHEt8GJo,431
180
- phoenix/utilities/span_store.py,sha256=13UK0rE4wQd70yl___WsDRnH0ru-xErng9_Ml7zfEwE,978
181
- arize_phoenix-3.22.0.dist-info/METADATA,sha256=6Oog16HhrzCNfA5cS3JhS1OceuPvqiHL76Vzgz6hblE,29322
182
- arize_phoenix-3.22.0.dist-info/WHEEL,sha256=K0BPUNF1N3kQ9olb8aVEtkObePEjdr2JOLT1N83EVws,87
183
- arize_phoenix-3.22.0.dist-info/licenses/IP_NOTICE,sha256=JBqyyCYYxGDfzQ0TtsQgjts41IJoa-hiwDrBjCb9gHM,469
184
- arize_phoenix-3.22.0.dist-info/licenses/LICENSE,sha256=HFkW9REuMOkvKRACuwLPT0hRydHb3zNg-fdFt94td18,3794
185
- arize_phoenix-3.22.0.dist-info/RECORD,,
180
+ phoenix/utilities/span_store.py,sha256=puxYoYH_GmSeCWuGEoviD6QnrAZUgyRNO2BXG_au8_w,998
181
+ arize_phoenix-3.24.0.dist-info/METADATA,sha256=YqPB3LwKvVjI50GDgMHjwElRpcFwMDp-udiLPAKwiZ0,29330
182
+ arize_phoenix-3.24.0.dist-info/WHEEL,sha256=zEMcRr9Kr03x1ozGwg5v9NQBKn3kndp6LSoSlVg-jhU,87
183
+ arize_phoenix-3.24.0.dist-info/licenses/IP_NOTICE,sha256=JBqyyCYYxGDfzQ0TtsQgjts41IJoa-hiwDrBjCb9gHM,469
184
+ arize_phoenix-3.24.0.dist-info/licenses/LICENSE,sha256=HFkW9REuMOkvKRACuwLPT0hRydHb3zNg-fdFt94td18,3794
185
+ arize_phoenix-3.24.0.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: hatchling 1.24.0
2
+ Generator: hatchling 1.24.2
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
@@ -8,6 +8,7 @@ from typing import (
8
8
  Callable,
9
9
  Dict,
10
10
  List,
11
+ Mapping,
11
12
  Optional,
12
13
  Tuple,
13
14
  Union,
@@ -108,6 +109,8 @@ class OpenAIModel(BaseEvalModel):
108
109
  azure_deployment: Optional[str] = field(default=None)
109
110
  azure_ad_token: Optional[str] = field(default=None)
110
111
  azure_ad_token_provider: Optional[Callable[[], str]] = field(default=None)
112
+ default_headers: Optional[Mapping[str, str]] = field(default=None)
113
+ """Default headers required by AzureOpenAI"""
111
114
 
112
115
  # Deprecated fields
113
116
  model_name: Optional[str] = field(default=None)
@@ -193,6 +196,7 @@ class OpenAIModel(BaseEvalModel):
193
196
  azure_ad_token_provider=azure_options.azure_ad_token_provider,
194
197
  api_key=self.api_key,
195
198
  organization=self.organization,
199
+ default_headers=self.default_headers,
196
200
  )
197
201
  self._async_client = self._openai.AsyncAzureOpenAI(
198
202
  azure_endpoint=azure_options.azure_endpoint,
@@ -202,6 +206,7 @@ class OpenAIModel(BaseEvalModel):
202
206
  azure_ad_token_provider=azure_options.azure_ad_token_provider,
203
207
  api_key=self.api_key,
204
208
  organization=self.organization,
209
+ default_headers=self.default_headers,
205
210
  )
206
211
  # return early since we don't need to check the model
207
212
  return
@@ -15,7 +15,7 @@ from starlette.status import HTTP_415_UNSUPPORTED_MEDIA_TYPE, HTTP_422_UNPROCESS
15
15
 
16
16
  from phoenix.core.traces import Traces
17
17
  from phoenix.storage.span_store import SpanStore
18
- from phoenix.trace.otel import decode
18
+ from phoenix.trace.otel import decode_otlp_span
19
19
  from phoenix.utilities.project import get_project_name
20
20
 
21
21
 
@@ -55,6 +55,6 @@ class TraceHandler(HTTPEndpoint):
55
55
  project_name = get_project_name(resource_spans.resource.attributes)
56
56
  for scope_span in resource_spans.scope_spans:
57
57
  for span in scope_span.spans:
58
- self.traces.put(decode(span), project_name=project_name)
58
+ self.traces.put(decode_otlp_span(span), project_name=project_name)
59
59
  await asyncio.sleep(0)
60
60
  return Response()
phoenix/server/main.py CHANGED
@@ -35,7 +35,7 @@ from phoenix.trace.fixtures import (
35
35
  _get_trace_fixture_by_name,
36
36
  get_evals_from_fixture,
37
37
  )
38
- from phoenix.trace.otel import decode, encode
38
+ from phoenix.trace.otel import decode_otlp_span, encode_span_to_otlp
39
39
  from phoenix.trace.span_json_decoder import json_string_to_span
40
40
  from phoenix.utilities.span_store import get_span_store, load_traces_data_from_store
41
41
 
@@ -200,7 +200,7 @@ if __name__ == "__main__":
200
200
  fixture_spans = list(
201
201
  # Apply `encode` here because legacy jsonl files contains UUIDs as strings.
202
202
  # `encode` removes the hyphens in the UUIDs.
203
- decode(encode(json_string_to_span(json_span)))
203
+ decode_otlp_span(encode_span_to_otlp(json_string_to_span(json_span)))
204
204
  for json_span in _download_traces_fixture(
205
205
  _get_trace_fixture_by_name(trace_dataset_name)
206
206
  )
phoenix/session/client.py CHANGED
@@ -25,7 +25,7 @@ from phoenix.config import (
25
25
  from phoenix.session.data_extractor import TraceDataExtractor
26
26
  from phoenix.trace import Evaluations, TraceDataset
27
27
  from phoenix.trace.dsl import SpanQuery
28
- from phoenix.trace.otel import encode
28
+ from phoenix.trace.otel import encode_span_to_otlp
29
29
 
30
30
  logger = logging.getLogger(__name__)
31
31
 
@@ -200,6 +200,19 @@ class Client(TraceDataExtractor):
200
200
  ).raise_for_status()
201
201
 
202
202
  def log_traces(self, trace_dataset: TraceDataset, project_name: Optional[str] = None) -> None:
203
+ """
204
+ Logs traces from a TraceDataset to the Phoenix server.
205
+
206
+ Args:
207
+ trace_dataset (TraceDataset): A TraceDataset instance with the traces to log to
208
+ the Phoenix server.
209
+ project_name (str, optional): The project name under which to log the evaluations.
210
+ This can be set using environment variables. If not provided, falls back to the
211
+ default project.
212
+
213
+ Returns:
214
+ None
215
+ """
203
216
  project_name = project_name or get_env_project_name()
204
217
  spans = trace_dataset.to_spans()
205
218
  otlp_spans = [
@@ -214,7 +227,7 @@ class Client(TraceDataExtractor):
214
227
  )
215
228
  ]
216
229
  ),
217
- scope_spans=[ScopeSpans(spans=[encode(span)])],
230
+ scope_spans=[ScopeSpans(spans=[encode_span_to_otlp(span)])],
218
231
  )
219
232
  ],
220
233
  )
phoenix/trace/otel.py CHANGED
@@ -55,7 +55,7 @@ TOOL_PARAMETERS = SpanAttributes.TOOL_PARAMETERS
55
55
  LLM_PROMPT_TEMPLATE_VARIABLES = SpanAttributes.LLM_PROMPT_TEMPLATE_VARIABLES
56
56
 
57
57
 
58
- def decode(otlp_span: otlp.Span) -> Span:
58
+ def decode_otlp_span(otlp_span: otlp.Span) -> Span:
59
59
  trace_id = cast(TraceID, _decode_identifier(otlp_span.trace_id))
60
60
  span_id = cast(SpanID, _decode_identifier(otlp_span.span_id))
61
61
  parent_id = _decode_identifier(otlp_span.parent_span_id)
@@ -307,7 +307,7 @@ def _unflatten(
307
307
  _BILLION = 1_000_000_000 # for converting seconds to nanoseconds
308
308
 
309
309
 
310
- def encode(span: Span) -> otlp.Span:
310
+ def encode_span_to_otlp(span: Span) -> otlp.Span:
311
311
  trace_id: bytes = _encode_identifier(span.context.trace_id)
312
312
  span_id: bytes = _encode_identifier(span.context.span_id)
313
313
  parent_span_id: bytes = _encode_identifier(span.parent_id)
@@ -451,6 +451,6 @@ def _encode_value(value: AttributeValue) -> AnyValue:
451
451
 
452
452
 
453
453
  __all__ = [
454
- "encode",
455
- "decode",
454
+ "encode_span_to_otlp",
455
+ "decode_otlp_span",
456
456
  ]
@@ -3,7 +3,7 @@ from typing import Optional
3
3
  from phoenix.config import get_env_span_storage_type, get_storage_dir
4
4
  from phoenix.core.traces import Traces
5
5
  from phoenix.storage.span_store import SPAN_STORE_FACTORIES, SpanStore
6
- from phoenix.trace.otel import decode
6
+ from phoenix.trace.otel import decode_otlp_span
7
7
  from phoenix.utilities.project import get_project_name
8
8
 
9
9
 
@@ -20,4 +20,4 @@ def load_traces_data_from_store(traces: Traces, span_store: SpanStore) -> None:
20
20
  project_name = get_project_name(resource_spans.resource.attributes)
21
21
  for scope_span in resource_spans.scope_spans:
22
22
  for span in scope_span.spans:
23
- traces.put(decode(span), project_name=project_name)
23
+ traces.put(decode_otlp_span(span), project_name=project_name)
phoenix/version.py CHANGED
@@ -1 +1 @@
1
- __version__ = "3.22.0"
1
+ __version__ = "3.24.0"