arize-phoenix 5.5.2__py3-none-any.whl → 5.7.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-5.5.2.dist-info → arize_phoenix-5.7.0.dist-info}/METADATA +4 -7
- arize_phoenix-5.7.0.dist-info/RECORD +330 -0
- phoenix/config.py +50 -8
- phoenix/core/model.py +3 -3
- phoenix/core/model_schema.py +41 -50
- phoenix/core/model_schema_adapter.py +17 -16
- phoenix/datetime_utils.py +2 -2
- phoenix/db/bulk_inserter.py +10 -20
- phoenix/db/engines.py +2 -1
- phoenix/db/enums.py +2 -2
- phoenix/db/helpers.py +8 -7
- phoenix/db/insertion/dataset.py +9 -19
- phoenix/db/insertion/document_annotation.py +14 -13
- phoenix/db/insertion/helpers.py +6 -16
- phoenix/db/insertion/span_annotation.py +14 -13
- phoenix/db/insertion/trace_annotation.py +14 -13
- phoenix/db/insertion/types.py +19 -30
- phoenix/db/migrations/versions/3be8647b87d8_add_token_columns_to_spans_table.py +8 -8
- phoenix/db/models.py +28 -28
- phoenix/experiments/evaluators/base.py +2 -1
- phoenix/experiments/evaluators/code_evaluators.py +4 -5
- phoenix/experiments/evaluators/llm_evaluators.py +157 -4
- phoenix/experiments/evaluators/utils.py +3 -2
- phoenix/experiments/functions.py +10 -21
- phoenix/experiments/tracing.py +2 -1
- phoenix/experiments/types.py +20 -29
- phoenix/experiments/utils.py +2 -1
- phoenix/inferences/errors.py +6 -5
- phoenix/inferences/fixtures.py +6 -5
- phoenix/inferences/inferences.py +37 -37
- phoenix/inferences/schema.py +11 -10
- phoenix/inferences/validation.py +13 -14
- phoenix/logging/_formatter.py +3 -3
- phoenix/metrics/__init__.py +5 -4
- phoenix/metrics/binning.py +2 -1
- phoenix/metrics/metrics.py +2 -1
- phoenix/metrics/mixins.py +7 -6
- phoenix/metrics/retrieval_metrics.py +2 -1
- phoenix/metrics/timeseries.py +5 -4
- phoenix/metrics/wrappers.py +2 -2
- phoenix/pointcloud/clustering.py +3 -4
- phoenix/pointcloud/pointcloud.py +7 -5
- phoenix/pointcloud/umap_parameters.py +2 -1
- phoenix/server/api/dataloaders/annotation_summaries.py +12 -19
- phoenix/server/api/dataloaders/average_experiment_run_latency.py +2 -2
- phoenix/server/api/dataloaders/cache/two_tier_cache.py +3 -2
- phoenix/server/api/dataloaders/dataset_example_revisions.py +3 -8
- phoenix/server/api/dataloaders/dataset_example_spans.py +2 -5
- phoenix/server/api/dataloaders/document_evaluation_summaries.py +12 -18
- phoenix/server/api/dataloaders/document_evaluations.py +3 -7
- phoenix/server/api/dataloaders/document_retrieval_metrics.py +6 -13
- phoenix/server/api/dataloaders/experiment_annotation_summaries.py +4 -8
- phoenix/server/api/dataloaders/experiment_error_rates.py +2 -5
- phoenix/server/api/dataloaders/experiment_run_annotations.py +3 -7
- phoenix/server/api/dataloaders/experiment_run_counts.py +1 -5
- phoenix/server/api/dataloaders/experiment_sequence_number.py +2 -5
- phoenix/server/api/dataloaders/latency_ms_quantile.py +21 -30
- phoenix/server/api/dataloaders/min_start_or_max_end_times.py +7 -13
- phoenix/server/api/dataloaders/project_by_name.py +3 -3
- phoenix/server/api/dataloaders/record_counts.py +11 -18
- phoenix/server/api/dataloaders/span_annotations.py +3 -7
- phoenix/server/api/dataloaders/span_dataset_examples.py +3 -8
- phoenix/server/api/dataloaders/span_descendants.py +3 -7
- phoenix/server/api/dataloaders/span_projects.py +2 -2
- phoenix/server/api/dataloaders/token_counts.py +12 -19
- phoenix/server/api/dataloaders/trace_row_ids.py +3 -7
- phoenix/server/api/dataloaders/user_roles.py +3 -3
- phoenix/server/api/dataloaders/users.py +3 -3
- phoenix/server/api/helpers/__init__.py +4 -3
- phoenix/server/api/helpers/dataset_helpers.py +10 -9
- phoenix/server/api/helpers/playground_clients.py +671 -0
- phoenix/server/api/helpers/playground_registry.py +70 -0
- phoenix/server/api/helpers/playground_spans.py +325 -0
- phoenix/server/api/input_types/AddExamplesToDatasetInput.py +2 -2
- phoenix/server/api/input_types/AddSpansToDatasetInput.py +2 -2
- phoenix/server/api/input_types/ChatCompletionInput.py +38 -0
- phoenix/server/api/input_types/ChatCompletionMessageInput.py +13 -1
- phoenix/server/api/input_types/ClusterInput.py +2 -2
- phoenix/server/api/input_types/DeleteAnnotationsInput.py +1 -3
- phoenix/server/api/input_types/DeleteDatasetExamplesInput.py +2 -2
- phoenix/server/api/input_types/DeleteExperimentsInput.py +1 -3
- phoenix/server/api/input_types/DimensionFilter.py +4 -4
- phoenix/server/api/input_types/GenerativeModelInput.py +17 -0
- phoenix/server/api/input_types/Granularity.py +1 -1
- phoenix/server/api/input_types/InvocationParameters.py +156 -13
- phoenix/server/api/input_types/PatchDatasetExamplesInput.py +2 -2
- phoenix/server/api/input_types/TemplateOptions.py +10 -0
- phoenix/server/api/mutations/__init__.py +4 -0
- phoenix/server/api/mutations/chat_mutations.py +374 -0
- phoenix/server/api/mutations/dataset_mutations.py +4 -4
- phoenix/server/api/mutations/experiment_mutations.py +1 -2
- phoenix/server/api/mutations/export_events_mutations.py +7 -7
- phoenix/server/api/mutations/span_annotations_mutations.py +4 -4
- phoenix/server/api/mutations/trace_annotations_mutations.py +4 -4
- phoenix/server/api/mutations/user_mutations.py +4 -4
- phoenix/server/api/openapi/schema.py +2 -2
- phoenix/server/api/queries.py +61 -72
- phoenix/server/api/routers/oauth2.py +4 -4
- phoenix/server/api/routers/v1/datasets.py +22 -36
- phoenix/server/api/routers/v1/evaluations.py +6 -5
- phoenix/server/api/routers/v1/experiment_evaluations.py +2 -2
- phoenix/server/api/routers/v1/experiment_runs.py +2 -2
- phoenix/server/api/routers/v1/experiments.py +4 -4
- phoenix/server/api/routers/v1/spans.py +13 -12
- phoenix/server/api/routers/v1/traces.py +5 -5
- phoenix/server/api/routers/v1/utils.py +5 -5
- phoenix/server/api/schema.py +42 -10
- phoenix/server/api/subscriptions.py +347 -494
- phoenix/server/api/types/AnnotationSummary.py +3 -3
- phoenix/server/api/types/ChatCompletionSubscriptionPayload.py +44 -0
- phoenix/server/api/types/Cluster.py +8 -7
- phoenix/server/api/types/Dataset.py +5 -4
- phoenix/server/api/types/Dimension.py +3 -3
- phoenix/server/api/types/DocumentEvaluationSummary.py +8 -7
- phoenix/server/api/types/EmbeddingDimension.py +6 -5
- phoenix/server/api/types/EvaluationSummary.py +3 -3
- phoenix/server/api/types/Event.py +7 -7
- phoenix/server/api/types/Experiment.py +3 -3
- phoenix/server/api/types/ExperimentComparison.py +2 -4
- phoenix/server/api/types/GenerativeProvider.py +27 -3
- phoenix/server/api/types/Inferences.py +9 -8
- phoenix/server/api/types/InferencesRole.py +2 -2
- phoenix/server/api/types/Model.py +2 -2
- phoenix/server/api/types/Project.py +11 -18
- phoenix/server/api/types/Segments.py +3 -3
- phoenix/server/api/types/Span.py +45 -7
- phoenix/server/api/types/TemplateLanguage.py +9 -0
- phoenix/server/api/types/TimeSeries.py +8 -7
- phoenix/server/api/types/Trace.py +2 -2
- phoenix/server/api/types/UMAPPoints.py +6 -6
- phoenix/server/api/types/User.py +3 -3
- phoenix/server/api/types/node.py +1 -3
- phoenix/server/api/types/pagination.py +4 -4
- phoenix/server/api/utils.py +2 -4
- phoenix/server/app.py +76 -37
- phoenix/server/bearer_auth.py +4 -10
- phoenix/server/dml_event.py +3 -3
- phoenix/server/dml_event_handler.py +10 -24
- phoenix/server/grpc_server.py +3 -2
- phoenix/server/jwt_store.py +22 -21
- phoenix/server/main.py +17 -4
- phoenix/server/oauth2.py +3 -2
- phoenix/server/rate_limiters.py +5 -8
- phoenix/server/static/.vite/manifest.json +31 -31
- phoenix/server/static/assets/components-Csu8UKOs.js +1612 -0
- phoenix/server/static/assets/{index-DCzakdJq.js → index-Bk5C9EA7.js} +2 -2
- phoenix/server/static/assets/{pages-CAL1FDMt.js → pages-UeWaKXNs.js} +337 -442
- phoenix/server/static/assets/{vendor-6IcPAw_j.js → vendor-CtqfhlbC.js} +6 -6
- phoenix/server/static/assets/{vendor-arizeai-DRZuoyuF.js → vendor-arizeai-C_3SBz56.js} +2 -2
- phoenix/server/static/assets/{vendor-codemirror-DVE2_WBr.js → vendor-codemirror-wfdk9cjp.js} +1 -1
- phoenix/server/static/assets/{vendor-recharts-DwrexFA4.js → vendor-recharts-BiVnSv90.js} +1 -1
- phoenix/server/templates/index.html +1 -0
- phoenix/server/thread_server.py +1 -1
- phoenix/server/types.py +17 -29
- phoenix/services.py +8 -3
- phoenix/session/client.py +12 -24
- phoenix/session/data_extractor.py +3 -3
- phoenix/session/evaluation.py +1 -2
- phoenix/session/session.py +26 -21
- phoenix/trace/attributes.py +16 -28
- phoenix/trace/dsl/filter.py +17 -21
- phoenix/trace/dsl/helpers.py +3 -3
- phoenix/trace/dsl/query.py +13 -22
- phoenix/trace/fixtures.py +11 -17
- phoenix/trace/otel.py +5 -15
- phoenix/trace/projects.py +3 -2
- phoenix/trace/schemas.py +2 -2
- phoenix/trace/span_evaluations.py +9 -8
- phoenix/trace/span_json_decoder.py +3 -3
- phoenix/trace/span_json_encoder.py +2 -2
- phoenix/trace/trace_dataset.py +6 -5
- phoenix/trace/utils.py +6 -6
- phoenix/utilities/deprecation.py +3 -2
- phoenix/utilities/error_handling.py +3 -2
- phoenix/utilities/json.py +2 -1
- phoenix/utilities/logging.py +2 -2
- phoenix/utilities/project.py +1 -1
- phoenix/utilities/re.py +3 -4
- phoenix/utilities/template_formatters.py +16 -5
- phoenix/version.py +1 -1
- arize_phoenix-5.5.2.dist-info/RECORD +0 -321
- phoenix/server/static/assets/components-hX0LgYz3.js +0 -1428
- {arize_phoenix-5.5.2.dist-info → arize_phoenix-5.7.0.dist-info}/WHEEL +0 -0
- {arize_phoenix-5.5.2.dist-info → arize_phoenix-5.7.0.dist-info}/entry_points.txt +0 -0
- {arize_phoenix-5.5.2.dist-info → arize_phoenix-5.7.0.dist-info}/licenses/IP_NOTICE +0 -0
- {arize_phoenix-5.5.2.dist-info → arize_phoenix-5.7.0.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
from collections.abc import AsyncIterator
|
|
1
2
|
from datetime import datetime, timezone
|
|
2
|
-
from typing import Any,
|
|
3
|
+
from typing import Any, Literal, Optional
|
|
3
4
|
|
|
4
5
|
from fastapi import APIRouter, HTTPException, Query
|
|
5
6
|
from pydantic import Field
|
|
@@ -28,16 +29,16 @@ router = APIRouter(tags=["spans"])
|
|
|
28
29
|
|
|
29
30
|
|
|
30
31
|
class SpanQuery(V1RoutesBaseModel):
|
|
31
|
-
select: Optional[
|
|
32
|
-
filter: Optional[
|
|
33
|
-
explode: Optional[
|
|
34
|
-
concat: Optional[
|
|
35
|
-
rename: Optional[
|
|
36
|
-
index: Optional[
|
|
32
|
+
select: Optional[dict[str, Any]] = None
|
|
33
|
+
filter: Optional[dict[str, Any]] = None
|
|
34
|
+
explode: Optional[dict[str, Any]] = None
|
|
35
|
+
concat: Optional[dict[str, Any]] = None
|
|
36
|
+
rename: Optional[dict[str, Any]] = None
|
|
37
|
+
index: Optional[dict[str, Any]] = None
|
|
37
38
|
|
|
38
39
|
|
|
39
40
|
class QuerySpansRequestBody(V1RoutesBaseModel):
|
|
40
|
-
queries:
|
|
41
|
+
queries: list[SpanQuery]
|
|
41
42
|
start_time: Optional[datetime] = None
|
|
42
43
|
end_time: Optional[datetime] = None
|
|
43
44
|
limit: int = DEFAULT_SPAN_LIMIT
|
|
@@ -153,7 +154,7 @@ class SpanAnnotation(V1RoutesBaseModel):
|
|
|
153
154
|
result: Optional[SpanAnnotationResult] = Field(
|
|
154
155
|
default=None, description="The result of the annotation"
|
|
155
156
|
)
|
|
156
|
-
metadata: Optional[
|
|
157
|
+
metadata: Optional[dict[str, Any]] = Field(
|
|
157
158
|
default=None, description="Metadata for the annotation"
|
|
158
159
|
)
|
|
159
160
|
|
|
@@ -171,15 +172,15 @@ class SpanAnnotation(V1RoutesBaseModel):
|
|
|
171
172
|
)
|
|
172
173
|
|
|
173
174
|
|
|
174
|
-
class AnnotateSpansRequestBody(RequestBody[
|
|
175
|
-
data:
|
|
175
|
+
class AnnotateSpansRequestBody(RequestBody[list[SpanAnnotation]]):
|
|
176
|
+
data: list[SpanAnnotation]
|
|
176
177
|
|
|
177
178
|
|
|
178
179
|
class InsertedSpanAnnotation(V1RoutesBaseModel):
|
|
179
180
|
id: str = Field(description="The ID of the inserted span annotation")
|
|
180
181
|
|
|
181
182
|
|
|
182
|
-
class AnnotateSpansResponseBody(ResponseBody[
|
|
183
|
+
class AnnotateSpansResponseBody(ResponseBody[list[InsertedSpanAnnotation]]):
|
|
183
184
|
pass
|
|
184
185
|
|
|
185
186
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import gzip
|
|
2
2
|
import zlib
|
|
3
|
-
from typing import Any,
|
|
3
|
+
from typing import Any, Literal, Optional
|
|
4
4
|
|
|
5
5
|
from fastapi import APIRouter, BackgroundTasks, Header, HTTPException, Query
|
|
6
6
|
from google.protobuf.message import DecodeError
|
|
@@ -110,7 +110,7 @@ class TraceAnnotation(V1RoutesBaseModel):
|
|
|
110
110
|
result: Optional[TraceAnnotationResult] = Field(
|
|
111
111
|
default=None, description="The result of the annotation"
|
|
112
112
|
)
|
|
113
|
-
metadata: Optional[
|
|
113
|
+
metadata: Optional[dict[str, Any]] = Field(
|
|
114
114
|
default=None, description="Metadata for the annotation"
|
|
115
115
|
)
|
|
116
116
|
|
|
@@ -128,15 +128,15 @@ class TraceAnnotation(V1RoutesBaseModel):
|
|
|
128
128
|
)
|
|
129
129
|
|
|
130
130
|
|
|
131
|
-
class AnnotateTracesRequestBody(RequestBody[
|
|
132
|
-
data:
|
|
131
|
+
class AnnotateTracesRequestBody(RequestBody[list[TraceAnnotation]]):
|
|
132
|
+
data: list[TraceAnnotation] = Field(description="The trace annotations to be upserted")
|
|
133
133
|
|
|
134
134
|
|
|
135
135
|
class InsertedTraceAnnotation(V1RoutesBaseModel):
|
|
136
136
|
id: str = Field(description="The ID of the inserted trace annotation")
|
|
137
137
|
|
|
138
138
|
|
|
139
|
-
class AnnotateTracesResponseBody(ResponseBody[
|
|
139
|
+
class AnnotateTracesResponseBody(ResponseBody[list[InsertedTraceAnnotation]]):
|
|
140
140
|
pass
|
|
141
141
|
|
|
142
142
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from typing import Any,
|
|
1
|
+
from typing import Any, Generic, Optional, TypedDict, TypeVar, Union
|
|
2
2
|
|
|
3
3
|
from typing_extensions import TypeAlias, assert_never
|
|
4
4
|
|
|
@@ -6,8 +6,8 @@ from .pydantic_compat import V1RoutesBaseModel
|
|
|
6
6
|
|
|
7
7
|
StatusCode: TypeAlias = int
|
|
8
8
|
DataType = TypeVar("DataType")
|
|
9
|
-
Responses: TypeAlias =
|
|
10
|
-
Union[int, str],
|
|
9
|
+
Responses: TypeAlias = dict[
|
|
10
|
+
Union[int, str], dict[str, Any]
|
|
11
11
|
] # input type for the `responses` parameter of a fastapi route
|
|
12
12
|
|
|
13
13
|
|
|
@@ -44,12 +44,12 @@ class PaginatedResponseBody(V1RoutesBaseModel, Generic[DataType]):
|
|
|
44
44
|
# Don't use """ for this docstring or it will be included as a description
|
|
45
45
|
# in the generated OpenAPI schema.
|
|
46
46
|
|
|
47
|
-
data:
|
|
47
|
+
data: list[DataType]
|
|
48
48
|
next_cursor: Optional[str]
|
|
49
49
|
|
|
50
50
|
|
|
51
51
|
def add_errors_to_responses(
|
|
52
|
-
errors:
|
|
52
|
+
errors: list[Union[StatusCode, StatusCodeWithDescription]],
|
|
53
53
|
/,
|
|
54
54
|
*,
|
|
55
55
|
responses: Optional[Responses] = None,
|
phoenix/server/api/schema.py
CHANGED
|
@@ -1,17 +1,49 @@
|
|
|
1
|
+
from itertools import chain
|
|
2
|
+
from typing import Any, Iterable, Iterator, Optional, Union
|
|
3
|
+
|
|
1
4
|
import strawberry
|
|
5
|
+
from strawberry.extensions import SchemaExtension
|
|
6
|
+
from strawberry.types.base import StrawberryObjectDefinition, StrawberryType
|
|
2
7
|
|
|
3
8
|
from phoenix.server.api.exceptions import get_mask_errors_extension
|
|
4
9
|
from phoenix.server.api.mutations import Mutation
|
|
5
10
|
from phoenix.server.api.queries import Query
|
|
6
11
|
from phoenix.server.api.subscriptions import Subscription
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
# See https://strawberry.rocks/docs/guides/schema-export
|
|
10
|
-
# It should be kept in sync with the server's runtime-initialized
|
|
11
|
-
# instance. To do so, search for the usage of `strawberry.Schema(...)`.
|
|
12
|
-
schema = strawberry.Schema(
|
|
13
|
-
query=Query,
|
|
14
|
-
mutation=Mutation,
|
|
15
|
-
extensions=[get_mask_errors_extension()],
|
|
16
|
-
subscription=Subscription,
|
|
12
|
+
from phoenix.server.api.types.ChatCompletionSubscriptionPayload import (
|
|
13
|
+
ChatCompletionSubscriptionPayload,
|
|
17
14
|
)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def build_graphql_schema(
|
|
18
|
+
extensions: Optional[Iterable[Union[type[SchemaExtension], SchemaExtension]]] = None,
|
|
19
|
+
) -> strawberry.Schema:
|
|
20
|
+
"""
|
|
21
|
+
Builds a strawberry schema.
|
|
22
|
+
"""
|
|
23
|
+
return strawberry.Schema(
|
|
24
|
+
query=Query,
|
|
25
|
+
mutation=Mutation,
|
|
26
|
+
extensions=chain(extensions or [], [get_mask_errors_extension()]),
|
|
27
|
+
subscription=Subscription,
|
|
28
|
+
types=_implementing_types(ChatCompletionSubscriptionPayload),
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def _implementing_types(interface: Any) -> Iterator[StrawberryType]:
|
|
33
|
+
"""
|
|
34
|
+
Iterates over strawberry types implementing the given strawberry interface.
|
|
35
|
+
"""
|
|
36
|
+
assert isinstance(
|
|
37
|
+
strawberry_definition := getattr(interface, "__strawberry_definition__", None),
|
|
38
|
+
StrawberryObjectDefinition,
|
|
39
|
+
)
|
|
40
|
+
assert strawberry_definition.is_interface
|
|
41
|
+
for subcls in interface.__subclasses__():
|
|
42
|
+
if isinstance(
|
|
43
|
+
getattr(subcls, "__strawberry_definition__", None),
|
|
44
|
+
StrawberryObjectDefinition,
|
|
45
|
+
):
|
|
46
|
+
yield subcls
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
_EXPORTED_GRAPHQL_SCHEMA = build_graphql_schema() # used to export the GraphQL schema to file
|