arize-phoenix 11.29.0__tar.gz → 11.31.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.29.0 → arize_phoenix-11.31.0}/PKG-INFO +17 -17
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/README.md +16 -16
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/types/trace_retention.py +1 -1
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/average_experiment_run_latency.py +1 -4
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/document_evaluations.py +6 -9
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/routers/v1/__init__.py +2 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/routers/v1/annotations.py +128 -5
- arize_phoenix-11.31.0/src/phoenix/server/api/routers/v1/documents.py +143 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/routers/v1/spans.py +7 -51
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/routers/v1/traces.py +24 -58
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/Dataset.py +8 -66
- arize_phoenix-11.31.0/src/phoenix/server/api/types/DatasetExperimentAnnotationSummary.py +10 -0
- arize_phoenix-11.31.0/src/phoenix/server/api/types/DocumentAnnotation.py +92 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/Experiment.py +2 -2
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/Span.py +9 -3
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/TraceAnnotation.py +8 -5
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/cost_tracking/model_cost_manifest.json +91 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/static/.vite/manifest.json +9 -9
- arize_phoenix-11.29.0/src/phoenix/server/static/assets/components-dCdVienD.js → arize_phoenix-11.31.0/src/phoenix/server/static/assets/components-BjW5gAwL.js +1 -1
- arize_phoenix-11.29.0/src/phoenix/server/static/assets/index-Bp44T8N2.js → arize_phoenix-11.31.0/src/phoenix/server/static/assets/index-3OI8VV_W.js +1 -1
- arize_phoenix-11.29.0/src/phoenix/server/static/assets/pages-CA4bKhm9.js → arize_phoenix-11.31.0/src/phoenix/server/static/assets/pages-CQfUODtD.js +312 -307
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/trace/projects.py +6 -0
- arize_phoenix-11.31.0/src/phoenix/version.py +1 -0
- arize_phoenix-11.29.0/src/phoenix/server/api/types/Evaluation.py +0 -39
- arize_phoenix-11.29.0/src/phoenix/version.py +0 -1
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/.gitignore +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/IP_NOTICE +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/LICENSE +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/pyproject.toml +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/__init__.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/auth.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/config.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/core/__init__.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/core/embedding_dimension.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/core/model.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/core/model_schema.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/core/model_schema_adapter.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/datetime_utils.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/README.md +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/__init__.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/alembic.ini +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/bulk_inserter.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/constants.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/engines.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/enums.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/facilitator.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/helpers.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/insertion/__init__.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/insertion/constants.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/insertion/dataset.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/insertion/document_annotation.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/insertion/evaluation.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/insertion/helpers.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/insertion/span.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/insertion/span_annotation.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/insertion/trace_annotation.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/insertion/types.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/migrate.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/migrations/__init__.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/migrations/data_migration_scripts/__init__.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/migrations/data_migration_scripts/populate_project_sessions.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/migrations/env.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/migrations/script.py.mako +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/migrations/versions/10460e46d750_datasets.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/migrations/versions/2f9d1a65945f_annotation_config_migration.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/migrations/versions/3be8647b87d8_add_token_columns_to_spans_table.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/migrations/versions/4ded9e43755f_create_project_sessions_table.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/migrations/versions/6a88424799fe_update_users_with_auth_method.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/migrations/versions/8a3764fe7f1a_change_jsonb_to_json_for_prompts.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/migrations/versions/a20694b15f82_cost.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/migrations/versions/bb8139330879_create_project_trace_retention_policies_table.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/migrations/versions/bc8fea3c2bc8_add_prompt_tables.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/migrations/versions/cd164e83824f_users_and_tokens.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/migrations/versions/cf03bd6bae1d_init.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/models.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/pg_config.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/types/__init__.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/types/annotation_configs.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/types/db_models.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/types/identifier.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/types/model_provider.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/types/token_price_customization.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/exceptions.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/experiments/__init__.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/experiments/evaluators/__init__.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/experiments/evaluators/base.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/experiments/evaluators/code_evaluators.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/experiments/evaluators/llm_evaluators.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/experiments/evaluators/utils.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/experiments/functions.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/experiments/tracing.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/experiments/types.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/experiments/utils.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/inferences/__init__.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/inferences/errors.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/inferences/fixtures.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/inferences/inferences.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/inferences/schema.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/inferences/validation.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/logging/__init__.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/logging/_config.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/logging/_filter.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/logging/_formatter.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/metrics/README.md +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/metrics/__init__.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/metrics/binning.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/metrics/metrics.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/metrics/mixins.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/metrics/retrieval_metrics.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/metrics/timeseries.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/metrics/wrappers.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/pointcloud/__init__.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/pointcloud/clustering.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/pointcloud/pointcloud.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/pointcloud/projectors.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/pointcloud/umap_parameters.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/py.typed +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/__init__.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/README.md +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/__init__.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/auth.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/context.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/__init__.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/annotation_configs_by_project.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/annotation_summaries.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/cache/__init__.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/cache/two_tier_cache.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/dataset_example_revisions.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/dataset_example_spans.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/document_evaluation_summaries.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/document_retrieval_metrics.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/experiment_annotation_summaries.py +1 -1
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/experiment_error_rates.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/experiment_run_annotations.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/experiment_run_counts.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/experiment_sequence_number.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/last_used_times_by_generative_model_id.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/latency_ms_quantile.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/min_start_or_max_end_times.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/num_child_spans.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/num_spans_per_trace.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/project_by_name.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/project_ids_by_trace_retention_policy_id.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/prompt_version_sequence_number.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/record_counts.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/session_io.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/session_num_traces.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/session_num_traces_with_error.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/session_token_usages.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/session_trace_latency_ms_quantile.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/span_annotations.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/span_by_id.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/span_cost_by_span.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/span_cost_detail_summary_entries_by_generative_model.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/span_cost_detail_summary_entries_by_project_session.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/span_cost_detail_summary_entries_by_span.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/span_cost_detail_summary_entries_by_trace.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/span_cost_details_by_span_cost.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_experiment.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_experiment_run.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_generative_model.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_project.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_project_session.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_trace.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/span_costs.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/span_dataset_examples.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/span_descendants.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/span_projects.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/table_fields.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/token_counts.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/trace_by_trace_ids.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/trace_retention_policy_id_by_project_id.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/trace_root_spans.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/types.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/user_roles.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/users.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/exceptions.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/helpers/__init__.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/helpers/annotations.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/helpers/dataset_helpers.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/helpers/experiment_run_filters.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/helpers/playground_clients.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/helpers/playground_registry.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/helpers/playground_spans.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/helpers/prompts/__init__.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/helpers/prompts/conversions/__init__.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/helpers/prompts/conversions/anthropic.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/helpers/prompts/conversions/aws.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/helpers/prompts/conversions/openai.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/helpers/prompts/models.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/AddExamplesToDatasetInput.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/AddSpansToDatasetInput.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/ChatCompletionInput.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/ChatCompletionMessageInput.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/ClearProjectInput.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/ClusterInput.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/Coordinates.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/CreateDatasetInput.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/CreateProjectInput.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/CreateSpanAnnotationInput.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/CreateTraceAnnotationInput.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/DataQualityMetricInput.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/DatasetExampleInput.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/DatasetFilter.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/DatasetSort.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/DatasetVersionSort.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/DeleteAnnotationsInput.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/DeleteDatasetExamplesInput.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/DeleteDatasetInput.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/DeleteExperimentsInput.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/DimensionFilter.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/DimensionInput.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/GenerativeCredentialInput.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/GenerativeModelInput.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/Granularity.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/InvocationParameters.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/PatchAnnotationInput.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/PatchDatasetExamplesInput.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/PatchDatasetInput.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/PerformanceMetricInput.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/ProjectFilter.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/ProjectSessionSort.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/ProjectSort.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/PromptFilter.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/PromptTemplateOptions.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/PromptVersionInput.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/SpanAnnotationFilter.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/SpanAnnotationSort.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/SpanSort.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/TimeBinConfig.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/TimeRange.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/TraceAnnotationSort.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/UserRoleInput.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/__init__.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/interceptor.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/mutations/__init__.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/mutations/annotation_config_mutations.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/mutations/api_key_mutations.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/mutations/chat_mutations.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/mutations/dataset_mutations.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/mutations/experiment_mutations.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/mutations/export_events_mutations.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/mutations/model_mutations.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/mutations/project_mutations.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/mutations/project_trace_retention_policy_mutations.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/mutations/prompt_label_mutations.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/mutations/prompt_mutations.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/mutations/prompt_version_tag_mutations.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/mutations/span_annotations_mutations.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/mutations/trace_annotations_mutations.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/mutations/trace_mutations.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/mutations/user_mutations.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/openapi/__init__.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/openapi/main.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/openapi/schema.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/queries.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/routers/__init__.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/routers/auth.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/routers/embeddings.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/routers/oauth2.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/routers/utils.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/routers/v1/annotation_configs.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/routers/v1/datasets.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/routers/v1/evaluations.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/routers/v1/experiment_evaluations.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/routers/v1/experiment_runs.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/routers/v1/experiments.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/routers/v1/models.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/routers/v1/projects.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/routers/v1/prompts.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/routers/v1/users.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/routers/v1/utils.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/schema.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/subscriptions.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/Annotation.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/AnnotationConfig.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/AnnotationSource.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/AnnotationSummary.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/AnnotatorKind.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/ApiKey.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/AuthMethod.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/ChatCompletionMessageRole.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/ChatCompletionSubscriptionPayload.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/Cluster.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/CostBreakdown.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/CreateDatasetPayload.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/CronExpression.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/DataQualityMetric.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/DatasetExample.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/DatasetExampleRevision.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/DatasetValues.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/DatasetVersion.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/Dimension.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/DimensionDataType.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/DimensionShape.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/DimensionType.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/DimensionWithValue.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/DocumentEvaluationSummary.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/DocumentRetrievalMetrics.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/EmbeddingDimension.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/EmbeddingMetadata.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/EvaluationSummary.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/Event.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/EventMetadata.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/ExampleRevisionInterface.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/ExperimentAnnotationSummary.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/ExperimentComparison.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/ExperimentRun.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/ExperimentRunAnnotation.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/ExportedFile.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/Functionality.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/GenerativeModel.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/GenerativeProvider.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/Identifier.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/InferenceModel.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/Inferences.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/InferencesRole.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/LabelFraction.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/MimeType.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/ModelInterface.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/NumericRange.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/PerformanceMetric.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/PlaygroundModel.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/Project.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/ProjectSession.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/ProjectTraceRetentionPolicy.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/Prompt.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/PromptLabel.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/PromptResponse.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/PromptVersion.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/PromptVersionTag.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/PromptVersionTemplate.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/ResponseFormat.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/Retrieval.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/ScalarDriftMetricEnum.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/Segments.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/ServerStatus.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/SortDir.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/SpanAnnotation.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/SpanCostDetailSummaryEntry.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/SpanCostSummary.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/SpanIOValue.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/SystemApiKey.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/TimeSeries.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/TokenCountPromptDetails.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/TokenPrice.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/TokenUsage.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/ToolDefinition.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/Trace.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/UMAPPoints.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/User.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/UserApiKey.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/UserRole.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/ValidationResult.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/VectorDriftMetricEnum.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/__init__.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/node.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/pagination.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/utils.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/app.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/authorization.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/bearer_auth.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/cost_tracking/__init__.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/cost_tracking/cost_details_calculator.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/cost_tracking/cost_model_lookup.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/cost_tracking/helpers.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/cost_tracking/regex_specificity.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/cost_tracking/token_cost_calculator.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/daemons/__init__.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/daemons/db_disk_usage_monitor.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/daemons/generative_model_store.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/daemons/span_cost_calculator.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/dml_event.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/dml_event_handler.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/email/__init__.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/email/sender.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/email/templates/__init__.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/email/templates/db_disk_usage_notification.html +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/email/templates/password_reset.html +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/email/templates/welcome.html +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/email/types.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/experiments/__init__.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/experiments/utils.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/grpc_server.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/jwt_store.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/main.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/middleware/__init__.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/middleware/gzip.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/oauth2.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/openapi/__init__.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/prometheus.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/rate_limiters.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/retention.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/session_filters.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/static/apple-touch-icon-114x114.png +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/static/apple-touch-icon-120x120.png +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/static/apple-touch-icon-144x144.png +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/static/apple-touch-icon-152x152.png +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/static/apple-touch-icon-180x180.png +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/static/apple-touch-icon-72x72.png +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/static/apple-touch-icon-76x76.png +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/static/apple-touch-icon.png +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/static/assets/vendor-CqDb5u4o.css +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/static/assets/vendor-RdRDaQiR.js +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/static/assets/vendor-arizeai-DsYDNOqt.js +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/static/assets/vendor-codemirror-BzJDUbEx.js +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/static/assets/vendor-recharts-BTHn5Y2R.js +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/static/assets/vendor-shiki-BAcocHFl.js +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/static/assets/vendor-three-BLWp5bic.js +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/static/favicon.ico +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/static/modernizr.js +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/telemetry.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/templates/__init__.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/templates/index.html +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/thread_server.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/types.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/services.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/session/__init__.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/session/client.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/session/data_extractor.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/session/evaluation.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/session/session.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/settings.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/trace/__init__.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/trace/attributes.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/trace/dsl/README.md +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/trace/dsl/__init__.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/trace/dsl/filter.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/trace/dsl/helpers.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/trace/dsl/query.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/trace/errors.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/trace/evaluation_conventions.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/trace/exporter.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/trace/fixtures.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/trace/otel.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/trace/schemas.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/trace/span_evaluations.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/trace/span_json_decoder.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/trace/span_json_encoder.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/trace/trace_dataset.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/trace/utils.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/trace/v1/__init__.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/trace/v1/evaluation_pb2.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/trace/v1/evaluation_pb2.pyi +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/utilities/__init__.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/utilities/client.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/utilities/deprecation.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/utilities/error_handling.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/utilities/json.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/utilities/logging.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/utilities/project.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/utilities/re.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/utilities/span_store.py +0 -0
- {arize_phoenix-11.29.0 → arize_phoenix-11.31.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.31.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
|
|
@@ -201,14 +201,14 @@ The `arize-phoenix` package includes the entire Phoenix platfom. However if you
|
|
|
201
201
|
|
|
202
202
|
### Subpackages
|
|
203
203
|
|
|
204
|
-
| Package |
|
|
205
|
-
| --------------------------------------------------------------------------------------------------- |
|
|
206
|
-
| [arize-phoenix-otel](https://github.com/Arize-ai/phoenix/tree/main/packages/phoenix-otel) |
|
|
207
|
-
| [arize-phoenix-client](https://github.com/Arize-ai/phoenix/tree/main/packages/phoenix-client) |
|
|
208
|
-
| [arize-phoenix-evals](https://github.com/Arize-ai/phoenix/tree/main/packages/phoenix-evals) |
|
|
209
|
-
| [@arizeai/phoenix-client](https://github.com/Arize-ai/phoenix/tree/main/js/packages/phoenix-client) |
|
|
210
|
-
| [@arizeai/phoenix-evals](https://github.com/Arize-ai/phoenix/tree/main/js/packages/phoenix-evals) |
|
|
211
|
-
| [@arizeai/phoenix-mcp](https://github.com/Arize-ai/phoenix/tree/main/js/packages/phoenix-mcp) |
|
|
204
|
+
| Package | Version & Docs | Description |
|
|
205
|
+
| --------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- |
|
|
206
|
+
| [arize-phoenix-otel](https://github.com/Arize-ai/phoenix/tree/main/packages/phoenix-otel) | [](https://pypi.org/project/arize-phoenix-otel/) [](https://arize-phoenix.readthedocs.io/projects/otel/en/latest/index.html) | Provides a lightweight wrapper around OpenTelemetry primitives with Phoenix-aware defaults |
|
|
207
|
+
| [arize-phoenix-client](https://github.com/Arize-ai/phoenix/tree/main/packages/phoenix-client) | [](https://pypi.org/project/arize-phoenix-client/) [](https://arize-phoenix.readthedocs.io/projects/client/en/latest/index.html) | Lightweight client for interacting with the Phoenix server via its OpenAPI REST interface |
|
|
208
|
+
| [arize-phoenix-evals](https://github.com/Arize-ai/phoenix/tree/main/packages/phoenix-evals) | [](https://pypi.org/project/arize-phoenix-evals/) [](https://arize-phoenix.readthedocs.io/projects/evals/en/latest/index.html) | Tooling to evaluate LLM applications including RAG relevance, answer relevance, and more |
|
|
209
|
+
| [@arizeai/phoenix-client](https://github.com/Arize-ai/phoenix/tree/main/js/packages/phoenix-client) | [](https://www.npmjs.com/package/@arizeai/phoenix-client) [](https://arize-ai.github.io/phoenix/) | Client for the Arize Phoenix API |
|
|
210
|
+
| [@arizeai/phoenix-evals](https://github.com/Arize-ai/phoenix/tree/main/js/packages/phoenix-evals) | [](https://www.npmjs.com/package/@arizeai/phoenix-evals) [](https://arize-ai.github.io/phoenix/) | TypeScript evaluation library for LLM applications (alpha release) |
|
|
211
|
+
| [@arizeai/phoenix-mcp](https://github.com/Arize-ai/phoenix/tree/main/js/packages/phoenix-mcp) | [](https://www.npmjs.com/package/@arizeai/phoenix-mcp) [](./js/packages/phoenix-mcp/README.md) | MCP server implementation for Arize Phoenix providing unified interface to Phoenix's capabilities |
|
|
212
212
|
|
|
213
213
|
## Tracing Integrations
|
|
214
214
|
|
|
@@ -256,17 +256,17 @@ Phoenix is built on top of OpenTelemetry and is vendor, language, and framework
|
|
|
256
256
|
| Integration | Package | Version Badge |
|
|
257
257
|
| --------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
258
258
|
| [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
|
-
| [SpringAI](https://central.sonatype.com/artifact/com.arize/openinference-instrumentation-springAI)
|
|
259
|
+
| [SpringAI](https://central.sonatype.com/artifact/com.arize/openinference-instrumentation-springAI) | `openinference-instrumentation-springAI` | [](https://central.sonatype.com/artifact/com.arize/openinference-instrumentation-springAI) |
|
|
260
260
|
|
|
261
261
|
### Platforms
|
|
262
262
|
|
|
263
|
-
| Platform | Description | Docs
|
|
264
|
-
| -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------- |
|
|
265
|
-
| [BeeAI](https://docs.beeai.dev/observability/agents-traceability) | AI agent framework with built-in observability | [Integration Guide](https://docs.beeai.dev/observability/agents-traceability)
|
|
266
|
-
| [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)
|
|
267
|
-
| [Envoy AI Gateway](https://github.com/envoyproxy/ai-gateway)
|
|
268
|
-
| [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)
|
|
269
|
-
| [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)
|
|
263
|
+
| Platform | Description | Docs |
|
|
264
|
+
| -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- |
|
|
265
|
+
| [BeeAI](https://docs.beeai.dev/observability/agents-traceability) | AI agent framework with built-in observability | [Integration Guide](https://docs.beeai.dev/observability/agents-traceability) |
|
|
266
|
+
| [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) |
|
|
267
|
+
| [Envoy AI Gateway](https://github.com/envoyproxy/ai-gateway) | AI Gateway built on Envoy Proxy for AI workloads | [Integration Guide](https://github.com/envoyproxy/ai-gateway/tree/main/cmd/aigw#opentelemetry-setup-with-phoenix) |
|
|
268
|
+
| [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) |
|
|
269
|
+
| [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) |
|
|
270
270
|
|
|
271
271
|
## Community
|
|
272
272
|
|
|
@@ -66,14 +66,14 @@ The `arize-phoenix` package includes the entire Phoenix platfom. However if you
|
|
|
66
66
|
|
|
67
67
|
### Subpackages
|
|
68
68
|
|
|
69
|
-
| Package |
|
|
70
|
-
| --------------------------------------------------------------------------------------------------- |
|
|
71
|
-
| [arize-phoenix-otel](https://github.com/Arize-ai/phoenix/tree/main/packages/phoenix-otel) |
|
|
72
|
-
| [arize-phoenix-client](https://github.com/Arize-ai/phoenix/tree/main/packages/phoenix-client) |
|
|
73
|
-
| [arize-phoenix-evals](https://github.com/Arize-ai/phoenix/tree/main/packages/phoenix-evals) |
|
|
74
|
-
| [@arizeai/phoenix-client](https://github.com/Arize-ai/phoenix/tree/main/js/packages/phoenix-client) |
|
|
75
|
-
| [@arizeai/phoenix-evals](https://github.com/Arize-ai/phoenix/tree/main/js/packages/phoenix-evals) |
|
|
76
|
-
| [@arizeai/phoenix-mcp](https://github.com/Arize-ai/phoenix/tree/main/js/packages/phoenix-mcp) |
|
|
69
|
+
| Package | Version & Docs | Description |
|
|
70
|
+
| --------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- |
|
|
71
|
+
| [arize-phoenix-otel](https://github.com/Arize-ai/phoenix/tree/main/packages/phoenix-otel) | [](https://pypi.org/project/arize-phoenix-otel/) [](https://arize-phoenix.readthedocs.io/projects/otel/en/latest/index.html) | Provides a lightweight wrapper around OpenTelemetry primitives with Phoenix-aware defaults |
|
|
72
|
+
| [arize-phoenix-client](https://github.com/Arize-ai/phoenix/tree/main/packages/phoenix-client) | [](https://pypi.org/project/arize-phoenix-client/) [](https://arize-phoenix.readthedocs.io/projects/client/en/latest/index.html) | Lightweight client for interacting with the Phoenix server via its OpenAPI REST interface |
|
|
73
|
+
| [arize-phoenix-evals](https://github.com/Arize-ai/phoenix/tree/main/packages/phoenix-evals) | [](https://pypi.org/project/arize-phoenix-evals/) [](https://arize-phoenix.readthedocs.io/projects/evals/en/latest/index.html) | Tooling to evaluate LLM applications including RAG relevance, answer relevance, and more |
|
|
74
|
+
| [@arizeai/phoenix-client](https://github.com/Arize-ai/phoenix/tree/main/js/packages/phoenix-client) | [](https://www.npmjs.com/package/@arizeai/phoenix-client) [](https://arize-ai.github.io/phoenix/) | Client for the Arize Phoenix API |
|
|
75
|
+
| [@arizeai/phoenix-evals](https://github.com/Arize-ai/phoenix/tree/main/js/packages/phoenix-evals) | [](https://www.npmjs.com/package/@arizeai/phoenix-evals) [](https://arize-ai.github.io/phoenix/) | TypeScript evaluation library for LLM applications (alpha release) |
|
|
76
|
+
| [@arizeai/phoenix-mcp](https://github.com/Arize-ai/phoenix/tree/main/js/packages/phoenix-mcp) | [](https://www.npmjs.com/package/@arizeai/phoenix-mcp) [](./js/packages/phoenix-mcp/README.md) | MCP server implementation for Arize Phoenix providing unified interface to Phoenix's capabilities |
|
|
77
77
|
|
|
78
78
|
## Tracing Integrations
|
|
79
79
|
|
|
@@ -121,17 +121,17 @@ Phoenix is built on top of OpenTelemetry and is vendor, language, and framework
|
|
|
121
121
|
| Integration | Package | Version Badge |
|
|
122
122
|
| --------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
123
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
|
-
| [SpringAI](https://central.sonatype.com/artifact/com.arize/openinference-instrumentation-springAI)
|
|
124
|
+
| [SpringAI](https://central.sonatype.com/artifact/com.arize/openinference-instrumentation-springAI) | `openinference-instrumentation-springAI` | [](https://central.sonatype.com/artifact/com.arize/openinference-instrumentation-springAI) |
|
|
125
125
|
|
|
126
126
|
### Platforms
|
|
127
127
|
|
|
128
|
-
| Platform | Description | Docs
|
|
129
|
-
| -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------- |
|
|
130
|
-
| [BeeAI](https://docs.beeai.dev/observability/agents-traceability) | AI agent framework with built-in observability | [Integration Guide](https://docs.beeai.dev/observability/agents-traceability)
|
|
131
|
-
| [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)
|
|
132
|
-
| [Envoy AI Gateway](https://github.com/envoyproxy/ai-gateway)
|
|
133
|
-
| [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)
|
|
134
|
-
| [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)
|
|
128
|
+
| Platform | Description | Docs |
|
|
129
|
+
| -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- |
|
|
130
|
+
| [BeeAI](https://docs.beeai.dev/observability/agents-traceability) | AI agent framework with built-in observability | [Integration Guide](https://docs.beeai.dev/observability/agents-traceability) |
|
|
131
|
+
| [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) |
|
|
132
|
+
| [Envoy AI Gateway](https://github.com/envoyproxy/ai-gateway) | AI Gateway built on Envoy Proxy for AI workloads | [Integration Guide](https://github.com/envoyproxy/ai-gateway/tree/main/cmd/aigw#opentelemetry-setup-with-phoenix) |
|
|
133
|
+
| [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) |
|
|
134
|
+
| [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) |
|
|
135
135
|
|
|
136
136
|
## Community
|
|
137
137
|
|
|
@@ -199,7 +199,7 @@ class TraceRetentionCronExpression(RootModel[str]):
|
|
|
199
199
|
|
|
200
200
|
def _parse_field(field: str, min_val: int, max_val: int) -> set[int]:
|
|
201
201
|
"""
|
|
202
|
-
|
|
202
|
+
Parses a cron field and returns the set of matching values.
|
|
203
203
|
|
|
204
204
|
Args:
|
|
205
205
|
field (str): The cron field to parse
|
|
@@ -26,10 +26,7 @@ class AverageExperimentRunLatencyDataLoader(DataLoader[Key, Result]):
|
|
|
26
26
|
average_repetition_latency_ms = (
|
|
27
27
|
select(
|
|
28
28
|
models.ExperimentRun.experiment_id.label("experiment_id"),
|
|
29
|
-
func.avg(
|
|
30
|
-
func.extract("epoch", models.ExperimentRun.end_time)
|
|
31
|
-
- func.extract("epoch", models.ExperimentRun.start_time)
|
|
32
|
-
).label("average_repetition_latency_ms"),
|
|
29
|
+
func.avg(models.ExperimentRun.latency_ms).label("average_repetition_latency_ms"),
|
|
33
30
|
)
|
|
34
31
|
.select_from(models.ExperimentRun)
|
|
35
32
|
.where(models.ExperimentRun.experiment_id.in_(experiment_ids))
|
|
@@ -5,11 +5,10 @@ from strawberry.dataloader import DataLoader
|
|
|
5
5
|
from typing_extensions import TypeAlias
|
|
6
6
|
|
|
7
7
|
from phoenix.db import models
|
|
8
|
-
from phoenix.server.api.types.Evaluation import DocumentEvaluation
|
|
9
8
|
from phoenix.server.types import DbSessionFactory
|
|
10
9
|
|
|
11
10
|
Key: TypeAlias = int
|
|
12
|
-
Result: TypeAlias = list[
|
|
11
|
+
Result: TypeAlias = list[models.DocumentAnnotation]
|
|
13
12
|
|
|
14
13
|
|
|
15
14
|
class DocumentEvaluationsDataLoader(DataLoader[Key, Result]):
|
|
@@ -18,14 +17,12 @@ class DocumentEvaluationsDataLoader(DataLoader[Key, Result]):
|
|
|
18
17
|
self._db = db
|
|
19
18
|
|
|
20
19
|
async def _load_fn(self, keys: list[Key]) -> list[Result]:
|
|
21
|
-
|
|
20
|
+
document_annotations_by_id: defaultdict[Key, Result] = defaultdict(list)
|
|
22
21
|
mda = models.DocumentAnnotation
|
|
23
22
|
async with self._db() as session:
|
|
24
|
-
data = await session.stream_scalars(
|
|
25
|
-
select(mda).where(mda.span_rowid.in_(keys)).where(mda.annotator_kind == "LLM")
|
|
26
|
-
)
|
|
23
|
+
data = await session.stream_scalars(select(mda).where(mda.span_rowid.in_(keys)))
|
|
27
24
|
async for document_evaluation in data:
|
|
28
|
-
|
|
29
|
-
|
|
25
|
+
document_annotations_by_id[document_evaluation.span_rowid].append(
|
|
26
|
+
document_evaluation
|
|
30
27
|
)
|
|
31
|
-
return [
|
|
28
|
+
return [document_annotations_by_id[key] for key in keys]
|
{arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/routers/v1/__init__.py
RENAMED
|
@@ -7,6 +7,7 @@ from phoenix.server.bearer_auth import is_authenticated
|
|
|
7
7
|
from .annotation_configs import router as annotation_configs_router
|
|
8
8
|
from .annotations import router as annotations_router
|
|
9
9
|
from .datasets import router as datasets_router
|
|
10
|
+
from .documents import router as documents_router
|
|
10
11
|
from .evaluations import router as evaluations_router
|
|
11
12
|
from .experiment_evaluations import router as experiment_evaluations_router
|
|
12
13
|
from .experiment_runs import router as experiment_runs_router
|
|
@@ -70,5 +71,6 @@ def create_v1_router(authentication_enabled: bool) -> APIRouter:
|
|
|
70
71
|
router.include_router(evaluations_router)
|
|
71
72
|
router.include_router(prompts_router)
|
|
72
73
|
router.include_router(projects_router)
|
|
74
|
+
router.include_router(documents_router)
|
|
73
75
|
router.include_router(users_router)
|
|
74
76
|
return router
|
{arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/routers/v1/annotations.py
RENAMED
|
@@ -1,32 +1,38 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import logging
|
|
4
|
-
from datetime import datetime
|
|
5
|
-
from typing import Literal, Optional
|
|
4
|
+
from datetime import datetime, timezone
|
|
5
|
+
from typing import Any, Literal, Optional
|
|
6
6
|
|
|
7
7
|
from fastapi import APIRouter, HTTPException, Path, Query
|
|
8
|
+
from pydantic import Field
|
|
8
9
|
from sqlalchemy import exists, select
|
|
9
10
|
from starlette.requests import Request
|
|
10
11
|
from starlette.status import HTTP_200_OK, HTTP_404_NOT_FOUND, HTTP_422_UNPROCESSABLE_ENTITY
|
|
11
12
|
from strawberry.relay import GlobalID
|
|
12
13
|
|
|
13
14
|
from phoenix.db import models
|
|
15
|
+
from phoenix.db.insertion.types import Precursors
|
|
16
|
+
from phoenix.server.api.routers.v1.models import V1RoutesBaseModel
|
|
14
17
|
from phoenix.server.api.types.SpanAnnotation import SpanAnnotation as SpanAnnotationNodeType
|
|
18
|
+
from phoenix.server.api.types.TraceAnnotation import TraceAnnotation as TraceAnnotationNodeType
|
|
15
19
|
from phoenix.server.api.types.User import User as UserNodeType
|
|
16
20
|
|
|
17
|
-
from .spans import SpanAnnotationData, SpanAnnotationResult
|
|
18
21
|
from .utils import PaginatedResponseBody, _get_project_by_identifier, add_errors_to_responses
|
|
19
22
|
|
|
20
23
|
logger = logging.getLogger(__name__)
|
|
21
24
|
|
|
22
25
|
SPAN_ANNOTATION_NODE_NAME = SpanAnnotationNodeType.__name__
|
|
26
|
+
TRACE_ANNOTATION_NODE_NAME = TraceAnnotationNodeType.__name__
|
|
27
|
+
MAX_TRACE_IDS = 1_000
|
|
23
28
|
USER_NODE_NAME = UserNodeType.__name__
|
|
24
29
|
MAX_SPAN_IDS = 1_000
|
|
30
|
+
MAX_SESSION_IDS = 1_000
|
|
25
31
|
|
|
26
32
|
router = APIRouter(tags=["annotations"])
|
|
27
33
|
|
|
28
34
|
|
|
29
|
-
class
|
|
35
|
+
class Annotation(V1RoutesBaseModel):
|
|
30
36
|
id: str
|
|
31
37
|
created_at: datetime
|
|
32
38
|
updated_at: datetime
|
|
@@ -34,10 +40,127 @@ class SpanAnnotation(SpanAnnotationData):
|
|
|
34
40
|
user_id: Optional[str]
|
|
35
41
|
|
|
36
42
|
|
|
43
|
+
class AnnotationResult(V1RoutesBaseModel):
|
|
44
|
+
label: Optional[str] = Field(default=None, description="The label assigned by the annotation")
|
|
45
|
+
score: Optional[float] = Field(default=None, description="The score assigned by the annotation")
|
|
46
|
+
explanation: Optional[str] = Field(
|
|
47
|
+
default=None, description="Explanation of the annotation result"
|
|
48
|
+
)
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
class AnnotationData(V1RoutesBaseModel):
|
|
52
|
+
name: str = Field(description="The name of the annotation")
|
|
53
|
+
annotator_kind: Literal["LLM", "CODE", "HUMAN"] = Field(
|
|
54
|
+
description="The kind of annotator used for the annotation"
|
|
55
|
+
)
|
|
56
|
+
result: Optional[AnnotationResult] = Field(
|
|
57
|
+
default=None, description="The result of the annotation"
|
|
58
|
+
)
|
|
59
|
+
metadata: Optional[dict[str, Any]] = Field(
|
|
60
|
+
default=None, description="Metadata for the annotation"
|
|
61
|
+
)
|
|
62
|
+
identifier: str = Field(
|
|
63
|
+
default="",
|
|
64
|
+
description=(
|
|
65
|
+
"The identifier of the annotation. "
|
|
66
|
+
"If provided, the annotation will be updated if it already exists."
|
|
67
|
+
),
|
|
68
|
+
)
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
class SpanAnnotationData(AnnotationData):
|
|
72
|
+
span_id: str = Field(description="OpenTelemetry Span ID (hex format w/o 0x prefix)")
|
|
73
|
+
|
|
74
|
+
def as_precursor(self, *, user_id: Optional[int] = None) -> Precursors.SpanAnnotation:
|
|
75
|
+
return Precursors.SpanAnnotation(
|
|
76
|
+
datetime.now(timezone.utc),
|
|
77
|
+
self.span_id,
|
|
78
|
+
models.SpanAnnotation(
|
|
79
|
+
name=self.name,
|
|
80
|
+
annotator_kind=self.annotator_kind,
|
|
81
|
+
score=self.result.score if self.result else None,
|
|
82
|
+
label=self.result.label if self.result else None,
|
|
83
|
+
explanation=self.result.explanation if self.result else None,
|
|
84
|
+
metadata_=self.metadata or {},
|
|
85
|
+
identifier=self.identifier,
|
|
86
|
+
source="API",
|
|
87
|
+
user_id=user_id,
|
|
88
|
+
),
|
|
89
|
+
)
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
class SpanAnnotation(SpanAnnotationData, Annotation):
|
|
93
|
+
pass
|
|
94
|
+
|
|
95
|
+
|
|
37
96
|
class SpanAnnotationsResponseBody(PaginatedResponseBody[SpanAnnotation]):
|
|
38
97
|
pass
|
|
39
98
|
|
|
40
99
|
|
|
100
|
+
class SpanDocumentAnnotationData(AnnotationData):
|
|
101
|
+
span_id: str = Field(description="OpenTelemetry Span ID (hex format w/o 0x prefix)")
|
|
102
|
+
document_position: int = Field(
|
|
103
|
+
description="A 0 based index of the document. E.x. the first document during retrieval is 0"
|
|
104
|
+
)
|
|
105
|
+
|
|
106
|
+
# Precursor here means a value to add to a queue for processing async
|
|
107
|
+
def as_precursor(self, *, user_id: Optional[int] = None) -> Precursors.DocumentAnnotation:
|
|
108
|
+
return Precursors.DocumentAnnotation(
|
|
109
|
+
datetime.now(timezone.utc),
|
|
110
|
+
self.span_id,
|
|
111
|
+
self.document_position,
|
|
112
|
+
models.DocumentAnnotation(
|
|
113
|
+
name=self.name,
|
|
114
|
+
annotator_kind=self.annotator_kind,
|
|
115
|
+
document_position=self.document_position,
|
|
116
|
+
score=self.result.score if self.result else None,
|
|
117
|
+
label=self.result.label if self.result else None,
|
|
118
|
+
explanation=self.result.explanation if self.result else None,
|
|
119
|
+
metadata_=self.metadata or {},
|
|
120
|
+
identifier=self.identifier,
|
|
121
|
+
source="API",
|
|
122
|
+
user_id=user_id,
|
|
123
|
+
),
|
|
124
|
+
)
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
class SpanDocumentAnnotation(SpanDocumentAnnotationData, Annotation):
|
|
128
|
+
pass
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
class SpanDocumentAnnotationsResponseBody(PaginatedResponseBody[SpanDocumentAnnotation]):
|
|
132
|
+
pass
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
class TraceAnnotationData(AnnotationData):
|
|
136
|
+
trace_id: str = Field(description="OpenTelemetry Trace ID (hex format w/o 0x prefix)")
|
|
137
|
+
|
|
138
|
+
def as_precursor(self, *, user_id: Optional[int] = None) -> Precursors.TraceAnnotation:
|
|
139
|
+
return Precursors.TraceAnnotation(
|
|
140
|
+
datetime.now(timezone.utc),
|
|
141
|
+
self.trace_id,
|
|
142
|
+
models.TraceAnnotation(
|
|
143
|
+
name=self.name,
|
|
144
|
+
annotator_kind=self.annotator_kind,
|
|
145
|
+
score=self.result.score if self.result else None,
|
|
146
|
+
label=self.result.label if self.result else None,
|
|
147
|
+
explanation=self.result.explanation if self.result else None,
|
|
148
|
+
metadata_=self.metadata or {},
|
|
149
|
+
identifier=self.identifier,
|
|
150
|
+
source="API",
|
|
151
|
+
user_id=user_id,
|
|
152
|
+
),
|
|
153
|
+
)
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
class TraceAnnotation(TraceAnnotationData, Annotation):
|
|
157
|
+
pass
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
class TraceAnnotationsResponseBody(PaginatedResponseBody[TraceAnnotation]):
|
|
161
|
+
pass
|
|
162
|
+
|
|
163
|
+
|
|
41
164
|
@router.get(
|
|
42
165
|
"/projects/{project_identifier}/span_annotations",
|
|
43
166
|
operation_id="listSpanAnnotationsBySpanIds",
|
|
@@ -164,7 +287,7 @@ async def list_span_annotations(
|
|
|
164
287
|
id=str(GlobalID(SPAN_ANNOTATION_NODE_NAME, str(anno.id))),
|
|
165
288
|
span_id=span_id,
|
|
166
289
|
name=anno.name,
|
|
167
|
-
result=
|
|
290
|
+
result=AnnotationResult(
|
|
168
291
|
label=anno.label,
|
|
169
292
|
score=anno.score,
|
|
170
293
|
explanation=anno.explanation,
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
from typing import Optional
|
|
2
|
+
|
|
3
|
+
from fastapi import APIRouter, Depends, HTTPException, Query
|
|
4
|
+
from pydantic import Field
|
|
5
|
+
from sqlalchemy import select
|
|
6
|
+
from starlette.requests import Request
|
|
7
|
+
from starlette.status import HTTP_404_NOT_FOUND
|
|
8
|
+
from strawberry.relay import GlobalID
|
|
9
|
+
|
|
10
|
+
from phoenix.db import models
|
|
11
|
+
from phoenix.db.helpers import SupportedSQLDialect
|
|
12
|
+
from phoenix.db.insertion.helpers import as_kv, insert_on_conflict
|
|
13
|
+
from phoenix.server.api.routers.v1.annotations import SpanDocumentAnnotationData
|
|
14
|
+
from phoenix.server.api.types.DocumentAnnotation import DocumentAnnotation
|
|
15
|
+
from phoenix.server.authorization import is_not_locked
|
|
16
|
+
from phoenix.server.bearer_auth import PhoenixUser
|
|
17
|
+
from phoenix.server.dml_event import DocumentAnnotationInsertEvent
|
|
18
|
+
|
|
19
|
+
from .models import V1RoutesBaseModel
|
|
20
|
+
from .utils import RequestBody, ResponseBody, add_errors_to_responses
|
|
21
|
+
|
|
22
|
+
# Since the document annotations are spans related, we place it under spans
|
|
23
|
+
router = APIRouter(tags=["spans"])
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class AnnotateSpanDocumentsRequestBody(RequestBody[list[SpanDocumentAnnotationData]]):
|
|
27
|
+
pass
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class InsertedSpanDocumentAnnotation(V1RoutesBaseModel):
|
|
31
|
+
id: str = Field(description="The ID of the inserted span document annotation")
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
class AnnotateSpanDocumentsResponseBody(ResponseBody[list[InsertedSpanDocumentAnnotation]]):
|
|
35
|
+
pass
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
@router.post(
|
|
39
|
+
"/document_annotations",
|
|
40
|
+
dependencies=[Depends(is_not_locked)],
|
|
41
|
+
operation_id="annotateSpanDocuments",
|
|
42
|
+
responses=add_errors_to_responses(
|
|
43
|
+
[
|
|
44
|
+
{
|
|
45
|
+
"status_code": HTTP_404_NOT_FOUND,
|
|
46
|
+
"description": "Span not found",
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"status_code": 422,
|
|
50
|
+
"description": "Invalid request - non-empty identifier not supported",
|
|
51
|
+
},
|
|
52
|
+
]
|
|
53
|
+
),
|
|
54
|
+
response_description="Span document annotation inserted successfully",
|
|
55
|
+
include_in_schema=True,
|
|
56
|
+
)
|
|
57
|
+
async def annotate_span_documents(
|
|
58
|
+
request: Request,
|
|
59
|
+
request_body: AnnotateSpanDocumentsRequestBody,
|
|
60
|
+
sync: bool = Query(
|
|
61
|
+
default=False, description="If set to true, the annotations are inserted synchronously."
|
|
62
|
+
),
|
|
63
|
+
) -> AnnotateSpanDocumentsResponseBody:
|
|
64
|
+
if not request_body.data:
|
|
65
|
+
return AnnotateSpanDocumentsResponseBody(data=[])
|
|
66
|
+
|
|
67
|
+
# Validate that identifiers are empty or only whitespace
|
|
68
|
+
for annotation in request_body.data:
|
|
69
|
+
if annotation.identifier.strip():
|
|
70
|
+
raise HTTPException(
|
|
71
|
+
detail=f"Non-empty identifier '{annotation.identifier}' is not supported",
|
|
72
|
+
status_code=422, # Unprocessable Entity
|
|
73
|
+
)
|
|
74
|
+
|
|
75
|
+
user_id: Optional[int] = None
|
|
76
|
+
if request.app.state.authentication_enabled and isinstance(request.user, PhoenixUser):
|
|
77
|
+
user_id = int(request.user.identity)
|
|
78
|
+
|
|
79
|
+
span_document_annotations = request_body.data
|
|
80
|
+
|
|
81
|
+
precursors = [
|
|
82
|
+
annotation.as_precursor(user_id=user_id) for annotation in span_document_annotations
|
|
83
|
+
]
|
|
84
|
+
if not sync:
|
|
85
|
+
await request.state.enqueue(*precursors)
|
|
86
|
+
return AnnotateSpanDocumentsResponseBody(data=[])
|
|
87
|
+
|
|
88
|
+
span_ids = {p.span_id for p in precursors}
|
|
89
|
+
# Account for the fact that the spans could arrive after the annotation
|
|
90
|
+
async with request.app.state.db() as session:
|
|
91
|
+
existing_spans = {
|
|
92
|
+
span_id: (id_, num_docs)
|
|
93
|
+
async for span_id, id_, num_docs in await session.stream(
|
|
94
|
+
select(models.Span.span_id, models.Span.id, models.Span.num_documents).filter(
|
|
95
|
+
models.Span.span_id.in_(span_ids)
|
|
96
|
+
)
|
|
97
|
+
)
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
missing_span_ids = span_ids - set(existing_spans.keys())
|
|
101
|
+
# We prefer to fail the entire operation if there are missing spans in sync mode
|
|
102
|
+
if missing_span_ids:
|
|
103
|
+
raise HTTPException(
|
|
104
|
+
detail=f"Spans with IDs {', '.join(missing_span_ids)} do not exist.",
|
|
105
|
+
status_code=HTTP_404_NOT_FOUND,
|
|
106
|
+
)
|
|
107
|
+
|
|
108
|
+
# Validate that document positions are within bounds
|
|
109
|
+
for annotation in span_document_annotations:
|
|
110
|
+
_, num_docs = existing_spans[annotation.span_id]
|
|
111
|
+
if annotation.document_position not in range(num_docs):
|
|
112
|
+
raise HTTPException(
|
|
113
|
+
detail=f"Document position {annotation.document_position} is out of bounds for "
|
|
114
|
+
f"span {annotation.span_id} (max: {num_docs - 1})",
|
|
115
|
+
status_code=422, # Unprocessable Entity
|
|
116
|
+
)
|
|
117
|
+
|
|
118
|
+
inserted_document_annotation_ids = []
|
|
119
|
+
dialect = SupportedSQLDialect(session.bind.dialect.name)
|
|
120
|
+
for anno in precursors:
|
|
121
|
+
span_rowid, _ = existing_spans[anno.span_id]
|
|
122
|
+
values = dict(as_kv(anno.as_insertable(span_rowid).row))
|
|
123
|
+
span_document_annotation_id = await session.scalar(
|
|
124
|
+
insert_on_conflict(
|
|
125
|
+
values,
|
|
126
|
+
dialect=dialect,
|
|
127
|
+
table=models.DocumentAnnotation,
|
|
128
|
+
unique_by=("name", "span_rowid", "identifier", "document_position"),
|
|
129
|
+
constraint_name="uq_document_annotations_name_span_rowid_document_pos_identifier",
|
|
130
|
+
).returning(models.DocumentAnnotation.id)
|
|
131
|
+
)
|
|
132
|
+
inserted_document_annotation_ids.append(span_document_annotation_id)
|
|
133
|
+
|
|
134
|
+
# We queue an event to let the application know that annotations have changed
|
|
135
|
+
request.state.event_queue.put(
|
|
136
|
+
DocumentAnnotationInsertEvent(tuple(inserted_document_annotation_ids))
|
|
137
|
+
)
|
|
138
|
+
return AnnotateSpanDocumentsResponseBody(
|
|
139
|
+
data=[
|
|
140
|
+
InsertedSpanDocumentAnnotation(id=str(GlobalID(DocumentAnnotation.__name__, str(id_))))
|
|
141
|
+
for id_ in inserted_document_annotation_ids
|
|
142
|
+
]
|
|
143
|
+
)
|
|
@@ -5,7 +5,7 @@ from collections.abc import AsyncIterator
|
|
|
5
5
|
from datetime import datetime, timezone
|
|
6
6
|
from enum import Enum
|
|
7
7
|
from secrets import token_urlsafe
|
|
8
|
-
from typing import Annotated, Any,
|
|
8
|
+
from typing import Annotated, Any, Optional, Union
|
|
9
9
|
|
|
10
10
|
import pandas as pd
|
|
11
11
|
import sqlalchemy as sa
|
|
@@ -27,8 +27,8 @@ from phoenix.datetime_utils import normalize_datetime
|
|
|
27
27
|
from phoenix.db import models
|
|
28
28
|
from phoenix.db.helpers import SupportedSQLDialect, get_ancestor_span_rowids
|
|
29
29
|
from phoenix.db.insertion.helpers import as_kv, insert_on_conflict
|
|
30
|
-
from phoenix.db.insertion.types import Precursors
|
|
31
30
|
from phoenix.server.api.routers.utils import df_to_bytes
|
|
31
|
+
from phoenix.server.api.routers.v1.annotations import SpanAnnotationData
|
|
32
32
|
from phoenix.server.api.types.node import from_global_id_with_expected_type
|
|
33
33
|
from phoenix.server.authorization import is_not_locked
|
|
34
34
|
from phoenix.server.bearer_auth import PhoenixUser
|
|
@@ -850,52 +850,6 @@ async def get_spans_handler(
|
|
|
850
850
|
return await query_spans_handler(request, request_body, project_name)
|
|
851
851
|
|
|
852
852
|
|
|
853
|
-
class SpanAnnotationResult(V1RoutesBaseModel):
|
|
854
|
-
label: Optional[str] = Field(default=None, description="The label assigned by the annotation")
|
|
855
|
-
score: Optional[float] = Field(default=None, description="The score assigned by the annotation")
|
|
856
|
-
explanation: Optional[str] = Field(
|
|
857
|
-
default=None, description="Explanation of the annotation result"
|
|
858
|
-
)
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
class SpanAnnotationData(V1RoutesBaseModel):
|
|
862
|
-
span_id: str = Field(description="OpenTelemetry Span ID (hex format w/o 0x prefix)")
|
|
863
|
-
name: str = Field(description="The name of the annotation")
|
|
864
|
-
annotator_kind: Literal["LLM", "CODE", "HUMAN"] = Field(
|
|
865
|
-
description="The kind of annotator used for the annotation"
|
|
866
|
-
)
|
|
867
|
-
result: Optional[SpanAnnotationResult] = Field(
|
|
868
|
-
default=None, description="The result of the annotation"
|
|
869
|
-
)
|
|
870
|
-
metadata: Optional[dict[str, Any]] = Field(
|
|
871
|
-
default=None, description="Metadata for the annotation"
|
|
872
|
-
)
|
|
873
|
-
identifier: str = Field(
|
|
874
|
-
default="",
|
|
875
|
-
description=(
|
|
876
|
-
"The identifier of the annotation. "
|
|
877
|
-
"If provided, the annotation will be updated if it already exists."
|
|
878
|
-
),
|
|
879
|
-
)
|
|
880
|
-
|
|
881
|
-
def as_precursor(self, *, user_id: Optional[int] = None) -> Precursors.SpanAnnotation:
|
|
882
|
-
return Precursors.SpanAnnotation(
|
|
883
|
-
datetime.now(timezone.utc),
|
|
884
|
-
self.span_id,
|
|
885
|
-
models.SpanAnnotation(
|
|
886
|
-
name=self.name,
|
|
887
|
-
annotator_kind=self.annotator_kind,
|
|
888
|
-
score=self.result.score if self.result else None,
|
|
889
|
-
label=self.result.label if self.result else None,
|
|
890
|
-
explanation=self.result.explanation if self.result else None,
|
|
891
|
-
metadata_=self.metadata or {},
|
|
892
|
-
identifier=self.identifier,
|
|
893
|
-
source="API",
|
|
894
|
-
user_id=user_id,
|
|
895
|
-
),
|
|
896
|
-
)
|
|
897
|
-
|
|
898
|
-
|
|
899
853
|
class AnnotateSpansRequestBody(RequestBody[list[SpanAnnotationData]]):
|
|
900
854
|
data: list[SpanAnnotationData]
|
|
901
855
|
|
|
@@ -949,9 +903,11 @@ async def annotate_spans(
|
|
|
949
903
|
span_ids = {p.span_id for p in precursors}
|
|
950
904
|
async with request.app.state.db() as session:
|
|
951
905
|
existing_spans = {
|
|
952
|
-
|
|
953
|
-
async for
|
|
954
|
-
select(models.Span
|
|
906
|
+
span_id: id_
|
|
907
|
+
async for span_id, id_ in await session.stream(
|
|
908
|
+
select(models.Span.span_id, models.Span.id).filter(
|
|
909
|
+
models.Span.span_id.in_(span_ids)
|
|
910
|
+
)
|
|
955
911
|
)
|
|
956
912
|
}
|
|
957
913
|
|