arize-phoenix 11.7.0__tar.gz → 11.8.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.7.0 → arize_phoenix-11.8.0}/PKG-INFO +14 -2
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/README.md +13 -1
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/config.py +33 -0
- arize_phoenix-11.8.0/src/phoenix/datetime_utils.py +226 -0
- arize_phoenix-11.8.0/src/phoenix/db/helpers.py +330 -0
- arize_phoenix-11.8.0/src/phoenix/server/api/auth.py +75 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_experiment.py +6 -7
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/exceptions.py +6 -0
- arize_phoenix-11.8.0/src/phoenix/server/api/input_types/TimeBinConfig.py +23 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/routers/oauth2.py +19 -2
- arize_phoenix-11.8.0/src/phoenix/server/api/types/CostBreakdown.py +12 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/Project.py +341 -73
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/app.py +7 -3
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/authorization.py +27 -2
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/cost_tracking/cost_details_calculator.py +22 -16
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/daemons/span_cost_calculator.py +2 -8
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/email/sender.py +2 -1
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/email/templates/db_disk_usage_notification.html +3 -0
- arize_phoenix-11.8.0/src/phoenix/server/static/.vite/manifest.json +87 -0
- arize_phoenix-11.7.0/src/phoenix/server/static/assets/components-J3qjrjBf.js → arize_phoenix-11.8.0/src/phoenix/server/static/assets/components-5M9nebi4.js +344 -263
- arize_phoenix-11.7.0/src/phoenix/server/static/assets/index-CEObsQf_.js → arize_phoenix-11.8.0/src/phoenix/server/static/assets/index-OU2WTnGN.js +11 -11
- arize_phoenix-11.7.0/src/phoenix/server/static/assets/pages-CW1UdBht.js → arize_phoenix-11.8.0/src/phoenix/server/static/assets/pages-DF8rqxJ4.js +451 -444
- arize_phoenix-11.7.0/src/phoenix/server/static/assets/vendor-BnPh9i9e.js → arize_phoenix-11.8.0/src/phoenix/server/static/assets/vendor-Bl7CyFDw.js +147 -147
- arize_phoenix-11.7.0/src/phoenix/server/static/assets/vendor-arizeai-Cr9o_Iu_.js → arize_phoenix-11.8.0/src/phoenix/server/static/assets/vendor-arizeai-B_viEUUA.js +18 -480
- arize_phoenix-11.7.0/src/phoenix/server/static/assets/vendor-codemirror-k3zCIjlN.js → arize_phoenix-11.8.0/src/phoenix/server/static/assets/vendor-codemirror-vlcH1_iR.js +1 -1
- arize_phoenix-11.7.0/src/phoenix/server/static/assets/vendor-recharts-BdblEuGB.js → arize_phoenix-11.8.0/src/phoenix/server/static/assets/vendor-recharts-C9cQu72o.js +25 -25
- arize_phoenix-11.7.0/src/phoenix/server/static/assets/vendor-shiki-DPtuv2M4.js → arize_phoenix-11.8.0/src/phoenix/server/static/assets/vendor-shiki-BsknB7bv.js +1 -1
- arize_phoenix-11.8.0/src/phoenix/version.py +1 -0
- arize_phoenix-11.7.0/src/phoenix/datetime_utils.py +0 -115
- arize_phoenix-11.7.0/src/phoenix/db/helpers.py +0 -175
- arize_phoenix-11.7.0/src/phoenix/server/api/auth.py +0 -53
- arize_phoenix-11.7.0/src/phoenix/server/api/types/CostBreakdown.py +0 -15
- arize_phoenix-11.7.0/src/phoenix/server/static/.vite/manifest.json +0 -87
- arize_phoenix-11.7.0/src/phoenix/version.py +0 -1
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/.gitignore +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/IP_NOTICE +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/LICENSE +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/pyproject.toml +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/__init__.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/auth.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/core/__init__.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/core/embedding_dimension.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/core/model.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/core/model_schema.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/core/model_schema_adapter.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/db/README.md +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/db/__init__.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/db/alembic.ini +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/db/bulk_inserter.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/db/constants.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/db/engines.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/db/enums.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/db/facilitator.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/db/insertion/__init__.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/db/insertion/constants.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/db/insertion/dataset.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/db/insertion/document_annotation.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/db/insertion/evaluation.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/db/insertion/helpers.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/db/insertion/span.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/db/insertion/span_annotation.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/db/insertion/trace_annotation.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/db/insertion/types.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/db/migrate.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/db/migrations/__init__.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/db/migrations/data_migration_scripts/__init__.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/db/migrations/data_migration_scripts/populate_project_sessions.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/db/migrations/env.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/db/migrations/script.py.mako +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/db/migrations/versions/10460e46d750_datasets.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/db/migrations/versions/2f9d1a65945f_annotation_config_migration.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/db/migrations/versions/3be8647b87d8_add_token_columns_to_spans_table.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/db/migrations/versions/4ded9e43755f_create_project_sessions_table.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/db/migrations/versions/6a88424799fe_update_users_with_auth_method.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/db/migrations/versions/8a3764fe7f1a_change_jsonb_to_json_for_prompts.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/db/migrations/versions/a20694b15f82_cost.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/db/migrations/versions/bb8139330879_create_project_trace_retention_policies_table.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/db/migrations/versions/bc8fea3c2bc8_add_prompt_tables.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/db/migrations/versions/cd164e83824f_users_and_tokens.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/db/migrations/versions/cf03bd6bae1d_init.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/db/models.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/db/pg_config.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/db/types/__init__.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/db/types/annotation_configs.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/db/types/db_models.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/db/types/identifier.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/db/types/model_provider.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/db/types/token_price_customization.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/db/types/trace_retention.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/exceptions.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/experiments/__init__.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/experiments/evaluators/__init__.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/experiments/evaluators/base.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/experiments/evaluators/code_evaluators.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/experiments/evaluators/llm_evaluators.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/experiments/evaluators/utils.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/experiments/functions.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/experiments/tracing.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/experiments/types.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/experiments/utils.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/inferences/__init__.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/inferences/errors.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/inferences/fixtures.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/inferences/inferences.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/inferences/schema.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/inferences/validation.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/logging/__init__.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/logging/_config.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/logging/_filter.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/logging/_formatter.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/metrics/README.md +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/metrics/__init__.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/metrics/binning.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/metrics/metrics.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/metrics/mixins.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/metrics/retrieval_metrics.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/metrics/timeseries.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/metrics/wrappers.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/pointcloud/__init__.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/pointcloud/clustering.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/pointcloud/pointcloud.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/pointcloud/projectors.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/pointcloud/umap_parameters.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/py.typed +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/__init__.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/README.md +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/__init__.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/context.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/dataloaders/__init__.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/dataloaders/annotation_configs_by_project.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/dataloaders/annotation_summaries.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/dataloaders/average_experiment_run_latency.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/dataloaders/cache/__init__.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/dataloaders/cache/two_tier_cache.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/dataloaders/dataset_example_revisions.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/dataloaders/dataset_example_spans.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/dataloaders/document_evaluation_summaries.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/dataloaders/document_evaluations.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/dataloaders/document_retrieval_metrics.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/dataloaders/experiment_annotation_summaries.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/dataloaders/experiment_error_rates.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/dataloaders/experiment_run_annotations.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/dataloaders/experiment_run_counts.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/dataloaders/experiment_sequence_number.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/dataloaders/last_used_times_by_generative_model_id.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/dataloaders/latency_ms_quantile.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/dataloaders/min_start_or_max_end_times.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/dataloaders/num_child_spans.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/dataloaders/num_spans_per_trace.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/dataloaders/project_by_name.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/dataloaders/project_ids_by_trace_retention_policy_id.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/dataloaders/prompt_version_sequence_number.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/dataloaders/record_counts.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/dataloaders/session_io.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/dataloaders/session_num_traces.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/dataloaders/session_num_traces_with_error.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/dataloaders/session_token_usages.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/dataloaders/session_trace_latency_ms_quantile.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/dataloaders/span_annotations.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/dataloaders/span_by_id.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/dataloaders/span_cost_by_span.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/dataloaders/span_cost_detail_summary_entries_by_generative_model.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/dataloaders/span_cost_detail_summary_entries_by_project_session.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/dataloaders/span_cost_detail_summary_entries_by_span.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/dataloaders/span_cost_detail_summary_entries_by_trace.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/dataloaders/span_cost_details_by_span_cost.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_experiment_run.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_generative_model.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_project.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_project_session.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_trace.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/dataloaders/span_costs.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/dataloaders/span_dataset_examples.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/dataloaders/span_descendants.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/dataloaders/span_projects.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/dataloaders/table_fields.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/dataloaders/token_counts.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/dataloaders/trace_by_trace_ids.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/dataloaders/trace_retention_policy_id_by_project_id.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/dataloaders/trace_root_spans.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/dataloaders/types.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/dataloaders/user_roles.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/dataloaders/users.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/helpers/__init__.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/helpers/annotations.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/helpers/dataset_helpers.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/helpers/experiment_run_filters.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/helpers/playground_clients.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/helpers/playground_registry.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/helpers/playground_spans.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/helpers/prompts/__init__.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/helpers/prompts/conversions/__init__.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/helpers/prompts/conversions/anthropic.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/helpers/prompts/conversions/aws.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/helpers/prompts/conversions/openai.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/helpers/prompts/models.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/input_types/AddExamplesToDatasetInput.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/input_types/AddSpansToDatasetInput.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/input_types/ChatCompletionInput.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/input_types/ChatCompletionMessageInput.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/input_types/ClearProjectInput.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/input_types/ClusterInput.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/input_types/Coordinates.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/input_types/CreateDatasetInput.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/input_types/CreateSpanAnnotationInput.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/input_types/CreateTraceAnnotationInput.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/input_types/DataQualityMetricInput.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/input_types/DatasetExampleInput.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/input_types/DatasetFilter.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/input_types/DatasetSort.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/input_types/DatasetVersionSort.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/input_types/DeleteAnnotationsInput.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/input_types/DeleteDatasetExamplesInput.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/input_types/DeleteDatasetInput.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/input_types/DeleteExperimentsInput.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/input_types/DimensionFilter.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/input_types/DimensionInput.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/input_types/GenerativeCredentialInput.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/input_types/GenerativeModelInput.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/input_types/Granularity.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/input_types/InvocationParameters.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/input_types/PatchAnnotationInput.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/input_types/PatchDatasetExamplesInput.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/input_types/PatchDatasetInput.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/input_types/PerformanceMetricInput.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/input_types/ProjectFilter.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/input_types/ProjectSessionSort.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/input_types/ProjectSort.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/input_types/PromptTemplateOptions.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/input_types/PromptVersionInput.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/input_types/SpanAnnotationFilter.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/input_types/SpanAnnotationSort.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/input_types/SpanSort.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/input_types/TimeRange.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/input_types/TraceAnnotationSort.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/input_types/UserRoleInput.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/input_types/__init__.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/interceptor.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/mutations/__init__.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/mutations/annotation_config_mutations.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/mutations/api_key_mutations.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/mutations/chat_mutations.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/mutations/dataset_mutations.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/mutations/experiment_mutations.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/mutations/export_events_mutations.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/mutations/model_mutations.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/mutations/project_mutations.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/mutations/project_trace_retention_policy_mutations.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/mutations/prompt_label_mutations.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/mutations/prompt_mutations.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/mutations/prompt_version_tag_mutations.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/mutations/span_annotations_mutations.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/mutations/trace_annotations_mutations.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/mutations/trace_mutations.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/mutations/user_mutations.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/openapi/__init__.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/openapi/main.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/openapi/schema.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/queries.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/routers/__init__.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/routers/auth.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/routers/embeddings.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/routers/utils.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/routers/v1/__init__.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/routers/v1/annotation_configs.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/routers/v1/annotations.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/routers/v1/datasets.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/routers/v1/evaluations.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/routers/v1/experiment_evaluations.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/routers/v1/experiment_runs.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/routers/v1/experiments.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/routers/v1/models.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/routers/v1/projects.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/routers/v1/prompts.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/routers/v1/spans.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/routers/v1/traces.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/routers/v1/users.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/routers/v1/utils.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/schema.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/subscriptions.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/Annotation.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/AnnotationConfig.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/AnnotationSource.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/AnnotationSummary.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/AnnotatorKind.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/ApiKey.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/AuthMethod.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/ChatCompletionMessageRole.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/ChatCompletionSubscriptionPayload.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/Cluster.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/CreateDatasetPayload.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/CronExpression.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/DataQualityMetric.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/Dataset.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/DatasetExample.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/DatasetExampleRevision.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/DatasetValues.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/DatasetVersion.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/Dimension.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/DimensionDataType.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/DimensionShape.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/DimensionType.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/DimensionWithValue.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/DocumentEvaluationSummary.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/DocumentRetrievalMetrics.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/EmbeddingDimension.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/EmbeddingMetadata.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/Evaluation.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/EvaluationSummary.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/Event.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/EventMetadata.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/ExampleRevisionInterface.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/Experiment.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/ExperimentAnnotationSummary.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/ExperimentComparison.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/ExperimentRun.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/ExperimentRunAnnotation.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/ExportedFile.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/Functionality.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/GenerativeModel.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/GenerativeProvider.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/Identifier.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/InferenceModel.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/Inferences.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/InferencesRole.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/LabelFraction.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/MimeType.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/ModelInterface.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/NumericRange.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/PerformanceMetric.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/PlaygroundModel.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/ProjectSession.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/ProjectTraceRetentionPolicy.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/Prompt.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/PromptLabel.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/PromptResponse.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/PromptVersion.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/PromptVersionTag.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/PromptVersionTemplate.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/ResponseFormat.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/Retrieval.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/ScalarDriftMetricEnum.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/Segments.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/SortDir.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/Span.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/SpanAnnotation.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/SpanCostDetailSummaryEntry.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/SpanCostSummary.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/SpanIOValue.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/SystemApiKey.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/TimeSeries.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/TokenCountPromptDetails.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/TokenPrice.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/TokenUsage.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/ToolDefinition.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/Trace.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/TraceAnnotation.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/UMAPPoints.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/User.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/UserApiKey.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/UserRole.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/ValidationResult.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/VectorDriftMetricEnum.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/__init__.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/node.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/types/pagination.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/api/utils.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/bearer_auth.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/cost_tracking/__init__.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/cost_tracking/cost_model_lookup.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/cost_tracking/helpers.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/cost_tracking/model_cost_manifest.json +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/cost_tracking/regex_specificity.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/cost_tracking/token_cost_calculator.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/daemons/__init__.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/daemons/db_disk_usage_monitor.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/daemons/generative_model_store.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/dml_event.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/dml_event_handler.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/email/__init__.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/email/templates/__init__.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/email/templates/password_reset.html +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/email/templates/welcome.html +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/email/types.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/grpc_server.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/jwt_store.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/main.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/middleware/__init__.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/middleware/gzip.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/oauth2.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/openapi/__init__.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/prometheus.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/rate_limiters.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/retention.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/static/apple-touch-icon-114x114.png +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/static/apple-touch-icon-120x120.png +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/static/apple-touch-icon-144x144.png +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/static/apple-touch-icon-152x152.png +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/static/apple-touch-icon-180x180.png +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/static/apple-touch-icon-72x72.png +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/static/apple-touch-icon-76x76.png +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/static/apple-touch-icon.png +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/static/assets/vendor-WIZid84E.css +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/static/assets/vendor-three-C5WAXd5r.js +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/static/favicon.ico +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/static/modernizr.js +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/telemetry.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/templates/__init__.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/templates/index.html +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/thread_server.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/server/types.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/services.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/session/__init__.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/session/client.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/session/data_extractor.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/session/evaluation.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/session/session.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/settings.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/trace/__init__.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/trace/attributes.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/trace/dsl/README.md +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/trace/dsl/__init__.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/trace/dsl/filter.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/trace/dsl/helpers.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/trace/dsl/query.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/trace/errors.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/trace/evaluation_conventions.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/trace/exporter.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/trace/fixtures.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/trace/otel.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/trace/projects.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/trace/schemas.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/trace/span_evaluations.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/trace/span_json_decoder.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/trace/span_json_encoder.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/trace/trace_dataset.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/trace/utils.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/trace/v1/__init__.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/trace/v1/evaluation_pb2.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/trace/v1/evaluation_pb2.pyi +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/utilities/__init__.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/utilities/client.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/utilities/deprecation.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/utilities/error_handling.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/utilities/json.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/utilities/logging.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/utilities/project.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/utilities/re.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.0}/src/phoenix/utilities/span_store.py +0 -0
- {arize_phoenix-11.7.0 → arize_phoenix-11.8.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.8.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
|
|
@@ -205,6 +205,7 @@ The `arize-phoenix` package includes the entire Phoenix platfom. However if you
|
|
|
205
205
|
| [arize-phoenix-client](https://github.com/Arize-ai/phoenix/tree/main/packages/phoenix-client) | Python [](https://pypi.org/project/arize-phoenix-client/) | Lightweight client for interacting with the Phoenix server via its OpenAPI REST interface |
|
|
206
206
|
| [arize-phoenix-evals](https://github.com/Arize-ai/phoenix/tree/main/packages/phoenix-evals) | Python [](https://pypi.org/project/arize-phoenix-evals/) | Tooling to evaluate LLM applications including RAG relevance, answer relevance, and more |
|
|
207
207
|
| [@arizeai/phoenix-client](https://github.com/Arize-ai/phoenix/tree/main/js/packages/phoenix-client) | JavaScript [](https://www.npmjs.com/package/@arizeai/phoenix-client) | Client for the Arize Phoenix API |
|
|
208
|
+
| [@arizeai/phoenix-evals](https://github.com/Arize-ai/phoenix/tree/main/js/packages/phoenix-evals) | TypeScript [](https://www.npmjs.com/package/@arizeai/phoenix-evals) | TypeScript evaluation library for LLM applications (alpha release) |
|
|
208
209
|
| [@arizeai/phoenix-mcp](https://github.com/Arize-ai/phoenix/tree/main/js/packages/phoenix-mcp) | JavaScript [](https://www.npmjs.com/package/@arizeai/phoenix-mcp) | MCP server implementation for Arize Phoenix providing unified interface to Phoenix's capabilities |
|
|
209
210
|
|
|
210
211
|
## Tracing Integrations
|
|
@@ -248,9 +249,20 @@ Phoenix is built on top of OpenTelemetry and is vendor, language, and framework
|
|
|
248
249
|
| [BeeAI](https://arize.com/docs/phoenix/tracing/integrations-tracing/beeai) | `@arizeai/openinference-instrumentation-beeai` | [](https://www.npmjs.com/package/@arizeai/openinference-instrumentation-beeai) |
|
|
249
250
|
| [Mastra](https://arize.com/docs/phoenix/integrations/mastra) | `@arizeai/openinference-mastra` | [](https://www.npmjs.com/package/@arizeai/openinference-mastra) |
|
|
250
251
|
|
|
252
|
+
### Java Integrations
|
|
253
|
+
|
|
254
|
+
| Integration | Package | Version Badge |
|
|
255
|
+
| --------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
256
|
+
| [LangChain4j](https://github.com/Arize-ai/openinference/tree/main/java/instrumentation/openinference-instrumentation-langchain4j) | `openinference-instrumentation-langchain4j` | [](https://central.sonatype.com/artifact/com.arize/openinference-instrumentation-langchain4j) |
|
|
257
|
+
|
|
251
258
|
### Platforms
|
|
252
259
|
|
|
253
|
-
|
|
260
|
+
| Platform | Description | Docs |
|
|
261
|
+
| -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- |
|
|
262
|
+
| [Dify](https://docs.dify.ai/en/guides/monitoring/integrate-external-ops-tools/integrate-phoenix) | Open-source LLM app development platform | [Integration Guide](https://docs.dify.ai/en/guides/monitoring/integrate-external-ops-tools/integrate-phoenix) |
|
|
263
|
+
| [LangFlow](https://arize.com/docs/phoenix/tracing/integrations-tracing/langflow) | Visual framework for building multi-agent and RAG applications | [Integration Guide](https://arize.com/docs/phoenix/tracing/integrations-tracing/langflow) |
|
|
264
|
+
| [BeeAI](https://docs.beeai.dev/observability/agents-traceability) | AI agent framework with built-in observability | [Integration Guide](https://docs.beeai.dev/observability/agents-traceability) |
|
|
265
|
+
| [LiteLLM Proxy](https://docs.litellm.ai/docs/observability/phoenix_integration#using-with-litellm-proxy) | Proxy server for LLMs | [Integration Guide](https://docs.litellm.ai/docs/observability/phoenix_integration#using-with-litellm-proxy) |
|
|
254
266
|
|
|
255
267
|
## Community
|
|
256
268
|
|
|
@@ -72,6 +72,7 @@ The `arize-phoenix` package includes the entire Phoenix platfom. However if you
|
|
|
72
72
|
| [arize-phoenix-client](https://github.com/Arize-ai/phoenix/tree/main/packages/phoenix-client) | Python [](https://pypi.org/project/arize-phoenix-client/) | Lightweight client for interacting with the Phoenix server via its OpenAPI REST interface |
|
|
73
73
|
| [arize-phoenix-evals](https://github.com/Arize-ai/phoenix/tree/main/packages/phoenix-evals) | Python [](https://pypi.org/project/arize-phoenix-evals/) | Tooling to evaluate LLM applications including RAG relevance, answer relevance, and more |
|
|
74
74
|
| [@arizeai/phoenix-client](https://github.com/Arize-ai/phoenix/tree/main/js/packages/phoenix-client) | JavaScript [](https://www.npmjs.com/package/@arizeai/phoenix-client) | Client for the Arize Phoenix API |
|
|
75
|
+
| [@arizeai/phoenix-evals](https://github.com/Arize-ai/phoenix/tree/main/js/packages/phoenix-evals) | TypeScript [](https://www.npmjs.com/package/@arizeai/phoenix-evals) | TypeScript evaluation library for LLM applications (alpha release) |
|
|
75
76
|
| [@arizeai/phoenix-mcp](https://github.com/Arize-ai/phoenix/tree/main/js/packages/phoenix-mcp) | JavaScript [](https://www.npmjs.com/package/@arizeai/phoenix-mcp) | MCP server implementation for Arize Phoenix providing unified interface to Phoenix's capabilities |
|
|
76
77
|
|
|
77
78
|
## Tracing Integrations
|
|
@@ -115,9 +116,20 @@ Phoenix is built on top of OpenTelemetry and is vendor, language, and framework
|
|
|
115
116
|
| [BeeAI](https://arize.com/docs/phoenix/tracing/integrations-tracing/beeai) | `@arizeai/openinference-instrumentation-beeai` | [](https://www.npmjs.com/package/@arizeai/openinference-instrumentation-beeai) |
|
|
116
117
|
| [Mastra](https://arize.com/docs/phoenix/integrations/mastra) | `@arizeai/openinference-mastra` | [](https://www.npmjs.com/package/@arizeai/openinference-mastra) |
|
|
117
118
|
|
|
119
|
+
### Java Integrations
|
|
120
|
+
|
|
121
|
+
| Integration | Package | Version Badge |
|
|
122
|
+
| --------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
123
|
+
| [LangChain4j](https://github.com/Arize-ai/openinference/tree/main/java/instrumentation/openinference-instrumentation-langchain4j) | `openinference-instrumentation-langchain4j` | [](https://central.sonatype.com/artifact/com.arize/openinference-instrumentation-langchain4j) |
|
|
124
|
+
|
|
118
125
|
### Platforms
|
|
119
126
|
|
|
120
|
-
|
|
127
|
+
| Platform | Description | Docs |
|
|
128
|
+
| -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- |
|
|
129
|
+
| [Dify](https://docs.dify.ai/en/guides/monitoring/integrate-external-ops-tools/integrate-phoenix) | Open-source LLM app development platform | [Integration Guide](https://docs.dify.ai/en/guides/monitoring/integrate-external-ops-tools/integrate-phoenix) |
|
|
130
|
+
| [LangFlow](https://arize.com/docs/phoenix/tracing/integrations-tracing/langflow) | Visual framework for building multi-agent and RAG applications | [Integration Guide](https://arize.com/docs/phoenix/tracing/integrations-tracing/langflow) |
|
|
131
|
+
| [BeeAI](https://docs.beeai.dev/observability/agents-traceability) | AI agent framework with built-in observability | [Integration Guide](https://docs.beeai.dev/observability/agents-traceability) |
|
|
132
|
+
| [LiteLLM Proxy](https://docs.litellm.ai/docs/observability/phoenix_integration#using-with-litellm-proxy) | Proxy server for LLMs | [Integration Guide](https://docs.litellm.ai/docs/observability/phoenix_integration#using-with-litellm-proxy) |
|
|
121
133
|
|
|
122
134
|
## Community
|
|
123
135
|
|
|
@@ -246,7 +246,14 @@ The URL to use for redirecting to a management interface that may be hosting Pho
|
|
|
246
246
|
the current user is within PHOENIX_ADMINS, a link will be added to the navigation menu to return to
|
|
247
247
|
this URL.
|
|
248
248
|
"""
|
|
249
|
+
ENV_PHOENIX_SUPPORT_EMAIL = "PHOENIX_SUPPORT_EMAIL"
|
|
250
|
+
"""
|
|
251
|
+
The support email address to display in error messages and notifications.
|
|
249
252
|
|
|
253
|
+
When set, this email will be included in error messages for insufficient storage
|
|
254
|
+
conditions and database usage notification emails, providing users with a direct
|
|
255
|
+
contact for assistance. If not set, error messages will not include contact information.
|
|
256
|
+
"""
|
|
250
257
|
|
|
251
258
|
# SMTP settings
|
|
252
259
|
ENV_PHOENIX_SMTP_HOSTNAME = "PHOENIX_SMTP_HOSTNAME"
|
|
@@ -1599,6 +1606,31 @@ def get_env_management_url() -> Optional[str]:
|
|
|
1599
1606
|
return getenv(ENV_PHOENIX_MANAGEMENT_URL)
|
|
1600
1607
|
|
|
1601
1608
|
|
|
1609
|
+
def get_env_support_email() -> Optional[str]:
|
|
1610
|
+
"""
|
|
1611
|
+
Get the support email address from the PHOENIX_SUPPORT_EMAIL environment variable.
|
|
1612
|
+
|
|
1613
|
+
Returns:
|
|
1614
|
+
The support email address if set, None otherwise.
|
|
1615
|
+
"""
|
|
1616
|
+
return getenv(ENV_PHOENIX_SUPPORT_EMAIL)
|
|
1617
|
+
|
|
1618
|
+
|
|
1619
|
+
def validate_env_support_email() -> None:
|
|
1620
|
+
"""
|
|
1621
|
+
Validate the support email address configured in PHOENIX_SUPPORT_EMAIL.
|
|
1622
|
+
|
|
1623
|
+
Raises:
|
|
1624
|
+
ValueError: If the email address is invalid.
|
|
1625
|
+
"""
|
|
1626
|
+
if not (email := get_env_support_email()):
|
|
1627
|
+
return
|
|
1628
|
+
try:
|
|
1629
|
+
validate_email(email, check_deliverability=False)
|
|
1630
|
+
except EmailNotValidError as e:
|
|
1631
|
+
raise ValueError(f"Invalid email in {ENV_PHOENIX_SUPPORT_EMAIL}: '{email}'") from e
|
|
1632
|
+
|
|
1633
|
+
|
|
1602
1634
|
def verify_server_environment_variables() -> None:
|
|
1603
1635
|
"""Verify that the environment variables are set correctly. Raises an error otherwise."""
|
|
1604
1636
|
get_env_root_url()
|
|
@@ -1607,6 +1639,7 @@ def verify_server_environment_variables() -> None:
|
|
|
1607
1639
|
get_env_database_allocated_storage_capacity_gibibytes()
|
|
1608
1640
|
get_env_database_usage_email_warning_threshold_percentage()
|
|
1609
1641
|
get_env_database_usage_insertion_blocking_threshold_percentage()
|
|
1642
|
+
validate_env_support_email()
|
|
1610
1643
|
|
|
1611
1644
|
# Notify users about deprecated environment variables if they are being used.
|
|
1612
1645
|
if os.getenv("PHOENIX_ENABLE_WEBSOCKETS") is not None:
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
from datetime import datetime, timedelta, timezone, tzinfo
|
|
2
|
+
from typing import Any, Iterator, Literal, Optional, cast
|
|
3
|
+
|
|
4
|
+
import pandas as pd
|
|
5
|
+
import pytz
|
|
6
|
+
from pandas import Timestamp, to_datetime
|
|
7
|
+
from pandas.core.dtypes.common import (
|
|
8
|
+
is_datetime64_any_dtype,
|
|
9
|
+
is_datetime64tz_dtype,
|
|
10
|
+
is_numeric_dtype,
|
|
11
|
+
is_object_dtype,
|
|
12
|
+
)
|
|
13
|
+
from typing_extensions import assert_never
|
|
14
|
+
|
|
15
|
+
_LOCAL_TIMEZONE = datetime.now(timezone.utc).astimezone().tzinfo
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def local_now() -> datetime:
|
|
19
|
+
return datetime.now(timezone.utc).astimezone(tz=_LOCAL_TIMEZONE)
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def normalize_datetime(
|
|
23
|
+
dt: Optional[datetime],
|
|
24
|
+
tz: Optional[tzinfo] = None,
|
|
25
|
+
) -> Optional[datetime]:
|
|
26
|
+
"""
|
|
27
|
+
If the input datetime is timezone-naive, it is localized as local timezone
|
|
28
|
+
unless tzinfo is specified.
|
|
29
|
+
"""
|
|
30
|
+
if not isinstance(dt, datetime):
|
|
31
|
+
return None
|
|
32
|
+
if not is_timezone_aware(dt):
|
|
33
|
+
dt = dt.replace(tzinfo=tz if tz else _LOCAL_TIMEZONE)
|
|
34
|
+
return dt.astimezone(timezone.utc)
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def normalize_timestamps(
|
|
38
|
+
timestamps: "pd.Series[Any]",
|
|
39
|
+
) -> "pd.Series[Timestamp]":
|
|
40
|
+
"""
|
|
41
|
+
If the input timestamps contains a Unix or datetime timestamp or ISO8601
|
|
42
|
+
timestamp strings column, it is converted to UTC timezone-aware timestamp.
|
|
43
|
+
If a timestamp is timezone-naive, it is localized as per local timezone
|
|
44
|
+
and then converted to UTC.
|
|
45
|
+
"""
|
|
46
|
+
if is_numeric_dtype(timestamps):
|
|
47
|
+
return to_datetime(timestamps, unit="s", utc=True)
|
|
48
|
+
if is_datetime64tz_dtype(timestamps):
|
|
49
|
+
return timestamps.dt.tz_convert(pytz.utc)
|
|
50
|
+
if is_datetime64_any_dtype(timestamps):
|
|
51
|
+
return timestamps.dt.tz_localize(
|
|
52
|
+
datetime.now().astimezone().tzinfo,
|
|
53
|
+
).dt.tz_convert(
|
|
54
|
+
timezone.utc,
|
|
55
|
+
)
|
|
56
|
+
if is_object_dtype(timestamps):
|
|
57
|
+
timestamps = to_datetime(timestamps)
|
|
58
|
+
if timestamps.dt.tz is None:
|
|
59
|
+
timestamps = timestamps.dt.tz_localize(
|
|
60
|
+
datetime.now().astimezone().tzinfo,
|
|
61
|
+
)
|
|
62
|
+
return timestamps.dt.tz_convert(
|
|
63
|
+
timezone.utc,
|
|
64
|
+
)
|
|
65
|
+
raise ValueError(
|
|
66
|
+
"When provided, input timestamp column must have numeric or datetime dtype, "
|
|
67
|
+
f"but found {timestamps.dtype} instead."
|
|
68
|
+
)
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
def floor_to_minute(dt: datetime) -> datetime:
|
|
72
|
+
"""Floor datetime to the minute by taking a round-trip through string
|
|
73
|
+
format because there isn't always an available function to strip the
|
|
74
|
+
nanoseconds if present."""
|
|
75
|
+
try:
|
|
76
|
+
dt_as_string = dt.astimezone(
|
|
77
|
+
timezone.utc,
|
|
78
|
+
).strftime(
|
|
79
|
+
MINUTE_DATETIME_FORMAT,
|
|
80
|
+
)
|
|
81
|
+
except ValueError:
|
|
82
|
+
# NOTE: as of Python 3.8.16, pandas 1.5.3:
|
|
83
|
+
# >>> isinstance(pd.NaT, datetime.datetime)
|
|
84
|
+
# True
|
|
85
|
+
return cast(datetime, pd.NaT)
|
|
86
|
+
return datetime.strptime(
|
|
87
|
+
dt_as_string,
|
|
88
|
+
MINUTE_DATETIME_FORMAT,
|
|
89
|
+
).astimezone(
|
|
90
|
+
timezone.utc,
|
|
91
|
+
)
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
MINUTE_DATETIME_FORMAT = "%Y-%m-%dT%H:%M:00%z"
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
def right_open_time_range(
|
|
98
|
+
min_time: Optional[datetime],
|
|
99
|
+
max_time: Optional[datetime],
|
|
100
|
+
) -> tuple[Optional[datetime], Optional[datetime]]:
|
|
101
|
+
"""
|
|
102
|
+
First adds one minute to `max_time`, because time intervals are right
|
|
103
|
+
open and one minute is the smallest interval allowed, then rounds down
|
|
104
|
+
the times to the nearest minute.
|
|
105
|
+
"""
|
|
106
|
+
return (
|
|
107
|
+
floor_to_minute(min_time) if min_time else None,
|
|
108
|
+
floor_to_minute(max_time + timedelta(minutes=1)) if max_time else None,
|
|
109
|
+
)
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
def is_timezone_aware(dt: datetime) -> bool:
|
|
113
|
+
"""
|
|
114
|
+
Returns True if the datetime is timezone-aware, False otherwise.
|
|
115
|
+
"""
|
|
116
|
+
return dt.tzinfo is not None and dt.tzinfo.utcoffset(dt) is not None
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
def get_timestamp_range(
|
|
120
|
+
start_time: datetime,
|
|
121
|
+
end_time: datetime,
|
|
122
|
+
stride: Literal["minute", "hour", "day", "week", "month", "year"] = "minute",
|
|
123
|
+
utc_offset_minutes: int = 0,
|
|
124
|
+
) -> Iterator[datetime]:
|
|
125
|
+
"""
|
|
126
|
+
Generate a sequence of datetime objects at regular intervals between start and end times.
|
|
127
|
+
|
|
128
|
+
This function creates time intervals by rounding down the start time to the nearest
|
|
129
|
+
stride boundary in the specified timezone, then yielding timestamps at regular
|
|
130
|
+
intervals until reaching the end time. All returned timestamps are in UTC.
|
|
131
|
+
|
|
132
|
+
Args:
|
|
133
|
+
start_time: The starting datetime (inclusive after rounding down to stride boundary).
|
|
134
|
+
Must be timezone-aware.
|
|
135
|
+
end_time: The ending datetime (exclusive). Must be timezone-aware.
|
|
136
|
+
stride: The interval between generated timestamps. Options:
|
|
137
|
+
- "minute": Generate timestamps every minute
|
|
138
|
+
- "hour": Generate timestamps every hour
|
|
139
|
+
- "day": Generate timestamps every day at midnight
|
|
140
|
+
- "week": Generate timestamps every week at Monday midnight
|
|
141
|
+
- "month": Generate timestamps on the 1st of each month at midnight
|
|
142
|
+
- "year": Generate timestamps on January 1st of each year at midnight
|
|
143
|
+
utc_offset_minutes: Timezone offset in minutes from UTC. Used to determine
|
|
144
|
+
the correct stride boundaries in local time. Positive values
|
|
145
|
+
are east of UTC, negative values are west of UTC.
|
|
146
|
+
|
|
147
|
+
Returns:
|
|
148
|
+
Iterator of datetime objects in UTC timezone, spaced at the specified stride
|
|
149
|
+
interval. The first timestamp is rounded down to the nearest stride boundary
|
|
150
|
+
in the local timezone (considering utc_offset_minutes).
|
|
151
|
+
|
|
152
|
+
Examples:
|
|
153
|
+
>>> from datetime import datetime, timezone
|
|
154
|
+
>>> start = datetime(2024, 1, 1, 12, 30, 45, tzinfo=timezone.utc)
|
|
155
|
+
>>> end = datetime(2024, 1, 1, 12, 33, 0, tzinfo=timezone.utc)
|
|
156
|
+
>>> list(get_timestamp_range(start, end, "minute"))
|
|
157
|
+
[datetime(2024, 1, 1, 12, 30, tzinfo=timezone.utc),
|
|
158
|
+
datetime(2024, 1, 1, 12, 31, tzinfo=timezone.utc),
|
|
159
|
+
datetime(2024, 1, 1, 12, 32, tzinfo=timezone.utc)]
|
|
160
|
+
|
|
161
|
+
>>> # Week stride rounds down to Monday
|
|
162
|
+
>>> start = datetime(2024, 1, 10, 12, 0, tzinfo=timezone.utc) # Wednesday
|
|
163
|
+
>>> end = datetime(2024, 1, 22, 0, 0, tzinfo=timezone.utc)
|
|
164
|
+
>>> list(get_timestamp_range(start, end, "week"))
|
|
165
|
+
[datetime(2024, 1, 8, 0, 0, tzinfo=timezone.utc), # Monday
|
|
166
|
+
datetime(2024, 1, 15, 0, 0, tzinfo=timezone.utc)] # Next Monday
|
|
167
|
+
|
|
168
|
+
Note:
|
|
169
|
+
- If end_time <= start_time (after rounding), returns an empty iterator
|
|
170
|
+
- Week intervals always start on Monday (weekday 0)
|
|
171
|
+
- Month intervals handle variable month lengths correctly including leap years
|
|
172
|
+
- The function works in local timezone for stride calculations but returns UTC
|
|
173
|
+
"""
|
|
174
|
+
if not is_timezone_aware(start_time) or not is_timezone_aware(end_time):
|
|
175
|
+
raise ValueError("start_time and end_time must be timezone-aware")
|
|
176
|
+
|
|
177
|
+
# Apply UTC offset to work in local timezone
|
|
178
|
+
offset_delta = timedelta(minutes=utc_offset_minutes)
|
|
179
|
+
local_start_time = start_time + offset_delta
|
|
180
|
+
|
|
181
|
+
# round down start_time to the nearest stride in local timezone
|
|
182
|
+
if stride == "minute":
|
|
183
|
+
t = local_start_time.replace(second=0, microsecond=0)
|
|
184
|
+
elif stride == "hour":
|
|
185
|
+
t = local_start_time.replace(minute=0, second=0, microsecond=0)
|
|
186
|
+
elif stride == "day":
|
|
187
|
+
t = local_start_time.replace(hour=0, minute=0, second=0, microsecond=0)
|
|
188
|
+
elif stride == "week":
|
|
189
|
+
# Round down to the beginning of the week (Monday)
|
|
190
|
+
days_since_monday = local_start_time.weekday()
|
|
191
|
+
t = local_start_time.replace(hour=0, minute=0, second=0, microsecond=0) - timedelta(
|
|
192
|
+
days=days_since_monday
|
|
193
|
+
)
|
|
194
|
+
elif stride == "month":
|
|
195
|
+
t = local_start_time.replace(day=1, hour=0, minute=0, second=0, microsecond=0)
|
|
196
|
+
elif stride == "year":
|
|
197
|
+
t = local_start_time.replace(month=1, day=1, hour=0, minute=0, second=0, microsecond=0)
|
|
198
|
+
else:
|
|
199
|
+
assert_never(stride)
|
|
200
|
+
|
|
201
|
+
# Convert back to UTC for comparisons and yielding
|
|
202
|
+
local_end_time = end_time + offset_delta
|
|
203
|
+
|
|
204
|
+
while t < local_end_time:
|
|
205
|
+
# Yield timestamp converted back to UTC
|
|
206
|
+
yield t - offset_delta
|
|
207
|
+
if stride == "minute":
|
|
208
|
+
t += timedelta(minutes=1)
|
|
209
|
+
elif stride == "hour":
|
|
210
|
+
t += timedelta(hours=1)
|
|
211
|
+
elif stride == "day":
|
|
212
|
+
t += timedelta(days=1)
|
|
213
|
+
elif stride == "week":
|
|
214
|
+
t += timedelta(weeks=1)
|
|
215
|
+
elif stride == "month":
|
|
216
|
+
next_month = t.month % 12 + 1
|
|
217
|
+
next_year = t.year + (t.month // 12)
|
|
218
|
+
t = t.replace(
|
|
219
|
+
year=next_year, month=next_month, day=1, hour=0, minute=0, second=0, microsecond=0
|
|
220
|
+
)
|
|
221
|
+
elif stride == "year":
|
|
222
|
+
t = t.replace(
|
|
223
|
+
year=t.year + 1, month=1, day=1, hour=0, minute=0, second=0, microsecond=0
|
|
224
|
+
)
|
|
225
|
+
else:
|
|
226
|
+
assert_never(stride)
|