arize-phoenix 4.5.0__tar.gz → 4.6.2__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.5.0 → arize_phoenix-4.6.2}/PKG-INFO +16 -8
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/README.md +1 -1
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/examples/manually-instrumented-chatbot/frontend/requirements.txt +2 -2
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/pyproject.toml +37 -14
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/__init__.py +0 -27
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/config.py +42 -7
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/core/model.py +25 -25
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/core/model_schema.py +64 -62
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/core/model_schema_adapter.py +27 -25
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/datetime_utils.py +4 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/db/bulk_inserter.py +54 -14
- arize_phoenix-4.6.2/src/phoenix/db/insertion/dataset.py +237 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/db/insertion/evaluation.py +10 -10
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/db/insertion/helpers.py +17 -14
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/db/insertion/span.py +3 -3
- arize_phoenix-4.6.2/src/phoenix/db/migrations/types.py +29 -0
- arize_phoenix-4.6.2/src/phoenix/db/migrations/versions/10460e46d750_datasets.py +291 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/db/migrations/versions/cf03bd6bae1d_init.py +2 -28
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/db/models.py +236 -4
- arize_phoenix-4.6.2/src/phoenix/experiments/__init__.py +6 -0
- arize_phoenix-4.6.2/src/phoenix/experiments/evaluators/__init__.py +29 -0
- arize_phoenix-4.6.2/src/phoenix/experiments/evaluators/base.py +153 -0
- arize_phoenix-4.6.2/src/phoenix/experiments/evaluators/code_evaluators.py +99 -0
- arize_phoenix-4.6.2/src/phoenix/experiments/evaluators/llm_evaluators.py +244 -0
- arize_phoenix-4.6.2/src/phoenix/experiments/evaluators/utils.py +186 -0
- arize_phoenix-4.6.2/src/phoenix/experiments/functions.py +757 -0
- arize_phoenix-4.6.2/src/phoenix/experiments/tracing.py +85 -0
- arize_phoenix-4.6.2/src/phoenix/experiments/types.py +753 -0
- arize_phoenix-4.6.2/src/phoenix/experiments/utils.py +24 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/inferences/fixtures.py +23 -23
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/inferences/inferences.py +7 -7
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/inferences/validation.py +1 -1
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/api/context.py +20 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/api/dataloaders/__init__.py +20 -0
- arize_phoenix-4.6.2/src/phoenix/server/api/dataloaders/average_experiment_run_latency.py +54 -0
- arize_phoenix-4.6.2/src/phoenix/server/api/dataloaders/dataset_example_revisions.py +100 -0
- arize_phoenix-4.6.2/src/phoenix/server/api/dataloaders/dataset_example_spans.py +43 -0
- arize_phoenix-4.6.2/src/phoenix/server/api/dataloaders/experiment_annotation_summaries.py +85 -0
- arize_phoenix-4.6.2/src/phoenix/server/api/dataloaders/experiment_error_rates.py +43 -0
- arize_phoenix-4.6.2/src/phoenix/server/api/dataloaders/experiment_run_counts.py +42 -0
- arize_phoenix-4.6.2/src/phoenix/server/api/dataloaders/experiment_sequence_number.py +49 -0
- arize_phoenix-4.6.2/src/phoenix/server/api/dataloaders/project_by_name.py +31 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/api/dataloaders/span_descendants.py +2 -3
- arize_phoenix-4.6.2/src/phoenix/server/api/dataloaders/span_projects.py +33 -0
- arize_phoenix-4.6.2/src/phoenix/server/api/dataloaders/trace_row_ids.py +39 -0
- arize_phoenix-4.6.2/src/phoenix/server/api/helpers/dataset_helpers.py +179 -0
- arize_phoenix-4.6.2/src/phoenix/server/api/input_types/AddExamplesToDatasetInput.py +16 -0
- arize_phoenix-4.6.2/src/phoenix/server/api/input_types/AddSpansToDatasetInput.py +14 -0
- arize_phoenix-4.6.2/src/phoenix/server/api/input_types/ClearProjectInput.py +15 -0
- arize_phoenix-4.6.2/src/phoenix/server/api/input_types/CreateDatasetInput.py +12 -0
- arize_phoenix-4.6.2/src/phoenix/server/api/input_types/DatasetExampleInput.py +14 -0
- arize_phoenix-4.6.2/src/phoenix/server/api/input_types/DatasetSort.py +17 -0
- arize_phoenix-4.6.2/src/phoenix/server/api/input_types/DatasetVersionSort.py +16 -0
- arize_phoenix-4.6.2/src/phoenix/server/api/input_types/DeleteDatasetExamplesInput.py +13 -0
- arize_phoenix-4.6.2/src/phoenix/server/api/input_types/DeleteDatasetInput.py +7 -0
- arize_phoenix-4.6.2/src/phoenix/server/api/input_types/DeleteExperimentsInput.py +9 -0
- arize_phoenix-4.6.2/src/phoenix/server/api/input_types/PatchDatasetExamplesInput.py +35 -0
- arize_phoenix-4.6.2/src/phoenix/server/api/input_types/PatchDatasetInput.py +14 -0
- arize_phoenix-4.6.2/src/phoenix/server/api/mutations/__init__.py +13 -0
- arize_phoenix-4.6.2/src/phoenix/server/api/mutations/auth.py +11 -0
- arize_phoenix-4.6.2/src/phoenix/server/api/mutations/dataset_mutations.py +520 -0
- arize_phoenix-4.6.2/src/phoenix/server/api/mutations/experiment_mutations.py +65 -0
- arize_phoenix-4.5.0/src/phoenix/server/api/types/ExportEventsMutation.py → arize_phoenix-4.6.2/src/phoenix/server/api/mutations/export_events_mutations.py +17 -14
- arize_phoenix-4.6.2/src/phoenix/server/api/mutations/project_mutations.py +47 -0
- arize_phoenix-4.6.2/src/phoenix/server/api/openapi/main.py +6 -0
- arize_phoenix-4.6.2/src/phoenix/server/api/openapi/schema.py +16 -0
- arize_phoenix-4.6.2/src/phoenix/server/api/queries.py +503 -0
- arize_phoenix-4.6.2/src/phoenix/server/api/routers/v1/__init__.py +86 -0
- arize_phoenix-4.6.2/src/phoenix/server/api/routers/v1/dataset_examples.py +178 -0
- arize_phoenix-4.6.2/src/phoenix/server/api/routers/v1/datasets.py +965 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/api/routers/v1/evaluations.py +8 -13
- arize_phoenix-4.6.2/src/phoenix/server/api/routers/v1/experiment_evaluations.py +143 -0
- arize_phoenix-4.6.2/src/phoenix/server/api/routers/v1/experiment_runs.py +220 -0
- arize_phoenix-4.6.2/src/phoenix/server/api/routers/v1/experiments.py +302 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/api/routers/v1/spans.py +9 -5
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/api/routers/v1/traces.py +1 -4
- arize_phoenix-4.6.2/src/phoenix/server/api/schema.py +13 -0
- arize_phoenix-4.6.2/src/phoenix/server/api/types/AnnotatorKind.py +10 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/api/types/Cluster.py +19 -19
- arize_phoenix-4.6.2/src/phoenix/server/api/types/CreateDatasetPayload.py +8 -0
- arize_phoenix-4.6.2/src/phoenix/server/api/types/Dataset.py +299 -0
- arize_phoenix-4.6.2/src/phoenix/server/api/types/DatasetExample.py +85 -0
- arize_phoenix-4.6.2/src/phoenix/server/api/types/DatasetExampleRevision.py +34 -0
- arize_phoenix-4.6.2/src/phoenix/server/api/types/DatasetVersion.py +14 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/api/types/Dimension.py +30 -29
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/api/types/EmbeddingDimension.py +40 -34
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/api/types/Event.py +16 -16
- arize_phoenix-4.6.2/src/phoenix/server/api/types/ExampleRevisionInterface.py +14 -0
- arize_phoenix-4.6.2/src/phoenix/server/api/types/Experiment.py +147 -0
- arize_phoenix-4.6.2/src/phoenix/server/api/types/ExperimentAnnotationSummary.py +13 -0
- arize_phoenix-4.6.2/src/phoenix/server/api/types/ExperimentComparison.py +19 -0
- arize_phoenix-4.6.2/src/phoenix/server/api/types/ExperimentRun.py +91 -0
- arize_phoenix-4.6.2/src/phoenix/server/api/types/ExperimentRunAnnotation.py +57 -0
- arize_phoenix-4.5.0/src/phoenix/server/api/types/Dataset.py → arize_phoenix-4.6.2/src/phoenix/server/api/types/Inferences.py +14 -14
- arize_phoenix-4.6.2/src/phoenix/server/api/types/InferencesRole.py +23 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/api/types/Model.py +43 -42
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/api/types/Project.py +26 -12
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/api/types/Span.py +79 -2
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/api/types/TimeSeries.py +6 -6
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/api/types/Trace.py +15 -4
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/api/types/UMAPPoints.py +1 -1
- arize_phoenix-4.6.2/src/phoenix/server/api/types/node.py +27 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/api/types/pagination.py +10 -52
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/app.py +103 -49
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/main.py +49 -27
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/openapi/docs.py +3 -0
- arize_phoenix-4.6.2/src/phoenix/server/static/index.js +8504 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/templates/index.html +1 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/services.py +15 -15
- arize_phoenix-4.6.2/src/phoenix/session/client.py +813 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/session/session.py +47 -37
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/trace/exporter.py +14 -9
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/trace/fixtures.py +133 -7
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/trace/schemas.py +1 -2
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/trace/span_evaluations.py +3 -3
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/trace/trace_dataset.py +6 -6
- arize_phoenix-4.6.2/src/phoenix/utilities/json.py +61 -0
- arize_phoenix-4.6.2/src/phoenix/utilities/re.py +50 -0
- arize_phoenix-4.6.2/src/phoenix/utilities/span_store.py +0 -0
- arize_phoenix-4.6.2/src/phoenix/version.py +1 -0
- arize_phoenix-4.5.0/src/phoenix/server/api/routers/v1/__init__.py +0 -11
- arize_phoenix-4.5.0/src/phoenix/server/api/schema.py +0 -314
- arize_phoenix-4.5.0/src/phoenix/server/api/types/DatasetRole.py +0 -23
- arize_phoenix-4.5.0/src/phoenix/server/api/types/node.py +0 -133
- arize_phoenix-4.5.0/src/phoenix/server/static/index.js +0 -7498
- arize_phoenix-4.5.0/src/phoenix/session/client.py +0 -254
- arize_phoenix-4.5.0/src/phoenix/version.py +0 -1
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/.gitignore +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/IP_NOTICE +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/LICENSE +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/examples/manually-instrumented-chatbot/chat-service/chat/__init__.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/examples/manually-instrumented-chatbot/chat-service/chat/app.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/examples/manually-instrumented-chatbot/chat-service/chat/types.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/examples/manually-instrumented-chatbot/frontend/Dockerfile +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/examples/manually-instrumented-chatbot/frontend/Makefile +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/examples/manually-instrumented-chatbot/frontend/__init__.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/examples/manually-instrumented-chatbot/frontend/pyproject.toml +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/examples/manually-instrumented-chatbot/frontend/schema.json +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/core/__init__.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/core/embedding_dimension.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/db/README.md +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/db/__init__.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/db/alembic.ini +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/db/engines.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/db/helpers.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/db/insertion/__init__.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/db/migrate.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/db/migrations/__init__.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/db/migrations/env.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/db/migrations/script.py.mako +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/exceptions.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/inferences/__init__.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/inferences/errors.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/inferences/schema.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/metrics/README.md +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/metrics/__init__.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/metrics/binning.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/metrics/metrics.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/metrics/mixins.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/metrics/retrieval_metrics.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/metrics/timeseries.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/metrics/wrappers.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/pointcloud/__init__.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/pointcloud/clustering.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/pointcloud/pointcloud.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/pointcloud/projectors.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/pointcloud/umap_parameters.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/py.typed +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/__init__.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/api/__init__.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/api/dataloaders/cache/__init__.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/api/dataloaders/cache/two_tier_cache.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/api/dataloaders/document_evaluation_summaries.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/api/dataloaders/document_evaluations.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/api/dataloaders/document_retrieval_metrics.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/api/dataloaders/evaluation_summaries.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/api/dataloaders/latency_ms_quantile.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/api/dataloaders/min_start_or_max_end_times.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/api/dataloaders/record_counts.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/api/dataloaders/span_evaluations.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/api/dataloaders/token_counts.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/api/dataloaders/trace_evaluations.py +0 -0
- /arize_phoenix-4.5.0/src/phoenix/server/api/helpers.py → /arize_phoenix-4.6.2/src/phoenix/server/api/helpers/__init__.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/api/input_types/ClusterInput.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/api/input_types/Coordinates.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/api/input_types/DataQualityMetricInput.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/api/input_types/DimensionFilter.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/api/input_types/DimensionInput.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/api/input_types/Granularity.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/api/input_types/PerformanceMetricInput.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/api/input_types/SpanSort.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/api/input_types/TimeRange.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/api/input_types/__init__.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/api/interceptor.py +0 -0
- {arize_phoenix-4.5.0/src/phoenix/server/api/routers → arize_phoenix-4.6.2/src/phoenix/server/api/openapi}/__init__.py +0 -0
- {arize_phoenix-4.5.0/src/phoenix/server/api/types → arize_phoenix-4.6.2/src/phoenix/server/api/routers}/__init__.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/api/routers/utils.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/api/types/DataQualityMetric.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/api/types/DatasetValues.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/api/types/DimensionDataType.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/api/types/DimensionShape.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/api/types/DimensionType.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/api/types/DimensionWithValue.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/api/types/DocumentEvaluationSummary.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/api/types/DocumentRetrievalMetrics.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/api/types/EmbeddingMetadata.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/api/types/Evaluation.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/api/types/EvaluationSummary.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/api/types/EventMetadata.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/api/types/ExportedFile.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/api/types/Functionality.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/api/types/MimeType.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/api/types/NumericRange.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/api/types/PerformanceMetric.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/api/types/PromptResponse.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/api/types/Retrieval.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/api/types/ScalarDriftMetricEnum.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/api/types/Segments.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/api/types/SortDir.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/api/types/ValidationResult.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/api/types/VectorDriftMetricEnum.py +0 -0
- {arize_phoenix-4.5.0/src/phoenix/server/openapi → arize_phoenix-4.6.2/src/phoenix/server/api/types}/__init__.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/grpc_server.py +0 -0
- {arize_phoenix-4.5.0/src/phoenix/server/templates → arize_phoenix-4.6.2/src/phoenix/server/openapi}/__init__.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/prometheus.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/static/apple-touch-icon-114x114.png +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/static/apple-touch-icon-120x120.png +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/static/apple-touch-icon-144x144.png +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/static/apple-touch-icon-152x152.png +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/static/apple-touch-icon-180x180.png +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/static/apple-touch-icon-72x72.png +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/static/apple-touch-icon-76x76.png +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/static/apple-touch-icon.png +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/static/favicon.ico +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/static/index.css +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/static/modernizr.js +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/telemetry.py +0 -0
- {arize_phoenix-4.5.0/src/phoenix/session → arize_phoenix-4.6.2/src/phoenix/server/templates}/__init__.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/server/thread_server.py +0 -0
- {arize_phoenix-4.5.0/src/phoenix/utilities → arize_phoenix-4.6.2/src/phoenix/session}/__init__.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/session/data_extractor.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/session/evaluation.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/settings.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/trace/__init__.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/trace/attributes.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/trace/dsl/README.md +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/trace/dsl/__init__.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/trace/dsl/filter.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/trace/dsl/helpers.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/trace/dsl/query.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/trace/errors.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/trace/evaluation_conventions.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/trace/langchain/__init__.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/trace/langchain/instrumentor.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/trace/llama_index/__init__.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/trace/llama_index/callback.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/trace/openai/__init__.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/trace/openai/instrumentor.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/trace/otel.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/trace/projects.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/trace/span_json_decoder.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/trace/span_json_encoder.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/trace/utils.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/trace/v1/__init__.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/trace/v1/evaluation_pb2.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/trace/v1/evaluation_pb2.pyi +0 -0
- /arize_phoenix-4.5.0/src/phoenix/utilities/span_store.py → /arize_phoenix-4.6.2/src/phoenix/utilities/__init__.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/utilities/deprecation.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/utilities/error_handling.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/utilities/logging.py +0 -0
- {arize_phoenix-4.5.0 → arize_phoenix-4.6.2}/src/phoenix/utilities/project.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: arize-phoenix
|
|
3
|
-
Version: 4.
|
|
3
|
+
Version: 4.6.2
|
|
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,25 +20,28 @@ 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
|
|
23
24
|
Requires-Dist: cachetools
|
|
24
25
|
Requires-Dist: grpcio
|
|
25
26
|
Requires-Dist: hdbscan>=0.8.33
|
|
27
|
+
Requires-Dist: httpx
|
|
26
28
|
Requires-Dist: jinja2
|
|
27
29
|
Requires-Dist: numpy<2
|
|
28
30
|
Requires-Dist: openinference-instrumentation
|
|
29
31
|
Requires-Dist: openinference-instrumentation-langchain>=0.1.12
|
|
30
32
|
Requires-Dist: openinference-instrumentation-llama-index>=1.2.0
|
|
31
33
|
Requires-Dist: openinference-instrumentation-openai>=0.1.4
|
|
32
|
-
Requires-Dist: openinference-semantic-conventions>=0.1.
|
|
34
|
+
Requires-Dist: openinference-semantic-conventions>=0.1.9
|
|
33
35
|
Requires-Dist: opentelemetry-exporter-otlp
|
|
34
36
|
Requires-Dist: opentelemetry-proto>=1.12.0
|
|
35
37
|
Requires-Dist: opentelemetry-sdk
|
|
36
38
|
Requires-Dist: opentelemetry-semantic-conventions
|
|
37
|
-
Requires-Dist: pandas
|
|
39
|
+
Requires-Dist: pandas>=1.0
|
|
38
40
|
Requires-Dist: protobuf<6.0,>=3.20
|
|
39
41
|
Requires-Dist: psutil
|
|
40
42
|
Requires-Dist: pyarrow
|
|
41
|
-
Requires-Dist:
|
|
43
|
+
Requires-Dist: python-multipart
|
|
44
|
+
Requires-Dist: pyyaml
|
|
42
45
|
Requires-Dist: scikit-learn
|
|
43
46
|
Requires-Dist: scipy
|
|
44
47
|
Requires-Dist: sqlalchemy[asyncio]<3,>=2.0.4
|
|
@@ -77,6 +80,7 @@ Requires-Dist: llama-index>=0.10.3; extra == 'dev'
|
|
|
77
80
|
Requires-Dist: nbqa; extra == 'dev'
|
|
78
81
|
Requires-Dist: pandas-stubs==2.0.3.230814; (python_version < '3.9') and extra == 'dev'
|
|
79
82
|
Requires-Dist: pandas-stubs==2.2.2.240603; (python_version >= '3.9') and extra == 'dev'
|
|
83
|
+
Requires-Dist: pandas>=1.0; extra == 'dev'
|
|
80
84
|
Requires-Dist: pre-commit; extra == 'dev'
|
|
81
85
|
Requires-Dist: prometheus-client; extra == 'dev'
|
|
82
86
|
Requires-Dist: psycopg[binary]; extra == 'dev'
|
|
@@ -86,12 +90,16 @@ Requires-Dist: pytest-postgresql; extra == 'dev'
|
|
|
86
90
|
Requires-Dist: pytest==8.2.2; extra == 'dev'
|
|
87
91
|
Requires-Dist: ruff==0.4.9; extra == 'dev'
|
|
88
92
|
Requires-Dist: strawberry-graphql[debug-server,opentelemetry]==0.235.0; extra == 'dev'
|
|
93
|
+
Requires-Dist: tabulate; extra == 'dev'
|
|
94
|
+
Requires-Dist: types-tabulate; extra == 'dev'
|
|
89
95
|
Provides-Extra: evals
|
|
90
|
-
Requires-Dist: arize-phoenix-evals>=0.3.0; extra == 'evals'
|
|
91
96
|
Provides-Extra: experimental
|
|
92
|
-
Requires-Dist: tenacity; extra == 'experimental'
|
|
93
97
|
Provides-Extra: llama-index
|
|
94
|
-
Requires-Dist: llama-index==0.
|
|
98
|
+
Requires-Dist: llama-index-agent-openai==0.2.7; extra == 'llama-index'
|
|
99
|
+
Requires-Dist: llama-index-embeddings-openai==0.1.10; extra == 'llama-index'
|
|
100
|
+
Requires-Dist: llama-index-llms-openai==0.1.24; extra == 'llama-index'
|
|
101
|
+
Requires-Dist: llama-index-readers-file==0.1.25; extra == 'llama-index'
|
|
102
|
+
Requires-Dist: llama-index==0.10.51; extra == 'llama-index'
|
|
95
103
|
Provides-Extra: pg
|
|
96
104
|
Requires-Dist: asyncpg; extra == 'pg'
|
|
97
105
|
Description-Content-Type: text/markdown
|
|
@@ -127,7 +135,7 @@ Description-Content-Type: text/markdown
|
|
|
127
135
|
|
|
128
136
|
Phoenix is an open-source AI observability platform designed for experimentation, evaluation, and troubleshooting. It provides:
|
|
129
137
|
|
|
130
|
-
- **_Tracing_** - Trace your LLM application's runtime using
|
|
138
|
+
- **_Tracing_** - Trace your LLM application's runtime using OpenTelemetry-based instrumentation.
|
|
131
139
|
- **_Evaluation_** - Leverage LLMs to benchmark your application's performance using response and retrieval evals.
|
|
132
140
|
- **_Inference Analysis_** - Visualize inferences and embeddings using dimensionality reduction and clustering to identify drift and performance degradation.
|
|
133
141
|
|
|
@@ -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
|
|
32
|
+
- **_Tracing_** - Trace your LLM application's runtime 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.32.2
|
|
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.1
|
|
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>=1.0",
|
|
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
|
+
"httpx",
|
|
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.9",
|
|
50
50
|
"openinference-instrumentation",
|
|
51
51
|
"openinference-instrumentation-langchain>=0.1.12",
|
|
52
52
|
"openinference-instrumentation-llama-index>=1.2.0",
|
|
@@ -57,6 +57,9 @@ 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
|
+
"pyyaml", # for OpenAPI
|
|
60
63
|
]
|
|
61
64
|
dynamic = ["version"]
|
|
62
65
|
|
|
@@ -67,6 +70,9 @@ dev = [
|
|
|
67
70
|
"jupyter",
|
|
68
71
|
"nbqa",
|
|
69
72
|
"ruff==0.4.9",
|
|
73
|
+
"pandas>=1.0",
|
|
74
|
+
"tabulate", # used by DataFrame.to_markdown()
|
|
75
|
+
"types-tabulate",
|
|
70
76
|
"pandas-stubs==2.2.2.240603; python_version>='3.9'",
|
|
71
77
|
"pandas-stubs==2.0.3.230814; python_version<'3.9'",
|
|
72
78
|
"pytest==8.2.2",
|
|
@@ -85,14 +91,14 @@ dev = [
|
|
|
85
91
|
"anthropic",
|
|
86
92
|
"prometheus_client",
|
|
87
93
|
]
|
|
88
|
-
evals = [
|
|
89
|
-
|
|
90
|
-
]
|
|
91
|
-
experimental = [
|
|
92
|
-
"tenacity",
|
|
93
|
-
]
|
|
94
|
+
evals = []
|
|
95
|
+
experimental = []
|
|
94
96
|
llama-index = [
|
|
95
|
-
"llama-index==0.10.
|
|
97
|
+
"llama-index==0.10.51", # always pin to a version that keeps our notebooks working
|
|
98
|
+
"llama-index-readers-file==0.1.25",
|
|
99
|
+
"llama-index-llms-openai==0.1.24",
|
|
100
|
+
"llama-index-embeddings-openai==0.1.10",
|
|
101
|
+
"llama-index-agent-openai==0.2.7",
|
|
96
102
|
]
|
|
97
103
|
pg = [
|
|
98
104
|
"asyncpg",
|
|
@@ -150,7 +156,6 @@ dependencies = [
|
|
|
150
156
|
"litellm>=1.0.3",
|
|
151
157
|
"openai>=1.0.0",
|
|
152
158
|
"tenacity",
|
|
153
|
-
"requests",
|
|
154
159
|
"protobuf==3.20", # version minimum (for tests)
|
|
155
160
|
"responses",
|
|
156
161
|
"tiktoken",
|
|
@@ -166,11 +171,11 @@ dependencies = [
|
|
|
166
171
|
dependencies = [
|
|
167
172
|
"mypy==1.10.0",
|
|
168
173
|
"tenacity",
|
|
169
|
-
"pandas
|
|
170
|
-
"pandas-stubs==2.0.3.230814
|
|
174
|
+
"pandas>=1.0",
|
|
175
|
+
"pandas-stubs==2.0.3.230814",
|
|
176
|
+
"types-tabulate",
|
|
171
177
|
"types-psutil",
|
|
172
178
|
"types-tqdm",
|
|
173
|
-
"types-requests",
|
|
174
179
|
"types-protobuf",
|
|
175
180
|
"types-setuptools",
|
|
176
181
|
"types-cachetools",
|
|
@@ -187,14 +192,21 @@ dependencies = [
|
|
|
187
192
|
"opentelemetry-instrumentation-grpc",
|
|
188
193
|
"py-grpc-prometheus",
|
|
189
194
|
"strawberry-graphql[opentelemetry]==0.235.0", # need to pin version because we're monkey-patching
|
|
195
|
+
"requests", # this is needed to type-check third-party packages
|
|
190
196
|
]
|
|
191
197
|
|
|
198
|
+
[[tool.hatch.envs.type.matrix]]
|
|
199
|
+
python = ["3.8", "3.9", "3.12"]
|
|
200
|
+
|
|
192
201
|
[tool.hatch.envs.style]
|
|
193
202
|
detached = true
|
|
194
203
|
dependencies = [
|
|
195
204
|
"ruff==0.4.9",
|
|
196
205
|
]
|
|
197
206
|
|
|
207
|
+
[[tool.hatch.envs.style.matrix]]
|
|
208
|
+
python = ["3.8", "3.9", "3.12"]
|
|
209
|
+
|
|
198
210
|
[tool.hatch.envs.notebooks]
|
|
199
211
|
detached = true
|
|
200
212
|
dependencies = [
|
|
@@ -204,6 +216,7 @@ dependencies = [
|
|
|
204
216
|
[tool.hatch.envs.docs]
|
|
205
217
|
detached = true
|
|
206
218
|
dependencies = [
|
|
219
|
+
"pyment",
|
|
207
220
|
"interrogate",
|
|
208
221
|
]
|
|
209
222
|
|
|
@@ -292,6 +305,14 @@ dependencies = [
|
|
|
292
305
|
[tool.hatch.envs.gql.scripts]
|
|
293
306
|
build = 'strawberry export-schema phoenix.server.api.schema:schema > app/schema.graphql'
|
|
294
307
|
|
|
308
|
+
[tool.hatch.envs.openapi]
|
|
309
|
+
dependencies = [
|
|
310
|
+
"pyyaml",
|
|
311
|
+
]
|
|
312
|
+
|
|
313
|
+
[tool.hatch.envs.openapi.scripts]
|
|
314
|
+
build = 'python -m phoenix.server.api.openapi.main > schemas/openapi.yaml'
|
|
315
|
+
|
|
295
316
|
[tool.hatch.envs.proto]
|
|
296
317
|
detached = true
|
|
297
318
|
dependencies = [
|
|
@@ -326,6 +347,7 @@ disallow_untyped_defs = true
|
|
|
326
347
|
disallow_incomplete_defs = true
|
|
327
348
|
strict = true
|
|
328
349
|
exclude = [
|
|
350
|
+
"api_reference",
|
|
329
351
|
"packages/",
|
|
330
352
|
"src/phoenix/evals/",
|
|
331
353
|
"dist/",
|
|
@@ -347,6 +369,7 @@ module = [
|
|
|
347
369
|
"wrapt",
|
|
348
370
|
"langchain.*",
|
|
349
371
|
"litellm",
|
|
372
|
+
"litellm.*",
|
|
350
373
|
"nest_asyncio",
|
|
351
374
|
"opentelemetry.*",
|
|
352
375
|
"pyarrow",
|
|
@@ -1,9 +1,3 @@
|
|
|
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
|
-
|
|
7
1
|
from .inferences.fixtures import ExampleInferences, load_example
|
|
8
2
|
from .inferences.inferences import Inferences
|
|
9
3
|
from .inferences.schema import EmbeddingColumnNames, RetrievalEmbeddingColumnNames, Schema
|
|
@@ -57,24 +51,3 @@ __all__ = [
|
|
|
57
51
|
"Client",
|
|
58
52
|
"evals",
|
|
59
53
|
]
|
|
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,7 +2,9 @@ import os
|
|
|
2
2
|
import tempfile
|
|
3
3
|
from logging import getLogger
|
|
4
4
|
from pathlib import Path
|
|
5
|
-
from typing import List, Optional
|
|
5
|
+
from typing import Dict, List, Optional
|
|
6
|
+
|
|
7
|
+
from .utilities.re import parse_env_headers
|
|
6
8
|
|
|
7
9
|
logger = getLogger(__name__)
|
|
8
10
|
|
|
@@ -12,6 +14,12 @@ ENV_PHOENIX_GRPC_PORT = "PHOENIX_GRPC_PORT"
|
|
|
12
14
|
ENV_PHOENIX_HOST = "PHOENIX_HOST"
|
|
13
15
|
ENV_PHOENIX_HOST_ROOT_PATH = "PHOENIX_HOST_ROOT_PATH"
|
|
14
16
|
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
|
+
"""
|
|
15
23
|
ENV_PHOENIX_COLLECTOR_ENDPOINT = "PHOENIX_COLLECTOR_ENDPOINT"
|
|
16
24
|
"""
|
|
17
25
|
The endpoint traces and evals are sent to. This must be set if the Phoenix
|
|
@@ -105,15 +113,15 @@ GRPC_PORT = 4317
|
|
|
105
113
|
"""The port the gRPC server will run on after launch_app is called.
|
|
106
114
|
The default network port for OTLP/gRPC is 4317.
|
|
107
115
|
See https://opentelemetry.io/docs/specs/otlp/#otlpgrpc-default-port"""
|
|
108
|
-
|
|
116
|
+
GENERATED_INFERENCES_NAME_PREFIX = "phoenix_inferences_"
|
|
109
117
|
"""The prefix of datasets that are auto-assigned a name."""
|
|
110
118
|
WORKING_DIR = get_working_dir()
|
|
111
|
-
"""The work directory for saving, loading, and exporting
|
|
119
|
+
"""The work directory for saving, loading, and exporting data."""
|
|
112
120
|
|
|
113
121
|
ROOT_DIR = WORKING_DIR
|
|
114
122
|
EXPORT_DIR = ROOT_DIR / "exports"
|
|
115
|
-
|
|
116
|
-
|
|
123
|
+
INFERENCES_DIR = ROOT_DIR / "inferences"
|
|
124
|
+
TRACE_DATASETS_DIR = ROOT_DIR / "trace_datasets"
|
|
117
125
|
|
|
118
126
|
|
|
119
127
|
def ensure_working_dir() -> None:
|
|
@@ -126,8 +134,8 @@ def ensure_working_dir() -> None:
|
|
|
126
134
|
for path in (
|
|
127
135
|
ROOT_DIR,
|
|
128
136
|
EXPORT_DIR,
|
|
129
|
-
|
|
130
|
-
|
|
137
|
+
INFERENCES_DIR,
|
|
138
|
+
TRACE_DATASETS_DIR,
|
|
131
139
|
):
|
|
132
140
|
path.mkdir(parents=True, exist_ok=True)
|
|
133
141
|
except Exception as e:
|
|
@@ -219,4 +227,31 @@ def get_env_enable_prometheus() -> bool:
|
|
|
219
227
|
)
|
|
220
228
|
|
|
221
229
|
|
|
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
|
+
|
|
222
257
|
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_inferences: Inferences, reference_inferences: 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_inferences.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_inferences.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_inferences.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_inferences is not None:
|
|
32
32
|
reference_embedding_features: Optional[EmbeddingFeatures] = (
|
|
33
|
-
|
|
33
|
+
reference_inferences.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_inferences.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_inferences.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_inferences is not None:
|
|
51
|
+
_check_embedding_vector_lengths_match_across_inference_sets(
|
|
52
|
+
embedding_feature, embedding_column_names, primary_inferences, reference_inferences
|
|
53
53
|
)
|
|
54
54
|
|
|
55
55
|
return embedding_dimensions
|
|
56
56
|
|
|
57
57
|
|
|
58
|
-
def
|
|
58
|
+
def _check_embedding_vector_lengths_match_across_inference_sets(
|
|
59
59
|
embedding_feature_name: str,
|
|
60
60
|
embedding_column_names: EmbeddingColumnNames,
|
|
61
|
-
|
|
62
|
-
|
|
61
|
+
primary_inferences: Inferences,
|
|
62
|
+
reference_inferences: 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 inferences which is required for calculating embedding drift (vector distance)
|
|
67
67
|
"""
|
|
68
68
|
primary_vector_length = _get_column_vector_length(
|
|
69
|
-
|
|
69
|
+
primary_inferences, embedding_column_names.vector_column_name
|
|
70
70
|
)
|
|
71
71
|
reference_vector_length = _get_column_vector_length(
|
|
72
|
-
|
|
72
|
+
reference_inferences, 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 inferences doesn't have the embedding column at all, which is fine since we
|
|
76
|
+
# just consider this as missing from one of the inferences 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_datasets(
|
|
|
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 inference sets; 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
|
+
inferences: 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 inferences has already been constructed, we can assume that the lengths
|
|
94
|
+
of the vectors for any given embedding feature in the inferences 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 inferences.dataframe:
|
|
98
98
|
return None
|
|
99
99
|
|
|
100
|
-
column =
|
|
100
|
+
column = inferences.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
|