arize-phoenix 4.4.4rc6__tar.gz → 4.5.0__tar.gz
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.4.4rc6 → arize_phoenix-4.5.0}/PKG-INFO +8 -14
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/README.md +1 -1
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/examples/manually-instrumented-chatbot/frontend/requirements.txt +2 -2
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/pyproject.toml +14 -35
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/__init__.py +27 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/config.py +7 -42
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/core/model.py +25 -25
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/core/model_schema.py +62 -64
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/core/model_schema_adapter.py +25 -27
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/datetime_utils.py +0 -4
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/db/bulk_inserter.py +14 -54
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/db/insertion/evaluation.py +10 -10
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/db/insertion/helpers.py +14 -17
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/db/insertion/span.py +3 -3
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/db/migrations/versions/cf03bd6bae1d_init.py +28 -2
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/db/models.py +4 -236
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/inferences/fixtures.py +23 -23
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/inferences/inferences.py +7 -7
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/inferences/validation.py +1 -1
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/api/context.py +0 -20
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/api/dataloaders/__init__.py +0 -20
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/api/dataloaders/span_descendants.py +3 -2
- arize_phoenix-4.5.0/src/phoenix/server/api/routers/v1/__init__.py +11 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/api/routers/v1/evaluations.py +13 -8
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/api/routers/v1/spans.py +5 -9
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/api/routers/v1/traces.py +4 -1
- arize_phoenix-4.5.0/src/phoenix/server/api/schema.py +314 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/api/types/Cluster.py +19 -19
- arize_phoenix-4.4.4rc6/src/phoenix/server/api/types/Inferences.py → arize_phoenix-4.5.0/src/phoenix/server/api/types/Dataset.py +14 -14
- arize_phoenix-4.5.0/src/phoenix/server/api/types/DatasetRole.py +23 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/api/types/Dimension.py +29 -30
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/api/types/EmbeddingDimension.py +34 -40
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/api/types/Event.py +16 -16
- arize_phoenix-4.4.4rc6/src/phoenix/server/api/mutations/export_events_mutations.py → arize_phoenix-4.5.0/src/phoenix/server/api/types/ExportEventsMutation.py +14 -17
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/api/types/Model.py +42 -43
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/api/types/Project.py +12 -26
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/api/types/Span.py +2 -79
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/api/types/TimeSeries.py +6 -6
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/api/types/Trace.py +4 -15
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/api/types/UMAPPoints.py +1 -1
- arize_phoenix-4.5.0/src/phoenix/server/api/types/node.py +133 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/api/types/pagination.py +52 -10
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/app.py +49 -103
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/main.py +27 -49
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/openapi/docs.py +0 -3
- arize_phoenix-4.5.0/src/phoenix/server/static/index.js +7498 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/templates/index.html +0 -1
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/services.py +15 -15
- arize_phoenix-4.5.0/src/phoenix/session/client.py +254 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/session/session.py +37 -47
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/trace/exporter.py +9 -14
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/trace/fixtures.py +7 -133
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/trace/schemas.py +2 -1
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/trace/span_evaluations.py +3 -3
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/trace/trace_dataset.py +6 -6
- arize_phoenix-4.5.0/src/phoenix/version.py +1 -0
- arize_phoenix-4.4.4rc6/src/phoenix/db/insertion/dataset.py +0 -237
- arize_phoenix-4.4.4rc6/src/phoenix/db/migrations/types.py +0 -29
- arize_phoenix-4.4.4rc6/src/phoenix/db/migrations/versions/10460e46d750_datasets.py +0 -291
- arize_phoenix-4.4.4rc6/src/phoenix/experiments/__init__.py +0 -6
- arize_phoenix-4.4.4rc6/src/phoenix/experiments/evaluators/__init__.py +0 -29
- arize_phoenix-4.4.4rc6/src/phoenix/experiments/evaluators/base.py +0 -153
- arize_phoenix-4.4.4rc6/src/phoenix/experiments/evaluators/code_evaluators.py +0 -99
- arize_phoenix-4.4.4rc6/src/phoenix/experiments/evaluators/llm_evaluators.py +0 -244
- arize_phoenix-4.4.4rc6/src/phoenix/experiments/evaluators/utils.py +0 -189
- arize_phoenix-4.4.4rc6/src/phoenix/experiments/functions.py +0 -616
- arize_phoenix-4.4.4rc6/src/phoenix/experiments/tracing.py +0 -85
- arize_phoenix-4.4.4rc6/src/phoenix/experiments/types.py +0 -722
- arize_phoenix-4.4.4rc6/src/phoenix/experiments/utils.py +0 -9
- arize_phoenix-4.4.4rc6/src/phoenix/server/api/dataloaders/average_experiment_run_latency.py +0 -54
- arize_phoenix-4.4.4rc6/src/phoenix/server/api/dataloaders/dataset_example_revisions.py +0 -100
- arize_phoenix-4.4.4rc6/src/phoenix/server/api/dataloaders/dataset_example_spans.py +0 -43
- arize_phoenix-4.4.4rc6/src/phoenix/server/api/dataloaders/experiment_annotation_summaries.py +0 -85
- arize_phoenix-4.4.4rc6/src/phoenix/server/api/dataloaders/experiment_error_rates.py +0 -43
- arize_phoenix-4.4.4rc6/src/phoenix/server/api/dataloaders/experiment_run_counts.py +0 -42
- arize_phoenix-4.4.4rc6/src/phoenix/server/api/dataloaders/experiment_sequence_number.py +0 -49
- arize_phoenix-4.4.4rc6/src/phoenix/server/api/dataloaders/project_by_name.py +0 -31
- arize_phoenix-4.4.4rc6/src/phoenix/server/api/dataloaders/span_projects.py +0 -33
- arize_phoenix-4.4.4rc6/src/phoenix/server/api/dataloaders/trace_row_ids.py +0 -39
- arize_phoenix-4.4.4rc6/src/phoenix/server/api/helpers/dataset_helpers.py +0 -179
- arize_phoenix-4.4.4rc6/src/phoenix/server/api/input_types/AddExamplesToDatasetInput.py +0 -16
- arize_phoenix-4.4.4rc6/src/phoenix/server/api/input_types/AddSpansToDatasetInput.py +0 -14
- arize_phoenix-4.4.4rc6/src/phoenix/server/api/input_types/ClearProjectInput.py +0 -15
- arize_phoenix-4.4.4rc6/src/phoenix/server/api/input_types/CreateDatasetInput.py +0 -12
- arize_phoenix-4.4.4rc6/src/phoenix/server/api/input_types/DatasetExampleInput.py +0 -14
- arize_phoenix-4.4.4rc6/src/phoenix/server/api/input_types/DatasetSort.py +0 -17
- arize_phoenix-4.4.4rc6/src/phoenix/server/api/input_types/DatasetVersionSort.py +0 -16
- arize_phoenix-4.4.4rc6/src/phoenix/server/api/input_types/DeleteDatasetExamplesInput.py +0 -13
- arize_phoenix-4.4.4rc6/src/phoenix/server/api/input_types/DeleteDatasetInput.py +0 -7
- arize_phoenix-4.4.4rc6/src/phoenix/server/api/input_types/DeleteExperimentsInput.py +0 -9
- arize_phoenix-4.4.4rc6/src/phoenix/server/api/input_types/PatchDatasetExamplesInput.py +0 -35
- arize_phoenix-4.4.4rc6/src/phoenix/server/api/input_types/PatchDatasetInput.py +0 -14
- arize_phoenix-4.4.4rc6/src/phoenix/server/api/mutations/__init__.py +0 -13
- arize_phoenix-4.4.4rc6/src/phoenix/server/api/mutations/auth.py +0 -11
- arize_phoenix-4.4.4rc6/src/phoenix/server/api/mutations/dataset_mutations.py +0 -520
- arize_phoenix-4.4.4rc6/src/phoenix/server/api/mutations/experiment_mutations.py +0 -65
- arize_phoenix-4.4.4rc6/src/phoenix/server/api/mutations/project_mutations.py +0 -47
- arize_phoenix-4.4.4rc6/src/phoenix/server/api/openapi/main.py +0 -6
- arize_phoenix-4.4.4rc6/src/phoenix/server/api/openapi/schema.py +0 -16
- arize_phoenix-4.4.4rc6/src/phoenix/server/api/queries.py +0 -503
- arize_phoenix-4.4.4rc6/src/phoenix/server/api/routers/v1/__init__.py +0 -86
- arize_phoenix-4.4.4rc6/src/phoenix/server/api/routers/v1/dataset_examples.py +0 -178
- arize_phoenix-4.4.4rc6/src/phoenix/server/api/routers/v1/datasets.py +0 -965
- arize_phoenix-4.4.4rc6/src/phoenix/server/api/routers/v1/experiment_evaluations.py +0 -65
- arize_phoenix-4.4.4rc6/src/phoenix/server/api/routers/v1/experiment_runs.py +0 -96
- arize_phoenix-4.4.4rc6/src/phoenix/server/api/routers/v1/experiments.py +0 -174
- arize_phoenix-4.4.4rc6/src/phoenix/server/api/schema.py +0 -13
- arize_phoenix-4.4.4rc6/src/phoenix/server/api/types/AnnotatorKind.py +0 -10
- arize_phoenix-4.4.4rc6/src/phoenix/server/api/types/CreateDatasetPayload.py +0 -8
- arize_phoenix-4.4.4rc6/src/phoenix/server/api/types/Dataset.py +0 -299
- arize_phoenix-4.4.4rc6/src/phoenix/server/api/types/DatasetExample.py +0 -85
- arize_phoenix-4.4.4rc6/src/phoenix/server/api/types/DatasetExampleRevision.py +0 -34
- arize_phoenix-4.4.4rc6/src/phoenix/server/api/types/DatasetVersion.py +0 -14
- arize_phoenix-4.4.4rc6/src/phoenix/server/api/types/ExampleRevisionInterface.py +0 -14
- arize_phoenix-4.4.4rc6/src/phoenix/server/api/types/Experiment.py +0 -147
- arize_phoenix-4.4.4rc6/src/phoenix/server/api/types/ExperimentAnnotationSummary.py +0 -13
- arize_phoenix-4.4.4rc6/src/phoenix/server/api/types/ExperimentComparison.py +0 -19
- arize_phoenix-4.4.4rc6/src/phoenix/server/api/types/ExperimentRun.py +0 -91
- arize_phoenix-4.4.4rc6/src/phoenix/server/api/types/ExperimentRunAnnotation.py +0 -57
- arize_phoenix-4.4.4rc6/src/phoenix/server/api/types/InferencesRole.py +0 -23
- arize_phoenix-4.4.4rc6/src/phoenix/server/api/types/node.py +0 -27
- arize_phoenix-4.4.4rc6/src/phoenix/server/static/index.js +0 -8504
- arize_phoenix-4.4.4rc6/src/phoenix/session/client.py +0 -842
- arize_phoenix-4.4.4rc6/src/phoenix/utilities/__init__.py +0 -0
- arize_phoenix-4.4.4rc6/src/phoenix/utilities/json.py +0 -61
- arize_phoenix-4.4.4rc6/src/phoenix/utilities/re.py +0 -50
- arize_phoenix-4.4.4rc6/src/phoenix/version.py +0 -1
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/.gitignore +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/IP_NOTICE +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/LICENSE +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/examples/manually-instrumented-chatbot/chat-service/chat/__init__.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/examples/manually-instrumented-chatbot/chat-service/chat/app.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/examples/manually-instrumented-chatbot/chat-service/chat/types.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/examples/manually-instrumented-chatbot/frontend/Dockerfile +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/examples/manually-instrumented-chatbot/frontend/Makefile +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/examples/manually-instrumented-chatbot/frontend/__init__.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/examples/manually-instrumented-chatbot/frontend/pyproject.toml +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/examples/manually-instrumented-chatbot/frontend/schema.json +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/core/__init__.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/core/embedding_dimension.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/db/README.md +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/db/__init__.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/db/alembic.ini +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/db/engines.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/db/helpers.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/db/insertion/__init__.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/db/migrate.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/db/migrations/__init__.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/db/migrations/env.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/db/migrations/script.py.mako +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/exceptions.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/inferences/__init__.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/inferences/errors.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/inferences/schema.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/metrics/README.md +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/metrics/__init__.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/metrics/binning.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/metrics/metrics.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/metrics/mixins.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/metrics/retrieval_metrics.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/metrics/timeseries.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/metrics/wrappers.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/pointcloud/__init__.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/pointcloud/clustering.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/pointcloud/pointcloud.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/pointcloud/projectors.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/pointcloud/umap_parameters.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/py.typed +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/__init__.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/api/__init__.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/api/dataloaders/cache/__init__.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/api/dataloaders/cache/two_tier_cache.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/api/dataloaders/document_evaluation_summaries.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/api/dataloaders/document_evaluations.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/api/dataloaders/document_retrieval_metrics.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/api/dataloaders/evaluation_summaries.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/api/dataloaders/latency_ms_quantile.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/api/dataloaders/min_start_or_max_end_times.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/api/dataloaders/record_counts.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/api/dataloaders/span_evaluations.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/api/dataloaders/token_counts.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/api/dataloaders/trace_evaluations.py +0 -0
- /arize_phoenix-4.4.4rc6/src/phoenix/server/api/helpers/__init__.py → /arize_phoenix-4.5.0/src/phoenix/server/api/helpers.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/api/input_types/ClusterInput.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/api/input_types/Coordinates.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/api/input_types/DataQualityMetricInput.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/api/input_types/DimensionFilter.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/api/input_types/DimensionInput.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/api/input_types/Granularity.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/api/input_types/PerformanceMetricInput.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/api/input_types/SpanSort.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/api/input_types/TimeRange.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/api/input_types/__init__.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/api/interceptor.py +0 -0
- {arize_phoenix-4.4.4rc6/src/phoenix/server/api/openapi → arize_phoenix-4.5.0/src/phoenix/server/api/routers}/__init__.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/api/routers/utils.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/api/types/DataQualityMetric.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/api/types/DatasetValues.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/api/types/DimensionDataType.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/api/types/DimensionShape.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/api/types/DimensionType.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/api/types/DimensionWithValue.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/api/types/DocumentEvaluationSummary.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/api/types/DocumentRetrievalMetrics.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/api/types/EmbeddingMetadata.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/api/types/Evaluation.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/api/types/EvaluationSummary.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/api/types/EventMetadata.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/api/types/ExportedFile.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/api/types/Functionality.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/api/types/MimeType.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/api/types/NumericRange.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/api/types/PerformanceMetric.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/api/types/PromptResponse.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/api/types/Retrieval.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/api/types/ScalarDriftMetricEnum.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/api/types/Segments.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/api/types/SortDir.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/api/types/ValidationResult.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/api/types/VectorDriftMetricEnum.py +0 -0
- {arize_phoenix-4.4.4rc6/src/phoenix/server/api/routers → arize_phoenix-4.5.0/src/phoenix/server/api/types}/__init__.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/grpc_server.py +0 -0
- {arize_phoenix-4.4.4rc6/src/phoenix/server/api/types → arize_phoenix-4.5.0/src/phoenix/server/openapi}/__init__.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/prometheus.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/static/apple-touch-icon-114x114.png +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/static/apple-touch-icon-120x120.png +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/static/apple-touch-icon-144x144.png +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/static/apple-touch-icon-152x152.png +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/static/apple-touch-icon-180x180.png +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/static/apple-touch-icon-72x72.png +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/static/apple-touch-icon-76x76.png +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/static/apple-touch-icon.png +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/static/favicon.ico +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/static/index.css +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/static/modernizr.js +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/telemetry.py +0 -0
- {arize_phoenix-4.4.4rc6/src/phoenix/server/openapi → arize_phoenix-4.5.0/src/phoenix/server/templates}/__init__.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/server/thread_server.py +0 -0
- {arize_phoenix-4.4.4rc6/src/phoenix/server/templates → arize_phoenix-4.5.0/src/phoenix/session}/__init__.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/session/data_extractor.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/session/evaluation.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/settings.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/trace/__init__.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/trace/attributes.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/trace/dsl/README.md +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/trace/dsl/__init__.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/trace/dsl/filter.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/trace/dsl/helpers.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/trace/dsl/query.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/trace/errors.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/trace/evaluation_conventions.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/trace/langchain/__init__.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/trace/langchain/instrumentor.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/trace/llama_index/__init__.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/trace/llama_index/callback.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/trace/openai/__init__.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/trace/openai/instrumentor.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/trace/otel.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/trace/projects.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/trace/span_json_decoder.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/trace/span_json_encoder.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/trace/utils.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/trace/v1/__init__.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/trace/v1/evaluation_pb2.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/trace/v1/evaluation_pb2.pyi +0 -0
- {arize_phoenix-4.4.4rc6/src/phoenix/session → arize_phoenix-4.5.0/src/phoenix/utilities}/__init__.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/utilities/deprecation.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/utilities/error_handling.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/utilities/logging.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/utilities/project.py +0 -0
- {arize_phoenix-4.4.4rc6 → arize_phoenix-4.5.0}/src/phoenix/utilities/span_store.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: arize-phoenix
|
|
3
|
-
Version: 4.
|
|
3
|
+
Version: 4.5.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
|
|
@@ -20,27 +20,25 @@ Requires-Python: <3.13,>=3.8
|
|
|
20
20
|
Requires-Dist: aioitertools
|
|
21
21
|
Requires-Dist: aiosqlite
|
|
22
22
|
Requires-Dist: alembic<2,>=1.3.0
|
|
23
|
-
Requires-Dist: arize-phoenix-evals>=0.13.1
|
|
24
23
|
Requires-Dist: cachetools
|
|
25
24
|
Requires-Dist: grpcio
|
|
26
25
|
Requires-Dist: hdbscan>=0.8.33
|
|
27
|
-
Requires-Dist: httpx
|
|
28
26
|
Requires-Dist: jinja2
|
|
29
27
|
Requires-Dist: numpy<2
|
|
30
28
|
Requires-Dist: openinference-instrumentation
|
|
31
29
|
Requires-Dist: openinference-instrumentation-langchain>=0.1.12
|
|
32
30
|
Requires-Dist: openinference-instrumentation-llama-index>=1.2.0
|
|
33
31
|
Requires-Dist: openinference-instrumentation-openai>=0.1.4
|
|
34
|
-
Requires-Dist: openinference-semantic-conventions>=0.1.
|
|
32
|
+
Requires-Dist: openinference-semantic-conventions>=0.1.5
|
|
35
33
|
Requires-Dist: opentelemetry-exporter-otlp
|
|
36
34
|
Requires-Dist: opentelemetry-proto>=1.12.0
|
|
37
35
|
Requires-Dist: opentelemetry-sdk
|
|
38
36
|
Requires-Dist: opentelemetry-semantic-conventions
|
|
39
|
-
Requires-Dist: pandas
|
|
37
|
+
Requires-Dist: pandas
|
|
40
38
|
Requires-Dist: protobuf<6.0,>=3.20
|
|
41
39
|
Requires-Dist: psutil
|
|
42
40
|
Requires-Dist: pyarrow
|
|
43
|
-
Requires-Dist:
|
|
41
|
+
Requires-Dist: requests
|
|
44
42
|
Requires-Dist: scikit-learn
|
|
45
43
|
Requires-Dist: scipy
|
|
46
44
|
Requires-Dist: sqlalchemy[asyncio]<3,>=2.0.4
|
|
@@ -79,7 +77,6 @@ Requires-Dist: llama-index>=0.10.3; extra == 'dev'
|
|
|
79
77
|
Requires-Dist: nbqa; extra == 'dev'
|
|
80
78
|
Requires-Dist: pandas-stubs==2.0.3.230814; (python_version < '3.9') and extra == 'dev'
|
|
81
79
|
Requires-Dist: pandas-stubs==2.2.2.240603; (python_version >= '3.9') and extra == 'dev'
|
|
82
|
-
Requires-Dist: pandas>=1.0; extra == 'dev'
|
|
83
80
|
Requires-Dist: pre-commit; extra == 'dev'
|
|
84
81
|
Requires-Dist: prometheus-client; extra == 'dev'
|
|
85
82
|
Requires-Dist: psycopg[binary]; extra == 'dev'
|
|
@@ -89,15 +86,12 @@ Requires-Dist: pytest-postgresql; extra == 'dev'
|
|
|
89
86
|
Requires-Dist: pytest==8.2.2; extra == 'dev'
|
|
90
87
|
Requires-Dist: ruff==0.4.9; extra == 'dev'
|
|
91
88
|
Requires-Dist: strawberry-graphql[debug-server,opentelemetry]==0.235.0; extra == 'dev'
|
|
92
|
-
Requires-Dist: tabulate; extra == 'dev'
|
|
93
|
-
Requires-Dist: types-tabulate; extra == 'dev'
|
|
94
89
|
Provides-Extra: evals
|
|
90
|
+
Requires-Dist: arize-phoenix-evals>=0.3.0; extra == 'evals'
|
|
95
91
|
Provides-Extra: experimental
|
|
92
|
+
Requires-Dist: tenacity; extra == 'experimental'
|
|
96
93
|
Provides-Extra: llama-index
|
|
97
|
-
Requires-Dist: llama-index
|
|
98
|
-
Requires-Dist: llama-index-llms-openai; extra == 'llama-index'
|
|
99
|
-
Requires-Dist: llama-index-readers-file; extra == 'llama-index'
|
|
100
|
-
Requires-Dist: llama-index==0.10.51; extra == 'llama-index'
|
|
94
|
+
Requires-Dist: llama-index==0.10.44; extra == 'llama-index'
|
|
101
95
|
Provides-Extra: pg
|
|
102
96
|
Requires-Dist: asyncpg; extra == 'pg'
|
|
103
97
|
Description-Content-Type: text/markdown
|
|
@@ -133,7 +127,7 @@ Description-Content-Type: text/markdown
|
|
|
133
127
|
|
|
134
128
|
Phoenix is an open-source AI observability platform designed for experimentation, evaluation, and troubleshooting. It provides:
|
|
135
129
|
|
|
136
|
-
- **_Tracing_** - Trace your LLM application's runtime using OpenTelemetry-based instrumentation.
|
|
130
|
+
- **_Tracing_** - Trace your LLM application's runtime using using OpenTelemetry-based instrumentation.
|
|
137
131
|
- **_Evaluation_** - Leverage LLMs to benchmark your application's performance using response and retrieval evals.
|
|
138
132
|
- **_Inference Analysis_** - Visualize inferences and embeddings using dimensionality reduction and clustering to identify drift and performance degradation.
|
|
139
133
|
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
|
|
30
30
|
Phoenix is an open-source AI observability platform designed for experimentation, evaluation, and troubleshooting. It provides:
|
|
31
31
|
|
|
32
|
-
- **_Tracing_** - Trace your LLM application's runtime using OpenTelemetry-based instrumentation.
|
|
32
|
+
- **_Tracing_** - Trace your LLM application's runtime using using OpenTelemetry-based instrumentation.
|
|
33
33
|
- **_Evaluation_** - Leverage LLMs to benchmark your application's performance using response and retrieval evals.
|
|
34
34
|
- **_Inference Analysis_** - Visualize inferences and embeddings using dimensionality reduction and clustering to identify drift and performance degradation.
|
|
35
35
|
|
|
@@ -87,7 +87,7 @@ referencing==0.34.0
|
|
|
87
87
|
# via
|
|
88
88
|
# jsonschema
|
|
89
89
|
# jsonschema-specifications
|
|
90
|
-
requests==2.
|
|
90
|
+
requests==2.31.0
|
|
91
91
|
# via streamlit
|
|
92
92
|
rich==13.7.1
|
|
93
93
|
# via streamlit
|
|
@@ -110,7 +110,7 @@ toml==0.10.2
|
|
|
110
110
|
# via streamlit
|
|
111
111
|
toolz==0.12.1
|
|
112
112
|
# via altair
|
|
113
|
-
tornado==6.4
|
|
113
|
+
tornado==6.4
|
|
114
114
|
# via streamlit
|
|
115
115
|
typing-extensions==4.11.0
|
|
116
116
|
# via
|
|
@@ -24,7 +24,7 @@ classifiers = [
|
|
|
24
24
|
dependencies = [
|
|
25
25
|
"scikit-learn",
|
|
26
26
|
"numpy<2", # https://github.com/scikit-learn-contrib/hdbscan/issues/642
|
|
27
|
-
"pandas
|
|
27
|
+
"pandas",
|
|
28
28
|
"jinja2",
|
|
29
29
|
"umap-learn",
|
|
30
30
|
"hdbscan>=0.8.33",
|
|
@@ -41,12 +41,12 @@ dependencies = [
|
|
|
41
41
|
"protobuf>=3.20, <6.0",
|
|
42
42
|
"grpcio",
|
|
43
43
|
"tqdm",
|
|
44
|
-
"
|
|
44
|
+
"requests",
|
|
45
45
|
"opentelemetry-sdk",
|
|
46
46
|
"opentelemetry-proto>=1.12.0", # needed to avoid this issue: https://github.com/Arize-ai/phoenix/issues/2695
|
|
47
47
|
"opentelemetry-exporter-otlp",
|
|
48
48
|
"opentelemetry-semantic-conventions",
|
|
49
|
-
"openinference-semantic-conventions>=0.1.
|
|
49
|
+
"openinference-semantic-conventions>=0.1.5",
|
|
50
50
|
"openinference-instrumentation",
|
|
51
51
|
"openinference-instrumentation-langchain>=0.1.12",
|
|
52
52
|
"openinference-instrumentation-llama-index>=1.2.0",
|
|
@@ -57,8 +57,6 @@ dependencies = [
|
|
|
57
57
|
"aioitertools",
|
|
58
58
|
"sqlean.py>=3.45.1",
|
|
59
59
|
"cachetools",
|
|
60
|
-
"python-multipart", # see https://www.starlette.io/#dependencies
|
|
61
|
-
"arize-phoenix-evals>=0.13.1",
|
|
62
60
|
]
|
|
63
61
|
dynamic = ["version"]
|
|
64
62
|
|
|
@@ -69,9 +67,6 @@ dev = [
|
|
|
69
67
|
"jupyter",
|
|
70
68
|
"nbqa",
|
|
71
69
|
"ruff==0.4.9",
|
|
72
|
-
"pandas>=1.0",
|
|
73
|
-
"tabulate", # used by DataFrame.to_markdown()
|
|
74
|
-
"types-tabulate",
|
|
75
70
|
"pandas-stubs==2.2.2.240603; python_version>='3.9'",
|
|
76
71
|
"pandas-stubs==2.0.3.230814; python_version<'3.9'",
|
|
77
72
|
"pytest==8.2.2",
|
|
@@ -90,13 +85,14 @@ dev = [
|
|
|
90
85
|
"anthropic",
|
|
91
86
|
"prometheus_client",
|
|
92
87
|
]
|
|
93
|
-
evals = [
|
|
94
|
-
|
|
88
|
+
evals = [
|
|
89
|
+
"arize-phoenix-evals>=0.3.0",
|
|
90
|
+
]
|
|
91
|
+
experimental = [
|
|
92
|
+
"tenacity",
|
|
93
|
+
]
|
|
95
94
|
llama-index = [
|
|
96
|
-
"llama-index==0.10.
|
|
97
|
-
"llama-index-readers-file",
|
|
98
|
-
"llama-index-llms-openai",
|
|
99
|
-
"llama-index-embeddings-openai",
|
|
95
|
+
"llama-index==0.10.44", # always pin to a version that keeps our notebooks working
|
|
100
96
|
]
|
|
101
97
|
pg = [
|
|
102
98
|
"asyncpg",
|
|
@@ -154,6 +150,7 @@ dependencies = [
|
|
|
154
150
|
"litellm>=1.0.3",
|
|
155
151
|
"openai>=1.0.0",
|
|
156
152
|
"tenacity",
|
|
153
|
+
"requests",
|
|
157
154
|
"protobuf==3.20", # version minimum (for tests)
|
|
158
155
|
"responses",
|
|
159
156
|
"tiktoken",
|
|
@@ -169,11 +166,11 @@ dependencies = [
|
|
|
169
166
|
dependencies = [
|
|
170
167
|
"mypy==1.10.0",
|
|
171
168
|
"tenacity",
|
|
172
|
-
"pandas>=
|
|
173
|
-
"pandas-stubs==2.0.3.230814",
|
|
174
|
-
"types-tabulate",
|
|
169
|
+
"pandas-stubs==2.2.2.240603; python_version>='3.9'",
|
|
170
|
+
"pandas-stubs==2.0.3.230814; python_version<'3.9'",
|
|
175
171
|
"types-psutil",
|
|
176
172
|
"types-tqdm",
|
|
173
|
+
"types-requests",
|
|
177
174
|
"types-protobuf",
|
|
178
175
|
"types-setuptools",
|
|
179
176
|
"types-cachetools",
|
|
@@ -190,21 +187,14 @@ dependencies = [
|
|
|
190
187
|
"opentelemetry-instrumentation-grpc",
|
|
191
188
|
"py-grpc-prometheus",
|
|
192
189
|
"strawberry-graphql[opentelemetry]==0.235.0", # need to pin version because we're monkey-patching
|
|
193
|
-
"requests", # this is needed to type-check third-party packages
|
|
194
190
|
]
|
|
195
191
|
|
|
196
|
-
[[tool.hatch.envs.type.matrix]]
|
|
197
|
-
python = ["3.8", "3.9", "3.12"]
|
|
198
|
-
|
|
199
192
|
[tool.hatch.envs.style]
|
|
200
193
|
detached = true
|
|
201
194
|
dependencies = [
|
|
202
195
|
"ruff==0.4.9",
|
|
203
196
|
]
|
|
204
197
|
|
|
205
|
-
[[tool.hatch.envs.style.matrix]]
|
|
206
|
-
python = ["3.8", "3.9", "3.12"]
|
|
207
|
-
|
|
208
198
|
[tool.hatch.envs.notebooks]
|
|
209
199
|
detached = true
|
|
210
200
|
dependencies = [
|
|
@@ -214,7 +204,6 @@ dependencies = [
|
|
|
214
204
|
[tool.hatch.envs.docs]
|
|
215
205
|
detached = true
|
|
216
206
|
dependencies = [
|
|
217
|
-
"pyment",
|
|
218
207
|
"interrogate",
|
|
219
208
|
]
|
|
220
209
|
|
|
@@ -303,14 +292,6 @@ dependencies = [
|
|
|
303
292
|
[tool.hatch.envs.gql.scripts]
|
|
304
293
|
build = 'strawberry export-schema phoenix.server.api.schema:schema > app/schema.graphql'
|
|
305
294
|
|
|
306
|
-
[tool.hatch.envs.openapi]
|
|
307
|
-
dependencies = [
|
|
308
|
-
"pyyaml",
|
|
309
|
-
]
|
|
310
|
-
|
|
311
|
-
[tool.hatch.envs.openapi.scripts]
|
|
312
|
-
build = 'python -m phoenix.server.api.openapi.main > schemas/openapi.yaml'
|
|
313
|
-
|
|
314
295
|
[tool.hatch.envs.proto]
|
|
315
296
|
detached = true
|
|
316
297
|
dependencies = [
|
|
@@ -345,7 +326,6 @@ disallow_untyped_defs = true
|
|
|
345
326
|
disallow_incomplete_defs = true
|
|
346
327
|
strict = true
|
|
347
328
|
exclude = [
|
|
348
|
-
"api_reference",
|
|
349
329
|
"packages/",
|
|
350
330
|
"src/phoenix/evals/",
|
|
351
331
|
"dist/",
|
|
@@ -367,7 +347,6 @@ module = [
|
|
|
367
347
|
"wrapt",
|
|
368
348
|
"langchain.*",
|
|
369
349
|
"litellm",
|
|
370
|
-
"litellm.*",
|
|
371
350
|
"nest_asyncio",
|
|
372
351
|
"opentelemetry.*",
|
|
373
352
|
"pyarrow",
|
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
import sys
|
|
2
|
+
from importlib.abc import Loader, MetaPathFinder
|
|
3
|
+
from importlib.machinery import ModuleSpec
|
|
4
|
+
from types import ModuleType
|
|
5
|
+
from typing import Any, Optional
|
|
6
|
+
|
|
1
7
|
from .inferences.fixtures import ExampleInferences, load_example
|
|
2
8
|
from .inferences.inferences import Inferences
|
|
3
9
|
from .inferences.schema import EmbeddingColumnNames, RetrievalEmbeddingColumnNames, Schema
|
|
@@ -51,3 +57,24 @@ __all__ = [
|
|
|
51
57
|
"Client",
|
|
52
58
|
"evals",
|
|
53
59
|
]
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
class PhoenixEvalsFinder(MetaPathFinder):
|
|
63
|
+
def find_spec(self, fullname: Any, path: Any, target: Any = None) -> Optional[ModuleSpec]:
|
|
64
|
+
if fullname == "phoenix.evals":
|
|
65
|
+
return ModuleSpec(fullname, PhoenixEvalsLoader())
|
|
66
|
+
return None
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
class PhoenixEvalsLoader(Loader):
|
|
70
|
+
def create_module(self, spec: ModuleSpec) -> None:
|
|
71
|
+
return None
|
|
72
|
+
|
|
73
|
+
def exec_module(self, module: ModuleType) -> None:
|
|
74
|
+
raise ImportError(
|
|
75
|
+
"The optional `phoenix.evals` package is not installed. "
|
|
76
|
+
"Please install `phoenix` with the `evals` extra: `pip install 'arize-phoenix[evals]'`."
|
|
77
|
+
)
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
sys.meta_path.append(PhoenixEvalsFinder())
|
|
@@ -2,9 +2,7 @@ import os
|
|
|
2
2
|
import tempfile
|
|
3
3
|
from logging import getLogger
|
|
4
4
|
from pathlib import Path
|
|
5
|
-
from typing import
|
|
6
|
-
|
|
7
|
-
from .utilities.re import parse_env_headers
|
|
5
|
+
from typing import List, Optional
|
|
8
6
|
|
|
9
7
|
logger = getLogger(__name__)
|
|
10
8
|
|
|
@@ -14,12 +12,6 @@ ENV_PHOENIX_GRPC_PORT = "PHOENIX_GRPC_PORT"
|
|
|
14
12
|
ENV_PHOENIX_HOST = "PHOENIX_HOST"
|
|
15
13
|
ENV_PHOENIX_HOST_ROOT_PATH = "PHOENIX_HOST_ROOT_PATH"
|
|
16
14
|
ENV_NOTEBOOK_ENV = "PHOENIX_NOTEBOOK_ENV"
|
|
17
|
-
ENV_PHOENIX_CLIENT_HEADERS = "PHOENIX_CLIENT_HEADERS"
|
|
18
|
-
"""
|
|
19
|
-
The headers to include in Phoenix client requests.
|
|
20
|
-
Note: This overrides OTEL_EXPORTER_OTLP_HEADERS in the case where
|
|
21
|
-
phoenix.trace instrumentors are used.
|
|
22
|
-
"""
|
|
23
15
|
ENV_PHOENIX_COLLECTOR_ENDPOINT = "PHOENIX_COLLECTOR_ENDPOINT"
|
|
24
16
|
"""
|
|
25
17
|
The endpoint traces and evals are sent to. This must be set if the Phoenix
|
|
@@ -113,15 +105,15 @@ GRPC_PORT = 4317
|
|
|
113
105
|
"""The port the gRPC server will run on after launch_app is called.
|
|
114
106
|
The default network port for OTLP/gRPC is 4317.
|
|
115
107
|
See https://opentelemetry.io/docs/specs/otlp/#otlpgrpc-default-port"""
|
|
116
|
-
|
|
108
|
+
GENERATED_DATASET_NAME_PREFIX = "phoenix_dataset_"
|
|
117
109
|
"""The prefix of datasets that are auto-assigned a name."""
|
|
118
110
|
WORKING_DIR = get_working_dir()
|
|
119
|
-
"""The work directory for saving, loading, and exporting
|
|
111
|
+
"""The work directory for saving, loading, and exporting datasets."""
|
|
120
112
|
|
|
121
113
|
ROOT_DIR = WORKING_DIR
|
|
122
114
|
EXPORT_DIR = ROOT_DIR / "exports"
|
|
123
|
-
|
|
124
|
-
|
|
115
|
+
DATASET_DIR = ROOT_DIR / "datasets"
|
|
116
|
+
TRACE_DATASET_DIR = ROOT_DIR / "trace_datasets"
|
|
125
117
|
|
|
126
118
|
|
|
127
119
|
def ensure_working_dir() -> None:
|
|
@@ -134,8 +126,8 @@ def ensure_working_dir() -> None:
|
|
|
134
126
|
for path in (
|
|
135
127
|
ROOT_DIR,
|
|
136
128
|
EXPORT_DIR,
|
|
137
|
-
|
|
138
|
-
|
|
129
|
+
DATASET_DIR,
|
|
130
|
+
TRACE_DATASET_DIR,
|
|
139
131
|
):
|
|
140
132
|
path.mkdir(parents=True, exist_ok=True)
|
|
141
133
|
except Exception as e:
|
|
@@ -227,31 +219,4 @@ def get_env_enable_prometheus() -> bool:
|
|
|
227
219
|
)
|
|
228
220
|
|
|
229
221
|
|
|
230
|
-
def get_env_client_headers() -> Optional[Dict[str, str]]:
|
|
231
|
-
if headers_str := os.getenv(ENV_PHOENIX_CLIENT_HEADERS):
|
|
232
|
-
return parse_env_headers(headers_str)
|
|
233
|
-
return None
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
def get_base_url() -> str:
|
|
237
|
-
host = get_env_host()
|
|
238
|
-
if host == "0.0.0.0":
|
|
239
|
-
host = "127.0.0.1"
|
|
240
|
-
base_url = get_env_collector_endpoint() or f"http://{host}:{get_env_port()}"
|
|
241
|
-
return base_url if base_url.endswith("/") else base_url + "/"
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
def get_web_base_url() -> str:
|
|
245
|
-
"""Return the web UI base URL.
|
|
246
|
-
|
|
247
|
-
Returns:
|
|
248
|
-
str: the web UI base URL
|
|
249
|
-
"""
|
|
250
|
-
from phoenix.session.session import active_session
|
|
251
|
-
|
|
252
|
-
if session := active_session():
|
|
253
|
-
return session.url
|
|
254
|
-
return get_base_url()
|
|
255
|
-
|
|
256
|
-
|
|
257
222
|
DEFAULT_PROJECT_NAME = "default"
|
|
@@ -7,73 +7,73 @@ from .embedding_dimension import EmbeddingDimension
|
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
def _get_embedding_dimensions(
|
|
10
|
-
|
|
10
|
+
primary_dataset: Inferences, reference_dataset: Optional[Inferences]
|
|
11
11
|
) -> List[EmbeddingDimension]:
|
|
12
12
|
embedding_dimensions: List[EmbeddingDimension] = []
|
|
13
13
|
embedding_features: EmbeddingFeatures = {}
|
|
14
14
|
|
|
15
15
|
primary_embedding_features: Optional[EmbeddingFeatures] = (
|
|
16
|
-
|
|
16
|
+
primary_dataset.schema.embedding_feature_column_names
|
|
17
17
|
)
|
|
18
18
|
if primary_embedding_features is not None:
|
|
19
19
|
embedding_features.update(primary_embedding_features)
|
|
20
20
|
primary_prompt_column_names: Optional[EmbeddingColumnNames] = (
|
|
21
|
-
|
|
21
|
+
primary_dataset.schema.prompt_column_names
|
|
22
22
|
)
|
|
23
23
|
if primary_prompt_column_names is not None:
|
|
24
24
|
embedding_features.update({"prompt": primary_prompt_column_names})
|
|
25
25
|
primary_response_column_names: Optional[Union[str, EmbeddingColumnNames]] = (
|
|
26
|
-
|
|
26
|
+
primary_dataset.schema.response_column_names
|
|
27
27
|
)
|
|
28
28
|
if isinstance(primary_response_column_names, EmbeddingColumnNames):
|
|
29
29
|
embedding_features.update({"response": primary_response_column_names})
|
|
30
30
|
|
|
31
|
-
if
|
|
31
|
+
if reference_dataset is not None:
|
|
32
32
|
reference_embedding_features: Optional[EmbeddingFeatures] = (
|
|
33
|
-
|
|
33
|
+
reference_dataset.schema.embedding_feature_column_names
|
|
34
34
|
)
|
|
35
35
|
if reference_embedding_features is not None:
|
|
36
36
|
embedding_features.update(reference_embedding_features)
|
|
37
37
|
reference_prompt_column_names: Optional[EmbeddingColumnNames] = (
|
|
38
|
-
|
|
38
|
+
reference_dataset.schema.prompt_column_names
|
|
39
39
|
)
|
|
40
40
|
if reference_prompt_column_names is not None:
|
|
41
41
|
embedding_features.update({"prompt": reference_prompt_column_names})
|
|
42
42
|
reference_response_column_names: Optional[Union[str, EmbeddingColumnNames]] = (
|
|
43
|
-
|
|
43
|
+
reference_dataset.schema.response_column_names
|
|
44
44
|
)
|
|
45
45
|
if isinstance(reference_response_column_names, EmbeddingColumnNames):
|
|
46
46
|
embedding_features.update({"response": reference_response_column_names})
|
|
47
47
|
|
|
48
48
|
for embedding_feature, embedding_column_names in embedding_features.items():
|
|
49
49
|
embedding_dimensions.append(EmbeddingDimension(name=embedding_feature))
|
|
50
|
-
if
|
|
51
|
-
|
|
52
|
-
embedding_feature, embedding_column_names,
|
|
50
|
+
if reference_dataset is not None:
|
|
51
|
+
_check_embedding_vector_lengths_match_across_datasets(
|
|
52
|
+
embedding_feature, embedding_column_names, primary_dataset, reference_dataset
|
|
53
53
|
)
|
|
54
54
|
|
|
55
55
|
return embedding_dimensions
|
|
56
56
|
|
|
57
57
|
|
|
58
|
-
def
|
|
58
|
+
def _check_embedding_vector_lengths_match_across_datasets(
|
|
59
59
|
embedding_feature_name: str,
|
|
60
60
|
embedding_column_names: EmbeddingColumnNames,
|
|
61
|
-
|
|
62
|
-
|
|
61
|
+
primary_dataset: Inferences,
|
|
62
|
+
reference_dataset: Inferences,
|
|
63
63
|
) -> None:
|
|
64
64
|
"""
|
|
65
65
|
Ensure that for each embedding feature, the vector lengths match across the primary
|
|
66
|
-
and reference
|
|
66
|
+
and reference datasets which is required for calculating embedding drift (vector distance)
|
|
67
67
|
"""
|
|
68
68
|
primary_vector_length = _get_column_vector_length(
|
|
69
|
-
|
|
69
|
+
primary_dataset, embedding_column_names.vector_column_name
|
|
70
70
|
)
|
|
71
71
|
reference_vector_length = _get_column_vector_length(
|
|
72
|
-
|
|
72
|
+
reference_dataset, embedding_column_names.vector_column_name
|
|
73
73
|
)
|
|
74
74
|
|
|
75
|
-
# if one of the
|
|
76
|
-
# just consider this as missing from one of the
|
|
75
|
+
# if one of the datasets doesn't have the embedding column at all, which is fine since we
|
|
76
|
+
# just consider this as missing from one of the datasets and won't need to worry about
|
|
77
77
|
# calculating drift
|
|
78
78
|
if primary_vector_length is None or reference_vector_length is None:
|
|
79
79
|
return
|
|
@@ -81,23 +81,23 @@ def _check_embedding_vector_lengths_match_across_inference_sets(
|
|
|
81
81
|
if primary_vector_length != reference_vector_length:
|
|
82
82
|
raise ValueError(
|
|
83
83
|
f"Embedding vector length must match for "
|
|
84
|
-
f"both
|
|
84
|
+
f"both datasets; embedding_feature={embedding_feature_name} "
|
|
85
85
|
f"vector_column={embedding_column_names.vector_column_name}"
|
|
86
86
|
)
|
|
87
87
|
|
|
88
88
|
|
|
89
89
|
def _get_column_vector_length(
|
|
90
|
-
|
|
90
|
+
dataset: Inferences, embedding_vector_column_name: str
|
|
91
91
|
) -> Optional[int]:
|
|
92
92
|
"""
|
|
93
|
-
Because a
|
|
94
|
-
of the vectors for any given embedding feature in the
|
|
93
|
+
Because a dataset has already been constructed, we can assume that the lengths
|
|
94
|
+
of the vectors for any given embedding feature in the dataset are the same.
|
|
95
95
|
Returns the length a vector by getting the length first non-null vector.
|
|
96
96
|
"""
|
|
97
|
-
if embedding_vector_column_name not in
|
|
97
|
+
if embedding_vector_column_name not in dataset.dataframe:
|
|
98
98
|
return None
|
|
99
99
|
|
|
100
|
-
column =
|
|
100
|
+
column = dataset.dataframe[embedding_vector_column_name]
|
|
101
101
|
|
|
102
102
|
for row in column:
|
|
103
103
|
# None/NaN is a valid entry for a row and represents the fact that the
|