arize-phoenix 11.16.1__tar.gz → 11.17.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of arize-phoenix might be problematic. Click here for more details.
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/PKG-INFO +1 -1
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/auth.py +12 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/config.py +21 -1
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/db/facilitator.py +4 -1
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/mutations/user_mutations.py +7 -3
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/routers/auth.py +13 -3
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/routers/oauth2.py +6 -5
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/routers/v1/users.py +3 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/static/.vite/manifest.json +9 -9
- arize_phoenix-11.16.1/src/phoenix/server/static/assets/components-CK8hwrPx.js → arize_phoenix-11.17.0/src/phoenix/server/static/assets/components-B7NKnJXz.js +64 -64
- arize_phoenix-11.16.1/src/phoenix/server/static/assets/index-UY6kXBX7.js → arize_phoenix-11.17.0/src/phoenix/server/static/assets/index-9n9lXgT6.js +1 -1
- arize_phoenix-11.16.1/src/phoenix/server/static/assets/pages-D8Hgmz1V.js → arize_phoenix-11.17.0/src/phoenix/server/static/assets/pages-CvqPVUA3.js +3 -3
- arize_phoenix-11.17.0/src/phoenix/version.py +1 -0
- arize_phoenix-11.16.1/src/phoenix/version.py +0 -1
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/.gitignore +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/IP_NOTICE +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/LICENSE +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/README.md +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/pyproject.toml +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/__init__.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/core/__init__.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/core/embedding_dimension.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/core/model.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/core/model_schema.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/core/model_schema_adapter.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/datetime_utils.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/db/README.md +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/db/__init__.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/db/alembic.ini +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/db/bulk_inserter.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/db/constants.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/db/engines.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/db/enums.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/db/helpers.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/db/insertion/__init__.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/db/insertion/constants.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/db/insertion/dataset.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/db/insertion/document_annotation.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/db/insertion/evaluation.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/db/insertion/helpers.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/db/insertion/span.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/db/insertion/span_annotation.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/db/insertion/trace_annotation.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/db/insertion/types.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/db/migrate.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/db/migrations/__init__.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/db/migrations/data_migration_scripts/__init__.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/db/migrations/data_migration_scripts/populate_project_sessions.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/db/migrations/env.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/db/migrations/script.py.mako +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/db/migrations/versions/10460e46d750_datasets.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/db/migrations/versions/2f9d1a65945f_annotation_config_migration.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/db/migrations/versions/3be8647b87d8_add_token_columns_to_spans_table.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/db/migrations/versions/4ded9e43755f_create_project_sessions_table.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/db/migrations/versions/6a88424799fe_update_users_with_auth_method.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/db/migrations/versions/8a3764fe7f1a_change_jsonb_to_json_for_prompts.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/db/migrations/versions/a20694b15f82_cost.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/db/migrations/versions/bb8139330879_create_project_trace_retention_policies_table.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/db/migrations/versions/bc8fea3c2bc8_add_prompt_tables.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/db/migrations/versions/cd164e83824f_users_and_tokens.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/db/migrations/versions/cf03bd6bae1d_init.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/db/models.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/db/pg_config.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/db/types/__init__.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/db/types/annotation_configs.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/db/types/db_models.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/db/types/identifier.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/db/types/model_provider.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/db/types/token_price_customization.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/db/types/trace_retention.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/exceptions.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/experiments/__init__.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/experiments/evaluators/__init__.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/experiments/evaluators/base.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/experiments/evaluators/code_evaluators.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/experiments/evaluators/llm_evaluators.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/experiments/evaluators/utils.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/experiments/functions.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/experiments/tracing.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/experiments/types.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/experiments/utils.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/inferences/__init__.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/inferences/errors.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/inferences/fixtures.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/inferences/inferences.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/inferences/schema.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/inferences/validation.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/logging/__init__.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/logging/_config.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/logging/_filter.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/logging/_formatter.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/metrics/README.md +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/metrics/__init__.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/metrics/binning.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/metrics/metrics.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/metrics/mixins.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/metrics/retrieval_metrics.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/metrics/timeseries.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/metrics/wrappers.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/pointcloud/__init__.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/pointcloud/clustering.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/pointcloud/pointcloud.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/pointcloud/projectors.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/pointcloud/umap_parameters.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/py.typed +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/__init__.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/README.md +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/__init__.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/auth.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/context.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/dataloaders/__init__.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/dataloaders/annotation_configs_by_project.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/dataloaders/annotation_summaries.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/dataloaders/average_experiment_run_latency.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/dataloaders/cache/__init__.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/dataloaders/cache/two_tier_cache.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/dataloaders/dataset_example_revisions.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/dataloaders/dataset_example_spans.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/dataloaders/document_evaluation_summaries.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/dataloaders/document_evaluations.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/dataloaders/document_retrieval_metrics.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/dataloaders/experiment_annotation_summaries.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/dataloaders/experiment_error_rates.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/dataloaders/experiment_run_annotations.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/dataloaders/experiment_run_counts.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/dataloaders/experiment_sequence_number.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/dataloaders/last_used_times_by_generative_model_id.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/dataloaders/latency_ms_quantile.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/dataloaders/min_start_or_max_end_times.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/dataloaders/num_child_spans.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/dataloaders/num_spans_per_trace.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/dataloaders/project_by_name.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/dataloaders/project_ids_by_trace_retention_policy_id.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/dataloaders/prompt_version_sequence_number.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/dataloaders/record_counts.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/dataloaders/session_io.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/dataloaders/session_num_traces.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/dataloaders/session_num_traces_with_error.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/dataloaders/session_token_usages.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/dataloaders/session_trace_latency_ms_quantile.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/dataloaders/span_annotations.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/dataloaders/span_by_id.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/dataloaders/span_cost_by_span.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/dataloaders/span_cost_detail_summary_entries_by_generative_model.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/dataloaders/span_cost_detail_summary_entries_by_project_session.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/dataloaders/span_cost_detail_summary_entries_by_span.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/dataloaders/span_cost_detail_summary_entries_by_trace.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/dataloaders/span_cost_details_by_span_cost.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_experiment.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_experiment_run.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_generative_model.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_project.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_project_session.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_trace.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/dataloaders/span_costs.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/dataloaders/span_dataset_examples.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/dataloaders/span_descendants.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/dataloaders/span_projects.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/dataloaders/table_fields.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/dataloaders/token_counts.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/dataloaders/trace_by_trace_ids.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/dataloaders/trace_retention_policy_id_by_project_id.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/dataloaders/trace_root_spans.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/dataloaders/types.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/dataloaders/user_roles.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/dataloaders/users.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/exceptions.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/helpers/__init__.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/helpers/annotations.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/helpers/dataset_helpers.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/helpers/experiment_run_filters.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/helpers/playground_clients.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/helpers/playground_registry.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/helpers/playground_spans.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/helpers/prompts/__init__.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/helpers/prompts/conversions/__init__.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/helpers/prompts/conversions/anthropic.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/helpers/prompts/conversions/aws.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/helpers/prompts/conversions/openai.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/helpers/prompts/models.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/input_types/AddExamplesToDatasetInput.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/input_types/AddSpansToDatasetInput.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/input_types/ChatCompletionInput.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/input_types/ChatCompletionMessageInput.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/input_types/ClearProjectInput.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/input_types/ClusterInput.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/input_types/Coordinates.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/input_types/CreateDatasetInput.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/input_types/CreateProjectInput.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/input_types/CreateSpanAnnotationInput.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/input_types/CreateTraceAnnotationInput.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/input_types/DataQualityMetricInput.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/input_types/DatasetExampleInput.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/input_types/DatasetFilter.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/input_types/DatasetSort.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/input_types/DatasetVersionSort.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/input_types/DeleteAnnotationsInput.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/input_types/DeleteDatasetExamplesInput.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/input_types/DeleteDatasetInput.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/input_types/DeleteExperimentsInput.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/input_types/DimensionFilter.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/input_types/DimensionInput.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/input_types/GenerativeCredentialInput.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/input_types/GenerativeModelInput.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/input_types/Granularity.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/input_types/InvocationParameters.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/input_types/PatchAnnotationInput.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/input_types/PatchDatasetExamplesInput.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/input_types/PatchDatasetInput.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/input_types/PerformanceMetricInput.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/input_types/ProjectFilter.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/input_types/ProjectSessionSort.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/input_types/ProjectSort.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/input_types/PromptFilter.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/input_types/PromptTemplateOptions.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/input_types/PromptVersionInput.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/input_types/SpanAnnotationFilter.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/input_types/SpanAnnotationSort.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/input_types/SpanSort.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/input_types/TimeBinConfig.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/input_types/TimeRange.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/input_types/TraceAnnotationSort.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/input_types/UserRoleInput.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/input_types/__init__.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/interceptor.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/mutations/__init__.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/mutations/annotation_config_mutations.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/mutations/api_key_mutations.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/mutations/chat_mutations.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/mutations/dataset_mutations.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/mutations/experiment_mutations.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/mutations/export_events_mutations.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/mutations/model_mutations.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/mutations/project_mutations.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/mutations/project_trace_retention_policy_mutations.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/mutations/prompt_label_mutations.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/mutations/prompt_mutations.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/mutations/prompt_version_tag_mutations.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/mutations/span_annotations_mutations.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/mutations/trace_annotations_mutations.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/mutations/trace_mutations.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/openapi/__init__.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/openapi/main.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/openapi/schema.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/queries.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/routers/__init__.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/routers/embeddings.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/routers/utils.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/routers/v1/__init__.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/routers/v1/annotation_configs.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/routers/v1/annotations.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/routers/v1/datasets.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/routers/v1/evaluations.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/routers/v1/experiment_evaluations.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/routers/v1/experiment_runs.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/routers/v1/experiments.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/routers/v1/models.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/routers/v1/projects.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/routers/v1/prompts.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/routers/v1/spans.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/routers/v1/traces.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/routers/v1/utils.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/schema.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/subscriptions.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/Annotation.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/AnnotationConfig.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/AnnotationSource.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/AnnotationSummary.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/AnnotatorKind.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/ApiKey.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/AuthMethod.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/ChatCompletionMessageRole.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/ChatCompletionSubscriptionPayload.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/Cluster.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/CostBreakdown.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/CreateDatasetPayload.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/CronExpression.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/DataQualityMetric.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/Dataset.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/DatasetExample.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/DatasetExampleRevision.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/DatasetValues.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/DatasetVersion.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/Dimension.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/DimensionDataType.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/DimensionShape.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/DimensionType.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/DimensionWithValue.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/DocumentEvaluationSummary.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/DocumentRetrievalMetrics.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/EmbeddingDimension.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/EmbeddingMetadata.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/Evaluation.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/EvaluationSummary.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/Event.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/EventMetadata.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/ExampleRevisionInterface.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/Experiment.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/ExperimentAnnotationSummary.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/ExperimentComparison.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/ExperimentRun.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/ExperimentRunAnnotation.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/ExportedFile.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/Functionality.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/GenerativeModel.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/GenerativeProvider.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/Identifier.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/InferenceModel.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/Inferences.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/InferencesRole.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/LabelFraction.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/MimeType.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/ModelInterface.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/NumericRange.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/PerformanceMetric.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/PlaygroundModel.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/Project.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/ProjectSession.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/ProjectTraceRetentionPolicy.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/Prompt.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/PromptLabel.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/PromptResponse.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/PromptVersion.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/PromptVersionTag.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/PromptVersionTemplate.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/ResponseFormat.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/Retrieval.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/ScalarDriftMetricEnum.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/Segments.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/ServerStatus.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/SortDir.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/Span.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/SpanAnnotation.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/SpanCostDetailSummaryEntry.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/SpanCostSummary.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/SpanIOValue.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/SystemApiKey.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/TimeSeries.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/TokenCountPromptDetails.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/TokenPrice.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/TokenUsage.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/ToolDefinition.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/Trace.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/TraceAnnotation.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/UMAPPoints.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/User.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/UserApiKey.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/UserRole.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/ValidationResult.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/VectorDriftMetricEnum.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/__init__.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/node.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/types/pagination.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/utils.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/app.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/authorization.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/bearer_auth.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/cost_tracking/__init__.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/cost_tracking/cost_details_calculator.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/cost_tracking/cost_model_lookup.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/cost_tracking/helpers.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/cost_tracking/model_cost_manifest.json +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/cost_tracking/regex_specificity.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/cost_tracking/token_cost_calculator.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/daemons/__init__.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/daemons/db_disk_usage_monitor.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/daemons/generative_model_store.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/daemons/span_cost_calculator.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/dml_event.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/dml_event_handler.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/email/__init__.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/email/sender.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/email/templates/__init__.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/email/templates/db_disk_usage_notification.html +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/email/templates/password_reset.html +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/email/templates/welcome.html +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/email/types.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/experiments/__init__.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/experiments/utils.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/grpc_server.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/jwt_store.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/main.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/middleware/__init__.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/middleware/gzip.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/oauth2.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/openapi/__init__.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/prometheus.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/rate_limiters.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/retention.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/static/apple-touch-icon-114x114.png +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/static/apple-touch-icon-120x120.png +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/static/apple-touch-icon-144x144.png +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/static/apple-touch-icon-152x152.png +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/static/apple-touch-icon-180x180.png +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/static/apple-touch-icon-72x72.png +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/static/apple-touch-icon-76x76.png +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/static/apple-touch-icon.png +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/static/assets/vendor-CqDb5u4o.css +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/static/assets/vendor-_6rG8OMg.js +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/static/assets/vendor-arizeai-BznCmJFh.js +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/static/assets/vendor-codemirror-29fWLPAy.js +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/static/assets/vendor-recharts-Cu431IpB.js +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/static/assets/vendor-shiki-Ce9e01lU.js +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/static/assets/vendor-three-C5WAXd5r.js +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/static/favicon.ico +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/static/modernizr.js +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/telemetry.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/templates/__init__.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/templates/index.html +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/thread_server.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/types.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/services.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/session/__init__.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/session/client.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/session/data_extractor.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/session/evaluation.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/session/session.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/settings.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/trace/__init__.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/trace/attributes.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/trace/dsl/README.md +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/trace/dsl/__init__.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/trace/dsl/filter.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/trace/dsl/helpers.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/trace/dsl/query.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/trace/errors.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/trace/evaluation_conventions.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/trace/exporter.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/trace/fixtures.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/trace/otel.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/trace/projects.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/trace/schemas.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/trace/span_evaluations.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/trace/span_json_decoder.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/trace/span_json_encoder.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/trace/trace_dataset.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/trace/utils.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/trace/v1/__init__.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/trace/v1/evaluation_pb2.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/trace/v1/evaluation_pb2.pyi +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/utilities/__init__.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/utilities/client.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/utilities/deprecation.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/utilities/error_handling.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/utilities/json.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/utilities/logging.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/utilities/project.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/utilities/re.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/utilities/span_store.py +0 -0
- {arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/utilities/template_formatters.py +0 -0
|
@@ -47,6 +47,18 @@ def is_valid_password(*, password: Secret, salt: bytes, password_hash: bytes) ->
|
|
|
47
47
|
return password_hash == compute_password_hash(password=password, salt=salt)
|
|
48
48
|
|
|
49
49
|
|
|
50
|
+
def sanitize_email(email: str) -> str:
|
|
51
|
+
"""
|
|
52
|
+
Sanitizes an email address by trimming whitespace and converting to lowercase.
|
|
53
|
+
|
|
54
|
+
Args:
|
|
55
|
+
email (str): the email address to sanitize
|
|
56
|
+
Returns:
|
|
57
|
+
str: the sanitized email address
|
|
58
|
+
"""
|
|
59
|
+
return email.strip().lower()
|
|
60
|
+
|
|
61
|
+
|
|
50
62
|
def validate_email_format(email: str) -> None:
|
|
51
63
|
"""
|
|
52
64
|
Checks that the email has a valid format.
|
|
@@ -333,6 +333,10 @@ Whether to verify client certificates for mutual TLS (mTLS) authentication.
|
|
|
333
333
|
When set to true, clients must provide valid certificates signed by the CA specified in
|
|
334
334
|
PHOENIX_TLS_CA_FILE.
|
|
335
335
|
"""
|
|
336
|
+
ENV_PHOENIX_DEFAULT_RETENTION_POLICY_DAYS = "PHOENIX_DEFAULT_RETENTION_POLICY_DAYS"
|
|
337
|
+
"""
|
|
338
|
+
The default retention policy for traces in days.
|
|
339
|
+
"""
|
|
336
340
|
|
|
337
341
|
|
|
338
342
|
@dataclass(frozen=True)
|
|
@@ -494,6 +498,20 @@ def get_env_tls_verify_client() -> bool:
|
|
|
494
498
|
return _bool_val(ENV_PHOENIX_TLS_VERIFY_CLIENT, False)
|
|
495
499
|
|
|
496
500
|
|
|
501
|
+
def get_env_default_retention_policy_days() -> int:
|
|
502
|
+
"""
|
|
503
|
+
Returns the number of days for the default retention policy as set by the
|
|
504
|
+
PHOENIX_DEFAULT_RETENTION_POLICY_DAYS environment variable, defaulting to 0 if not set.
|
|
505
|
+
|
|
506
|
+
Returns:
|
|
507
|
+
int: Number of days for the default retention policy. Defaults to 0 if the environment variable is not set.
|
|
508
|
+
""" # noqa: E501
|
|
509
|
+
days = _int_val(ENV_PHOENIX_DEFAULT_RETENTION_POLICY_DAYS, 0)
|
|
510
|
+
if days < 0:
|
|
511
|
+
raise ValueError("PHOENIX_DEFAULT_RETENTION_POLICY_DAYS must be non-negative")
|
|
512
|
+
return days
|
|
513
|
+
|
|
514
|
+
|
|
497
515
|
def get_env_tls_config() -> Optional[TLSConfig]:
|
|
498
516
|
"""
|
|
499
517
|
Retrieves and validates TLS configuration from environment variables.
|
|
@@ -865,6 +883,8 @@ def get_env_admins() -> dict[str, str]:
|
|
|
865
883
|
"""
|
|
866
884
|
if not (env_value := getenv(ENV_PHOENIX_ADMINS)):
|
|
867
885
|
return {}
|
|
886
|
+
from phoenix.auth import sanitize_email
|
|
887
|
+
|
|
868
888
|
usernames = set()
|
|
869
889
|
emails = set()
|
|
870
890
|
ans = {}
|
|
@@ -881,7 +901,7 @@ def get_env_admins() -> dict[str, str]:
|
|
|
881
901
|
f"Expected format: 'username=email'"
|
|
882
902
|
)
|
|
883
903
|
username = pair[:last_equals_pos].strip()
|
|
884
|
-
email_addr = pair[last_equals_pos + 1 :]
|
|
904
|
+
email_addr = sanitize_email(pair[last_equals_pos + 1 :])
|
|
885
905
|
try:
|
|
886
906
|
email_addr = validate_email(email_addr, check_deliverability=False).normalized
|
|
887
907
|
except EmailNotValidError:
|
|
@@ -28,6 +28,7 @@ from phoenix.auth import (
|
|
|
28
28
|
from phoenix.config import (
|
|
29
29
|
get_env_admins,
|
|
30
30
|
get_env_default_admin_initial_password,
|
|
31
|
+
get_env_default_retention_policy_days,
|
|
31
32
|
get_env_disable_basic_auth,
|
|
32
33
|
)
|
|
33
34
|
from phoenix.db import models
|
|
@@ -334,7 +335,9 @@ async def _ensure_default_project_trace_retention_policy(db: DbSessionFactory) -
|
|
|
334
335
|
):
|
|
335
336
|
return
|
|
336
337
|
cron_expression = TraceRetentionCronExpression(root="0 0 * * 0")
|
|
337
|
-
rule = TraceRetentionRule(
|
|
338
|
+
rule = TraceRetentionRule(
|
|
339
|
+
root=MaxDaysRule(max_days=get_env_default_retention_policy_days())
|
|
340
|
+
)
|
|
338
341
|
await session.execute(
|
|
339
342
|
sa.insert(models.ProjectTraceRetentionPolicy),
|
|
340
343
|
[
|
{arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/api/mutations/user_mutations.py
RENAMED
|
@@ -21,6 +21,7 @@ from phoenix.auth import (
|
|
|
21
21
|
PASSWORD_REQUIREMENTS,
|
|
22
22
|
PHOENIX_ACCESS_TOKEN_COOKIE_NAME,
|
|
23
23
|
PHOENIX_REFRESH_TOKEN_COOKIE_NAME,
|
|
24
|
+
sanitize_email,
|
|
24
25
|
validate_email_format,
|
|
25
26
|
validate_password_format,
|
|
26
27
|
)
|
|
@@ -115,20 +116,23 @@ class UserMutationMixin:
|
|
|
115
116
|
info: Info[Context, None],
|
|
116
117
|
input: CreateUserInput,
|
|
117
118
|
) -> UserMutationPayload:
|
|
119
|
+
# Sanitize email by trimming and lowercasing
|
|
120
|
+
email = sanitize_email(input.email)
|
|
121
|
+
|
|
118
122
|
user: models.User
|
|
119
123
|
if input.auth_method is AuthMethod.OAUTH2:
|
|
120
124
|
user = models.OAuth2User(
|
|
121
|
-
email=
|
|
125
|
+
email=email,
|
|
122
126
|
username=input.username,
|
|
123
127
|
)
|
|
124
128
|
else:
|
|
125
129
|
assert input.password
|
|
126
|
-
validate_email_format(
|
|
130
|
+
validate_email_format(email)
|
|
127
131
|
validate_password_format(input.password)
|
|
128
132
|
salt = secrets.token_bytes(DEFAULT_SECRET_LENGTH)
|
|
129
133
|
password_hash = await info.context.hash_password(Secret(input.password), salt)
|
|
130
134
|
user = models.LocalUser(
|
|
131
|
-
email=
|
|
135
|
+
email=email,
|
|
132
136
|
username=input.username,
|
|
133
137
|
password_hash=password_hash,
|
|
134
138
|
password_salt=salt,
|
|
@@ -6,7 +6,7 @@ from pathlib import Path
|
|
|
6
6
|
from urllib.parse import urlencode, urlparse, urlunparse
|
|
7
7
|
|
|
8
8
|
from fastapi import APIRouter, Depends, HTTPException, Request, Response
|
|
9
|
-
from sqlalchemy import select
|
|
9
|
+
from sqlalchemy import func, select
|
|
10
10
|
from sqlalchemy.orm import joinedload
|
|
11
11
|
from starlette.status import (
|
|
12
12
|
HTTP_204_NO_CONTENT,
|
|
@@ -29,6 +29,7 @@ from phoenix.auth import (
|
|
|
29
29
|
delete_oauth2_state_cookie,
|
|
30
30
|
delete_refresh_token_cookie,
|
|
31
31
|
is_valid_password,
|
|
32
|
+
sanitize_email,
|
|
32
33
|
set_access_token_cookie,
|
|
33
34
|
set_refresh_token_cookie,
|
|
34
35
|
validate_password_format,
|
|
@@ -87,9 +88,14 @@ async def login(request: Request) -> Response:
|
|
|
87
88
|
if not email or not password:
|
|
88
89
|
raise HTTPException(status_code=HTTP_401_UNAUTHORIZED, detail="Email and password required")
|
|
89
90
|
|
|
91
|
+
# Sanitize email by trimming and lowercasing
|
|
92
|
+
email = sanitize_email(email)
|
|
93
|
+
|
|
90
94
|
async with request.app.state.db() as session:
|
|
91
95
|
user = await session.scalar(
|
|
92
|
-
select(models.User)
|
|
96
|
+
select(models.User)
|
|
97
|
+
.where(func.lower(models.User.email) == email)
|
|
98
|
+
.options(joinedload(models.User.role))
|
|
93
99
|
)
|
|
94
100
|
if (
|
|
95
101
|
user is None
|
|
@@ -207,6 +213,10 @@ async def initiate_password_reset(request: Request) -> Response:
|
|
|
207
213
|
data = await request.json()
|
|
208
214
|
if not (email := data.get("email")):
|
|
209
215
|
raise MISSING_EMAIL
|
|
216
|
+
|
|
217
|
+
# Sanitize email by trimming and lowercasing
|
|
218
|
+
email = sanitize_email(email)
|
|
219
|
+
|
|
210
220
|
sender: EmailSender = request.app.state.email_sender
|
|
211
221
|
if sender is None:
|
|
212
222
|
raise SMTP_UNAVAILABLE
|
|
@@ -214,7 +224,7 @@ async def initiate_password_reset(request: Request) -> Response:
|
|
|
214
224
|
async with request.app.state.db() as session:
|
|
215
225
|
user = await session.scalar(
|
|
216
226
|
select(models.User)
|
|
217
|
-
.
|
|
227
|
+
.where(func.lower(models.User.email) == email)
|
|
218
228
|
.options(
|
|
219
229
|
joinedload(models.User.password_reset_token).load_only(models.PasswordResetToken.id)
|
|
220
230
|
)
|
|
@@ -27,6 +27,7 @@ from phoenix.auth import (
|
|
|
27
27
|
PHOENIX_OAUTH2_STATE_COOKIE_NAME,
|
|
28
28
|
delete_oauth2_nonce_cookie,
|
|
29
29
|
delete_oauth2_state_cookie,
|
|
30
|
+
sanitize_email,
|
|
30
31
|
set_access_token_cookie,
|
|
31
32
|
set_oauth2_nonce_cookie,
|
|
32
33
|
set_oauth2_state_cookie,
|
|
@@ -217,7 +218,7 @@ class UserInfo:
|
|
|
217
218
|
if not (idp_user_id := (self.idp_user_id or "").strip()):
|
|
218
219
|
raise ValueError("idp_user_id cannot be empty")
|
|
219
220
|
object.__setattr__(self, "idp_user_id", idp_user_id)
|
|
220
|
-
if not (email := (self.email or "")
|
|
221
|
+
if not (email := sanitize_email(self.email or "")):
|
|
221
222
|
raise ValueError("email cannot be empty")
|
|
222
223
|
object.__setattr__(self, "email", email)
|
|
223
224
|
if username := (self.username or "").strip():
|
|
@@ -356,7 +357,7 @@ async def _get_existing_oauth2_user(
|
|
|
356
357
|
- User has a password set
|
|
357
358
|
- User has mismatched OAuth2 credentials
|
|
358
359
|
""" # noqa: E501
|
|
359
|
-
if not (email := (user_info.email or "")
|
|
360
|
+
if not (email := sanitize_email(user_info.email or "")):
|
|
360
361
|
raise ValueError("Email is required.")
|
|
361
362
|
if not (oauth2_user_id := (user_info.idp_user_id or "").strip()):
|
|
362
363
|
raise ValueError("OAuth2 user ID is required.")
|
|
@@ -370,7 +371,7 @@ async def _get_existing_oauth2_user(
|
|
|
370
371
|
if email and email != user.email:
|
|
371
372
|
user.email = email
|
|
372
373
|
else:
|
|
373
|
-
user = await session.scalar(stmt.
|
|
374
|
+
user = await session.scalar(stmt.where(func.lower(models.User.email) == email))
|
|
374
375
|
if user is None or not isinstance(user, models.OAuth2User):
|
|
375
376
|
raise SignInNotAllowed("Sign in is not allowed.")
|
|
376
377
|
# Case 1: Different OAuth2 client - update both client and user IDs
|
|
@@ -520,7 +521,7 @@ async def _email_and_username_exist(
|
|
|
520
521
|
select(
|
|
521
522
|
cast(
|
|
522
523
|
func.coalesce(
|
|
523
|
-
func.max(case((models.User.email == email, 1), else_=0)),
|
|
524
|
+
func.max(case((func.lower(models.User.email) == email, 1), else_=0)),
|
|
524
525
|
0,
|
|
525
526
|
),
|
|
526
527
|
Boolean,
|
|
@@ -532,7 +533,7 @@ async def _email_and_username_exist(
|
|
|
532
533
|
),
|
|
533
534
|
Boolean,
|
|
534
535
|
).label("username_exists"),
|
|
535
|
-
).where(or_(models.User.email == email, models.User.username == username))
|
|
536
|
+
).where(or_(func.lower(models.User.email) == email, models.User.username == username))
|
|
536
537
|
)
|
|
537
538
|
).all()
|
|
538
539
|
return email_exists, username_exists
|
|
@@ -31,6 +31,7 @@ from phoenix.auth import (
|
|
|
31
31
|
DEFAULT_SYSTEM_EMAIL,
|
|
32
32
|
DEFAULT_SYSTEM_USERNAME,
|
|
33
33
|
compute_password_hash,
|
|
34
|
+
sanitize_email,
|
|
34
35
|
validate_email_format,
|
|
35
36
|
validate_password_format,
|
|
36
37
|
)
|
|
@@ -205,6 +206,8 @@ async def create_user(
|
|
|
205
206
|
) -> CreateUserResponseBody:
|
|
206
207
|
user_data = request_body.user
|
|
207
208
|
email, username, role = user_data.email, user_data.username, user_data.role
|
|
209
|
+
# Sanitize email by trimming and lowercasing
|
|
210
|
+
email = sanitize_email(email)
|
|
208
211
|
validate_email_format(email)
|
|
209
212
|
|
|
210
213
|
# Prevent creation of SYSTEM users
|
{arize_phoenix-11.16.1 → arize_phoenix-11.17.0}/src/phoenix/server/static/.vite/manifest.json
RENAMED
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
{
|
|
2
|
-
"_components-
|
|
3
|
-
"file": "assets/components-
|
|
2
|
+
"_components-B7NKnJXz.js": {
|
|
3
|
+
"file": "assets/components-B7NKnJXz.js",
|
|
4
4
|
"name": "components",
|
|
5
5
|
"imports": [
|
|
6
6
|
"_vendor-_6rG8OMg.js",
|
|
7
|
-
"_pages-
|
|
7
|
+
"_pages-CvqPVUA3.js",
|
|
8
8
|
"_vendor-arizeai-BznCmJFh.js",
|
|
9
9
|
"_vendor-codemirror-29fWLPAy.js",
|
|
10
10
|
"_vendor-three-C5WAXd5r.js"
|
|
11
11
|
]
|
|
12
12
|
},
|
|
13
|
-
"_pages-
|
|
14
|
-
"file": "assets/pages-
|
|
13
|
+
"_pages-CvqPVUA3.js": {
|
|
14
|
+
"file": "assets/pages-CvqPVUA3.js",
|
|
15
15
|
"name": "pages",
|
|
16
16
|
"imports": [
|
|
17
17
|
"_vendor-_6rG8OMg.js",
|
|
18
18
|
"_vendor-arizeai-BznCmJFh.js",
|
|
19
|
-
"_components-
|
|
19
|
+
"_components-B7NKnJXz.js",
|
|
20
20
|
"_vendor-codemirror-29fWLPAy.js",
|
|
21
21
|
"_vendor-recharts-Cu431IpB.js"
|
|
22
22
|
]
|
|
@@ -69,15 +69,15 @@
|
|
|
69
69
|
"name": "vendor-three"
|
|
70
70
|
},
|
|
71
71
|
"index.tsx": {
|
|
72
|
-
"file": "assets/index-
|
|
72
|
+
"file": "assets/index-9n9lXgT6.js",
|
|
73
73
|
"name": "index",
|
|
74
74
|
"src": "index.tsx",
|
|
75
75
|
"isEntry": true,
|
|
76
76
|
"imports": [
|
|
77
77
|
"_vendor-_6rG8OMg.js",
|
|
78
78
|
"_vendor-arizeai-BznCmJFh.js",
|
|
79
|
-
"_pages-
|
|
80
|
-
"_components-
|
|
79
|
+
"_pages-CvqPVUA3.js",
|
|
80
|
+
"_components-B7NKnJXz.js",
|
|
81
81
|
"_vendor-three-C5WAXd5r.js",
|
|
82
82
|
"_vendor-codemirror-29fWLPAy.js",
|
|
83
83
|
"_vendor-shiki-Ce9e01lU.js",
|