arize-phoenix 11.3.0__tar.gz → 11.5.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of arize-phoenix might be problematic. Click here for more details.
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/PKG-INFO +4 -2
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/pyproject.toml +3 -1
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/config.py +51 -2
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/facilitator.py +15 -24
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/auth.py +1 -1
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/queries.py +34 -22
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/routers/v1/annotation_configs.py +4 -1
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/routers/v1/datasets.py +3 -1
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/routers/v1/evaluations.py +3 -1
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/routers/v1/experiment_evaluations.py +3 -2
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/routers/v1/experiment_runs.py +3 -1
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/routers/v1/experiments.py +3 -1
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/routers/v1/projects.py +4 -1
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/routers/v1/prompts.py +4 -1
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/routers/v1/spans.py +4 -1
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/routers/v1/traces.py +4 -1
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/routers/v1/users.py +2 -2
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/app.py +41 -2
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/authorization.py +9 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/bearer_auth.py +18 -15
- arize_phoenix-11.5.0/src/phoenix/server/cost_tracking/model_cost_manifest.json +2343 -0
- arize_phoenix-11.5.0/src/phoenix/server/daemons/db_disk_usage_monitor.py +209 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/email/sender.py +25 -0
- arize_phoenix-11.5.0/src/phoenix/server/email/templates/db_disk_usage_notification.html +16 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/email/types.py +11 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/grpc_server.py +3 -3
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/prometheus.py +22 -0
- arize_phoenix-11.5.0/src/phoenix/server/static/.vite/manifest.json +87 -0
- arize_phoenix-11.3.0/src/phoenix/server/static/assets/components-DlL7ybQ2.js → arize_phoenix-11.5.0/src/phoenix/server/static/assets/components-Bwf6zNbg.js +186 -187
- arize_phoenix-11.3.0/src/phoenix/server/static/assets/index-QP9R8k34.js → arize_phoenix-11.5.0/src/phoenix/server/static/assets/index-Bfg9uQ43.js +2 -2
- arize_phoenix-11.3.0/src/phoenix/server/static/assets/pages-B7wCtpad.js → arize_phoenix-11.5.0/src/phoenix/server/static/assets/pages-BCR8hW_l.js +447 -431
- arize_phoenix-11.3.0/src/phoenix/server/static/assets/vendor-DqQvHbPa.js → arize_phoenix-11.5.0/src/phoenix/server/static/assets/vendor-DRWIRkSJ.js +1 -1
- arize_phoenix-11.3.0/src/phoenix/server/static/assets/vendor-arizeai-CLX44PFA.js → arize_phoenix-11.5.0/src/phoenix/server/static/assets/vendor-arizeai-DUhQaeau.js +2 -2
- arize_phoenix-11.3.0/src/phoenix/server/static/assets/vendor-codemirror-Du3XyJnB.js → arize_phoenix-11.5.0/src/phoenix/server/static/assets/vendor-codemirror-D_6Q6Auv.js +1 -1
- arize_phoenix-11.3.0/src/phoenix/server/static/assets/vendor-recharts-B2PJDrnX.js → arize_phoenix-11.5.0/src/phoenix/server/static/assets/vendor-recharts-BNBwj7vz.js +1 -1
- arize_phoenix-11.3.0/src/phoenix/server/static/assets/vendor-shiki-CNbrFjf9.js → arize_phoenix-11.5.0/src/phoenix/server/static/assets/vendor-shiki-k1qj_XjP.js +1 -1
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/types.py +7 -0
- arize_phoenix-11.5.0/src/phoenix/version.py +1 -0
- arize_phoenix-11.3.0/src/phoenix/server/cost_tracking/model_cost_manifest.json +0 -587
- arize_phoenix-11.3.0/src/phoenix/server/static/.vite/manifest.json +0 -87
- arize_phoenix-11.3.0/src/phoenix/version.py +0 -1
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/.gitignore +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/IP_NOTICE +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/LICENSE +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/README.md +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/__init__.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/auth.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/core/__init__.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/core/embedding_dimension.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/core/model.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/core/model_schema.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/core/model_schema_adapter.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/datetime_utils.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/README.md +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/__init__.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/alembic.ini +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/bulk_inserter.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/constants.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/engines.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/enums.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/helpers.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/insertion/__init__.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/insertion/constants.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/insertion/dataset.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/insertion/document_annotation.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/insertion/evaluation.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/insertion/helpers.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/insertion/span.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/insertion/span_annotation.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/insertion/trace_annotation.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/insertion/types.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/migrate.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/migrations/__init__.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/migrations/data_migration_scripts/__init__.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/migrations/data_migration_scripts/populate_project_sessions.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/migrations/env.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/migrations/script.py.mako +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/migrations/versions/10460e46d750_datasets.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/migrations/versions/2f9d1a65945f_annotation_config_migration.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/migrations/versions/3be8647b87d8_add_token_columns_to_spans_table.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/migrations/versions/4ded9e43755f_create_project_sessions_table.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/migrations/versions/6a88424799fe_update_users_with_auth_method.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/migrations/versions/8a3764fe7f1a_change_jsonb_to_json_for_prompts.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/migrations/versions/a20694b15f82_cost.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/migrations/versions/bb8139330879_create_project_trace_retention_policies_table.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/migrations/versions/bc8fea3c2bc8_add_prompt_tables.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/migrations/versions/cd164e83824f_users_and_tokens.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/migrations/versions/cf03bd6bae1d_init.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/models.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/pg_config.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/types/__init__.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/types/annotation_configs.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/types/db_models.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/types/identifier.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/types/model_provider.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/types/token_price_customization.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/types/trace_retention.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/exceptions.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/experiments/__init__.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/experiments/evaluators/__init__.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/experiments/evaluators/base.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/experiments/evaluators/code_evaluators.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/experiments/evaluators/llm_evaluators.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/experiments/evaluators/utils.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/experiments/functions.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/experiments/tracing.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/experiments/types.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/experiments/utils.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/inferences/__init__.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/inferences/errors.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/inferences/fixtures.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/inferences/inferences.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/inferences/schema.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/inferences/validation.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/logging/__init__.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/logging/_config.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/logging/_filter.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/logging/_formatter.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/metrics/README.md +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/metrics/__init__.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/metrics/binning.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/metrics/metrics.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/metrics/mixins.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/metrics/retrieval_metrics.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/metrics/timeseries.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/metrics/wrappers.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/pointcloud/__init__.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/pointcloud/clustering.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/pointcloud/pointcloud.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/pointcloud/projectors.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/pointcloud/umap_parameters.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/py.typed +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/__init__.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/README.md +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/__init__.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/context.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/__init__.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/annotation_configs_by_project.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/annotation_summaries.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/average_experiment_run_latency.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/cache/__init__.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/cache/two_tier_cache.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/dataset_example_revisions.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/dataset_example_spans.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/document_evaluation_summaries.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/document_evaluations.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/document_retrieval_metrics.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/experiment_annotation_summaries.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/experiment_error_rates.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/experiment_run_annotations.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/experiment_run_counts.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/experiment_sequence_number.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/last_used_times_by_generative_model_id.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/latency_ms_quantile.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/min_start_or_max_end_times.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/num_child_spans.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/num_spans_per_trace.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/project_by_name.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/project_ids_by_trace_retention_policy_id.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/prompt_version_sequence_number.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/record_counts.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/session_io.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/session_num_traces.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/session_num_traces_with_error.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/session_token_usages.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/session_trace_latency_ms_quantile.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/span_annotations.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/span_by_id.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/span_cost_by_span.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/span_cost_detail_summary_entries_by_generative_model.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/span_cost_detail_summary_entries_by_project_session.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/span_cost_detail_summary_entries_by_span.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/span_cost_detail_summary_entries_by_trace.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/span_cost_details_by_span_cost.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_experiment.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_experiment_run.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_generative_model.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_project.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_project_session.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_trace.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/span_costs.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/span_dataset_examples.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/span_descendants.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/span_projects.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/table_fields.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/token_counts.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/trace_by_trace_ids.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/trace_retention_policy_id_by_project_id.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/trace_root_spans.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/types.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/user_roles.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/users.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/exceptions.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/helpers/__init__.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/helpers/annotations.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/helpers/dataset_helpers.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/helpers/experiment_run_filters.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/helpers/playground_clients.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/helpers/playground_registry.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/helpers/playground_spans.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/helpers/prompts/__init__.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/helpers/prompts/conversions/__init__.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/helpers/prompts/conversions/anthropic.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/helpers/prompts/conversions/aws.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/helpers/prompts/conversions/openai.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/helpers/prompts/models.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/AddExamplesToDatasetInput.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/AddSpansToDatasetInput.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/ChatCompletionInput.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/ChatCompletionMessageInput.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/ClearProjectInput.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/ClusterInput.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/Coordinates.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/CreateDatasetInput.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/CreateSpanAnnotationInput.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/CreateTraceAnnotationInput.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/DataQualityMetricInput.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/DatasetExampleInput.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/DatasetFilter.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/DatasetSort.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/DatasetVersionSort.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/DeleteAnnotationsInput.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/DeleteDatasetExamplesInput.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/DeleteDatasetInput.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/DeleteExperimentsInput.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/DimensionFilter.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/DimensionInput.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/GenerativeCredentialInput.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/GenerativeModelInput.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/Granularity.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/InvocationParameters.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/PatchAnnotationInput.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/PatchDatasetExamplesInput.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/PatchDatasetInput.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/PerformanceMetricInput.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/ProjectFilter.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/ProjectSessionSort.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/ProjectSort.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/PromptTemplateOptions.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/PromptVersionInput.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/SpanAnnotationFilter.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/SpanAnnotationSort.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/SpanSort.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/TimeRange.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/TraceAnnotationSort.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/UserRoleInput.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/__init__.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/interceptor.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/mutations/__init__.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/mutations/annotation_config_mutations.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/mutations/api_key_mutations.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/mutations/chat_mutations.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/mutations/dataset_mutations.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/mutations/experiment_mutations.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/mutations/export_events_mutations.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/mutations/model_mutations.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/mutations/project_mutations.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/mutations/project_trace_retention_policy_mutations.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/mutations/prompt_label_mutations.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/mutations/prompt_mutations.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/mutations/prompt_version_tag_mutations.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/mutations/span_annotations_mutations.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/mutations/trace_annotations_mutations.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/mutations/trace_mutations.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/mutations/user_mutations.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/openapi/__init__.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/openapi/main.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/openapi/schema.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/routers/__init__.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/routers/auth.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/routers/embeddings.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/routers/oauth2.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/routers/utils.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/routers/v1/__init__.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/routers/v1/annotations.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/routers/v1/models.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/routers/v1/utils.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/schema.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/subscriptions.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/Annotation.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/AnnotationConfig.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/AnnotationSource.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/AnnotationSummary.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/AnnotatorKind.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/ApiKey.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/AuthMethod.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/ChatCompletionMessageRole.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/ChatCompletionSubscriptionPayload.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/Cluster.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/CostBreakdown.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/CreateDatasetPayload.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/CronExpression.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/DataQualityMetric.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/Dataset.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/DatasetExample.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/DatasetExampleRevision.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/DatasetValues.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/DatasetVersion.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/Dimension.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/DimensionDataType.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/DimensionShape.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/DimensionType.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/DimensionWithValue.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/DocumentEvaluationSummary.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/DocumentRetrievalMetrics.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/EmbeddingDimension.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/EmbeddingMetadata.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/Evaluation.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/EvaluationSummary.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/Event.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/EventMetadata.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/ExampleRevisionInterface.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/Experiment.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/ExperimentAnnotationSummary.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/ExperimentComparison.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/ExperimentRun.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/ExperimentRunAnnotation.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/ExportedFile.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/Functionality.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/GenerativeModel.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/GenerativeProvider.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/Identifier.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/InferenceModel.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/Inferences.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/InferencesRole.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/LabelFraction.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/MimeType.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/ModelInterface.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/NumericRange.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/PerformanceMetric.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/PlaygroundModel.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/Project.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/ProjectSession.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/ProjectTraceRetentionPolicy.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/Prompt.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/PromptLabel.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/PromptResponse.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/PromptVersion.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/PromptVersionTag.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/PromptVersionTemplate.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/ResponseFormat.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/Retrieval.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/ScalarDriftMetricEnum.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/Segments.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/SortDir.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/Span.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/SpanAnnotation.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/SpanCostDetailSummaryEntry.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/SpanCostSummary.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/SpanIOValue.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/SystemApiKey.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/TimeSeries.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/TokenCountPromptDetails.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/TokenPrice.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/TokenUsage.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/ToolDefinition.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/Trace.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/TraceAnnotation.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/UMAPPoints.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/User.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/UserApiKey.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/UserRole.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/ValidationResult.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/VectorDriftMetricEnum.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/__init__.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/node.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/pagination.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/utils.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/cost_tracking/__init__.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/cost_tracking/cost_details_calculator.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/cost_tracking/cost_model_lookup.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/cost_tracking/helpers.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/cost_tracking/regex_specificity.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/cost_tracking/token_cost_calculator.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/daemons/__init__.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/daemons/generative_model_store.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/daemons/span_cost_calculator.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/dml_event.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/dml_event_handler.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/email/__init__.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/email/templates/__init__.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/email/templates/password_reset.html +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/email/templates/welcome.html +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/jwt_store.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/main.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/middleware/__init__.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/middleware/gzip.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/oauth2.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/openapi/__init__.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/rate_limiters.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/retention.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/static/apple-touch-icon-114x114.png +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/static/apple-touch-icon-120x120.png +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/static/apple-touch-icon-144x144.png +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/static/apple-touch-icon-152x152.png +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/static/apple-touch-icon-180x180.png +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/static/apple-touch-icon-72x72.png +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/static/apple-touch-icon-76x76.png +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/static/apple-touch-icon.png +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/static/assets/vendor-WIZid84E.css +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/static/assets/vendor-three-C5WAXd5r.js +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/static/favicon.ico +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/static/modernizr.js +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/telemetry.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/templates/__init__.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/templates/index.html +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/thread_server.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/services.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/session/__init__.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/session/client.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/session/data_extractor.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/session/evaluation.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/session/session.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/settings.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/trace/__init__.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/trace/attributes.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/trace/dsl/README.md +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/trace/dsl/__init__.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/trace/dsl/filter.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/trace/dsl/helpers.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/trace/dsl/query.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/trace/errors.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/trace/evaluation_conventions.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/trace/exporter.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/trace/fixtures.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/trace/otel.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/trace/projects.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/trace/schemas.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/trace/span_evaluations.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/trace/span_json_decoder.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/trace/span_json_encoder.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/trace/trace_dataset.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/trace/utils.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/trace/v1/__init__.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/trace/v1/evaluation_pb2.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/trace/v1/evaluation_pb2.pyi +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/utilities/__init__.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/utilities/client.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/utilities/deprecation.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/utilities/error_handling.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/utilities/json.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/utilities/logging.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/utilities/project.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/utilities/re.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/utilities/span_store.py +0 -0
- {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/utilities/template_formatters.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: arize-phoenix
|
|
3
|
-
Version: 11.
|
|
3
|
+
Version: 11.5.0
|
|
4
4
|
Summary: AI Observability and Evaluation
|
|
5
5
|
Project-URL: Documentation, https://arize.com/docs/phoenix/
|
|
6
6
|
Project-URL: Issues, https://github.com/Arize-ai/phoenix/issues
|
|
@@ -39,10 +39,12 @@ Requires-Dist: opentelemetry-proto>=1.12.0
|
|
|
39
39
|
Requires-Dist: opentelemetry-sdk
|
|
40
40
|
Requires-Dist: opentelemetry-semantic-conventions
|
|
41
41
|
Requires-Dist: pandas>=1.0
|
|
42
|
+
Requires-Dist: prometheus-client
|
|
42
43
|
Requires-Dist: protobuf<6.0,>=4.25.8
|
|
43
44
|
Requires-Dist: psutil
|
|
44
45
|
Requires-Dist: pyarrow
|
|
45
46
|
Requires-Dist: pydantic>=2.1.0
|
|
47
|
+
Requires-Dist: python-dateutil
|
|
46
48
|
Requires-Dist: python-multipart
|
|
47
49
|
Requires-Dist: scikit-learn
|
|
48
50
|
Requires-Dist: scipy
|
|
@@ -95,7 +97,6 @@ Requires-Dist: pandas-stubs==2.2.2.240603; extra == 'dev'
|
|
|
95
97
|
Requires-Dist: pandas>=1.0; extra == 'dev'
|
|
96
98
|
Requires-Dist: portpicker; extra == 'dev'
|
|
97
99
|
Requires-Dist: pre-commit; extra == 'dev'
|
|
98
|
-
Requires-Dist: prometheus-client; extra == 'dev'
|
|
99
100
|
Requires-Dist: psycopg[binary,pool]; extra == 'dev'
|
|
100
101
|
Requires-Dist: pytest-asyncio; extra == 'dev'
|
|
101
102
|
Requires-Dist: pytest-cov; extra == 'dev'
|
|
@@ -108,6 +109,7 @@ Requires-Dist: tabulate; extra == 'dev'
|
|
|
108
109
|
Requires-Dist: tox-uv==1.11.3; extra == 'dev'
|
|
109
110
|
Requires-Dist: tox==4.18.1; extra == 'dev'
|
|
110
111
|
Requires-Dist: types-jsonschema; extra == 'dev'
|
|
112
|
+
Requires-Dist: types-python-dateutil; extra == 'dev'
|
|
111
113
|
Requires-Dist: types-tabulate; extra == 'dev'
|
|
112
114
|
Requires-Dist: uv==0.7.12; extra == 'dev'
|
|
113
115
|
Requires-Dist: uvloop; (platform_system != 'Windows') and extra == 'dev'
|
|
@@ -59,6 +59,8 @@ dependencies = [
|
|
|
59
59
|
"authlib",
|
|
60
60
|
"arize-phoenix-client",
|
|
61
61
|
"email-validator",
|
|
62
|
+
"python-dateutil",
|
|
63
|
+
"prometheus_client",
|
|
62
64
|
]
|
|
63
65
|
dynamic = ["version"]
|
|
64
66
|
|
|
@@ -96,13 +98,13 @@ dev = [
|
|
|
96
98
|
"litellm>=1.0.3,<1.57.5", # windows compatibility broken on 1.57.5 (https://github.com/BerriAI/litellm/issues/7677)
|
|
97
99
|
"google-cloud-aiplatform>=1.3",
|
|
98
100
|
"anthropic>=0.49.0",
|
|
99
|
-
"prometheus_client",
|
|
100
101
|
"asgi-lifespan",
|
|
101
102
|
"Faker>=30.1.0",
|
|
102
103
|
"portpicker",
|
|
103
104
|
"uvloop; platform_system != 'Windows'",
|
|
104
105
|
"grpc-interceptor[testing]",
|
|
105
106
|
"types-jsonschema",
|
|
107
|
+
"types-python-dateutil",
|
|
106
108
|
]
|
|
107
109
|
embeddings = [
|
|
108
110
|
"fast-hdbscan>=0.2.0",
|
|
@@ -106,7 +106,24 @@ ENV_PHOENIX_DATABASE_ALLOCATED_STORAGE_CAPACITY_GIBIBYTES = (
|
|
|
106
106
|
)
|
|
107
107
|
"""
|
|
108
108
|
The allocated storage capacity for the Phoenix database in gibibytes (2^30 bytes). Use float for
|
|
109
|
-
fractional value.
|
|
109
|
+
fractional value.
|
|
110
|
+
"""
|
|
111
|
+
ENV_PHOENIX_DATABASE_USAGE_EMAIL_WARNING_THRESHOLD_PERCENTAGE = (
|
|
112
|
+
"PHOENIX_DATABASE_USAGE_EMAIL_WARNING_THRESHOLD_PERCENTAGE"
|
|
113
|
+
)
|
|
114
|
+
"""
|
|
115
|
+
The percentage of the allocated storage capacity that, when exceeded, triggers a email notifications
|
|
116
|
+
to admin users with valid email addresses. Must be specified in conjunction with allocated storage
|
|
117
|
+
capacity. This is a percentage value between 0 and 100. This setting is ignored if SMTP is not
|
|
118
|
+
configured.
|
|
119
|
+
"""
|
|
120
|
+
ENV_PHOENIX_DATABASE_USAGE_INSERTION_BLOCKING_THRESHOLD_PERCENTAGE = (
|
|
121
|
+
"PHOENIX_DATABASE_USAGE_INSERTION_BLOCKING_THRESHOLD_PERCENTAGE"
|
|
122
|
+
)
|
|
123
|
+
"""
|
|
124
|
+
The percentage of the allocated storage capacity that blocks insertions and updates of database
|
|
125
|
+
records when exceeded. Deletions are not blocked. Must be specified in conjunction with allocated
|
|
126
|
+
storage capacity. This is a percentage value between 0 and 100.
|
|
110
127
|
"""
|
|
111
128
|
ENV_PHOENIX_ENABLE_PROMETHEUS = "PHOENIX_ENABLE_PROMETHEUS"
|
|
112
129
|
"""
|
|
@@ -1312,7 +1329,36 @@ def get_env_database_schema() -> Optional[str]:
|
|
|
1312
1329
|
|
|
1313
1330
|
|
|
1314
1331
|
def get_env_database_allocated_storage_capacity_gibibytes() -> Optional[float]:
|
|
1315
|
-
|
|
1332
|
+
ans = _float_val(ENV_PHOENIX_DATABASE_ALLOCATED_STORAGE_CAPACITY_GIBIBYTES)
|
|
1333
|
+
if ans is not None and ans <= 0:
|
|
1334
|
+
raise ValueError(
|
|
1335
|
+
f"Invalid value for environment variable "
|
|
1336
|
+
f"{ENV_PHOENIX_DATABASE_ALLOCATED_STORAGE_CAPACITY_GIBIBYTES}: "
|
|
1337
|
+
f"{ans}. Value must be a positive number."
|
|
1338
|
+
)
|
|
1339
|
+
return ans
|
|
1340
|
+
|
|
1341
|
+
|
|
1342
|
+
def get_env_database_usage_email_warning_threshold_percentage() -> Optional[float]:
|
|
1343
|
+
ans = _float_val(ENV_PHOENIX_DATABASE_USAGE_EMAIL_WARNING_THRESHOLD_PERCENTAGE)
|
|
1344
|
+
if ans is not None and not (0 <= ans <= 100):
|
|
1345
|
+
raise ValueError(
|
|
1346
|
+
f"Invalid value for environment variable "
|
|
1347
|
+
f"{ENV_PHOENIX_DATABASE_USAGE_EMAIL_WARNING_THRESHOLD_PERCENTAGE}: "
|
|
1348
|
+
f"{ans}. Value must be a percentage between 0 and 100."
|
|
1349
|
+
)
|
|
1350
|
+
return ans
|
|
1351
|
+
|
|
1352
|
+
|
|
1353
|
+
def get_env_database_usage_insertion_blocking_threshold_percentage() -> Optional[float]:
|
|
1354
|
+
ans = _float_val(ENV_PHOENIX_DATABASE_USAGE_INSERTION_BLOCKING_THRESHOLD_PERCENTAGE)
|
|
1355
|
+
if ans is not None and not (0 <= ans <= 100):
|
|
1356
|
+
raise ValueError(
|
|
1357
|
+
f"Invalid value for environment variable "
|
|
1358
|
+
f"{ENV_PHOENIX_DATABASE_USAGE_INSERTION_BLOCKING_THRESHOLD_PERCENTAGE}: "
|
|
1359
|
+
f"{ans}. Value must be a percentage between 0 and 100."
|
|
1360
|
+
)
|
|
1361
|
+
return ans
|
|
1316
1362
|
|
|
1317
1363
|
|
|
1318
1364
|
def get_env_enable_prometheus() -> bool:
|
|
@@ -1558,6 +1604,9 @@ def verify_server_environment_variables() -> None:
|
|
|
1558
1604
|
get_env_root_url()
|
|
1559
1605
|
get_env_phoenix_secret()
|
|
1560
1606
|
get_env_phoenix_admin_secret()
|
|
1607
|
+
get_env_database_allocated_storage_capacity_gibibytes()
|
|
1608
|
+
get_env_database_usage_email_warning_threshold_percentage()
|
|
1609
|
+
get_env_database_usage_insertion_blocking_threshold_percentage()
|
|
1561
1610
|
|
|
1562
1611
|
# Notify users about deprecated environment variables if they are being used.
|
|
1563
1612
|
if os.getenv("PHOENIX_ENABLE_WEBSOCKETS") is not None:
|
|
@@ -406,17 +406,6 @@ async def _ensure_model_costs(db: DbSessionFactory) -> None:
|
|
|
406
406
|
with open(_COST_MODEL_MANIFEST) as f:
|
|
407
407
|
manifest = json.load(f)
|
|
408
408
|
|
|
409
|
-
# Define all supported token types with their prompt/non-prompt classification
|
|
410
|
-
# This determines how tokens are categorized for billing purposes
|
|
411
|
-
token_types: list[_TokenTypeKey] = [
|
|
412
|
-
_TokenTypeKey("input", True), # Standard input tokens
|
|
413
|
-
_TokenTypeKey("cache_write", True), # Tokens written to cache
|
|
414
|
-
_TokenTypeKey("cache_read", True), # Tokens read from cache
|
|
415
|
-
_TokenTypeKey("output", False), # Generated output tokens
|
|
416
|
-
_TokenTypeKey("audio", True), # Audio input tokens
|
|
417
|
-
_TokenTypeKey("audio", False), # Audio output tokens
|
|
418
|
-
]
|
|
419
|
-
|
|
420
409
|
async with db() as session:
|
|
421
410
|
# Fetch all existing built-in models with their token prices eagerly loaded
|
|
422
411
|
# Using .unique() to deduplicate models when multiple token prices are joined
|
|
@@ -435,9 +424,8 @@ async def _ensure_model_costs(db: DbSessionFactory) -> None:
|
|
|
435
424
|
seen_names: set[str] = set()
|
|
436
425
|
seen_patterns: set[tuple[re.Pattern[str], str]] = set()
|
|
437
426
|
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
name = str(model_data.get("model") or "").strip()
|
|
427
|
+
for model_data in manifest["models"]:
|
|
428
|
+
name = str(model_data.get("name") or "").strip()
|
|
441
429
|
if not name:
|
|
442
430
|
logger.warning("Skipping model with empty name in manifest")
|
|
443
431
|
continue
|
|
@@ -445,7 +433,7 @@ async def _ensure_model_costs(db: DbSessionFactory) -> None:
|
|
|
445
433
|
logger.warning(f"Skipping model '{name}' with duplicate name in manifest")
|
|
446
434
|
continue
|
|
447
435
|
seen_names.add(name)
|
|
448
|
-
regex = str(model_data.get("
|
|
436
|
+
regex = str(model_data.get("name_pattern") or "").strip()
|
|
449
437
|
try:
|
|
450
438
|
pattern = re.compile(regex)
|
|
451
439
|
except re.error as e:
|
|
@@ -460,7 +448,7 @@ async def _ensure_model_costs(db: DbSessionFactory) -> None:
|
|
|
460
448
|
seen_patterns.add((pattern, provider))
|
|
461
449
|
# Remove model from built_in_models dict (for cleanup tracking)
|
|
462
450
|
# or create new model if not found
|
|
463
|
-
model = built_in_models.pop(model_data["
|
|
451
|
+
model = built_in_models.pop(model_data["name"], None)
|
|
464
452
|
if model is None:
|
|
465
453
|
# Create new built-in model from manifest data
|
|
466
454
|
model = models.GenerativeModel(
|
|
@@ -477,24 +465,27 @@ async def _ensure_model_costs(db: DbSessionFactory) -> None:
|
|
|
477
465
|
|
|
478
466
|
# Create lookup table for existing token prices by (token_type, is_prompt)
|
|
479
467
|
# Using pop() during iteration allows us to track which prices are no longer needed
|
|
480
|
-
|
|
468
|
+
existing_token_prices = {
|
|
481
469
|
_TokenTypeKey(token_price.token_type, token_price.is_prompt): token_price
|
|
482
470
|
for token_price in model.token_prices
|
|
483
471
|
}
|
|
484
472
|
|
|
485
473
|
# Synchronize token prices for all supported token types
|
|
486
|
-
for
|
|
474
|
+
for manifest_token_price in model_data["token_prices"]:
|
|
487
475
|
# Skip if this token type has no rate in the manifest
|
|
488
|
-
if not (base_rate :=
|
|
476
|
+
if not (base_rate := manifest_token_price.get("base_rate")):
|
|
489
477
|
continue
|
|
490
478
|
|
|
491
|
-
key = _TokenTypeKey(
|
|
479
|
+
key = _TokenTypeKey(
|
|
480
|
+
manifest_token_price["token_type"],
|
|
481
|
+
manifest_token_price["is_prompt"],
|
|
482
|
+
)
|
|
492
483
|
# Remove from tracking dict and get existing price (if any)
|
|
493
|
-
if not (token_price :=
|
|
484
|
+
if not (token_price := existing_token_prices.pop(key, None)):
|
|
494
485
|
# Create new token price if it doesn't exist
|
|
495
486
|
token_price = models.TokenPrice(
|
|
496
|
-
token_type=token_type,
|
|
497
|
-
is_prompt=is_prompt,
|
|
487
|
+
token_type=manifest_token_price["token_type"],
|
|
488
|
+
is_prompt=manifest_token_price["is_prompt"],
|
|
498
489
|
base_rate=base_rate,
|
|
499
490
|
)
|
|
500
491
|
model.token_prices.append(token_price)
|
|
@@ -504,7 +495,7 @@ async def _ensure_model_costs(db: DbSessionFactory) -> None:
|
|
|
504
495
|
|
|
505
496
|
# Remove any token prices that are no longer in the manifest
|
|
506
497
|
# These are prices that weren't popped from the token_prices dict above
|
|
507
|
-
for token_price in
|
|
498
|
+
for token_price in existing_token_prices.values():
|
|
508
499
|
model.token_prices.remove(token_price)
|
|
509
500
|
|
|
510
501
|
# Clean up built-in models that are no longer in the manifest
|
|
@@ -29,7 +29,7 @@ class IsLocked(Authorization):
|
|
|
29
29
|
message = "Operations that write or modify data are locked"
|
|
30
30
|
|
|
31
31
|
def has_permission(self, source: Any, info: Info, **kwargs: Any) -> bool:
|
|
32
|
-
return not info.context.
|
|
32
|
+
return not info.context.db.should_not_insert_or_update
|
|
33
33
|
|
|
34
34
|
|
|
35
35
|
MSG_ADMIN_ONLY = "Only admin can perform this action"
|
|
@@ -25,7 +25,7 @@ from phoenix.db.helpers import SupportedSQLDialect, exclude_experiment_projects
|
|
|
25
25
|
from phoenix.pointcloud.clustering import Hdbscan
|
|
26
26
|
from phoenix.server.api.auth import MSG_ADMIN_ONLY, IsAdmin
|
|
27
27
|
from phoenix.server.api.context import Context
|
|
28
|
-
from phoenix.server.api.exceptions import NotFound, Unauthorized
|
|
28
|
+
from phoenix.server.api.exceptions import BadRequest, NotFound, Unauthorized
|
|
29
29
|
from phoenix.server.api.helpers import ensure_list
|
|
30
30
|
from phoenix.server.api.helpers.experiment_run_filters import (
|
|
31
31
|
ExperimentRunFilterConditionSyntaxError,
|
|
@@ -62,7 +62,13 @@ from phoenix.server.api.types.GenerativeProvider import GenerativeProvider, Gene
|
|
|
62
62
|
from phoenix.server.api.types.InferenceModel import InferenceModel
|
|
63
63
|
from phoenix.server.api.types.InferencesRole import AncillaryInferencesRole, InferencesRole
|
|
64
64
|
from phoenix.server.api.types.node import from_global_id, from_global_id_with_expected_type
|
|
65
|
-
from phoenix.server.api.types.pagination import
|
|
65
|
+
from phoenix.server.api.types.pagination import (
|
|
66
|
+
ConnectionArgs,
|
|
67
|
+
Cursor,
|
|
68
|
+
CursorString,
|
|
69
|
+
connection_from_cursors_and_nodes,
|
|
70
|
+
connection_from_list,
|
|
71
|
+
)
|
|
66
72
|
from phoenix.server.api.types.PlaygroundModel import PlaygroundModel
|
|
67
73
|
from phoenix.server.api.types.Project import Project
|
|
68
74
|
from phoenix.server.api.types.ProjectSession import ProjectSession, to_gql_project_session
|
|
@@ -349,7 +355,10 @@ class Query:
|
|
|
349
355
|
for experiment_id in experiment_ids
|
|
350
356
|
]
|
|
351
357
|
if len(set(experiment_ids_)) != len(experiment_ids_):
|
|
352
|
-
raise
|
|
358
|
+
raise BadRequest("Experiment IDs must be unique.")
|
|
359
|
+
|
|
360
|
+
cursor = Cursor.from_string(after) if after else None
|
|
361
|
+
page_size = first or 50
|
|
353
362
|
|
|
354
363
|
async with info.context.db() as session:
|
|
355
364
|
validation_result = (
|
|
@@ -371,13 +380,13 @@ class Query:
|
|
|
371
380
|
)
|
|
372
381
|
).first()
|
|
373
382
|
if validation_result is None:
|
|
374
|
-
raise
|
|
383
|
+
raise NotFound("No experiments could be found for input IDs.")
|
|
375
384
|
|
|
376
385
|
num_datasets, dataset_id, version_id, num_resolved_experiment_ids = validation_result
|
|
377
386
|
if num_datasets != 1:
|
|
378
|
-
raise
|
|
387
|
+
raise BadRequest("Experiments must belong to the same dataset.")
|
|
379
388
|
if num_resolved_experiment_ids != len(experiment_ids_):
|
|
380
|
-
raise
|
|
389
|
+
raise NotFound("Unable to resolve one or more experiment IDs.")
|
|
381
390
|
|
|
382
391
|
revision_ids = (
|
|
383
392
|
select(func.max(models.DatasetExampleRevision.id))
|
|
@@ -407,7 +416,10 @@ class Query:
|
|
|
407
416
|
),
|
|
408
417
|
)
|
|
409
418
|
.order_by(models.DatasetExample.id.desc())
|
|
419
|
+
.limit(page_size + 1)
|
|
410
420
|
)
|
|
421
|
+
if cursor is not None:
|
|
422
|
+
examples_query = examples_query.where(models.DatasetExample.id < cursor.rowid)
|
|
411
423
|
|
|
412
424
|
if filter_condition:
|
|
413
425
|
examples_query = update_examples_query_with_filter_condition(
|
|
@@ -417,6 +429,8 @@ class Query:
|
|
|
417
429
|
)
|
|
418
430
|
|
|
419
431
|
examples = (await session.scalars(examples_query)).all()
|
|
432
|
+
has_next_page = len(examples) > page_size
|
|
433
|
+
examples = examples[:page_size]
|
|
420
434
|
|
|
421
435
|
ExampleID: TypeAlias = int
|
|
422
436
|
ExperimentID: TypeAlias = int
|
|
@@ -437,7 +451,7 @@ class Query:
|
|
|
437
451
|
):
|
|
438
452
|
runs[run.dataset_example_id][run.experiment_id].append(run)
|
|
439
453
|
|
|
440
|
-
|
|
454
|
+
cursors_and_nodes = []
|
|
441
455
|
for example in examples:
|
|
442
456
|
run_comparison_items = []
|
|
443
457
|
for experiment_id in experiment_ids_:
|
|
@@ -452,23 +466,21 @@ class Query:
|
|
|
452
466
|
],
|
|
453
467
|
)
|
|
454
468
|
)
|
|
455
|
-
|
|
456
|
-
|
|
469
|
+
experiment_comparison = ExperimentComparison(
|
|
470
|
+
id_attr=example.id,
|
|
471
|
+
example=DatasetExample(
|
|
457
472
|
id_attr=example.id,
|
|
458
|
-
example
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
),
|
|
463
|
-
run_comparison_items=run_comparison_items,
|
|
464
|
-
)
|
|
473
|
+
created_at=example.created_at,
|
|
474
|
+
version_id=version_id,
|
|
475
|
+
),
|
|
476
|
+
run_comparison_items=run_comparison_items,
|
|
465
477
|
)
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
478
|
+
cursors_and_nodes.append((Cursor(rowid=example.id), experiment_comparison))
|
|
479
|
+
|
|
480
|
+
return connection_from_cursors_and_nodes(
|
|
481
|
+
cursors_and_nodes=cursors_and_nodes,
|
|
482
|
+
has_previous_page=False,
|
|
483
|
+
has_next_page=has_next_page,
|
|
472
484
|
)
|
|
473
485
|
|
|
474
486
|
@strawberry.field
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import logging
|
|
2
2
|
from typing import Annotated, List, Literal, Optional, Union
|
|
3
3
|
|
|
4
|
-
from fastapi import APIRouter, HTTPException, Path, Query
|
|
4
|
+
from fastapi import APIRouter, Depends, HTTPException, Path, Query
|
|
5
5
|
from pydantic import Field, RootModel
|
|
6
6
|
from sqlalchemy import delete, select
|
|
7
7
|
from sqlalchemy.exc import IntegrityError as PostgreSQLIntegrityError
|
|
@@ -44,6 +44,7 @@ from phoenix.server.api.types.AnnotationConfig import (
|
|
|
44
44
|
from phoenix.server.api.types.AnnotationConfig import (
|
|
45
45
|
FreeformAnnotationConfig as FreeformAnnotationConfigType,
|
|
46
46
|
)
|
|
47
|
+
from phoenix.server.authorization import is_not_locked
|
|
47
48
|
|
|
48
49
|
logger = logging.getLogger(__name__)
|
|
49
50
|
|
|
@@ -268,6 +269,7 @@ async def get_annotation_config_by_name_or_id(
|
|
|
268
269
|
|
|
269
270
|
@router.post(
|
|
270
271
|
"/annotation_configs",
|
|
272
|
+
dependencies=[Depends(is_not_locked)],
|
|
271
273
|
summary="Create an annotation configuration",
|
|
272
274
|
)
|
|
273
275
|
async def create_annotation_config(
|
|
@@ -302,6 +304,7 @@ async def create_annotation_config(
|
|
|
302
304
|
|
|
303
305
|
@router.put(
|
|
304
306
|
"/annotation_configs/{config_id}",
|
|
307
|
+
dependencies=[Depends(is_not_locked)],
|
|
305
308
|
summary="Update an annotation configuration",
|
|
306
309
|
)
|
|
307
310
|
async def update_annotation_config(
|
|
@@ -15,7 +15,7 @@ from typing import Any, Optional, Union, cast
|
|
|
15
15
|
|
|
16
16
|
import pandas as pd
|
|
17
17
|
import pyarrow as pa
|
|
18
|
-
from fastapi import APIRouter, BackgroundTasks, HTTPException, Path, Query
|
|
18
|
+
from fastapi import APIRouter, BackgroundTasks, Depends, HTTPException, Path, Query
|
|
19
19
|
from fastapi.responses import PlainTextResponse, StreamingResponse
|
|
20
20
|
from sqlalchemy import and_, delete, func, select
|
|
21
21
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
@@ -47,6 +47,7 @@ from phoenix.server.api.types.DatasetExample import DatasetExample as DatasetExa
|
|
|
47
47
|
from phoenix.server.api.types.DatasetVersion import DatasetVersion as DatasetVersionNodeType
|
|
48
48
|
from phoenix.server.api.types.node import from_global_id_with_expected_type
|
|
49
49
|
from phoenix.server.api.utils import delete_projects, delete_traces
|
|
50
|
+
from phoenix.server.authorization import is_not_locked
|
|
50
51
|
from phoenix.server.dml_event import DatasetInsertEvent
|
|
51
52
|
|
|
52
53
|
from .models import V1RoutesBaseModel
|
|
@@ -326,6 +327,7 @@ class UploadDatasetResponseBody(ResponseBody[UploadDatasetData]):
|
|
|
326
327
|
|
|
327
328
|
@router.post(
|
|
328
329
|
"/datasets/upload",
|
|
330
|
+
dependencies=[Depends(is_not_locked)],
|
|
329
331
|
operation_id="uploadDataset",
|
|
330
332
|
summary="Upload dataset from JSON, CSV, or PyArrow",
|
|
331
333
|
responses=add_errors_to_responses(
|
{arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/routers/v1/evaluations.py
RENAMED
|
@@ -5,7 +5,7 @@ from typing import Any, Iterator, Optional, Union, cast
|
|
|
5
5
|
|
|
6
6
|
import pandas as pd
|
|
7
7
|
import pyarrow as pa
|
|
8
|
-
from fastapi import APIRouter, Header, HTTPException, Query
|
|
8
|
+
from fastapi import APIRouter, Depends, Header, HTTPException, Query
|
|
9
9
|
from google.protobuf.message import DecodeError
|
|
10
10
|
from pandas import DataFrame
|
|
11
11
|
from sqlalchemy import select
|
|
@@ -28,6 +28,7 @@ from phoenix.db import models
|
|
|
28
28
|
from phoenix.db.insertion.types import Precursors
|
|
29
29
|
from phoenix.exceptions import PhoenixEvaluationNameIsMissing
|
|
30
30
|
from phoenix.server.api.routers.utils import table_to_bytes
|
|
31
|
+
from phoenix.server.authorization import is_not_locked
|
|
31
32
|
from phoenix.server.types import DbSessionFactory
|
|
32
33
|
from phoenix.trace.span_evaluations import (
|
|
33
34
|
DocumentEvaluations,
|
|
@@ -45,6 +46,7 @@ router = APIRouter(tags=["traces"], include_in_schema=True)
|
|
|
45
46
|
|
|
46
47
|
@router.post(
|
|
47
48
|
"/evaluations",
|
|
49
|
+
dependencies=[Depends(is_not_locked)],
|
|
48
50
|
operation_id="addEvaluations",
|
|
49
51
|
summary="Add span, trace, or document evaluations",
|
|
50
52
|
status_code=HTTP_204_NO_CONTENT,
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from datetime import datetime
|
|
2
2
|
from typing import Any, Literal, Optional
|
|
3
3
|
|
|
4
|
+
from dateutil.parser import isoparse
|
|
4
5
|
from fastapi import APIRouter, HTTPException
|
|
5
6
|
from pydantic import Field
|
|
6
7
|
from starlette.requests import Request
|
|
@@ -95,8 +96,8 @@ async def upsert_experiment_evaluation(
|
|
|
95
96
|
explanation=explanation,
|
|
96
97
|
error=error,
|
|
97
98
|
metadata_=metadata, # `metadata_` must match database
|
|
98
|
-
start_time=
|
|
99
|
-
end_time=
|
|
99
|
+
start_time=isoparse(start_time),
|
|
100
|
+
end_time=isoparse(end_time),
|
|
100
101
|
trace_id=payload.get("trace_id"),
|
|
101
102
|
)
|
|
102
103
|
dialect = SupportedSQLDialect(session.bind.dialect.name)
|
{arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/routers/v1/experiment_runs.py
RENAMED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from datetime import datetime
|
|
2
2
|
from typing import Any, Optional
|
|
3
3
|
|
|
4
|
-
from fastapi import APIRouter, HTTPException
|
|
4
|
+
from fastapi import APIRouter, Depends, HTTPException
|
|
5
5
|
from pydantic import Field
|
|
6
6
|
from sqlalchemy import select
|
|
7
7
|
from sqlalchemy.exc import IntegrityError as PostgreSQLIntegrityError
|
|
@@ -13,6 +13,7 @@ from strawberry.relay import GlobalID
|
|
|
13
13
|
from phoenix.db import models
|
|
14
14
|
from phoenix.db.models import ExperimentRunOutput
|
|
15
15
|
from phoenix.server.api.types.node import from_global_id_with_expected_type
|
|
16
|
+
from phoenix.server.authorization import is_not_locked
|
|
16
17
|
from phoenix.server.dml_event import ExperimentRunInsertEvent
|
|
17
18
|
|
|
18
19
|
from .models import V1RoutesBaseModel
|
|
@@ -52,6 +53,7 @@ class CreateExperimentRunResponseBody(ResponseBody[CreateExperimentRunResponseBo
|
|
|
52
53
|
|
|
53
54
|
@router.post(
|
|
54
55
|
"/experiments/{experiment_id}/runs",
|
|
56
|
+
dependencies=[Depends(is_not_locked)],
|
|
55
57
|
operation_id="createExperimentRun",
|
|
56
58
|
summary="Create run for an experiment",
|
|
57
59
|
response_description="Experiment run created successfully",
|
{arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/routers/v1/experiments.py
RENAMED
|
@@ -4,7 +4,7 @@ from random import getrandbits
|
|
|
4
4
|
from typing import Any, Optional
|
|
5
5
|
|
|
6
6
|
import pandas as pd
|
|
7
|
-
from fastapi import APIRouter, HTTPException, Path, Response
|
|
7
|
+
from fastapi import APIRouter, Depends, HTTPException, Path, Response
|
|
8
8
|
from pydantic import Field
|
|
9
9
|
from sqlalchemy import and_, func, select
|
|
10
10
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
@@ -18,6 +18,7 @@ from phoenix.db import models
|
|
|
18
18
|
from phoenix.db.helpers import SupportedSQLDialect
|
|
19
19
|
from phoenix.db.insertion.helpers import insert_on_conflict
|
|
20
20
|
from phoenix.server.api.types.node import from_global_id_with_expected_type
|
|
21
|
+
from phoenix.server.authorization import is_not_locked
|
|
21
22
|
from phoenix.server.dml_event import ExperimentInsertEvent
|
|
22
23
|
|
|
23
24
|
from .models import V1RoutesBaseModel
|
|
@@ -86,6 +87,7 @@ class CreateExperimentResponseBody(ResponseBody[Experiment]):
|
|
|
86
87
|
|
|
87
88
|
@router.post(
|
|
88
89
|
"/datasets/{dataset_id}/experiments",
|
|
90
|
+
dependencies=[Depends(is_not_locked)],
|
|
89
91
|
operation_id="createExperiment",
|
|
90
92
|
summary="Create experiment on a dataset",
|
|
91
93
|
responses=add_errors_to_responses(
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from typing import Optional
|
|
2
2
|
|
|
3
|
-
from fastapi import APIRouter, HTTPException, Path, Query
|
|
3
|
+
from fastapi import APIRouter, Depends, HTTPException, Path, Query
|
|
4
4
|
from pydantic import Field
|
|
5
5
|
from sqlalchemy import select
|
|
6
6
|
from starlette.requests import Request
|
|
@@ -23,6 +23,7 @@ from phoenix.server.api.routers.v1.utils import (
|
|
|
23
23
|
add_errors_to_responses,
|
|
24
24
|
)
|
|
25
25
|
from phoenix.server.api.types.Project import Project as ProjectNodeType
|
|
26
|
+
from phoenix.server.authorization import is_not_locked
|
|
26
27
|
|
|
27
28
|
router = APIRouter(tags=["projects"])
|
|
28
29
|
|
|
@@ -173,6 +174,7 @@ async def get_project(
|
|
|
173
174
|
|
|
174
175
|
@router.post(
|
|
175
176
|
"/projects",
|
|
177
|
+
dependencies=[Depends(is_not_locked)],
|
|
176
178
|
operation_id="createProject",
|
|
177
179
|
summary="Create a new project", # noqa: E501
|
|
178
180
|
description="Create a new project with the specified configuration.", # noqa: E501
|
|
@@ -213,6 +215,7 @@ async def create_project(
|
|
|
213
215
|
|
|
214
216
|
@router.put(
|
|
215
217
|
"/projects/{project_identifier}",
|
|
218
|
+
dependencies=[Depends(is_not_locked)],
|
|
216
219
|
operation_id="updateProject",
|
|
217
220
|
summary="Update a project by ID or name", # noqa: E501
|
|
218
221
|
description="Update an existing project with new configuration. Project names cannot be changed. The project identifier is either project ID or project name. Note: When using a project name as the identifier, it cannot contain slash (/), question mark (?), or pound sign (#) characters.", # noqa: E501
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import logging
|
|
2
2
|
from typing import Any, Optional, Union
|
|
3
3
|
|
|
4
|
-
from fastapi import APIRouter, HTTPException, Path, Query
|
|
4
|
+
from fastapi import APIRouter, Depends, HTTPException, Path, Query
|
|
5
5
|
from pydantic import ValidationError, model_validator
|
|
6
6
|
from sqlalchemy import select
|
|
7
7
|
from sqlalchemy.sql import Select
|
|
@@ -33,6 +33,7 @@ from phoenix.server.api.types.node import from_global_id_with_expected_type
|
|
|
33
33
|
from phoenix.server.api.types.Prompt import Prompt as PromptNodeType
|
|
34
34
|
from phoenix.server.api.types.PromptVersion import PromptVersion as PromptVersionNodeType
|
|
35
35
|
from phoenix.server.api.types.PromptVersionTag import PromptVersionTag as PromptVersionTagNodeType
|
|
36
|
+
from phoenix.server.authorization import is_not_locked
|
|
36
37
|
from phoenix.server.bearer_auth import PhoenixUser
|
|
37
38
|
|
|
38
39
|
logger = logging.getLogger(__name__)
|
|
@@ -393,6 +394,7 @@ async def get_prompt_version_by_latest(
|
|
|
393
394
|
|
|
394
395
|
@router.post(
|
|
395
396
|
"/prompts",
|
|
397
|
+
dependencies=[Depends(is_not_locked)],
|
|
396
398
|
operation_id="postPromptVersion",
|
|
397
399
|
summary="Create a new prompt",
|
|
398
400
|
description="Create a new prompt and its initial version. A prompt can have multiple versions.",
|
|
@@ -602,6 +604,7 @@ async def list_prompt_version_tags(
|
|
|
602
604
|
|
|
603
605
|
@router.post(
|
|
604
606
|
"/prompt_versions/{prompt_version_id}/tags",
|
|
607
|
+
dependencies=[Depends(is_not_locked)],
|
|
605
608
|
operation_id="createPromptVersionTag",
|
|
606
609
|
summary="Add tag to prompt version",
|
|
607
610
|
description="Add a new tag to a specific prompt version. Tags help identify and categorize "
|
|
@@ -8,7 +8,7 @@ from secrets import token_urlsafe
|
|
|
8
8
|
from typing import Annotated, Any, Literal, Optional, Union
|
|
9
9
|
|
|
10
10
|
import pandas as pd
|
|
11
|
-
from fastapi import APIRouter, Header, HTTPException, Path, Query
|
|
11
|
+
from fastapi import APIRouter, Depends, Header, HTTPException, Path, Query
|
|
12
12
|
from pydantic import BaseModel, Field
|
|
13
13
|
from sqlalchemy import select
|
|
14
14
|
from starlette.requests import Request
|
|
@@ -28,6 +28,7 @@ from phoenix.db.helpers import SupportedSQLDialect
|
|
|
28
28
|
from phoenix.db.insertion.helpers import as_kv, insert_on_conflict
|
|
29
29
|
from phoenix.db.insertion.types import Precursors
|
|
30
30
|
from phoenix.server.api.routers.utils import df_to_bytes
|
|
31
|
+
from phoenix.server.authorization import is_not_locked
|
|
31
32
|
from phoenix.server.bearer_auth import PhoenixUser
|
|
32
33
|
from phoenix.server.dml_event import SpanAnnotationInsertEvent
|
|
33
34
|
from phoenix.trace.attributes import flatten
|
|
@@ -907,6 +908,7 @@ class AnnotateSpansResponseBody(ResponseBody[list[InsertedSpanAnnotation]]):
|
|
|
907
908
|
|
|
908
909
|
@router.post(
|
|
909
910
|
"/span_annotations",
|
|
911
|
+
dependencies=[Depends(is_not_locked)],
|
|
910
912
|
operation_id="annotateSpans",
|
|
911
913
|
summary="Create span annotations",
|
|
912
914
|
responses=add_errors_to_responses(
|
|
@@ -990,6 +992,7 @@ class CreateSpansResponseBody(V1RoutesBaseModel):
|
|
|
990
992
|
|
|
991
993
|
@router.post(
|
|
992
994
|
"/projects/{project_identifier}/spans",
|
|
995
|
+
dependencies=[Depends(is_not_locked)],
|
|
993
996
|
operation_id="createSpans",
|
|
994
997
|
summary="Create spans",
|
|
995
998
|
description=(
|
|
@@ -2,7 +2,7 @@ import gzip
|
|
|
2
2
|
import zlib
|
|
3
3
|
from typing import Any, Literal, Optional
|
|
4
4
|
|
|
5
|
-
from fastapi import APIRouter, BackgroundTasks, Header, HTTPException, Query
|
|
5
|
+
from fastapi import APIRouter, BackgroundTasks, Depends, Header, HTTPException, Query
|
|
6
6
|
from google.protobuf.message import DecodeError
|
|
7
7
|
from opentelemetry.proto.collector.trace.v1.trace_service_pb2 import (
|
|
8
8
|
ExportTraceServiceRequest,
|
|
@@ -24,6 +24,7 @@ from strawberry.relay import GlobalID
|
|
|
24
24
|
from phoenix.db import models
|
|
25
25
|
from phoenix.db.insertion.helpers import as_kv
|
|
26
26
|
from phoenix.db.insertion.types import Precursors
|
|
27
|
+
from phoenix.server.authorization import is_not_locked
|
|
27
28
|
from phoenix.server.bearer_auth import PhoenixUser
|
|
28
29
|
from phoenix.server.dml_event import TraceAnnotationInsertEvent
|
|
29
30
|
from phoenix.trace.otel import decode_otlp_span
|
|
@@ -37,6 +38,7 @@ router = APIRouter(tags=["traces"])
|
|
|
37
38
|
|
|
38
39
|
@router.post(
|
|
39
40
|
"/traces",
|
|
41
|
+
dependencies=[Depends(is_not_locked)],
|
|
40
42
|
operation_id="addTraces",
|
|
41
43
|
summary="Send traces",
|
|
42
44
|
responses=add_errors_to_responses(
|
|
@@ -160,6 +162,7 @@ class AnnotateTracesResponseBody(ResponseBody[list[InsertedTraceAnnotation]]):
|
|
|
160
162
|
|
|
161
163
|
@router.post(
|
|
162
164
|
"/trace_annotations",
|
|
165
|
+
dependencies=[Depends(is_not_locked)],
|
|
163
166
|
operation_id="annotateTraces",
|
|
164
167
|
summary="Create trace annotations",
|
|
165
168
|
responses=add_errors_to_responses(
|
|
@@ -43,7 +43,7 @@ from phoenix.server.api.routers.v1.utils import (
|
|
|
43
43
|
add_errors_to_responses,
|
|
44
44
|
)
|
|
45
45
|
from phoenix.server.api.types.node import from_global_id_with_expected_type
|
|
46
|
-
from phoenix.server.authorization import require_admin
|
|
46
|
+
from phoenix.server.authorization import is_not_locked, require_admin
|
|
47
47
|
|
|
48
48
|
logger = logging.getLogger(__name__)
|
|
49
49
|
|
|
@@ -194,7 +194,7 @@ async def list_users(
|
|
|
194
194
|
HTTP_422_UNPROCESSABLE_ENTITY,
|
|
195
195
|
]
|
|
196
196
|
),
|
|
197
|
-
dependencies=[Depends(require_admin)],
|
|
197
|
+
dependencies=[Depends(require_admin), Depends(is_not_locked)],
|
|
198
198
|
response_model_by_alias=True,
|
|
199
199
|
response_model_exclude_unset=True,
|
|
200
200
|
response_model_exclude_defaults=True,
|