arize-phoenix 8.23.0__tar.gz → 8.24.1__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-8.23.0 → arize_phoenix-8.24.1}/PKG-INFO +1 -1
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/config.py +48 -2
- arize_phoenix-8.24.1/src/phoenix/db/facilitator.py +188 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/db/helpers.py +16 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/context.py +2 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/mutations/user_mutations.py +10 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/queries.py +3 -14
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/routers/v1/projects.py +119 -109
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/subscriptions.py +1 -1
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/app.py +7 -0
- arize_phoenix-8.24.1/src/phoenix/server/email/sender.py +125 -0
- arize_phoenix-8.24.1/src/phoenix/server/email/templates/welcome.html +12 -0
- arize_phoenix-8.24.1/src/phoenix/server/email/types.py +26 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/main.py +2 -1
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/static/.vite/manifest.json +9 -9
- arize_phoenix-8.23.0/src/phoenix/server/static/assets/components-D8xtf7Q6.js → arize_phoenix-8.24.1/src/phoenix/server/static/assets/components-B6cljCxu.js +1 -1
- arize_phoenix-8.23.0/src/phoenix/server/static/assets/index-CGfsCafL.js → arize_phoenix-8.24.1/src/phoenix/server/static/assets/index-DfHKoAV9.js +1 -1
- arize_phoenix-8.23.0/src/phoenix/server/static/assets/pages-BiUq97Df.js → arize_phoenix-8.24.1/src/phoenix/server/static/assets/pages-Dhitcl5V.js +2 -2
- arize_phoenix-8.24.1/src/phoenix/version.py +1 -0
- arize_phoenix-8.23.0/src/phoenix/db/facilitator.py +0 -155
- arize_phoenix-8.23.0/src/phoenix/server/email/sender.py +0 -97
- arize_phoenix-8.23.0/src/phoenix/server/email/types.py +0 -11
- arize_phoenix-8.23.0/src/phoenix/version.py +0 -1
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/.gitignore +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/IP_NOTICE +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/LICENSE +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/README.md +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/pyproject.toml +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/__init__.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/auth.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/core/__init__.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/core/embedding_dimension.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/core/model.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/core/model_schema.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/core/model_schema_adapter.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/datetime_utils.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/db/README.md +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/db/__init__.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/db/alembic.ini +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/db/bulk_inserter.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/db/engines.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/db/enums.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/db/insertion/__init__.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/db/insertion/constants.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/db/insertion/dataset.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/db/insertion/document_annotation.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/db/insertion/evaluation.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/db/insertion/helpers.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/db/insertion/span.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/db/insertion/span_annotation.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/db/insertion/trace_annotation.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/db/insertion/types.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/db/migrate.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/db/migrations/__init__.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/db/migrations/data_migration_scripts/__init__.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/db/migrations/data_migration_scripts/populate_project_sessions.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/db/migrations/env.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/db/migrations/script.py.mako +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/db/migrations/versions/10460e46d750_datasets.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/db/migrations/versions/3be8647b87d8_add_token_columns_to_spans_table.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/db/migrations/versions/4ded9e43755f_create_project_sessions_table.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/db/migrations/versions/bc8fea3c2bc8_add_prompt_tables.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/db/migrations/versions/cd164e83824f_users_and_tokens.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/db/migrations/versions/cf03bd6bae1d_init.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/db/models.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/db/types/__init__.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/db/types/identifier.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/db/types/model_provider.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/exceptions.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/experiments/__init__.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/experiments/evaluators/__init__.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/experiments/evaluators/base.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/experiments/evaluators/code_evaluators.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/experiments/evaluators/llm_evaluators.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/experiments/evaluators/utils.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/experiments/functions.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/experiments/tracing.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/experiments/types.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/experiments/utils.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/inferences/__init__.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/inferences/errors.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/inferences/fixtures.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/inferences/inferences.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/inferences/schema.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/inferences/validation.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/logging/__init__.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/logging/_config.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/logging/_filter.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/logging/_formatter.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/metrics/README.md +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/metrics/__init__.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/metrics/binning.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/metrics/metrics.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/metrics/mixins.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/metrics/retrieval_metrics.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/metrics/timeseries.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/metrics/wrappers.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/pointcloud/__init__.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/pointcloud/clustering.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/pointcloud/pointcloud.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/pointcloud/projectors.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/pointcloud/umap_parameters.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/py.typed +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/__init__.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/README.md +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/__init__.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/auth.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/dataloaders/__init__.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/dataloaders/annotation_summaries.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/dataloaders/average_experiment_run_latency.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/dataloaders/cache/__init__.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/dataloaders/cache/two_tier_cache.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/dataloaders/dataset_example_revisions.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/dataloaders/dataset_example_spans.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/dataloaders/document_evaluation_summaries.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/dataloaders/document_evaluations.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/dataloaders/document_retrieval_metrics.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/dataloaders/experiment_annotation_summaries.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/dataloaders/experiment_error_rates.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/dataloaders/experiment_run_annotations.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/dataloaders/experiment_run_counts.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/dataloaders/experiment_sequence_number.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/dataloaders/latency_ms_quantile.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/dataloaders/min_start_or_max_end_times.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/dataloaders/num_child_spans.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/dataloaders/num_spans_per_trace.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/dataloaders/project_by_name.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/dataloaders/prompt_version_sequence_number.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/dataloaders/record_counts.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/dataloaders/session_io.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/dataloaders/session_num_traces.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/dataloaders/session_num_traces_with_error.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/dataloaders/session_token_usages.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/dataloaders/session_trace_latency_ms_quantile.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/dataloaders/span_annotations.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/dataloaders/span_by_id.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/dataloaders/span_dataset_examples.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/dataloaders/span_descendants.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/dataloaders/span_projects.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/dataloaders/table_fields.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/dataloaders/token_counts.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/dataloaders/trace_by_trace_ids.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/dataloaders/trace_root_spans.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/dataloaders/user_roles.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/dataloaders/users.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/exceptions.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/helpers/__init__.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/helpers/dataset_helpers.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/helpers/experiment_run_filters.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/helpers/playground_clients.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/helpers/playground_registry.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/helpers/playground_spans.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/helpers/prompts/__init__.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/helpers/prompts/conversions/__init__.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/helpers/prompts/conversions/anthropic.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/helpers/prompts/conversions/openai.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/helpers/prompts/models.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/input_types/AddExamplesToDatasetInput.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/input_types/AddSpansToDatasetInput.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/input_types/ChatCompletionInput.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/input_types/ChatCompletionMessageInput.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/input_types/ClearProjectInput.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/input_types/ClusterInput.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/input_types/Coordinates.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/input_types/CreateDatasetInput.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/input_types/CreateSpanAnnotationInput.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/input_types/CreateTraceAnnotationInput.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/input_types/DataQualityMetricInput.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/input_types/DatasetExampleInput.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/input_types/DatasetSort.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/input_types/DatasetVersionSort.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/input_types/DeleteAnnotationsInput.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/input_types/DeleteDatasetExamplesInput.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/input_types/DeleteDatasetInput.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/input_types/DeleteExperimentsInput.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/input_types/DimensionFilter.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/input_types/DimensionInput.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/input_types/GenerativeModelInput.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/input_types/Granularity.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/input_types/InvocationParameters.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/input_types/PatchAnnotationInput.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/input_types/PatchDatasetExamplesInput.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/input_types/PatchDatasetInput.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/input_types/PerformanceMetricInput.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/input_types/ProjectSessionSort.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/input_types/PromptTemplateOptions.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/input_types/PromptVersionInput.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/input_types/SpanAnnotationSort.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/input_types/SpanSort.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/input_types/TimeRange.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/input_types/TraceAnnotationSort.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/input_types/UserRoleInput.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/input_types/__init__.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/interceptor.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/mutations/__init__.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/mutations/api_key_mutations.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/mutations/chat_mutations.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/mutations/dataset_mutations.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/mutations/experiment_mutations.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/mutations/export_events_mutations.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/mutations/project_mutations.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/mutations/prompt_label_mutations.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/mutations/prompt_mutations.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/mutations/prompt_version_tag_mutations.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/mutations/span_annotations_mutations.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/mutations/trace_annotations_mutations.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/mutations/trace_mutations.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/openapi/__init__.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/openapi/main.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/openapi/schema.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/routers/__init__.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/routers/auth.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/routers/embeddings.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/routers/oauth2.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/routers/utils.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/routers/v1/__init__.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/routers/v1/datasets.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/routers/v1/evaluations.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/routers/v1/experiment_evaluations.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/routers/v1/experiment_runs.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/routers/v1/experiments.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/routers/v1/models.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/routers/v1/prompts.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/routers/v1/spans.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/routers/v1/traces.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/routers/v1/utils.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/schema.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/Annotation.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/AnnotationSummary.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/AnnotatorKind.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/ApiKey.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/AuthMethod.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/ChatCompletionMessageRole.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/ChatCompletionSubscriptionPayload.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/Cluster.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/CreateDatasetPayload.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/DataQualityMetric.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/Dataset.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/DatasetExample.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/DatasetExampleRevision.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/DatasetValues.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/DatasetVersion.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/Dimension.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/DimensionDataType.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/DimensionShape.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/DimensionType.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/DimensionWithValue.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/DocumentEvaluationSummary.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/DocumentRetrievalMetrics.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/EmbeddingDimension.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/EmbeddingMetadata.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/Evaluation.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/EvaluationSummary.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/Event.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/EventMetadata.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/ExampleRevisionInterface.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/Experiment.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/ExperimentAnnotationSummary.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/ExperimentComparison.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/ExperimentRun.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/ExperimentRunAnnotation.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/ExportedFile.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/Functionality.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/GenerativeModel.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/GenerativeProvider.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/Identifier.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/Inferences.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/InferencesRole.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/LabelFraction.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/MimeType.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/Model.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/NumericRange.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/PerformanceMetric.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/Project.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/ProjectSession.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/Prompt.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/PromptLabel.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/PromptResponse.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/PromptVersion.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/PromptVersionTag.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/PromptVersionTemplate.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/ResponseFormat.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/Retrieval.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/ScalarDriftMetricEnum.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/Segments.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/SortDir.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/Span.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/SpanAnnotation.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/SpanIOValue.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/SystemApiKey.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/TimeSeries.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/TokenUsage.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/ToolDefinition.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/Trace.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/TraceAnnotation.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/UMAPPoints.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/User.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/UserApiKey.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/UserRole.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/ValidationResult.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/VectorDriftMetricEnum.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/__init__.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/node.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/types/pagination.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/utils.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/bearer_auth.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/dml_event.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/dml_event_handler.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/email/__init__.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/email/templates/__init__.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/email/templates/password_reset.html +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/grpc_server.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/jwt_store.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/oauth2.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/openapi/__init__.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/prometheus.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/rate_limiters.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/static/apple-touch-icon-114x114.png +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/static/apple-touch-icon-120x120.png +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/static/apple-touch-icon-144x144.png +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/static/apple-touch-icon-152x152.png +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/static/apple-touch-icon-180x180.png +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/static/apple-touch-icon-72x72.png +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/static/apple-touch-icon-76x76.png +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/static/apple-touch-icon.png +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/static/assets/vendor-C3H3sezv.js +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/static/assets/vendor-Cg6lcjUC.css +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/static/assets/vendor-arizeai-DT8pwHfH.js +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/static/assets/vendor-codemirror-DvimrGxD.js +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/static/assets/vendor-recharts-DuSQBcYW.js +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/static/assets/vendor-shiki-i05Hmswh.js +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/static/assets/vendor-three-C5WAXd5r.js +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/static/favicon.ico +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/static/modernizr.js +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/telemetry.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/templates/__init__.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/templates/index.html +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/thread_server.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/types.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/services.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/session/__init__.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/session/client.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/session/data_extractor.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/session/evaluation.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/session/session.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/settings.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/trace/__init__.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/trace/attributes.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/trace/dsl/README.md +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/trace/dsl/__init__.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/trace/dsl/filter.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/trace/dsl/helpers.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/trace/dsl/query.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/trace/errors.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/trace/evaluation_conventions.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/trace/exporter.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/trace/fixtures.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/trace/otel.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/trace/projects.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/trace/schemas.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/trace/span_evaluations.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/trace/span_json_decoder.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/trace/span_json_encoder.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/trace/trace_dataset.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/trace/utils.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/trace/v1/__init__.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/trace/v1/evaluation_pb2.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/trace/v1/evaluation_pb2.pyi +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/utilities/__init__.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/utilities/client.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/utilities/deprecation.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/utilities/error_handling.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/utilities/json.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/utilities/logging.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/utilities/project.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/utilities/re.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/utilities/span_store.py +0 -0
- {arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/utilities/template_formatters.py +0 -0
|
@@ -8,10 +8,11 @@ from enum import Enum
|
|
|
8
8
|
from importlib.metadata import version
|
|
9
9
|
from pathlib import Path
|
|
10
10
|
from typing import Any, Optional, Union, cast, overload
|
|
11
|
-
from urllib.parse import quote_plus, urlparse
|
|
11
|
+
from urllib.parse import quote_plus, urljoin, urlparse
|
|
12
12
|
|
|
13
13
|
import wrapt
|
|
14
14
|
from email_validator import EmailNotValidError, validate_email
|
|
15
|
+
from starlette.datastructures import URL
|
|
15
16
|
|
|
16
17
|
from phoenix.utilities.logging import log_a_list
|
|
17
18
|
|
|
@@ -182,6 +183,19 @@ If the username or email address already exists in the database, the user record
|
|
|
182
183
|
modified, e.g., changed from non-admin to admin. Changing this environment variable for the next
|
|
183
184
|
startup will not undo any records created in previous startups.
|
|
184
185
|
"""
|
|
186
|
+
ENV_PHOENIX_ROOT_URL = "PHOENIX_ROOT_URL"
|
|
187
|
+
"""
|
|
188
|
+
This is the full URL used to access Phoenix from a web browser. This setting is important when
|
|
189
|
+
you have a reverse proxy in front of Phoenix. If the reverse proxy exposes Phoenix through a
|
|
190
|
+
sub-path, add that sub-path to the end of this URL setting.
|
|
191
|
+
|
|
192
|
+
WARNING: When a sub-path is needed, you must also specify the sub-path via the environment
|
|
193
|
+
variable PHOENIX_HOST_ROOT_PATH. Setting just this URL setting is not enough.
|
|
194
|
+
|
|
195
|
+
Examples:
|
|
196
|
+
- With a sub-path: "https://example.com/phoenix"
|
|
197
|
+
- Without a sub-path: "https://phoenix.example.com"
|
|
198
|
+
"""
|
|
185
199
|
|
|
186
200
|
|
|
187
201
|
# SMTP settings
|
|
@@ -828,7 +842,7 @@ def get_env_host() -> str:
|
|
|
828
842
|
|
|
829
843
|
|
|
830
844
|
def get_env_host_root_path() -> str:
|
|
831
|
-
if (host_root_path := getenv(ENV_PHOENIX_HOST_ROOT_PATH))
|
|
845
|
+
if not (host_root_path := getenv(ENV_PHOENIX_HOST_ROOT_PATH)):
|
|
832
846
|
return HOST_ROOT_PATH
|
|
833
847
|
if not host_root_path.startswith("/"):
|
|
834
848
|
raise ValueError(
|
|
@@ -894,7 +908,33 @@ def get_env_client_headers() -> dict[str, str]:
|
|
|
894
908
|
return headers
|
|
895
909
|
|
|
896
910
|
|
|
911
|
+
def get_env_root_url() -> URL:
|
|
912
|
+
"""
|
|
913
|
+
Get the URL used to access Phoenix from a web browser
|
|
914
|
+
|
|
915
|
+
Returns:
|
|
916
|
+
URL: The root URL of the Phoenix server
|
|
917
|
+
|
|
918
|
+
Note:
|
|
919
|
+
This is intended to replace the legacy `get_base_url()` helper function. In
|
|
920
|
+
particular, `get_env_collector_endpoint()` is really for the client and should be
|
|
921
|
+
deprecated on the server side.
|
|
922
|
+
"""
|
|
923
|
+
if root_url := getenv(ENV_PHOENIX_ROOT_URL):
|
|
924
|
+
result = urlparse(root_url)
|
|
925
|
+
if not result.scheme or not result.netloc:
|
|
926
|
+
raise ValueError(
|
|
927
|
+
f"The environment variable `{ENV_PHOENIX_ROOT_URL}` must be a valid URL."
|
|
928
|
+
)
|
|
929
|
+
return URL(root_url)
|
|
930
|
+
host = get_env_host()
|
|
931
|
+
if host == "0.0.0.0":
|
|
932
|
+
host = "127.0.0.1"
|
|
933
|
+
return URL(urljoin(f"http://{host}:{get_env_port()}", get_env_host_root_path()))
|
|
934
|
+
|
|
935
|
+
|
|
897
936
|
def get_base_url() -> str:
|
|
937
|
+
"""Deprecated: Use get_env_root_url() instead, but note the difference in behavior."""
|
|
898
938
|
host = get_env_host()
|
|
899
939
|
if host == "0.0.0.0":
|
|
900
940
|
host = "127.0.0.1"
|
|
@@ -1065,4 +1105,10 @@ def get_env_allowed_origins() -> Optional[list[str]]:
|
|
|
1065
1105
|
return allowed_origins.split(",")
|
|
1066
1106
|
|
|
1067
1107
|
|
|
1108
|
+
def verify_server_environment_variables() -> None:
|
|
1109
|
+
"""Verify that the environment variables are set correctly. Raises an error otherwise."""
|
|
1110
|
+
get_env_root_url()
|
|
1111
|
+
|
|
1112
|
+
|
|
1068
1113
|
SKLEARN_VERSION = cast(tuple[int, int], tuple(map(int, version("scikit-learn").split(".", 2)[:2])))
|
|
1114
|
+
PLAYGROUND_PROJECT_NAME = "playground"
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import asyncio
|
|
4
|
+
import logging
|
|
5
|
+
import secrets
|
|
6
|
+
from asyncio import gather
|
|
7
|
+
from functools import partial
|
|
8
|
+
from typing import Optional
|
|
9
|
+
|
|
10
|
+
from sqlalchemy import (
|
|
11
|
+
distinct,
|
|
12
|
+
insert,
|
|
13
|
+
select,
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
from phoenix.auth import (
|
|
17
|
+
DEFAULT_ADMIN_EMAIL,
|
|
18
|
+
DEFAULT_ADMIN_USERNAME,
|
|
19
|
+
DEFAULT_SECRET_LENGTH,
|
|
20
|
+
DEFAULT_SYSTEM_EMAIL,
|
|
21
|
+
DEFAULT_SYSTEM_USERNAME,
|
|
22
|
+
compute_password_hash,
|
|
23
|
+
)
|
|
24
|
+
from phoenix.config import (
|
|
25
|
+
get_env_admins,
|
|
26
|
+
get_env_default_admin_initial_password,
|
|
27
|
+
)
|
|
28
|
+
from phoenix.db import models
|
|
29
|
+
from phoenix.db.enums import COLUMN_ENUMS, UserRole
|
|
30
|
+
from phoenix.server.email.types import WelcomeEmailSender
|
|
31
|
+
from phoenix.server.types import DbSessionFactory
|
|
32
|
+
|
|
33
|
+
logger = logging.getLogger(__name__)
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
class Facilitator:
|
|
37
|
+
"""
|
|
38
|
+
Facilitates the creation of database records necessary for Phoenix to function. This includes
|
|
39
|
+
ensuring that all enum values are present in their respective tables, ensuring that all user
|
|
40
|
+
roles are present, and ensuring that the admin user has a password hash. These tasks will be
|
|
41
|
+
carried out as callbacks at the very beginning of Starlette's lifespan process.
|
|
42
|
+
"""
|
|
43
|
+
|
|
44
|
+
def __init__(
|
|
45
|
+
self,
|
|
46
|
+
*,
|
|
47
|
+
db: DbSessionFactory,
|
|
48
|
+
email_sender: Optional[WelcomeEmailSender] = None,
|
|
49
|
+
) -> None:
|
|
50
|
+
self._db = db
|
|
51
|
+
self._email_sender = email_sender
|
|
52
|
+
|
|
53
|
+
async def __call__(self) -> None:
|
|
54
|
+
for fn in (
|
|
55
|
+
_ensure_enums,
|
|
56
|
+
_ensure_user_roles,
|
|
57
|
+
partial(_ensure_admins, email_sender=self._email_sender),
|
|
58
|
+
):
|
|
59
|
+
await fn(self._db)
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
async def _ensure_enums(db: DbSessionFactory) -> None:
|
|
63
|
+
"""
|
|
64
|
+
Ensure that all enum values are present in their respective tables. If any values are missing,
|
|
65
|
+
they will be added. If any values are present in the database but not in the enum, an error will
|
|
66
|
+
be raised. This function is idempotent: it will not add duplicate values to the database.
|
|
67
|
+
"""
|
|
68
|
+
for column, enum in COLUMN_ENUMS.items():
|
|
69
|
+
table = column.class_
|
|
70
|
+
async with db() as session:
|
|
71
|
+
existing = set(
|
|
72
|
+
[_ async for _ in await session.stream_scalars(select(distinct(column)))]
|
|
73
|
+
)
|
|
74
|
+
expected = set(e.value for e in enum)
|
|
75
|
+
if unexpected := existing - expected:
|
|
76
|
+
raise ValueError(f"Unexpected values in {table.name}.{column.key}: {unexpected}")
|
|
77
|
+
if not (missing := expected - existing):
|
|
78
|
+
continue
|
|
79
|
+
await session.execute(insert(table), [{column.key: v} for v in missing])
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
async def _ensure_user_roles(db: DbSessionFactory) -> None:
|
|
83
|
+
"""
|
|
84
|
+
Ensure that the system and admin roles are present in the database. If they are not, they will
|
|
85
|
+
be added. The system user will have the email "system@localhost" and the admin user will have
|
|
86
|
+
the email "admin@localhost".
|
|
87
|
+
"""
|
|
88
|
+
async with db() as session:
|
|
89
|
+
role_ids = {
|
|
90
|
+
name: id_
|
|
91
|
+
async for name, id_ in await session.stream(
|
|
92
|
+
select(models.UserRole.name, models.UserRole.id)
|
|
93
|
+
)
|
|
94
|
+
}
|
|
95
|
+
existing_roles = [
|
|
96
|
+
name
|
|
97
|
+
async for name in await session.stream_scalars(
|
|
98
|
+
select(distinct(models.UserRole.name)).join_from(models.User, models.UserRole)
|
|
99
|
+
)
|
|
100
|
+
]
|
|
101
|
+
if (system_role := UserRole.SYSTEM.value) not in existing_roles and (
|
|
102
|
+
system_role_id := role_ids.get(system_role)
|
|
103
|
+
) is not None:
|
|
104
|
+
system_user = models.User(
|
|
105
|
+
user_role_id=system_role_id,
|
|
106
|
+
username=DEFAULT_SYSTEM_USERNAME,
|
|
107
|
+
email=DEFAULT_SYSTEM_EMAIL,
|
|
108
|
+
reset_password=False,
|
|
109
|
+
password_salt=secrets.token_bytes(DEFAULT_SECRET_LENGTH),
|
|
110
|
+
password_hash=secrets.token_bytes(DEFAULT_SECRET_LENGTH),
|
|
111
|
+
)
|
|
112
|
+
session.add(system_user)
|
|
113
|
+
if (admin_role := UserRole.ADMIN.value) not in existing_roles and (
|
|
114
|
+
admin_role_id := role_ids.get(admin_role)
|
|
115
|
+
) is not None:
|
|
116
|
+
salt = secrets.token_bytes(DEFAULT_SECRET_LENGTH)
|
|
117
|
+
password = get_env_default_admin_initial_password()
|
|
118
|
+
compute = partial(compute_password_hash, password=password, salt=salt)
|
|
119
|
+
loop = asyncio.get_running_loop()
|
|
120
|
+
hash_ = await loop.run_in_executor(None, compute)
|
|
121
|
+
admin_user = models.User(
|
|
122
|
+
user_role_id=admin_role_id,
|
|
123
|
+
username=DEFAULT_ADMIN_USERNAME,
|
|
124
|
+
email=DEFAULT_ADMIN_EMAIL,
|
|
125
|
+
password_salt=salt,
|
|
126
|
+
password_hash=hash_,
|
|
127
|
+
reset_password=True,
|
|
128
|
+
)
|
|
129
|
+
session.add(admin_user)
|
|
130
|
+
await session.flush()
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
async def _ensure_admins(
|
|
134
|
+
db: DbSessionFactory,
|
|
135
|
+
*,
|
|
136
|
+
email_sender: Optional[WelcomeEmailSender] = None,
|
|
137
|
+
) -> None:
|
|
138
|
+
"""
|
|
139
|
+
Ensure that all startup admin users are present in the database. If any are missing, they will
|
|
140
|
+
be added. Existing records will not be modified.
|
|
141
|
+
"""
|
|
142
|
+
if not (admins := get_env_admins()):
|
|
143
|
+
return
|
|
144
|
+
async with db() as session:
|
|
145
|
+
existing_emails = set(
|
|
146
|
+
await session.scalars(
|
|
147
|
+
select(models.User.email).where(models.User.email.in_(admins.keys()))
|
|
148
|
+
)
|
|
149
|
+
)
|
|
150
|
+
admins = {
|
|
151
|
+
email: username for email, username in admins.items() if email not in existing_emails
|
|
152
|
+
}
|
|
153
|
+
if not admins:
|
|
154
|
+
return
|
|
155
|
+
existing_usernames = set(
|
|
156
|
+
await session.scalars(
|
|
157
|
+
select(models.User.username).where(models.User.username.in_(admins.values()))
|
|
158
|
+
)
|
|
159
|
+
)
|
|
160
|
+
admins = {
|
|
161
|
+
email: username
|
|
162
|
+
for email, username in admins.items()
|
|
163
|
+
if username not in existing_usernames
|
|
164
|
+
}
|
|
165
|
+
if not admins:
|
|
166
|
+
return
|
|
167
|
+
admin_role_id = await session.scalar(
|
|
168
|
+
select(models.UserRole.id).filter_by(name=UserRole.ADMIN.value)
|
|
169
|
+
)
|
|
170
|
+
assert admin_role_id is not None, "Admin role not found in database"
|
|
171
|
+
for email, username in admins.items():
|
|
172
|
+
values = dict(
|
|
173
|
+
user_role_id=admin_role_id,
|
|
174
|
+
username=username,
|
|
175
|
+
email=email,
|
|
176
|
+
password_salt=secrets.token_bytes(DEFAULT_SECRET_LENGTH),
|
|
177
|
+
password_hash=secrets.token_bytes(DEFAULT_SECRET_LENGTH),
|
|
178
|
+
reset_password=True,
|
|
179
|
+
)
|
|
180
|
+
await session.execute(insert(models.User).values(values))
|
|
181
|
+
if email_sender is None:
|
|
182
|
+
return
|
|
183
|
+
for exc in await gather(
|
|
184
|
+
*(email_sender.send_welcome_email(email, username) for email, username in admins.items()),
|
|
185
|
+
return_exceptions=True,
|
|
186
|
+
):
|
|
187
|
+
if isinstance(exc, Exception):
|
|
188
|
+
logger.error(f"Failed to send welcome email: {exc}")
|
|
@@ -19,6 +19,7 @@ from sqlalchemy import (
|
|
|
19
19
|
)
|
|
20
20
|
from typing_extensions import assert_never
|
|
21
21
|
|
|
22
|
+
from phoenix.config import PLAYGROUND_PROJECT_NAME
|
|
22
23
|
from phoenix.db import models
|
|
23
24
|
|
|
24
25
|
|
|
@@ -157,3 +158,18 @@ def get_dataset_example_revisions(
|
|
|
157
158
|
),
|
|
158
159
|
)
|
|
159
160
|
)
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
_AnyTuple = TypeVar("_AnyTuple", bound=tuple[Any, ...])
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
def exclude_experiment_projects(
|
|
167
|
+
stmt: Select[_AnyTuple],
|
|
168
|
+
) -> Select[_AnyTuple]:
|
|
169
|
+
return stmt.outerjoin(
|
|
170
|
+
models.Experiment,
|
|
171
|
+
and_(
|
|
172
|
+
models.Project.name == models.Experiment.project_name,
|
|
173
|
+
models.Experiment.project_name != PLAYGROUND_PROJECT_NAME,
|
|
174
|
+
),
|
|
175
|
+
).where(models.Experiment.project_name.is_(None))
|
|
@@ -53,6 +53,7 @@ from phoenix.server.api.dataloaders import (
|
|
|
53
53
|
)
|
|
54
54
|
from phoenix.server.bearer_auth import PhoenixUser
|
|
55
55
|
from phoenix.server.dml_event import DmlEvent
|
|
56
|
+
from phoenix.server.email.types import EmailSender
|
|
56
57
|
from phoenix.server.types import (
|
|
57
58
|
CanGetLastUpdatedAt,
|
|
58
59
|
CanPutItem,
|
|
@@ -124,6 +125,7 @@ class Context(BaseContext):
|
|
|
124
125
|
auth_enabled: bool = False
|
|
125
126
|
secret: Optional[str] = None
|
|
126
127
|
token_store: Optional[TokenStore] = None
|
|
128
|
+
email_sender: Optional[EmailSender] = None
|
|
127
129
|
|
|
128
130
|
def get_secret(self) -> str:
|
|
129
131
|
"""A type-safe way to get the application secret. Throws an error if the secret is not set.
|
{arize_phoenix-8.23.0 → arize_phoenix-8.24.1}/src/phoenix/server/api/mutations/user_mutations.py
RENAMED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import logging
|
|
1
2
|
import secrets
|
|
2
3
|
from contextlib import AsyncExitStack
|
|
3
4
|
from datetime import datetime, timezone
|
|
@@ -32,6 +33,8 @@ from phoenix.server.api.types.User import User, to_gql_user
|
|
|
32
33
|
from phoenix.server.bearer_auth import PhoenixUser
|
|
33
34
|
from phoenix.server.types import AccessTokenId, ApiKeyId, PasswordResetTokenId, RefreshTokenId
|
|
34
35
|
|
|
36
|
+
logger = logging.getLogger(__name__)
|
|
37
|
+
|
|
35
38
|
|
|
36
39
|
@strawberry.input
|
|
37
40
|
class CreateUserInput:
|
|
@@ -39,6 +42,7 @@ class CreateUserInput:
|
|
|
39
42
|
username: str
|
|
40
43
|
password: str
|
|
41
44
|
role: UserRoleInput
|
|
45
|
+
send_welcome_email: Optional[bool] = False
|
|
42
46
|
|
|
43
47
|
|
|
44
48
|
@strawberry.input
|
|
@@ -111,6 +115,12 @@ class UserMutationMixin:
|
|
|
111
115
|
await session.flush()
|
|
112
116
|
except (PostgreSQLIntegrityError, SQLiteIntegrityError) as error:
|
|
113
117
|
raise Conflict(_user_operation_error_message(error))
|
|
118
|
+
if input.send_welcome_email and info.context.email_sender is not None:
|
|
119
|
+
try:
|
|
120
|
+
await info.context.email_sender.send_welcome_email(user.email, user.username)
|
|
121
|
+
except Exception as error:
|
|
122
|
+
# Log the error but do not raise it
|
|
123
|
+
logger.error(f"Failed to send welcome email: {error}")
|
|
114
124
|
return UserMutationPayload(user=to_gql_user(user))
|
|
115
125
|
|
|
116
126
|
@strawberry.mutation(permission_classes=[IsNotReadOnly, IsAdmin, IsLocked]) # type: ignore
|
|
@@ -19,7 +19,7 @@ from phoenix.config import (
|
|
|
19
19
|
getenv,
|
|
20
20
|
)
|
|
21
21
|
from phoenix.db import enums, models
|
|
22
|
-
from phoenix.db.helpers import SupportedSQLDialect
|
|
22
|
+
from phoenix.db.helpers import SupportedSQLDialect, exclude_experiment_projects
|
|
23
23
|
from phoenix.db.models import DatasetExample as OrmExample
|
|
24
24
|
from phoenix.db.models import DatasetExampleRevision as OrmRevision
|
|
25
25
|
from phoenix.db.models import DatasetVersion as OrmVersion
|
|
@@ -42,7 +42,6 @@ from phoenix.server.api.input_types.ClusterInput import ClusterInput
|
|
|
42
42
|
from phoenix.server.api.input_types.Coordinates import InputCoordinate2D, InputCoordinate3D
|
|
43
43
|
from phoenix.server.api.input_types.DatasetSort import DatasetSort
|
|
44
44
|
from phoenix.server.api.input_types.InvocationParameters import InvocationParameter
|
|
45
|
-
from phoenix.server.api.subscriptions import PLAYGROUND_PROJECT_NAME
|
|
46
45
|
from phoenix.server.api.types.Cluster import Cluster, to_gql_clusters
|
|
47
46
|
from phoenix.server.api.types.Dataset import Dataset, to_gql_dataset
|
|
48
47
|
from phoenix.server.api.types.DatasetExample import DatasetExample
|
|
@@ -233,18 +232,8 @@ class Query:
|
|
|
233
232
|
last=last,
|
|
234
233
|
before=before if isinstance(before, CursorString) else None,
|
|
235
234
|
)
|
|
236
|
-
stmt = (
|
|
237
|
-
|
|
238
|
-
.outerjoin(
|
|
239
|
-
models.Experiment,
|
|
240
|
-
and_(
|
|
241
|
-
models.Project.name == models.Experiment.project_name,
|
|
242
|
-
models.Experiment.project_name != PLAYGROUND_PROJECT_NAME,
|
|
243
|
-
),
|
|
244
|
-
)
|
|
245
|
-
.where(models.Experiment.project_name.is_(None))
|
|
246
|
-
.order_by(models.Project.id)
|
|
247
|
-
)
|
|
235
|
+
stmt = select(models.Project).order_by(models.Project.id)
|
|
236
|
+
stmt = exclude_experiment_projects(stmt)
|
|
248
237
|
async with info.context.db() as session:
|
|
249
238
|
projects = await session.stream_scalars(stmt)
|
|
250
239
|
data = [
|