arize-phoenix 11.33.0__tar.gz → 11.35.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.33.0 → arize_phoenix-11.35.0}/PKG-INFO +12 -9
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/README.md +10 -1
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/pyproject.toml +1 -8
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/config.py +44 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/db/bulk_inserter.py +111 -116
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/routers/v1/documents.py +1 -1
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/routers/v1/evaluations.py +4 -4
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/routers/v1/spans.py +2 -2
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/routers/v1/traces.py +18 -3
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/app.py +56 -18
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/daemons/span_cost_calculator.py +10 -8
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/grpc_server.py +9 -9
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/prometheus.py +30 -6
- arize_phoenix-11.35.0/src/phoenix/server/static/.vite/manifest.json +93 -0
- arize_phoenix-11.33.0/src/phoenix/server/static/assets/components-YTHUASXI.js → arize_phoenix-11.35.0/src/phoenix/server/static/assets/components-CdQiQTvs.js +1 -1
- arize_phoenix-11.33.0/src/phoenix/server/static/assets/index-CugQp26L.js → arize_phoenix-11.35.0/src/phoenix/server/static/assets/index-B1VuXYRI.js +2 -2
- arize_phoenix-11.33.0/src/phoenix/server/static/assets/pages-4Qu8GNlt.js → arize_phoenix-11.35.0/src/phoenix/server/static/assets/pages-CnfZ3RhB.js +498 -494
- arize_phoenix-11.33.0/src/phoenix/server/static/assets/vendor-CRRxHwSp.js → arize_phoenix-11.35.0/src/phoenix/server/static/assets/vendor-Cfrr9FCF.js +135 -135
- arize_phoenix-11.33.0/src/phoenix/server/static/assets/vendor-arizeai-CUN6lRd9.js → arize_phoenix-11.35.0/src/phoenix/server/static/assets/vendor-arizeai-Dz0kN-lQ.js +1 -1
- arize_phoenix-11.33.0/src/phoenix/server/static/assets/vendor-codemirror-sJXwoqrE.js → arize_phoenix-11.35.0/src/phoenix/server/static/assets/vendor-codemirror-ClqtONZQ.js +11 -11
- arize_phoenix-11.33.0/src/phoenix/server/static/assets/vendor-recharts-BT_PeGhc.js → arize_phoenix-11.35.0/src/phoenix/server/static/assets/vendor-recharts-D6kvOpmb.js +1 -1
- arize_phoenix-11.33.0/src/phoenix/server/static/assets/vendor-shiki-1F3op0QC.js → arize_phoenix-11.35.0/src/phoenix/server/static/assets/vendor-shiki-xSOiKxt0.js +1 -1
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/thread_server.py +1 -2
- arize_phoenix-11.35.0/src/phoenix/version.py +1 -0
- arize_phoenix-11.33.0/src/phoenix/server/static/.vite/manifest.json +0 -93
- arize_phoenix-11.33.0/src/phoenix/version.py +0 -1
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/.gitignore +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/IP_NOTICE +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/LICENSE +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/__init__.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/auth.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/core/__init__.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/core/embedding_dimension.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/core/model.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/core/model_schema.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/core/model_schema_adapter.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/datetime_utils.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/db/README.md +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/db/__init__.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/db/alembic.ini +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/db/constants.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/db/engines.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/db/enums.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/db/facilitator.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/db/helpers.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/db/insertion/__init__.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/db/insertion/constants.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/db/insertion/dataset.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/db/insertion/document_annotation.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/db/insertion/evaluation.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/db/insertion/helpers.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/db/insertion/span.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/db/insertion/span_annotation.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/db/insertion/trace_annotation.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/db/insertion/types.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/db/migrate.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/db/migrations/__init__.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/db/migrations/data_migration_scripts/__init__.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/db/migrations/data_migration_scripts/populate_project_sessions.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/db/migrations/env.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/db/migrations/script.py.mako +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/db/migrations/versions/10460e46d750_datasets.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/db/migrations/versions/2f9d1a65945f_annotation_config_migration.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/db/migrations/versions/3be8647b87d8_add_token_columns_to_spans_table.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/db/migrations/versions/4ded9e43755f_create_project_sessions_table.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/db/migrations/versions/6a88424799fe_update_users_with_auth_method.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/db/migrations/versions/8a3764fe7f1a_change_jsonb_to_json_for_prompts.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/db/migrations/versions/a20694b15f82_cost.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/db/migrations/versions/bb8139330879_create_project_trace_retention_policies_table.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/db/migrations/versions/bc8fea3c2bc8_add_prompt_tables.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/db/migrations/versions/cd164e83824f_users_and_tokens.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/db/migrations/versions/cf03bd6bae1d_init.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/db/models.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/db/pg_config.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/db/types/__init__.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/db/types/annotation_configs.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/db/types/db_models.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/db/types/identifier.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/db/types/model_provider.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/db/types/token_price_customization.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/db/types/trace_retention.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/exceptions.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/experiments/__init__.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/experiments/evaluators/__init__.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/experiments/evaluators/base.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/experiments/evaluators/code_evaluators.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/experiments/evaluators/llm_evaluators.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/experiments/evaluators/utils.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/experiments/functions.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/experiments/tracing.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/experiments/types.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/experiments/utils.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/inferences/__init__.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/inferences/errors.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/inferences/fixtures.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/inferences/inferences.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/inferences/schema.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/inferences/validation.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/logging/__init__.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/logging/_config.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/logging/_filter.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/logging/_formatter.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/metrics/README.md +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/metrics/__init__.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/metrics/binning.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/metrics/metrics.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/metrics/mixins.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/metrics/retrieval_metrics.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/metrics/timeseries.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/metrics/wrappers.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/pointcloud/__init__.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/pointcloud/clustering.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/pointcloud/pointcloud.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/pointcloud/projectors.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/pointcloud/umap_parameters.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/py.typed +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/__init__.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/README.md +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/__init__.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/auth.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/context.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/dataloaders/__init__.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/dataloaders/annotation_configs_by_project.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/dataloaders/annotation_summaries.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/dataloaders/average_experiment_repeated_run_group_latency.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/dataloaders/average_experiment_run_latency.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/dataloaders/cache/__init__.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/dataloaders/cache/two_tier_cache.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/dataloaders/dataset_example_revisions.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/dataloaders/dataset_example_spans.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/dataloaders/dataset_examples_and_versions_by_experiment_run.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/dataloaders/document_evaluation_summaries.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/dataloaders/document_evaluations.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/dataloaders/document_retrieval_metrics.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/dataloaders/experiment_annotation_summaries.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/dataloaders/experiment_error_rates.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/dataloaders/experiment_repeated_run_group_annotation_summaries.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/dataloaders/experiment_repeated_run_groups.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/dataloaders/experiment_repetition_counts.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/dataloaders/experiment_run_annotations.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/dataloaders/experiment_run_counts.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/dataloaders/experiment_sequence_number.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/dataloaders/last_used_times_by_generative_model_id.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/dataloaders/latency_ms_quantile.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/dataloaders/min_start_or_max_end_times.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/dataloaders/num_child_spans.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/dataloaders/num_spans_per_trace.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/dataloaders/project_by_name.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/dataloaders/project_ids_by_trace_retention_policy_id.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/dataloaders/prompt_version_sequence_number.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/dataloaders/record_counts.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/dataloaders/session_io.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/dataloaders/session_num_traces.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/dataloaders/session_num_traces_with_error.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/dataloaders/session_token_usages.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/dataloaders/session_trace_latency_ms_quantile.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/dataloaders/span_annotations.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/dataloaders/span_by_id.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/dataloaders/span_cost_by_span.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/dataloaders/span_cost_detail_summary_entries_by_generative_model.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/dataloaders/span_cost_detail_summary_entries_by_project_session.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/dataloaders/span_cost_detail_summary_entries_by_span.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/dataloaders/span_cost_detail_summary_entries_by_trace.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/dataloaders/span_cost_details_by_span_cost.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_experiment.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_experiment_repeated_run_group.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_experiment_run.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_generative_model.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_project.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_project_session.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_trace.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/dataloaders/span_costs.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/dataloaders/span_dataset_examples.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/dataloaders/span_descendants.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/dataloaders/span_projects.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/dataloaders/table_fields.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/dataloaders/token_counts.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/dataloaders/trace_by_trace_ids.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/dataloaders/trace_retention_policy_id_by_project_id.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/dataloaders/trace_root_spans.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/dataloaders/types.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/dataloaders/user_roles.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/dataloaders/users.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/exceptions.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/helpers/__init__.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/helpers/annotations.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/helpers/dataset_helpers.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/helpers/experiment_run_filters.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/helpers/playground_clients.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/helpers/playground_registry.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/helpers/playground_spans.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/helpers/prompts/__init__.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/helpers/prompts/conversions/__init__.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/helpers/prompts/conversions/anthropic.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/helpers/prompts/conversions/aws.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/helpers/prompts/conversions/openai.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/helpers/prompts/models.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/input_types/AddExamplesToDatasetInput.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/input_types/AddSpansToDatasetInput.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/input_types/ChatCompletionInput.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/input_types/ChatCompletionMessageInput.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/input_types/ClearProjectInput.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/input_types/ClusterInput.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/input_types/Coordinates.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/input_types/CreateDatasetInput.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/input_types/CreateProjectInput.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/input_types/CreateSpanAnnotationInput.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/input_types/CreateTraceAnnotationInput.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/input_types/DataQualityMetricInput.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/input_types/DatasetExampleInput.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/input_types/DatasetFilter.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/input_types/DatasetSort.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/input_types/DatasetVersionSort.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/input_types/DeleteAnnotationsInput.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/input_types/DeleteDatasetExamplesInput.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/input_types/DeleteDatasetInput.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/input_types/DeleteExperimentsInput.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/input_types/DimensionFilter.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/input_types/DimensionInput.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/input_types/GenerativeCredentialInput.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/input_types/GenerativeModelInput.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/input_types/Granularity.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/input_types/InvocationParameters.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/input_types/PatchAnnotationInput.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/input_types/PatchDatasetExamplesInput.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/input_types/PatchDatasetInput.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/input_types/PerformanceMetricInput.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/input_types/ProjectFilter.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/input_types/ProjectSessionSort.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/input_types/ProjectSort.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/input_types/PromptFilter.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/input_types/PromptTemplateOptions.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/input_types/PromptVersionInput.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/input_types/SpanAnnotationFilter.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/input_types/SpanAnnotationSort.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/input_types/SpanSort.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/input_types/TimeBinConfig.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/input_types/TimeRange.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/input_types/TraceAnnotationSort.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/input_types/UserRoleInput.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/input_types/__init__.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/interceptor.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/mutations/__init__.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/mutations/annotation_config_mutations.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/mutations/api_key_mutations.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/mutations/chat_mutations.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/mutations/dataset_mutations.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/mutations/experiment_mutations.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/mutations/export_events_mutations.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/mutations/model_mutations.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/mutations/project_mutations.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/mutations/project_trace_retention_policy_mutations.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/mutations/prompt_label_mutations.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/mutations/prompt_mutations.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/mutations/prompt_version_tag_mutations.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/mutations/span_annotations_mutations.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/mutations/trace_annotations_mutations.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/mutations/trace_mutations.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/mutations/user_mutations.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/openapi/__init__.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/openapi/main.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/openapi/schema.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/queries.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/routers/__init__.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/routers/auth.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/routers/embeddings.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/routers/oauth2.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/routers/utils.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/routers/v1/__init__.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/routers/v1/annotation_configs.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/routers/v1/annotations.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/routers/v1/datasets.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/routers/v1/experiment_evaluations.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/routers/v1/experiment_runs.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/routers/v1/experiments.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/routers/v1/models.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/routers/v1/projects.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/routers/v1/prompts.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/routers/v1/users.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/routers/v1/utils.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/schema.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/subscriptions.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/Annotation.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/AnnotationConfig.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/AnnotationSource.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/AnnotationSummary.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/AnnotatorKind.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/ApiKey.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/AuthMethod.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/ChatCompletionMessageRole.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/ChatCompletionSubscriptionPayload.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/Cluster.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/CostBreakdown.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/CreateDatasetPayload.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/CronExpression.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/DataQualityMetric.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/Dataset.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/DatasetExample.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/DatasetExampleRevision.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/DatasetExperimentAnnotationSummary.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/DatasetValues.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/DatasetVersion.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/Dimension.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/DimensionDataType.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/DimensionShape.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/DimensionType.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/DimensionWithValue.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/DocumentAnnotation.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/DocumentEvaluationSummary.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/DocumentRetrievalMetrics.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/EmbeddingDimension.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/EmbeddingMetadata.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/EvaluationSummary.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/Event.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/EventMetadata.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/ExampleRevisionInterface.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/Experiment.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/ExperimentAnnotationSummary.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/ExperimentComparison.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/ExperimentRepeatedRunGroup.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/ExperimentRepeatedRunGroupAnnotationSummary.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/ExperimentRun.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/ExperimentRunAnnotation.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/ExportedFile.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/Functionality.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/GenerativeModel.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/GenerativeProvider.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/Identifier.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/InferenceModel.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/Inferences.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/InferencesRole.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/LabelFraction.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/MimeType.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/ModelInterface.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/NumericRange.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/PerformanceMetric.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/PlaygroundModel.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/Project.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/ProjectSession.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/ProjectTraceRetentionPolicy.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/Prompt.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/PromptLabel.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/PromptResponse.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/PromptVersion.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/PromptVersionTag.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/PromptVersionTemplate.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/ResponseFormat.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/Retrieval.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/ScalarDriftMetricEnum.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/Segments.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/ServerStatus.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/SortDir.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/Span.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/SpanAnnotation.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/SpanCostDetailSummaryEntry.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/SpanCostSummary.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/SpanIOValue.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/SystemApiKey.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/TimeSeries.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/TokenCountPromptDetails.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/TokenPrice.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/TokenUsage.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/ToolDefinition.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/Trace.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/TraceAnnotation.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/UMAPPoints.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/User.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/UserApiKey.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/UserRole.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/ValidationResult.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/VectorDriftMetricEnum.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/__init__.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/node.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/types/pagination.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/utils.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/authorization.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/bearer_auth.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/cost_tracking/__init__.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/cost_tracking/cost_details_calculator.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/cost_tracking/cost_model_lookup.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/cost_tracking/helpers.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/cost_tracking/model_cost_manifest.json +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/cost_tracking/regex_specificity.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/cost_tracking/token_cost_calculator.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/daemons/__init__.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/daemons/db_disk_usage_monitor.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/daemons/generative_model_store.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/dml_event.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/dml_event_handler.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/email/__init__.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/email/sender.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/email/templates/__init__.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/email/templates/db_disk_usage_notification.html +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/email/templates/password_reset.html +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/email/templates/welcome.html +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/email/types.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/experiments/__init__.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/experiments/utils.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/jwt_store.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/main.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/middleware/__init__.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/middleware/gzip.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/oauth2.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/openapi/__init__.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/rate_limiters.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/retention.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/session_filters.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/static/apple-touch-icon-114x114.png +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/static/apple-touch-icon-120x120.png +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/static/apple-touch-icon-144x144.png +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/static/apple-touch-icon-152x152.png +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/static/apple-touch-icon-180x180.png +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/static/apple-touch-icon-72x72.png +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/static/apple-touch-icon-76x76.png +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/static/apple-touch-icon.png +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/static/assets/vendor-BGzfc4EU.css +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/static/assets/vendor-three-BLWp5bic.js +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/static/favicon.ico +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/static/modernizr.js +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/telemetry.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/templates/__init__.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/templates/index.html +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/types.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/services.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/session/__init__.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/session/client.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/session/data_extractor.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/session/evaluation.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/session/session.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/settings.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/trace/__init__.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/trace/attributes.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/trace/dsl/README.md +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/trace/dsl/__init__.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/trace/dsl/filter.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/trace/dsl/helpers.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/trace/dsl/query.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/trace/errors.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/trace/evaluation_conventions.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/trace/exporter.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/trace/fixtures.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/trace/otel.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/trace/projects.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/trace/schemas.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/trace/span_evaluations.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/trace/span_json_decoder.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/trace/span_json_encoder.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/trace/trace_dataset.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/trace/utils.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/trace/v1/__init__.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/trace/v1/evaluation_pb2.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/trace/v1/evaluation_pb2.pyi +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/utilities/__init__.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/utilities/client.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/utilities/error_handling.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/utilities/json.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/utilities/logging.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/utilities/project.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/utilities/re.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/utilities/span_store.py +0 -0
- {arize_phoenix-11.33.0 → arize_phoenix-11.35.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.35.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
|
|
@@ -21,7 +21,7 @@ Requires-Dist: aioitertools
|
|
|
21
21
|
Requires-Dist: aiosqlite
|
|
22
22
|
Requires-Dist: alembic<2,>=1.3.0
|
|
23
23
|
Requires-Dist: arize-phoenix-client
|
|
24
|
-
Requires-Dist: arize-phoenix-evals>=0.
|
|
24
|
+
Requires-Dist: arize-phoenix-evals>=2.0.0
|
|
25
25
|
Requires-Dist: arize-phoenix-otel>=0.10.3
|
|
26
26
|
Requires-Dist: authlib
|
|
27
27
|
Requires-Dist: cachetools
|
|
@@ -121,12 +121,6 @@ Requires-Dist: numba>=0.60.0; extra == 'embeddings'
|
|
|
121
121
|
Requires-Dist: umap-learn; extra == 'embeddings'
|
|
122
122
|
Provides-Extra: evals
|
|
123
123
|
Provides-Extra: experimental
|
|
124
|
-
Provides-Extra: llama-index
|
|
125
|
-
Requires-Dist: llama-index-agent-openai>=0.2.7; extra == 'llama-index'
|
|
126
|
-
Requires-Dist: llama-index-embeddings-openai>=0.1.10; extra == 'llama-index'
|
|
127
|
-
Requires-Dist: llama-index-llms-openai>=0.1.24; extra == 'llama-index'
|
|
128
|
-
Requires-Dist: llama-index-readers-file>=0.1.25; extra == 'llama-index'
|
|
129
|
-
Requires-Dist: llama-index==0.11.0; extra == 'llama-index'
|
|
130
124
|
Provides-Extra: pg
|
|
131
125
|
Requires-Dist: asyncpg; extra == 'pg'
|
|
132
126
|
Requires-Dist: psycopg[binary,pool]; extra == 'pg'
|
|
@@ -241,6 +235,15 @@ Phoenix is built on top of OpenTelemetry and is vendor, language, and framework
|
|
|
241
235
|
| [Autogen AgentChat](https://arize.com/docs/phoenix/integrations/frameworks/autogen/autogen-tracing) | `openinference-instrumentation-autogen-agentchat` | [](https://pypi.python.org/pypi/openinference-instrumentation-autogen-agentchat) |
|
|
242
236
|
| [Portkey](https://arize.com/docs/phoenix/integrations/portkey) | `openinference-instrumentation-portkey` | [](https://pypi.python.org/pypi/openinference-instrumentation-portkey) |
|
|
243
237
|
|
|
238
|
+
## Span Processors
|
|
239
|
+
|
|
240
|
+
Normalize and convert data across other instrumentation libraries by adding span processors that unify data.
|
|
241
|
+
|
|
242
|
+
| Package | Description | Version |
|
|
243
|
+
| ----------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
244
|
+
| [`openinference-instrumentation-openlit`](./python/instrumentation/openinference-instrumentation-openlit) | OpenInference Span Processor for OpenLIT traces. | [](https://pypi.python.org/pypi/openinference-instrumentation-openlit) |
|
|
245
|
+
| [`openinference-instrumentation-openllmetry`](./python/instrumentation/openinference-instrumentation-openllmetry) | OpenInference Span Processor for OpenLLMetry (Traceloop) traces. | [](https://pypi.python.org/pypi/openinference-instrumentation-openllmetry) |
|
|
246
|
+
|
|
244
247
|
### JavaScript Integrations
|
|
245
248
|
|
|
246
249
|
| Integration | Package | Version Badge |
|
|
@@ -256,7 +259,7 @@ Phoenix is built on top of OpenTelemetry and is vendor, language, and framework
|
|
|
256
259
|
| Integration | Package | Version Badge |
|
|
257
260
|
| --------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
258
261
|
| [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) |
|
|
259
|
-
|
|
|
262
|
+
| SpringAI | `openinference-instrumentation-springAI` | [](https://central.sonatype.com/artifact/com.arize/openinference-instrumentation-springAI) |
|
|
260
263
|
|
|
261
264
|
### Platforms
|
|
262
265
|
|
|
@@ -106,6 +106,15 @@ Phoenix is built on top of OpenTelemetry and is vendor, language, and framework
|
|
|
106
106
|
| [Autogen AgentChat](https://arize.com/docs/phoenix/integrations/frameworks/autogen/autogen-tracing) | `openinference-instrumentation-autogen-agentchat` | [](https://pypi.python.org/pypi/openinference-instrumentation-autogen-agentchat) |
|
|
107
107
|
| [Portkey](https://arize.com/docs/phoenix/integrations/portkey) | `openinference-instrumentation-portkey` | [](https://pypi.python.org/pypi/openinference-instrumentation-portkey) |
|
|
108
108
|
|
|
109
|
+
## Span Processors
|
|
110
|
+
|
|
111
|
+
Normalize and convert data across other instrumentation libraries by adding span processors that unify data.
|
|
112
|
+
|
|
113
|
+
| Package | Description | Version |
|
|
114
|
+
| ----------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
115
|
+
| [`openinference-instrumentation-openlit`](./python/instrumentation/openinference-instrumentation-openlit) | OpenInference Span Processor for OpenLIT traces. | [](https://pypi.python.org/pypi/openinference-instrumentation-openlit) |
|
|
116
|
+
| [`openinference-instrumentation-openllmetry`](./python/instrumentation/openinference-instrumentation-openllmetry) | OpenInference Span Processor for OpenLLMetry (Traceloop) traces. | [](https://pypi.python.org/pypi/openinference-instrumentation-openllmetry) |
|
|
117
|
+
|
|
109
118
|
### JavaScript Integrations
|
|
110
119
|
|
|
111
120
|
| Integration | Package | Version Badge |
|
|
@@ -121,7 +130,7 @@ Phoenix is built on top of OpenTelemetry and is vendor, language, and framework
|
|
|
121
130
|
| Integration | Package | Version Badge |
|
|
122
131
|
| --------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
123
132
|
| [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
|
-
|
|
|
133
|
+
| SpringAI | `openinference-instrumentation-springAI` | [](https://central.sonatype.com/artifact/com.arize/openinference-instrumentation-springAI) |
|
|
125
134
|
|
|
126
135
|
### Platforms
|
|
127
136
|
|
|
@@ -53,7 +53,7 @@ dependencies = [
|
|
|
53
53
|
"sqlean.py>=3.45.1,<3.50; platform_system == 'Windows'", # https://github.com/nalgeon/sqlean.py/commit/2714a4789998811b7dd9f102f5b45ea071ed879e
|
|
54
54
|
"cachetools",
|
|
55
55
|
"python-multipart", # see https://www.starlette.io/#dependencies
|
|
56
|
-
"arize-phoenix-evals>=0.
|
|
56
|
+
"arize-phoenix-evals>=2.0.0",
|
|
57
57
|
"arize-phoenix-otel>=0.10.3",
|
|
58
58
|
"fastapi",
|
|
59
59
|
"pydantic>=2.1.0", # exclude 2.0.* since it does not support the `json_encoders` configuration setting
|
|
@@ -115,13 +115,6 @@ embeddings = [
|
|
|
115
115
|
]
|
|
116
116
|
evals = []
|
|
117
117
|
experimental = []
|
|
118
|
-
llama-index = [
|
|
119
|
-
"llama-index==0.11.0", # always pin to a version that keeps our notebooks working
|
|
120
|
-
"llama-index-readers-file>=0.1.25",
|
|
121
|
-
"llama-index-llms-openai>=0.1.24",
|
|
122
|
-
"llama-index-embeddings-openai>=0.1.10",
|
|
123
|
-
"llama-index-agent-openai>=0.2.7",
|
|
124
|
-
]
|
|
125
118
|
pg = [
|
|
126
119
|
"asyncpg",
|
|
127
120
|
"psycopg[binary,pool]",
|
|
@@ -134,6 +134,25 @@ ENV_PHOENIX_ENABLE_PROMETHEUS = "PHOENIX_ENABLE_PROMETHEUS"
|
|
|
134
134
|
"""
|
|
135
135
|
Whether to enable Prometheus. Defaults to false.
|
|
136
136
|
"""
|
|
137
|
+
ENV_PHOENIX_MAX_SPANS_QUEUE_SIZE = "PHOENIX_MAX_SPANS_QUEUE_SIZE"
|
|
138
|
+
"""
|
|
139
|
+
The maximum number of spans to hold in the processing queue before rejecting new requests.
|
|
140
|
+
|
|
141
|
+
This is a heuristic to prevent memory issues when spans accumulate faster than they can be
|
|
142
|
+
written to the database. When this limit is reached, new incoming requests will be rejected
|
|
143
|
+
to protect system memory.
|
|
144
|
+
|
|
145
|
+
Note: The actual queue size may exceed this limit due to batch processing. Requests are
|
|
146
|
+
accepted or rejected before spans are deserialized, but a single accepted request may
|
|
147
|
+
contain multiple spans. This behavior is intentional to balance memory protection with
|
|
148
|
+
processing efficiency.
|
|
149
|
+
|
|
150
|
+
Memory usage: If an average span takes ~50KiB of memory, then 20,000 spans would use ~1GiB
|
|
151
|
+
of memory. Adjust this value based on your system's available memory and expected database
|
|
152
|
+
throughput.
|
|
153
|
+
|
|
154
|
+
Defaults to 20000.
|
|
155
|
+
"""
|
|
137
156
|
ENV_LOGGING_MODE = "PHOENIX_LOGGING_MODE"
|
|
138
157
|
"""
|
|
139
158
|
The logging mode (either 'default' or 'structured').
|
|
@@ -1422,6 +1441,30 @@ def get_env_enable_prometheus() -> bool:
|
|
|
1422
1441
|
)
|
|
1423
1442
|
|
|
1424
1443
|
|
|
1444
|
+
def get_env_max_spans_queue_size() -> int:
|
|
1445
|
+
"""
|
|
1446
|
+
Gets the maximum spans queue size from the PHOENIX_MAX_SPANS_QUEUE_SIZE environment variable.
|
|
1447
|
+
|
|
1448
|
+
Returns:
|
|
1449
|
+
int: The maximum number of spans to hold in queue before rejecting requests.
|
|
1450
|
+
Defaults to 20,000 if not set.
|
|
1451
|
+
|
|
1452
|
+
Raises:
|
|
1453
|
+
ValueError: If the value is not a positive integer.
|
|
1454
|
+
|
|
1455
|
+
Note:
|
|
1456
|
+
The actual queue size may exceed this limit due to batch processing where a single
|
|
1457
|
+
accepted request can contain multiple spans. This is a heuristic for memory protection.
|
|
1458
|
+
"""
|
|
1459
|
+
max_size = _int_val(ENV_PHOENIX_MAX_SPANS_QUEUE_SIZE, 20_000)
|
|
1460
|
+
if max_size <= 0:
|
|
1461
|
+
raise ValueError(
|
|
1462
|
+
f"Invalid value for environment variable {ENV_PHOENIX_MAX_SPANS_QUEUE_SIZE}: "
|
|
1463
|
+
f"{max_size}. Value must be a positive integer."
|
|
1464
|
+
)
|
|
1465
|
+
return max_size
|
|
1466
|
+
|
|
1467
|
+
|
|
1425
1468
|
def get_env_client_headers() -> dict[str, str]:
|
|
1426
1469
|
headers = parse_env_headers(getenv(ENV_PHOENIX_CLIENT_HEADERS))
|
|
1427
1470
|
if (api_key := get_env_phoenix_api_key()) and "authorization" not in [
|
|
@@ -1684,6 +1727,7 @@ def verify_server_environment_variables() -> None:
|
|
|
1684
1727
|
get_env_database_allocated_storage_capacity_gibibytes()
|
|
1685
1728
|
get_env_database_usage_email_warning_threshold_percentage()
|
|
1686
1729
|
get_env_database_usage_insertion_blocking_threshold_percentage()
|
|
1730
|
+
get_env_max_spans_queue_size()
|
|
1687
1731
|
validate_env_support_email()
|
|
1688
1732
|
|
|
1689
1733
|
# Notify users about deprecated environment variables if they are being used.
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import asyncio
|
|
2
2
|
import logging
|
|
3
3
|
from asyncio import Queue, as_completed
|
|
4
|
-
from collections
|
|
4
|
+
from collections import deque
|
|
5
5
|
from dataclasses import dataclass, field
|
|
6
6
|
from functools import singledispatchmethod
|
|
7
|
-
from
|
|
8
|
-
from
|
|
9
|
-
from typing import Any, Optional, cast
|
|
7
|
+
from time import perf_counter, time
|
|
8
|
+
from typing import Any, AsyncIterator, Awaitable, Callable, Iterable, Optional, cast
|
|
10
9
|
|
|
11
10
|
from openinference.semconv.trace import SpanAttributes
|
|
12
11
|
from typing_extensions import TypeAlias
|
|
13
12
|
|
|
14
13
|
import phoenix.trace.v1 as pb
|
|
14
|
+
from phoenix.db import models
|
|
15
15
|
from phoenix.db.insertion.constants import DEFAULT_RETRY_ALLOWANCE, DEFAULT_RETRY_DELAY_SEC
|
|
16
16
|
from phoenix.db.insertion.document_annotation import DocumentAnnotationQueueInserter
|
|
17
17
|
from phoenix.db.insertion.evaluation import (
|
|
@@ -29,15 +29,23 @@ from phoenix.db.insertion.trace_annotation import TraceAnnotationQueueInserter
|
|
|
29
29
|
from phoenix.db.insertion.types import Insertables, Precursors
|
|
30
30
|
from phoenix.server.daemons.span_cost_calculator import (
|
|
31
31
|
SpanCostCalculator,
|
|
32
|
-
SpanCostCalculatorQueueItem,
|
|
33
32
|
)
|
|
34
33
|
from phoenix.server.dml_event import DmlEvent, SpanInsertEvent
|
|
34
|
+
from phoenix.server.prometheus import (
|
|
35
|
+
BULK_LOADER_EVALUATION_INSERTIONS,
|
|
36
|
+
BULK_LOADER_EXCEPTIONS,
|
|
37
|
+
BULK_LOADER_LAST_ACTIVITY,
|
|
38
|
+
BULK_LOADER_SPAN_EXCEPTIONS,
|
|
39
|
+
BULK_LOADER_SPAN_INSERTION_TIME,
|
|
40
|
+
SPAN_QUEUE_SIZE,
|
|
41
|
+
)
|
|
35
42
|
from phoenix.server.types import CanPutItem, DbSessionFactory
|
|
36
43
|
from phoenix.trace.schemas import Span
|
|
37
44
|
|
|
38
45
|
logger = logging.getLogger(__name__)
|
|
39
46
|
|
|
40
47
|
ProjectRowId: TypeAlias = int
|
|
48
|
+
ProjectName: TypeAlias = str
|
|
41
49
|
|
|
42
50
|
|
|
43
51
|
@dataclass(frozen=True)
|
|
@@ -52,12 +60,12 @@ class BulkInserter:
|
|
|
52
60
|
*,
|
|
53
61
|
event_queue: CanPutItem[DmlEvent],
|
|
54
62
|
span_cost_calculator: SpanCostCalculator,
|
|
55
|
-
initial_batch_of_spans:
|
|
56
|
-
initial_batch_of_evaluations:
|
|
63
|
+
initial_batch_of_spans: Iterable[tuple[Span, ProjectName]] = (),
|
|
64
|
+
initial_batch_of_evaluations: Iterable[pb.Evaluation] = (),
|
|
57
65
|
sleep: float = 0.1,
|
|
58
66
|
max_ops_per_transaction: int = 1000,
|
|
59
67
|
max_queue_size: int = 1000,
|
|
60
|
-
|
|
68
|
+
max_spans_queue_size: Optional[int] = None,
|
|
61
69
|
retry_delay_sec: float = DEFAULT_RETRY_DELAY_SEC,
|
|
62
70
|
retry_allowance: int = DEFAULT_RETRY_ALLOWANCE,
|
|
63
71
|
) -> None:
|
|
@@ -68,7 +76,6 @@ class BulkInserter:
|
|
|
68
76
|
:param max_ops_per_transaction: The maximum number of operations to dequeue from
|
|
69
77
|
the operations queue for each transaction.
|
|
70
78
|
:param max_queue_size: The maximum length of the operations queue.
|
|
71
|
-
:param enable_prometheus: Whether Prometheus is enabled.
|
|
72
79
|
"""
|
|
73
80
|
self._db = db
|
|
74
81
|
self._running = False
|
|
@@ -76,20 +83,20 @@ class BulkInserter:
|
|
|
76
83
|
self._max_ops_per_transaction = max_ops_per_transaction
|
|
77
84
|
self._operations: Optional[Queue[DataManipulation]] = None
|
|
78
85
|
self._max_queue_size = max_queue_size
|
|
79
|
-
self.
|
|
80
|
-
|
|
81
|
-
)
|
|
82
|
-
self._evaluations: list[pb.Evaluation] = (
|
|
83
|
-
[] if initial_batch_of_evaluations is None else list(initial_batch_of_evaluations)
|
|
84
|
-
)
|
|
86
|
+
self._max_spans_queue_size = max_spans_queue_size
|
|
87
|
+
self._spans: deque[tuple[Span, ProjectName]] = deque(initial_batch_of_spans)
|
|
88
|
+
self._evaluations: deque[pb.Evaluation] = deque(initial_batch_of_evaluations)
|
|
85
89
|
self._task: Optional[asyncio.Task[None]] = None
|
|
86
90
|
self._event_queue = event_queue
|
|
87
|
-
self._enable_prometheus = enable_prometheus
|
|
88
91
|
self._retry_delay_sec = retry_delay_sec
|
|
89
92
|
self._retry_allowance = retry_allowance
|
|
90
93
|
self._queue_inserters = _QueueInserters(db, self._retry_delay_sec, self._retry_allowance)
|
|
91
94
|
self._span_cost_calculator = span_cost_calculator
|
|
92
95
|
|
|
96
|
+
@property
|
|
97
|
+
def is_full(self) -> bool:
|
|
98
|
+
return bool(self._max_spans_queue_size and self._max_spans_queue_size <= len(self._spans))
|
|
99
|
+
|
|
93
100
|
async def __aenter__(
|
|
94
101
|
self,
|
|
95
102
|
) -> tuple[
|
|
@@ -102,9 +109,9 @@ class BulkInserter:
|
|
|
102
109
|
self._operations = Queue(maxsize=self._max_queue_size)
|
|
103
110
|
self._task = asyncio.create_task(self._bulk_insert())
|
|
104
111
|
return (
|
|
105
|
-
self.
|
|
106
|
-
self.
|
|
107
|
-
self.
|
|
112
|
+
self._enqueue_annotations,
|
|
113
|
+
self._enqueue_span,
|
|
114
|
+
self._enqueue_evaluation,
|
|
108
115
|
self._enqueue_operation,
|
|
109
116
|
)
|
|
110
117
|
|
|
@@ -114,23 +121,22 @@ class BulkInserter:
|
|
|
114
121
|
self._task.cancel()
|
|
115
122
|
self._task = None
|
|
116
123
|
|
|
117
|
-
async def
|
|
124
|
+
async def _enqueue_annotations(self, *items: Any) -> None:
|
|
118
125
|
await self._queue_inserters.enqueue(*items)
|
|
119
126
|
|
|
120
127
|
def _enqueue_operation(self, operation: DataManipulation) -> None:
|
|
121
128
|
cast("Queue[DataManipulation]", self._operations).put_nowait(operation)
|
|
122
129
|
|
|
123
|
-
async def
|
|
130
|
+
async def _enqueue_span(self, span: Span, project_name: str) -> None:
|
|
124
131
|
self._spans.append((span, project_name))
|
|
125
132
|
|
|
126
|
-
async def
|
|
133
|
+
async def _enqueue_evaluation(self, evaluation: pb.Evaluation) -> None:
|
|
127
134
|
self._evaluations.append(evaluation)
|
|
128
135
|
|
|
129
136
|
async def _process_events(self, events: Iterable[Optional[DataManipulationEvent]]) -> None: ...
|
|
130
137
|
|
|
131
138
|
async def _bulk_insert(self) -> None:
|
|
132
139
|
assert isinstance(self._operations, Queue)
|
|
133
|
-
spans_buffer, evaluations_buffer = None, None
|
|
134
140
|
# start first insert immediately if the inserter has not run recently
|
|
135
141
|
while (
|
|
136
142
|
self._running
|
|
@@ -139,6 +145,8 @@ class BulkInserter:
|
|
|
139
145
|
or self._spans
|
|
140
146
|
or self._evaluations
|
|
141
147
|
):
|
|
148
|
+
BULK_LOADER_LAST_ACTIVITY.set(time())
|
|
149
|
+
SPAN_QUEUE_SIZE.set(len(self._spans))
|
|
142
150
|
if (
|
|
143
151
|
self._queue_inserters.empty
|
|
144
152
|
and self._operations.empty()
|
|
@@ -156,113 +164,100 @@ class BulkInserter:
|
|
|
156
164
|
async with session.begin_nested():
|
|
157
165
|
await op(session)
|
|
158
166
|
except Exception as e:
|
|
159
|
-
|
|
160
|
-
from phoenix.server.prometheus import BULK_LOADER_EXCEPTIONS
|
|
161
|
-
|
|
162
|
-
BULK_LOADER_EXCEPTIONS.inc()
|
|
167
|
+
BULK_LOADER_EXCEPTIONS.inc()
|
|
163
168
|
logger.exception(str(e))
|
|
164
169
|
# It's important to grab the buffers at the same time so there's
|
|
165
170
|
# no race condition, since an eval insertion will fail if the span
|
|
166
171
|
# it references doesn't exist. Grabbing the eval buffer later may
|
|
167
172
|
# include an eval whose span is in the queue but missed being
|
|
168
173
|
# included in the span buffer that was grabbed previously.
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
self._spans = []
|
|
172
|
-
if self._evaluations:
|
|
173
|
-
evaluations_buffer = self._evaluations
|
|
174
|
-
self._evaluations = []
|
|
174
|
+
num_spans_to_insert = min(self._max_ops_per_transaction, len(self._spans))
|
|
175
|
+
num_evals_to_insert = min(self._max_ops_per_transaction, len(self._evaluations))
|
|
175
176
|
# Spans should be inserted before the evaluations, since an evaluation
|
|
176
177
|
# insertion will fail if the span it references doesn't exist.
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
spans_buffer = None
|
|
180
|
-
if evaluations_buffer:
|
|
181
|
-
await self._insert_evaluations(evaluations_buffer)
|
|
182
|
-
evaluations_buffer = None
|
|
178
|
+
await self._insert_spans(num_spans_to_insert)
|
|
179
|
+
await self._insert_evaluations(num_evals_to_insert)
|
|
183
180
|
async for event in self._queue_inserters.insert():
|
|
184
181
|
self._event_queue.put(event)
|
|
185
182
|
await asyncio.sleep(self._sleep)
|
|
186
183
|
|
|
187
|
-
async def _insert_spans(self,
|
|
184
|
+
async def _insert_spans(self, num_spans_to_insert: int) -> None:
|
|
185
|
+
if not num_spans_to_insert or not self._spans:
|
|
186
|
+
return
|
|
188
187
|
project_ids = set()
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
if
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
async with self._db() as session:
|
|
242
|
-
for evaluation in islice(evaluations, i, i + self._max_ops_per_transaction):
|
|
243
|
-
if self._enable_prometheus:
|
|
244
|
-
from phoenix.server.prometheus import BULK_LOADER_EVALUATION_INSERTIONS
|
|
245
|
-
|
|
246
|
-
BULK_LOADER_EVALUATION_INSERTIONS.inc()
|
|
247
|
-
try:
|
|
248
|
-
async with session.begin_nested():
|
|
249
|
-
await insert_evaluation(session, evaluation)
|
|
250
|
-
except InsertEvaluationError as error:
|
|
251
|
-
if self._enable_prometheus:
|
|
252
|
-
from phoenix.server.prometheus import BULK_LOADER_EXCEPTIONS
|
|
253
|
-
|
|
254
|
-
BULK_LOADER_EXCEPTIONS.inc()
|
|
255
|
-
logger.exception(f"Failed to insert evaluation: {str(error)}")
|
|
256
|
-
if self._enable_prometheus:
|
|
257
|
-
from phoenix.server.prometheus import BULK_LOADER_INSERTION_TIME
|
|
258
|
-
|
|
259
|
-
BULK_LOADER_INSERTION_TIME.observe(perf_counter() - start)
|
|
260
|
-
except Exception:
|
|
261
|
-
if self._enable_prometheus:
|
|
262
|
-
from phoenix.server.prometheus import BULK_LOADER_EXCEPTIONS
|
|
188
|
+
span_costs: list[models.SpanCost] = []
|
|
189
|
+
try:
|
|
190
|
+
start = perf_counter()
|
|
191
|
+
async with self._db() as session:
|
|
192
|
+
while num_spans_to_insert > 0:
|
|
193
|
+
num_spans_to_insert -= 1
|
|
194
|
+
if not self._spans:
|
|
195
|
+
break
|
|
196
|
+
span, project_name = self._spans.popleft()
|
|
197
|
+
result: Optional[SpanInsertionEvent] = None
|
|
198
|
+
try:
|
|
199
|
+
async with session.begin_nested():
|
|
200
|
+
result = await insert_span(session, span, project_name)
|
|
201
|
+
except Exception:
|
|
202
|
+
BULK_LOADER_SPAN_EXCEPTIONS.inc()
|
|
203
|
+
logger.exception(
|
|
204
|
+
f"Failed to insert span with span_id={span.context.span_id}"
|
|
205
|
+
)
|
|
206
|
+
if result is None:
|
|
207
|
+
continue
|
|
208
|
+
project_ids.add(result.project_rowid)
|
|
209
|
+
try:
|
|
210
|
+
if not should_calculate_span_cost(span.attributes):
|
|
211
|
+
continue
|
|
212
|
+
span_cost = self._span_cost_calculator.calculate_cost(
|
|
213
|
+
span.start_time,
|
|
214
|
+
span.attributes,
|
|
215
|
+
)
|
|
216
|
+
except Exception:
|
|
217
|
+
logger.exception(
|
|
218
|
+
f"Failed to calculate span cost for span with "
|
|
219
|
+
f"span_id={span.context.span_id}"
|
|
220
|
+
)
|
|
221
|
+
else:
|
|
222
|
+
if span_cost is None:
|
|
223
|
+
continue
|
|
224
|
+
span_cost.span_rowid = result.span_rowid
|
|
225
|
+
span_cost.trace_rowid = result.trace_rowid
|
|
226
|
+
span_costs.append(span_cost)
|
|
227
|
+
BULK_LOADER_SPAN_INSERTION_TIME.observe(perf_counter() - start)
|
|
228
|
+
except Exception:
|
|
229
|
+
BULK_LOADER_SPAN_EXCEPTIONS.inc()
|
|
230
|
+
logger.exception("Failed to insert spans")
|
|
231
|
+
if project_ids:
|
|
232
|
+
self._event_queue.put(SpanInsertEvent(tuple(project_ids)))
|
|
233
|
+
if not span_costs:
|
|
234
|
+
return
|
|
235
|
+
try:
|
|
236
|
+
async with self._db() as session:
|
|
237
|
+
session.add_all(span_costs)
|
|
238
|
+
except Exception:
|
|
239
|
+
logger.exception("Failed to insert span costs")
|
|
263
240
|
|
|
264
|
-
|
|
265
|
-
|
|
241
|
+
async def _insert_evaluations(self, num_evals_to_insert: int) -> None:
|
|
242
|
+
if not num_evals_to_insert or not self._evaluations:
|
|
243
|
+
return
|
|
244
|
+
try:
|
|
245
|
+
async with self._db() as session:
|
|
246
|
+
while num_evals_to_insert > 0:
|
|
247
|
+
num_evals_to_insert -= 1
|
|
248
|
+
if not self._evaluations:
|
|
249
|
+
break
|
|
250
|
+
evaluation = self._evaluations.popleft()
|
|
251
|
+
BULK_LOADER_EVALUATION_INSERTIONS.inc()
|
|
252
|
+
try:
|
|
253
|
+
async with session.begin_nested():
|
|
254
|
+
await insert_evaluation(session, evaluation)
|
|
255
|
+
except InsertEvaluationError as error:
|
|
256
|
+
BULK_LOADER_EXCEPTIONS.inc()
|
|
257
|
+
logger.exception(f"Failed to insert evaluation: {str(error)}")
|
|
258
|
+
except Exception:
|
|
259
|
+
BULK_LOADER_EXCEPTIONS.inc()
|
|
260
|
+
logger.exception("Failed to insert evaluations")
|
|
266
261
|
|
|
267
262
|
|
|
268
263
|
class _QueueInserters:
|
{arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/routers/v1/documents.py
RENAMED
|
@@ -82,7 +82,7 @@ async def annotate_span_documents(
|
|
|
82
82
|
annotation.as_precursor(user_id=user_id) for annotation in span_document_annotations
|
|
83
83
|
]
|
|
84
84
|
if not sync:
|
|
85
|
-
await request.state.
|
|
85
|
+
await request.state.enqueue_annotations(*precursors)
|
|
86
86
|
return AnnotateSpanDocumentsResponseBody(data=[])
|
|
87
87
|
|
|
88
88
|
span_ids = {p.span_id for p in precursors}
|
{arize_phoenix-11.33.0 → arize_phoenix-11.35.0}/src/phoenix/server/api/routers/v1/evaluations.py
RENAMED
|
@@ -102,7 +102,7 @@ async def post_evaluations(
|
|
|
102
102
|
detail="Evaluation name must not be blank/empty",
|
|
103
103
|
status_code=HTTP_422_UNPROCESSABLE_ENTITY,
|
|
104
104
|
)
|
|
105
|
-
await request.state.
|
|
105
|
+
await request.state.enqueue_evaluation(evaluation)
|
|
106
106
|
return Response()
|
|
107
107
|
|
|
108
108
|
|
|
@@ -221,7 +221,7 @@ async def _add_evaluations(state: State, evaluations: Evaluations) -> None:
|
|
|
221
221
|
explanation=explanation,
|
|
222
222
|
metadata_={},
|
|
223
223
|
)
|
|
224
|
-
await state.
|
|
224
|
+
await state.enqueue_annotations(document_annotation)
|
|
225
225
|
elif len(names) == 1 and names[0] in ("context.span_id", "span_id"):
|
|
226
226
|
for index, row in dataframe.iterrows():
|
|
227
227
|
score, label, explanation = _get_annotation_result(row)
|
|
@@ -235,7 +235,7 @@ async def _add_evaluations(state: State, evaluations: Evaluations) -> None:
|
|
|
235
235
|
explanation=explanation,
|
|
236
236
|
metadata_={},
|
|
237
237
|
)
|
|
238
|
-
await state.
|
|
238
|
+
await state.enqueue_annotations(span_annotation)
|
|
239
239
|
elif len(names) == 1 and names[0] in ("context.trace_id", "trace_id"):
|
|
240
240
|
for index, row in dataframe.iterrows():
|
|
241
241
|
score, label, explanation = _get_annotation_result(row)
|
|
@@ -249,7 +249,7 @@ async def _add_evaluations(state: State, evaluations: Evaluations) -> None:
|
|
|
249
249
|
explanation=explanation,
|
|
250
250
|
metadata_={},
|
|
251
251
|
)
|
|
252
|
-
await state.
|
|
252
|
+
await state.enqueue_annotations(trace_annotation)
|
|
253
253
|
|
|
254
254
|
|
|
255
255
|
def _get_annotation_result(
|
|
@@ -897,7 +897,7 @@ async def annotate_spans(
|
|
|
897
897
|
)
|
|
898
898
|
precursors = [d.as_precursor(user_id=user_id) for d in filtered_span_annotations]
|
|
899
899
|
if not sync:
|
|
900
|
-
await request.state.
|
|
900
|
+
await request.state.enqueue_annotations(*precursors)
|
|
901
901
|
return AnnotateSpansResponseBody(data=[])
|
|
902
902
|
|
|
903
903
|
span_ids = {p.span_id for p in precursors}
|
|
@@ -1072,7 +1072,7 @@ async def create_spans(
|
|
|
1072
1072
|
|
|
1073
1073
|
# All spans are valid, queue them all
|
|
1074
1074
|
for span_for_insertion, project_name in spans_to_queue:
|
|
1075
|
-
await request.state.
|
|
1075
|
+
await request.state.enqueue_span(span_for_insertion, project_name)
|
|
1076
1076
|
|
|
1077
1077
|
return CreateSpansResponseBody(
|
|
1078
1078
|
total_received=total_received,
|
|
@@ -18,6 +18,7 @@ from starlette.status import (
|
|
|
18
18
|
HTTP_404_NOT_FOUND,
|
|
19
19
|
HTTP_415_UNSUPPORTED_MEDIA_TYPE,
|
|
20
20
|
HTTP_422_UNPROCESSABLE_ENTITY,
|
|
21
|
+
HTTP_503_SERVICE_UNAVAILABLE,
|
|
21
22
|
)
|
|
22
23
|
from strawberry.relay import GlobalID
|
|
23
24
|
|
|
@@ -29,6 +30,7 @@ from phoenix.server.api.types.node import from_global_id_with_expected_type
|
|
|
29
30
|
from phoenix.server.authorization import is_not_locked
|
|
30
31
|
from phoenix.server.bearer_auth import PhoenixUser
|
|
31
32
|
from phoenix.server.dml_event import SpanDeleteEvent, TraceAnnotationInsertEvent
|
|
33
|
+
from phoenix.server.prometheus import SPAN_QUEUE_REJECTIONS
|
|
32
34
|
from phoenix.trace.otel import decode_otlp_span
|
|
33
35
|
from phoenix.utilities.project import get_project_name
|
|
34
36
|
|
|
@@ -42,9 +44,18 @@ from .utils import (
|
|
|
42
44
|
router = APIRouter(tags=["traces"])
|
|
43
45
|
|
|
44
46
|
|
|
47
|
+
def is_not_at_capacity(request: Request) -> None:
|
|
48
|
+
if request.app.state.span_queue_is_full():
|
|
49
|
+
SPAN_QUEUE_REJECTIONS.inc()
|
|
50
|
+
raise HTTPException(
|
|
51
|
+
detail="Server is at capacity and cannot process more requests",
|
|
52
|
+
status_code=HTTP_503_SERVICE_UNAVAILABLE,
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
|
|
45
56
|
@router.post(
|
|
46
57
|
"/traces",
|
|
47
|
-
dependencies=[Depends(is_not_locked)],
|
|
58
|
+
dependencies=[Depends(is_not_locked), Depends(is_not_at_capacity)],
|
|
48
59
|
operation_id="addTraces",
|
|
49
60
|
summary="Send traces",
|
|
50
61
|
responses=add_errors_to_responses(
|
|
@@ -56,6 +67,10 @@ router = APIRouter(tags=["traces"])
|
|
|
56
67
|
),
|
|
57
68
|
},
|
|
58
69
|
{"status_code": HTTP_422_UNPROCESSABLE_ENTITY, "description": "Invalid request body"},
|
|
70
|
+
{
|
|
71
|
+
"status_code": HTTP_503_SERVICE_UNAVAILABLE,
|
|
72
|
+
"description": "Server is at capacity and cannot process more requests",
|
|
73
|
+
},
|
|
59
74
|
]
|
|
60
75
|
),
|
|
61
76
|
openapi_extra={
|
|
@@ -145,7 +160,7 @@ async def annotate_traces(
|
|
|
145
160
|
|
|
146
161
|
precursors = [d.as_precursor(user_id=user_id) for d in request_body.data]
|
|
147
162
|
if not sync:
|
|
148
|
-
await request.state.
|
|
163
|
+
await request.state.enqueue_annotations(*precursors)
|
|
149
164
|
return AnnotateTracesResponseBody(data=[])
|
|
150
165
|
|
|
151
166
|
trace_ids = {p.trace_id for p in precursors}
|
|
@@ -193,7 +208,7 @@ async def _add_spans(req: ExportTraceServiceRequest, state: State) -> None:
|
|
|
193
208
|
for scope_span in resource_spans.scope_spans:
|
|
194
209
|
for otlp_span in scope_span.spans:
|
|
195
210
|
span = await run_in_threadpool(decode_otlp_span, otlp_span)
|
|
196
|
-
await state.
|
|
211
|
+
await state.enqueue_span(span, project_name)
|
|
197
212
|
|
|
198
213
|
|
|
199
214
|
@router.delete(
|