arize-phoenix 4.5.0__py3-none-any.whl → 4.6.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.5.0.dist-info → arize_phoenix-4.6.1.dist-info}/METADATA +16 -8
- {arize_phoenix-4.5.0.dist-info → arize_phoenix-4.6.1.dist-info}/RECORD +122 -58
- {arize_phoenix-4.5.0.dist-info → arize_phoenix-4.6.1.dist-info}/WHEEL +1 -1
- phoenix/__init__.py +0 -27
- phoenix/config.py +42 -7
- phoenix/core/model.py +25 -25
- phoenix/core/model_schema.py +64 -62
- phoenix/core/model_schema_adapter.py +27 -25
- phoenix/datetime_utils.py +4 -0
- phoenix/db/bulk_inserter.py +54 -14
- phoenix/db/insertion/dataset.py +237 -0
- phoenix/db/insertion/evaluation.py +10 -10
- phoenix/db/insertion/helpers.py +17 -14
- phoenix/db/insertion/span.py +3 -3
- phoenix/db/migrations/types.py +29 -0
- phoenix/db/migrations/versions/10460e46d750_datasets.py +291 -0
- phoenix/db/migrations/versions/cf03bd6bae1d_init.py +2 -28
- phoenix/db/models.py +236 -4
- phoenix/experiments/__init__.py +6 -0
- phoenix/experiments/evaluators/__init__.py +29 -0
- phoenix/experiments/evaluators/base.py +153 -0
- phoenix/experiments/evaluators/code_evaluators.py +99 -0
- phoenix/experiments/evaluators/llm_evaluators.py +244 -0
- phoenix/experiments/evaluators/utils.py +186 -0
- phoenix/experiments/functions.py +757 -0
- phoenix/experiments/tracing.py +85 -0
- phoenix/experiments/types.py +753 -0
- phoenix/experiments/utils.py +24 -0
- phoenix/inferences/fixtures.py +23 -23
- phoenix/inferences/inferences.py +7 -7
- phoenix/inferences/validation.py +1 -1
- phoenix/server/api/context.py +20 -0
- phoenix/server/api/dataloaders/__init__.py +20 -0
- phoenix/server/api/dataloaders/average_experiment_run_latency.py +54 -0
- phoenix/server/api/dataloaders/dataset_example_revisions.py +100 -0
- phoenix/server/api/dataloaders/dataset_example_spans.py +43 -0
- phoenix/server/api/dataloaders/experiment_annotation_summaries.py +85 -0
- phoenix/server/api/dataloaders/experiment_error_rates.py +43 -0
- phoenix/server/api/dataloaders/experiment_run_counts.py +42 -0
- phoenix/server/api/dataloaders/experiment_sequence_number.py +49 -0
- phoenix/server/api/dataloaders/project_by_name.py +31 -0
- phoenix/server/api/dataloaders/span_descendants.py +2 -3
- phoenix/server/api/dataloaders/span_projects.py +33 -0
- phoenix/server/api/dataloaders/trace_row_ids.py +39 -0
- phoenix/server/api/helpers/dataset_helpers.py +179 -0
- phoenix/server/api/input_types/AddExamplesToDatasetInput.py +16 -0
- phoenix/server/api/input_types/AddSpansToDatasetInput.py +14 -0
- phoenix/server/api/input_types/ClearProjectInput.py +15 -0
- phoenix/server/api/input_types/CreateDatasetInput.py +12 -0
- phoenix/server/api/input_types/DatasetExampleInput.py +14 -0
- phoenix/server/api/input_types/DatasetSort.py +17 -0
- phoenix/server/api/input_types/DatasetVersionSort.py +16 -0
- phoenix/server/api/input_types/DeleteDatasetExamplesInput.py +13 -0
- phoenix/server/api/input_types/DeleteDatasetInput.py +7 -0
- phoenix/server/api/input_types/DeleteExperimentsInput.py +9 -0
- phoenix/server/api/input_types/PatchDatasetExamplesInput.py +35 -0
- phoenix/server/api/input_types/PatchDatasetInput.py +14 -0
- phoenix/server/api/mutations/__init__.py +13 -0
- phoenix/server/api/mutations/auth.py +11 -0
- phoenix/server/api/mutations/dataset_mutations.py +520 -0
- phoenix/server/api/mutations/experiment_mutations.py +65 -0
- phoenix/server/api/{types/ExportEventsMutation.py → mutations/export_events_mutations.py} +17 -14
- phoenix/server/api/mutations/project_mutations.py +47 -0
- phoenix/server/api/openapi/__init__.py +0 -0
- phoenix/server/api/openapi/main.py +6 -0
- phoenix/server/api/openapi/schema.py +16 -0
- phoenix/server/api/queries.py +503 -0
- phoenix/server/api/routers/v1/__init__.py +77 -2
- phoenix/server/api/routers/v1/dataset_examples.py +178 -0
- phoenix/server/api/routers/v1/datasets.py +965 -0
- phoenix/server/api/routers/v1/evaluations.py +8 -13
- phoenix/server/api/routers/v1/experiment_evaluations.py +143 -0
- phoenix/server/api/routers/v1/experiment_runs.py +220 -0
- phoenix/server/api/routers/v1/experiments.py +302 -0
- phoenix/server/api/routers/v1/spans.py +9 -5
- phoenix/server/api/routers/v1/traces.py +1 -4
- phoenix/server/api/schema.py +2 -303
- phoenix/server/api/types/AnnotatorKind.py +10 -0
- phoenix/server/api/types/Cluster.py +19 -19
- phoenix/server/api/types/CreateDatasetPayload.py +8 -0
- phoenix/server/api/types/Dataset.py +282 -63
- phoenix/server/api/types/DatasetExample.py +85 -0
- phoenix/server/api/types/DatasetExampleRevision.py +34 -0
- phoenix/server/api/types/DatasetVersion.py +14 -0
- phoenix/server/api/types/Dimension.py +30 -29
- phoenix/server/api/types/EmbeddingDimension.py +40 -34
- phoenix/server/api/types/Event.py +16 -16
- phoenix/server/api/types/ExampleRevisionInterface.py +14 -0
- phoenix/server/api/types/Experiment.py +147 -0
- phoenix/server/api/types/ExperimentAnnotationSummary.py +13 -0
- phoenix/server/api/types/ExperimentComparison.py +19 -0
- phoenix/server/api/types/ExperimentRun.py +91 -0
- phoenix/server/api/types/ExperimentRunAnnotation.py +57 -0
- phoenix/server/api/types/Inferences.py +80 -0
- phoenix/server/api/types/InferencesRole.py +23 -0
- phoenix/server/api/types/Model.py +43 -42
- phoenix/server/api/types/Project.py +26 -12
- phoenix/server/api/types/Span.py +79 -2
- phoenix/server/api/types/TimeSeries.py +6 -6
- phoenix/server/api/types/Trace.py +15 -4
- phoenix/server/api/types/UMAPPoints.py +1 -1
- phoenix/server/api/types/node.py +5 -111
- phoenix/server/api/types/pagination.py +10 -52
- phoenix/server/app.py +103 -49
- phoenix/server/main.py +49 -27
- phoenix/server/openapi/docs.py +3 -0
- phoenix/server/static/index.js +2300 -1294
- phoenix/server/templates/index.html +1 -0
- phoenix/services.py +15 -15
- phoenix/session/client.py +581 -22
- phoenix/session/session.py +47 -37
- phoenix/trace/exporter.py +14 -9
- phoenix/trace/fixtures.py +133 -7
- phoenix/trace/schemas.py +1 -2
- phoenix/trace/span_evaluations.py +3 -3
- phoenix/trace/trace_dataset.py +6 -6
- phoenix/utilities/json.py +61 -0
- phoenix/utilities/re.py +50 -0
- phoenix/version.py +1 -1
- phoenix/server/api/types/DatasetRole.py +0 -23
- {arize_phoenix-4.5.0.dist-info → arize_phoenix-4.6.1.dist-info}/licenses/IP_NOTICE +0 -0
- {arize_phoenix-4.5.0.dist-info → arize_phoenix-4.6.1.dist-info}/licenses/LICENSE +0 -0
- /phoenix/server/api/{helpers.py → helpers/__init__.py} +0 -0
phoenix/server/main.py
CHANGED
|
@@ -22,9 +22,9 @@ from phoenix.config import (
|
|
|
22
22
|
get_pids_path,
|
|
23
23
|
get_working_dir,
|
|
24
24
|
)
|
|
25
|
-
from phoenix.core.model_schema_adapter import
|
|
25
|
+
from phoenix.core.model_schema_adapter import create_model_from_inferences
|
|
26
26
|
from phoenix.db import get_printable_db_url
|
|
27
|
-
from phoenix.inferences.fixtures import FIXTURES,
|
|
27
|
+
from phoenix.inferences.fixtures import FIXTURES, get_inferences
|
|
28
28
|
from phoenix.inferences.inferences import EMPTY_INFERENCES, Inferences
|
|
29
29
|
from phoenix.pointcloud.umap_parameters import (
|
|
30
30
|
DEFAULT_MIN_DIST,
|
|
@@ -32,14 +32,22 @@ from phoenix.pointcloud.umap_parameters import (
|
|
|
32
32
|
DEFAULT_N_SAMPLES,
|
|
33
33
|
UMAPParameters,
|
|
34
34
|
)
|
|
35
|
-
from phoenix.server.app import
|
|
35
|
+
from phoenix.server.app import (
|
|
36
|
+
SessionFactory,
|
|
37
|
+
_db,
|
|
38
|
+
create_app,
|
|
39
|
+
create_engine_and_run_migrations,
|
|
40
|
+
instrument_engine_if_enabled,
|
|
41
|
+
)
|
|
36
42
|
from phoenix.settings import Settings
|
|
37
43
|
from phoenix.trace.fixtures import (
|
|
38
44
|
TRACES_FIXTURES,
|
|
39
45
|
download_traces_fixture,
|
|
46
|
+
get_dataset_fixtures,
|
|
40
47
|
get_evals_from_fixture,
|
|
41
48
|
get_trace_fixture_by_name,
|
|
42
49
|
reset_fixture_span_ids_and_timestamps,
|
|
50
|
+
send_dataset_fixtures,
|
|
43
51
|
)
|
|
44
52
|
from phoenix.trace.otel import decode_otlp_span, encode_span_to_otlp
|
|
45
53
|
from phoenix.trace.schemas import Span
|
|
@@ -99,14 +107,14 @@ def _get_pid_file() -> Path:
|
|
|
99
107
|
DEFAULT_UMAP_PARAMS_STR = f"{DEFAULT_MIN_DIST},{DEFAULT_N_NEIGHBORS},{DEFAULT_N_SAMPLES}"
|
|
100
108
|
|
|
101
109
|
if __name__ == "__main__":
|
|
102
|
-
|
|
103
|
-
|
|
110
|
+
primary_inferences_name: str
|
|
111
|
+
reference_inferences_name: Optional[str]
|
|
104
112
|
trace_dataset_name: Optional[str] = None
|
|
105
113
|
simulate_streaming: Optional[bool] = None
|
|
106
114
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
115
|
+
primary_inferences: Inferences = EMPTY_INFERENCES
|
|
116
|
+
reference_inferences: Optional[Inferences] = None
|
|
117
|
+
corpus_inferences: Optional[Inferences] = None
|
|
110
118
|
|
|
111
119
|
# Initialize the settings for the Server
|
|
112
120
|
Settings.log_migrations = True
|
|
@@ -150,34 +158,34 @@ if __name__ == "__main__":
|
|
|
150
158
|
)
|
|
151
159
|
export_path = Path(args.export_path) if args.export_path else EXPORT_DIR
|
|
152
160
|
if args.command == "datasets":
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
Inferences.from_name(
|
|
159
|
-
if
|
|
161
|
+
primary_inferences_name = args.primary
|
|
162
|
+
reference_inferences_name = args.reference
|
|
163
|
+
corpus_inferences_name = args.corpus
|
|
164
|
+
primary_inferences = Inferences.from_name(primary_inferences_name)
|
|
165
|
+
reference_inferences = (
|
|
166
|
+
Inferences.from_name(reference_inferences_name)
|
|
167
|
+
if reference_inferences_name is not None
|
|
160
168
|
else None
|
|
161
169
|
)
|
|
162
|
-
|
|
163
|
-
None if
|
|
170
|
+
corpus_inferences = (
|
|
171
|
+
None if corpus_inferences_name is None else Inferences.from_name(corpus_inferences_name)
|
|
164
172
|
)
|
|
165
173
|
elif args.command == "fixture":
|
|
166
174
|
fixture_name = args.fixture
|
|
167
175
|
primary_only = args.primary_only
|
|
168
|
-
|
|
176
|
+
primary_inferences, reference_inferences, corpus_inferences = get_inferences(
|
|
169
177
|
fixture_name,
|
|
170
178
|
args.no_internet,
|
|
171
179
|
)
|
|
172
180
|
if primary_only:
|
|
173
|
-
|
|
174
|
-
|
|
181
|
+
reference_inferences_name = None
|
|
182
|
+
reference_inferences = None
|
|
175
183
|
elif args.command == "trace-fixture":
|
|
176
184
|
trace_dataset_name = args.fixture
|
|
177
185
|
simulate_streaming = args.simulate_streaming
|
|
178
186
|
elif args.command == "demo":
|
|
179
187
|
fixture_name = args.fixture
|
|
180
|
-
|
|
188
|
+
primary_inferences, reference_inferences, corpus_inferences = get_inferences(
|
|
181
189
|
fixture_name,
|
|
182
190
|
args.no_internet,
|
|
183
191
|
)
|
|
@@ -197,9 +205,11 @@ if __name__ == "__main__":
|
|
|
197
205
|
|
|
198
206
|
port = args.port or get_env_port()
|
|
199
207
|
host_root_path = get_env_host_root_path()
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
208
|
+
read_only = args.read_only
|
|
209
|
+
|
|
210
|
+
model = create_model_from_inferences(
|
|
211
|
+
primary_inferences,
|
|
212
|
+
reference_inferences,
|
|
203
213
|
)
|
|
204
214
|
|
|
205
215
|
fixture_spans: List[Span] = []
|
|
@@ -216,13 +226,19 @@ if __name__ == "__main__":
|
|
|
216
226
|
),
|
|
217
227
|
get_evals_from_fixture(trace_dataset_name),
|
|
218
228
|
)
|
|
229
|
+
dataset_fixtures = list(get_dataset_fixtures(trace_dataset_name))
|
|
230
|
+
if not read_only:
|
|
231
|
+
Thread(
|
|
232
|
+
target=send_dataset_fixtures,
|
|
233
|
+
args=(f"http://{host}:{port}", dataset_fixtures),
|
|
234
|
+
).start()
|
|
219
235
|
umap_params_list = args.umap_params.split(",")
|
|
220
236
|
umap_params = UMAPParameters(
|
|
221
237
|
min_dist=float(umap_params_list[0]),
|
|
222
238
|
n_neighbors=int(umap_params_list[1]),
|
|
223
239
|
n_samples=int(umap_params_list[2]),
|
|
224
240
|
)
|
|
225
|
-
|
|
241
|
+
|
|
226
242
|
logger.info(f"Server umap params: {umap_params}")
|
|
227
243
|
if enable_prometheus := get_env_enable_prometheus():
|
|
228
244
|
from phoenix.server.prometheus import start_prometheus
|
|
@@ -230,17 +246,23 @@ if __name__ == "__main__":
|
|
|
230
246
|
start_prometheus()
|
|
231
247
|
|
|
232
248
|
working_dir = get_working_dir().resolve()
|
|
249
|
+
engine = create_engine_and_run_migrations(db_connection_str)
|
|
250
|
+
instrumentation_cleanups = instrument_engine_if_enabled(engine)
|
|
251
|
+
factory = SessionFactory(session_factory=_db(engine), dialect=engine.dialect.name)
|
|
233
252
|
app = create_app(
|
|
234
|
-
|
|
253
|
+
db=factory,
|
|
235
254
|
export_path=export_path,
|
|
236
255
|
model=model,
|
|
237
256
|
umap_params=umap_params,
|
|
238
|
-
corpus=None
|
|
257
|
+
corpus=None
|
|
258
|
+
if corpus_inferences is None
|
|
259
|
+
else create_model_from_inferences(corpus_inferences),
|
|
239
260
|
debug=args.debug,
|
|
240
261
|
read_only=read_only,
|
|
241
262
|
enable_prometheus=enable_prometheus,
|
|
242
263
|
initial_spans=fixture_spans,
|
|
243
264
|
initial_evaluations=fixture_evals,
|
|
265
|
+
clean_up_callbacks=instrumentation_cleanups,
|
|
244
266
|
)
|
|
245
267
|
server = Server(config=Config(app, host=host, port=port, root_path=host_root_path)) # type: ignore
|
|
246
268
|
Thread(target=_write_pid_file_when_ready, args=(server,), daemon=True).start()
|
phoenix/server/openapi/docs.py
CHANGED
|
@@ -43,6 +43,9 @@ def get_swagger_ui_html(
|
|
|
43
43
|
<div id="swagger-ui">
|
|
44
44
|
</div>
|
|
45
45
|
<script src="{swagger_js_url}"></script>
|
|
46
|
+
<style type="text/css">
|
|
47
|
+
div[id^="operations-private"]{{display:none}} #operations-tag-private{{display:none}}
|
|
48
|
+
</style>
|
|
46
49
|
<!-- `SwaggerUIBundle` is now available on the page -->
|
|
47
50
|
<script>
|
|
48
51
|
const ui = SwaggerUIBundle({{
|