arize-phoenix 8.32.1__tar.gz → 9.0.1__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-8.32.1 → arize_phoenix-9.0.1}/PKG-INFO +5 -5
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/README.md +1 -1
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/pyproject.toml +3 -3
- arize_phoenix-9.0.1/src/phoenix/db/constants.py +1 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/db/facilitator.py +55 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/db/insertion/document_annotation.py +31 -13
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/db/insertion/evaluation.py +15 -3
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/db/insertion/helpers.py +2 -1
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/db/insertion/span_annotation.py +26 -9
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/db/insertion/trace_annotation.py +25 -9
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/db/insertion/types.py +7 -0
- arize_phoenix-9.0.1/src/phoenix/db/migrations/versions/2f9d1a65945f_annotation_config_migration.py +322 -0
- arize_phoenix-9.0.1/src/phoenix/db/migrations/versions/8a3764fe7f1a_change_jsonb_to_json_for_prompts.py +76 -0
- arize_phoenix-9.0.1/src/phoenix/db/migrations/versions/bb8139330879_create_project_trace_retention_policies_table.py +77 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/db/models.py +151 -10
- arize_phoenix-9.0.1/src/phoenix/db/types/annotation_configs.py +97 -0
- arize_phoenix-9.0.1/src/phoenix/db/types/db_models.py +41 -0
- arize_phoenix-9.0.1/src/phoenix/db/types/trace_retention.py +267 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/experiments/functions.py +5 -1
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/auth.py +9 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/context.py +5 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/dataloaders/__init__.py +4 -0
- arize_phoenix-9.0.1/src/phoenix/server/api/dataloaders/annotation_summaries.py +318 -0
- arize_phoenix-9.0.1/src/phoenix/server/api/dataloaders/project_ids_by_trace_retention_policy_id.py +42 -0
- arize_phoenix-9.0.1/src/phoenix/server/api/dataloaders/trace_retention_policy_id_by_project_id.py +34 -0
- arize_phoenix-9.0.1/src/phoenix/server/api/helpers/annotations.py +9 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/helpers/prompts/models.py +34 -67
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/input_types/CreateSpanAnnotationInput.py +9 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/input_types/CreateTraceAnnotationInput.py +3 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/input_types/PatchAnnotationInput.py +3 -0
- arize_phoenix-9.0.1/src/phoenix/server/api/input_types/SpanAnnotationFilter.py +67 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/mutations/__init__.py +6 -0
- arize_phoenix-9.0.1/src/phoenix/server/api/mutations/annotation_config_mutations.py +413 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/mutations/dataset_mutations.py +62 -39
- arize_phoenix-9.0.1/src/phoenix/server/api/mutations/project_trace_retention_policy_mutations.py +245 -0
- arize_phoenix-9.0.1/src/phoenix/server/api/mutations/span_annotations_mutations.py +330 -0
- arize_phoenix-9.0.1/src/phoenix/server/api/mutations/trace_annotations_mutations.py +256 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/queries.py +86 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/routers/v1/__init__.py +4 -0
- arize_phoenix-9.0.1/src/phoenix/server/api/routers/v1/annotation_configs.py +449 -0
- arize_phoenix-9.0.1/src/phoenix/server/api/routers/v1/annotations.py +161 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/routers/v1/evaluations.py +6 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/routers/v1/projects.py +1 -50
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/routers/v1/spans.py +35 -8
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/routers/v1/traces.py +22 -13
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/routers/v1/utils.py +60 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/types/Annotation.py +7 -0
- arize_phoenix-9.0.1/src/phoenix/server/api/types/AnnotationConfig.py +124 -0
- arize_phoenix-9.0.1/src/phoenix/server/api/types/AnnotationSource.py +9 -0
- arize_phoenix-9.0.1/src/phoenix/server/api/types/AnnotationSummary.py +69 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/types/AnnotatorKind.py +1 -0
- arize_phoenix-9.0.1/src/phoenix/server/api/types/CronExpression.py +15 -0
- arize_phoenix-9.0.1/src/phoenix/server/api/types/Evaluation.py +39 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/types/Project.py +50 -2
- arize_phoenix-9.0.1/src/phoenix/server/api/types/ProjectTraceRetentionPolicy.py +110 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/types/Span.py +78 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/types/SpanAnnotation.py +24 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/types/Trace.py +2 -2
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/types/TraceAnnotation.py +23 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/app.py +20 -0
- arize_phoenix-9.0.1/src/phoenix/server/retention.py +76 -0
- arize_phoenix-9.0.1/src/phoenix/server/static/.vite/manifest.json +87 -0
- arize_phoenix-9.0.1/src/phoenix/server/static/assets/components-B2MWTXnm.js +4326 -0
- arize_phoenix-8.32.1/src/phoenix/server/static/assets/index-B0CbpsxD.js → arize_phoenix-9.0.1/src/phoenix/server/static/assets/index-Bfvpea_-.js +10 -10
- arize_phoenix-9.0.1/src/phoenix/server/static/assets/pages-CZ2vKu8H.js +7268 -0
- arize_phoenix-9.0.1/src/phoenix/server/static/assets/vendor-BRDkBC5J.js +903 -0
- arize_phoenix-8.32.1/src/phoenix/server/static/assets/vendor-arizeai-CxXYQNUl.js → arize_phoenix-9.0.1/src/phoenix/server/static/assets/vendor-arizeai-BvTqp_W8.js +3 -3
- arize_phoenix-8.32.1/src/phoenix/server/static/assets/vendor-codemirror-B0NIFPOL.js → arize_phoenix-9.0.1/src/phoenix/server/static/assets/vendor-codemirror-COt9UfW7.js +1 -1
- arize_phoenix-8.32.1/src/phoenix/server/static/assets/vendor-recharts-CrrDFWK1.js → arize_phoenix-9.0.1/src/phoenix/server/static/assets/vendor-recharts-BoHX9Hvs.js +2 -2
- arize_phoenix-8.32.1/src/phoenix/server/static/assets/vendor-shiki-C5bJ-RPf.js → arize_phoenix-9.0.1/src/phoenix/server/static/assets/vendor-shiki-Cw1dsDAz.js +1 -1
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/trace/dsl/filter.py +25 -5
- arize_phoenix-9.0.1/src/phoenix/utilities/__init__.py +18 -0
- arize_phoenix-9.0.1/src/phoenix/version.py +1 -0
- arize_phoenix-8.32.1/src/phoenix/server/api/dataloaders/annotation_summaries.py +0 -139
- arize_phoenix-8.32.1/src/phoenix/server/api/mutations/span_annotations_mutations.py +0 -128
- arize_phoenix-8.32.1/src/phoenix/server/api/mutations/trace_annotations_mutations.py +0 -127
- arize_phoenix-8.32.1/src/phoenix/server/api/types/AnnotationSummary.py +0 -55
- arize_phoenix-8.32.1/src/phoenix/server/api/types/Evaluation.py +0 -65
- arize_phoenix-8.32.1/src/phoenix/server/static/.vite/manifest.json +0 -87
- arize_phoenix-8.32.1/src/phoenix/server/static/assets/components-x-gKFJ8C.js +0 -3414
- arize_phoenix-8.32.1/src/phoenix/server/static/assets/pages-BU4VdyeH.js +0 -5867
- arize_phoenix-8.32.1/src/phoenix/server/static/assets/vendor-BfhM_F1u.js +0 -902
- arize_phoenix-8.32.1/src/phoenix/utilities/__init__.py +0 -0
- arize_phoenix-8.32.1/src/phoenix/version.py +0 -1
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/.gitignore +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/IP_NOTICE +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/LICENSE +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/__init__.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/auth.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/config.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/core/__init__.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/core/embedding_dimension.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/core/model.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/core/model_schema.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/core/model_schema_adapter.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/datetime_utils.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/db/README.md +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/db/__init__.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/db/alembic.ini +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/db/bulk_inserter.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/db/engines.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/db/enums.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/db/helpers.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/db/insertion/__init__.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/db/insertion/constants.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/db/insertion/dataset.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/db/insertion/span.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/db/migrate.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/db/migrations/__init__.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/db/migrations/data_migration_scripts/__init__.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/db/migrations/data_migration_scripts/populate_project_sessions.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/db/migrations/env.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/db/migrations/script.py.mako +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/db/migrations/versions/10460e46d750_datasets.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/db/migrations/versions/3be8647b87d8_add_token_columns_to_spans_table.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/db/migrations/versions/4ded9e43755f_create_project_sessions_table.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/db/migrations/versions/bc8fea3c2bc8_add_prompt_tables.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/db/migrations/versions/cd164e83824f_users_and_tokens.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/db/migrations/versions/cf03bd6bae1d_init.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/db/pg_config.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/db/types/__init__.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/db/types/identifier.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/db/types/model_provider.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/exceptions.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/experiments/__init__.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/experiments/evaluators/__init__.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/experiments/evaluators/base.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/experiments/evaluators/code_evaluators.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/experiments/evaluators/llm_evaluators.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/experiments/evaluators/utils.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/experiments/tracing.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/experiments/types.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/experiments/utils.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/inferences/__init__.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/inferences/errors.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/inferences/fixtures.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/inferences/inferences.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/inferences/schema.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/inferences/validation.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/logging/__init__.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/logging/_config.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/logging/_filter.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/logging/_formatter.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/metrics/README.md +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/metrics/__init__.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/metrics/binning.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/metrics/metrics.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/metrics/mixins.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/metrics/retrieval_metrics.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/metrics/timeseries.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/metrics/wrappers.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/pointcloud/__init__.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/pointcloud/clustering.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/pointcloud/pointcloud.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/pointcloud/projectors.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/pointcloud/umap_parameters.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/py.typed +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/__init__.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/README.md +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/__init__.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/dataloaders/average_experiment_run_latency.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/dataloaders/cache/__init__.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/dataloaders/cache/two_tier_cache.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/dataloaders/dataset_example_revisions.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/dataloaders/dataset_example_spans.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/dataloaders/document_evaluation_summaries.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/dataloaders/document_evaluations.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/dataloaders/document_retrieval_metrics.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/dataloaders/experiment_annotation_summaries.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/dataloaders/experiment_error_rates.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/dataloaders/experiment_run_annotations.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/dataloaders/experiment_run_counts.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/dataloaders/experiment_sequence_number.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/dataloaders/latency_ms_quantile.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/dataloaders/min_start_or_max_end_times.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/dataloaders/num_child_spans.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/dataloaders/num_spans_per_trace.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/dataloaders/project_by_name.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/dataloaders/prompt_version_sequence_number.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/dataloaders/record_counts.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/dataloaders/session_io.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/dataloaders/session_num_traces.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/dataloaders/session_num_traces_with_error.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/dataloaders/session_token_usages.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/dataloaders/session_trace_latency_ms_quantile.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/dataloaders/span_annotations.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/dataloaders/span_by_id.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/dataloaders/span_dataset_examples.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/dataloaders/span_descendants.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/dataloaders/span_projects.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/dataloaders/table_fields.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/dataloaders/token_counts.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/dataloaders/trace_by_trace_ids.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/dataloaders/trace_root_spans.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/dataloaders/user_roles.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/dataloaders/users.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/exceptions.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/helpers/__init__.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/helpers/dataset_helpers.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/helpers/experiment_run_filters.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/helpers/playground_clients.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/helpers/playground_registry.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/helpers/playground_spans.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/helpers/prompts/__init__.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/helpers/prompts/conversions/__init__.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/helpers/prompts/conversions/anthropic.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/helpers/prompts/conversions/openai.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/input_types/AddExamplesToDatasetInput.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/input_types/AddSpansToDatasetInput.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/input_types/ChatCompletionInput.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/input_types/ChatCompletionMessageInput.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/input_types/ClearProjectInput.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/input_types/ClusterInput.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/input_types/Coordinates.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/input_types/CreateDatasetInput.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/input_types/DataQualityMetricInput.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/input_types/DatasetExampleInput.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/input_types/DatasetSort.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/input_types/DatasetVersionSort.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/input_types/DeleteAnnotationsInput.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/input_types/DeleteDatasetExamplesInput.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/input_types/DeleteDatasetInput.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/input_types/DeleteExperimentsInput.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/input_types/DimensionFilter.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/input_types/DimensionInput.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/input_types/GenerativeModelInput.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/input_types/Granularity.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/input_types/InvocationParameters.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/input_types/PatchDatasetExamplesInput.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/input_types/PatchDatasetInput.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/input_types/PerformanceMetricInput.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/input_types/ProjectSessionSort.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/input_types/PromptTemplateOptions.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/input_types/PromptVersionInput.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/input_types/SpanAnnotationSort.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/input_types/SpanSort.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/input_types/TimeRange.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/input_types/TraceAnnotationSort.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/input_types/UserRoleInput.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/input_types/__init__.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/interceptor.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/mutations/api_key_mutations.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/mutations/chat_mutations.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/mutations/experiment_mutations.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/mutations/export_events_mutations.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/mutations/project_mutations.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/mutations/prompt_label_mutations.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/mutations/prompt_mutations.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/mutations/prompt_version_tag_mutations.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/mutations/trace_mutations.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/mutations/user_mutations.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/openapi/__init__.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/openapi/main.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/openapi/schema.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/routers/__init__.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/routers/auth.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/routers/embeddings.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/routers/oauth2.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/routers/utils.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/routers/v1/datasets.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/routers/v1/experiment_evaluations.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/routers/v1/experiment_runs.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/routers/v1/experiments.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/routers/v1/models.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/routers/v1/prompts.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/schema.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/subscriptions.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/types/ApiKey.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/types/AuthMethod.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/types/ChatCompletionMessageRole.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/types/ChatCompletionSubscriptionPayload.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/types/Cluster.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/types/CreateDatasetPayload.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/types/DataQualityMetric.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/types/Dataset.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/types/DatasetExample.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/types/DatasetExampleRevision.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/types/DatasetValues.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/types/DatasetVersion.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/types/Dimension.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/types/DimensionDataType.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/types/DimensionShape.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/types/DimensionType.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/types/DimensionWithValue.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/types/DocumentEvaluationSummary.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/types/DocumentRetrievalMetrics.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/types/EmbeddingDimension.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/types/EmbeddingMetadata.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/types/EvaluationSummary.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/types/Event.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/types/EventMetadata.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/types/ExampleRevisionInterface.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/types/Experiment.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/types/ExperimentAnnotationSummary.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/types/ExperimentComparison.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/types/ExperimentRun.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/types/ExperimentRunAnnotation.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/types/ExportedFile.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/types/Functionality.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/types/GenerativeModel.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/types/GenerativeProvider.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/types/Identifier.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/types/Inferences.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/types/InferencesRole.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/types/LabelFraction.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/types/MimeType.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/types/Model.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/types/NumericRange.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/types/PerformanceMetric.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/types/ProjectSession.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/types/Prompt.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/types/PromptLabel.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/types/PromptResponse.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/types/PromptVersion.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/types/PromptVersionTag.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/types/PromptVersionTemplate.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/types/ResponseFormat.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/types/Retrieval.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/types/ScalarDriftMetricEnum.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/types/Segments.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/types/SortDir.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/types/SpanIOValue.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/types/SystemApiKey.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/types/TimeSeries.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/types/TokenUsage.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/types/ToolDefinition.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/types/UMAPPoints.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/types/User.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/types/UserApiKey.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/types/UserRole.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/types/ValidationResult.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/types/VectorDriftMetricEnum.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/types/__init__.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/types/node.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/types/pagination.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/api/utils.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/authorization.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/bearer_auth.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/dml_event.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/dml_event_handler.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/email/__init__.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/email/sender.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/email/templates/__init__.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/email/templates/password_reset.html +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/email/templates/welcome.html +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/email/types.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/grpc_server.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/jwt_store.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/main.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/middleware/__init__.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/middleware/gzip.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/oauth2.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/openapi/__init__.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/prometheus.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/rate_limiters.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/static/apple-touch-icon-114x114.png +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/static/apple-touch-icon-120x120.png +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/static/apple-touch-icon-144x144.png +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/static/apple-touch-icon-152x152.png +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/static/apple-touch-icon-180x180.png +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/static/apple-touch-icon-72x72.png +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/static/apple-touch-icon-76x76.png +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/static/apple-touch-icon.png +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/static/assets/vendor-Cg6lcjUC.css +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/static/assets/vendor-three-C5WAXd5r.js +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/static/favicon.ico +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/static/modernizr.js +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/telemetry.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/templates/__init__.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/templates/index.html +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/thread_server.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/server/types.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/services.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/session/__init__.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/session/client.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/session/data_extractor.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/session/evaluation.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/session/session.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/settings.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/trace/__init__.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/trace/attributes.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/trace/dsl/README.md +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/trace/dsl/__init__.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/trace/dsl/helpers.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/trace/dsl/query.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/trace/errors.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/trace/evaluation_conventions.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/trace/exporter.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/trace/fixtures.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/trace/otel.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/trace/projects.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/trace/schemas.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/trace/span_evaluations.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/trace/span_json_decoder.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/trace/span_json_encoder.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/trace/trace_dataset.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/trace/utils.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/trace/v1/__init__.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/trace/v1/evaluation_pb2.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/trace/v1/evaluation_pb2.pyi +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/utilities/client.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/utilities/deprecation.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/utilities/error_handling.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/utilities/json.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/utilities/logging.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/utilities/project.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/utilities/re.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/utilities/span_store.py +0 -0
- {arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/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:
|
|
3
|
+
Version: 9.0.1
|
|
4
4
|
Summary: AI Observability and Evaluation
|
|
5
5
|
Project-URL: Documentation, https://docs.arize.com/phoenix/
|
|
6
6
|
Project-URL: Issues, https://github.com/Arize-ai/phoenix/issues
|
|
@@ -49,7 +49,7 @@ Requires-Dist: scipy
|
|
|
49
49
|
Requires-Dist: sqlalchemy[asyncio]<3,>=2.0.4
|
|
50
50
|
Requires-Dist: sqlean-py>=3.45.1
|
|
51
51
|
Requires-Dist: starlette>=0.46.0
|
|
52
|
-
Requires-Dist: strawberry-graphql
|
|
52
|
+
Requires-Dist: strawberry-graphql==0.267.0
|
|
53
53
|
Requires-Dist: tqdm
|
|
54
54
|
Requires-Dist: typing-extensions>=4.6
|
|
55
55
|
Requires-Dist: uvicorn
|
|
@@ -71,7 +71,7 @@ Requires-Dist: opentelemetry-sdk; extra == 'container'
|
|
|
71
71
|
Requires-Dist: opentelemetry-semantic-conventions; extra == 'container'
|
|
72
72
|
Requires-Dist: prometheus-client; extra == 'container'
|
|
73
73
|
Requires-Dist: py-grpc-prometheus; extra == 'container'
|
|
74
|
-
Requires-Dist: strawberry-graphql[opentelemetry]==0.
|
|
74
|
+
Requires-Dist: strawberry-graphql[opentelemetry]==0.267.0; extra == 'container'
|
|
75
75
|
Requires-Dist: umap-learn; extra == 'container'
|
|
76
76
|
Requires-Dist: uvloop; (platform_system != 'Windows') and extra == 'container'
|
|
77
77
|
Provides-Extra: dev
|
|
@@ -102,7 +102,7 @@ Requires-Dist: pytest-postgresql; extra == 'dev'
|
|
|
102
102
|
Requires-Dist: pytest-xdist; extra == 'dev'
|
|
103
103
|
Requires-Dist: pytest==8.3.3; extra == 'dev'
|
|
104
104
|
Requires-Dist: ruff==0.6.9; extra == 'dev'
|
|
105
|
-
Requires-Dist: strawberry-graphql[debug-server,opentelemetry]==0.
|
|
105
|
+
Requires-Dist: strawberry-graphql[debug-server,opentelemetry]==0.267.0; extra == 'dev'
|
|
106
106
|
Requires-Dist: tabulate; extra == 'dev'
|
|
107
107
|
Requires-Dist: tox-uv==1.11.3; extra == 'dev'
|
|
108
108
|
Requires-Dist: tox==4.18.1; extra == 'dev'
|
|
@@ -172,7 +172,7 @@ Phoenix is an open-source AI observability platform designed for experimentation
|
|
|
172
172
|
- [**_Playground_**](https://docs.arize.com/phoenix/prompt-engineering/overview-prompts)- Optimize prompts, compare models, adjust parameters, and replay traced LLM calls.
|
|
173
173
|
- [**_Prompt Management_**](https://docs.arize.com/phoenix/prompt-engineering/overview-prompts/prompt-management)- Manage and test prompt changes systematically using version control, tagging, and experimentation.
|
|
174
174
|
|
|
175
|
-
Phoenix is vendor and language agnostic with out-of-the-box support for popular frameworks (🦙[LlamaIndex](https://docs.arize.com/phoenix/tracing/integrations-tracing/llamaindex), 🦜⛓[LangChain](https://docs.arize.com/phoenix/tracing/integrations-tracing/langchain), [Haystack](https://docs.arize.com/phoenix/tracing/integrations-tracing/haystack), 🧩[DSPy](https://docs.arize.com/phoenix/tracing/integrations-tracing/dspy), 🤗[smolagents](https://docs.arize.com/phoenix/tracing/integrations-tracing/hfsmolagents)) and LLM providers ([OpenAI](https://docs.arize.com/phoenix/tracing/integrations-tracing/openai), [Bedrock](https://docs.arize.com/phoenix/tracing/integrations-tracing/bedrock), [MistralAI](https://docs.arize.com/phoenix/tracing/integrations-tracing/mistralai), [VertexAI](https://docs.arize.com/phoenix/tracing/integrations-tracing/vertexai), [LiteLLM](https://docs.arize.com/phoenix/tracing/integrations-tracing/litellm), and more). For details on auto-instrumentation, check out the [OpenInference](https://github.com/Arize-ai/openinference) project.
|
|
175
|
+
Phoenix is vendor and language agnostic with out-of-the-box support for popular frameworks (🦙[LlamaIndex](https://docs.arize.com/phoenix/tracing/integrations-tracing/llamaindex), 🦜⛓[LangChain](https://docs.arize.com/phoenix/tracing/integrations-tracing/langchain), [Haystack](https://docs.arize.com/phoenix/tracing/integrations-tracing/haystack), 🧩[DSPy](https://docs.arize.com/phoenix/tracing/integrations-tracing/dspy), 🤗[smolagents](https://docs.arize.com/phoenix/tracing/integrations-tracing/hfsmolagents)) and LLM providers ([OpenAI](https://docs.arize.com/phoenix/tracing/integrations-tracing/openai), [Bedrock](https://docs.arize.com/phoenix/tracing/integrations-tracing/bedrock), [MistralAI](https://docs.arize.com/phoenix/tracing/integrations-tracing/mistralai), [VertexAI](https://docs.arize.com/phoenix/tracing/integrations-tracing/vertexai), [LiteLLM](https://docs.arize.com/phoenix/tracing/integrations-tracing/litellm), [Google GenAI](https://docs.arize.com/phoenix/tracing/integrations-tracing/google-genai) and more). For details on auto-instrumentation, check out the [OpenInference](https://github.com/Arize-ai/openinference) project.
|
|
176
176
|
|
|
177
177
|
Phoenix runs practically anywhere, including your local machine, a Jupyter notebook, a containerized deployment, or in the cloud.
|
|
178
178
|
|
|
@@ -42,7 +42,7 @@ Phoenix is an open-source AI observability platform designed for experimentation
|
|
|
42
42
|
- [**_Playground_**](https://docs.arize.com/phoenix/prompt-engineering/overview-prompts)- Optimize prompts, compare models, adjust parameters, and replay traced LLM calls.
|
|
43
43
|
- [**_Prompt Management_**](https://docs.arize.com/phoenix/prompt-engineering/overview-prompts/prompt-management)- Manage and test prompt changes systematically using version control, tagging, and experimentation.
|
|
44
44
|
|
|
45
|
-
Phoenix is vendor and language agnostic with out-of-the-box support for popular frameworks (🦙[LlamaIndex](https://docs.arize.com/phoenix/tracing/integrations-tracing/llamaindex), 🦜⛓[LangChain](https://docs.arize.com/phoenix/tracing/integrations-tracing/langchain), [Haystack](https://docs.arize.com/phoenix/tracing/integrations-tracing/haystack), 🧩[DSPy](https://docs.arize.com/phoenix/tracing/integrations-tracing/dspy), 🤗[smolagents](https://docs.arize.com/phoenix/tracing/integrations-tracing/hfsmolagents)) and LLM providers ([OpenAI](https://docs.arize.com/phoenix/tracing/integrations-tracing/openai), [Bedrock](https://docs.arize.com/phoenix/tracing/integrations-tracing/bedrock), [MistralAI](https://docs.arize.com/phoenix/tracing/integrations-tracing/mistralai), [VertexAI](https://docs.arize.com/phoenix/tracing/integrations-tracing/vertexai), [LiteLLM](https://docs.arize.com/phoenix/tracing/integrations-tracing/litellm), and more). For details on auto-instrumentation, check out the [OpenInference](https://github.com/Arize-ai/openinference) project.
|
|
45
|
+
Phoenix is vendor and language agnostic with out-of-the-box support for popular frameworks (🦙[LlamaIndex](https://docs.arize.com/phoenix/tracing/integrations-tracing/llamaindex), 🦜⛓[LangChain](https://docs.arize.com/phoenix/tracing/integrations-tracing/langchain), [Haystack](https://docs.arize.com/phoenix/tracing/integrations-tracing/haystack), 🧩[DSPy](https://docs.arize.com/phoenix/tracing/integrations-tracing/dspy), 🤗[smolagents](https://docs.arize.com/phoenix/tracing/integrations-tracing/hfsmolagents)) and LLM providers ([OpenAI](https://docs.arize.com/phoenix/tracing/integrations-tracing/openai), [Bedrock](https://docs.arize.com/phoenix/tracing/integrations-tracing/bedrock), [MistralAI](https://docs.arize.com/phoenix/tracing/integrations-tracing/mistralai), [VertexAI](https://docs.arize.com/phoenix/tracing/integrations-tracing/vertexai), [LiteLLM](https://docs.arize.com/phoenix/tracing/integrations-tracing/litellm), [Google GenAI](https://docs.arize.com/phoenix/tracing/integrations-tracing/google-genai) and more). For details on auto-instrumentation, check out the [OpenInference](https://github.com/Arize-ai/openinference) project.
|
|
46
46
|
|
|
47
47
|
Phoenix runs practically anywhere, including your local machine, a Jupyter notebook, a containerized deployment, or in the cloud.
|
|
48
48
|
|
|
@@ -29,7 +29,7 @@ dependencies = [
|
|
|
29
29
|
"starlette>=0.46.0",
|
|
30
30
|
"uvicorn",
|
|
31
31
|
"psutil",
|
|
32
|
-
"strawberry-graphql
|
|
32
|
+
"strawberry-graphql==0.267.0", # avoid this issue: https://github.com/strawberry-graphql/strawberry/issues/3854
|
|
33
33
|
"pyarrow",
|
|
34
34
|
"typing-extensions>=4.6",
|
|
35
35
|
"scipy",
|
|
@@ -88,7 +88,7 @@ dev = [
|
|
|
88
88
|
"pytest-postgresql",
|
|
89
89
|
"asyncpg",
|
|
90
90
|
"psycopg[binary,pool]",
|
|
91
|
-
"strawberry-graphql[debug-server,opentelemetry]==0.
|
|
91
|
+
"strawberry-graphql[debug-server,opentelemetry]==0.267.0", # avoid this issue: https://github.com/strawberry-graphql/strawberry/issues/3854
|
|
92
92
|
"pre-commit",
|
|
93
93
|
"arize[AutoEmbeddings, LLM_Evaluation]",
|
|
94
94
|
"llama-index>=0.10.3",
|
|
@@ -137,7 +137,7 @@ container = [
|
|
|
137
137
|
"opentelemetry-instrumentation-sqlalchemy",
|
|
138
138
|
"opentelemetry-instrumentation-grpc",
|
|
139
139
|
"py-grpc-prometheus",
|
|
140
|
-
"strawberry-graphql[opentelemetry]==0.
|
|
140
|
+
"strawberry-graphql[opentelemetry]==0.267.0", # avoid this issue: https://github.com/strawberry-graphql/strawberry/issues/3854
|
|
141
141
|
"uvloop; platform_system != 'Windows'",
|
|
142
142
|
"fast-hdbscan>=0.2.0",
|
|
143
143
|
"numba>=0.60.0", # https://github.com/astral-sh/uv/issues/6281
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
DEFAULT_PROJECT_TRACE_RETENTION_POLICY_ID = 0
|
|
@@ -9,6 +9,7 @@ from typing import Optional
|
|
|
9
9
|
|
|
10
10
|
from sqlalchemy import (
|
|
11
11
|
distinct,
|
|
12
|
+
exists,
|
|
12
13
|
insert,
|
|
13
14
|
select,
|
|
14
15
|
)
|
|
@@ -27,7 +28,13 @@ from phoenix.config import (
|
|
|
27
28
|
get_env_default_admin_initial_password,
|
|
28
29
|
)
|
|
29
30
|
from phoenix.db import models
|
|
31
|
+
from phoenix.db.constants import DEFAULT_PROJECT_TRACE_RETENTION_POLICY_ID
|
|
30
32
|
from phoenix.db.enums import COLUMN_ENUMS, UserRole
|
|
33
|
+
from phoenix.db.types.trace_retention import (
|
|
34
|
+
MaxDaysRule,
|
|
35
|
+
TraceRetentionCronExpression,
|
|
36
|
+
TraceRetentionRule,
|
|
37
|
+
)
|
|
31
38
|
from phoenix.server.email.types import WelcomeEmailSender
|
|
32
39
|
from phoenix.server.types import DbSessionFactory
|
|
33
40
|
|
|
@@ -57,6 +64,7 @@ class Facilitator:
|
|
|
57
64
|
_ensure_user_roles,
|
|
58
65
|
_get_system_user_id,
|
|
59
66
|
partial(_ensure_admins, email_sender=self._email_sender),
|
|
67
|
+
_ensure_default_project_trace_retention_policy,
|
|
60
68
|
):
|
|
61
69
|
await fn(self._db)
|
|
62
70
|
|
|
@@ -205,3 +213,50 @@ async def _ensure_admins(
|
|
|
205
213
|
):
|
|
206
214
|
if isinstance(exc, Exception):
|
|
207
215
|
logger.error(f"Failed to send welcome email: {exc}")
|
|
216
|
+
|
|
217
|
+
|
|
218
|
+
async def _ensure_default_project_trace_retention_policy(db: DbSessionFactory) -> None:
|
|
219
|
+
"""
|
|
220
|
+
Ensures the default trace retention policy (id=1) exists in the database. Default policy
|
|
221
|
+
applies to all projects without a specific policy (i.e. foreign key is null).
|
|
222
|
+
|
|
223
|
+
This function checks for the presence of the default trace retention policy and
|
|
224
|
+
creates it if missing. The default trace retention policy:
|
|
225
|
+
|
|
226
|
+
- Has ID=0
|
|
227
|
+
- Is named "Default"
|
|
228
|
+
- Runs every Sunday at midnight UTC (cron: "0 0 * * 0")
|
|
229
|
+
- Retains traces indefinitely
|
|
230
|
+
|
|
231
|
+
If the default policy already exists, this function makes no changes.
|
|
232
|
+
|
|
233
|
+
Args:
|
|
234
|
+
db (DbSessionFactory): An async SQLAlchemy session factory.
|
|
235
|
+
|
|
236
|
+
Returns:
|
|
237
|
+
None
|
|
238
|
+
"""
|
|
239
|
+
assert DEFAULT_PROJECT_TRACE_RETENTION_POLICY_ID == 0
|
|
240
|
+
async with db() as session:
|
|
241
|
+
if await session.scalar(
|
|
242
|
+
select(
|
|
243
|
+
exists().where(
|
|
244
|
+
models.ProjectTraceRetentionPolicy.id
|
|
245
|
+
== DEFAULT_PROJECT_TRACE_RETENTION_POLICY_ID
|
|
246
|
+
)
|
|
247
|
+
)
|
|
248
|
+
):
|
|
249
|
+
return
|
|
250
|
+
cron_expression = TraceRetentionCronExpression(root="0 0 * * 0")
|
|
251
|
+
rule = TraceRetentionRule(root=MaxDaysRule(max_days=0))
|
|
252
|
+
await session.execute(
|
|
253
|
+
insert(models.ProjectTraceRetentionPolicy),
|
|
254
|
+
[
|
|
255
|
+
{
|
|
256
|
+
"id": DEFAULT_PROJECT_TRACE_RETENTION_POLICY_ID,
|
|
257
|
+
"name": "Default",
|
|
258
|
+
"cron_expression": cron_expression,
|
|
259
|
+
"rule": rule,
|
|
260
|
+
}
|
|
261
|
+
],
|
|
262
|
+
)
|
{arize_phoenix-8.32.1 → arize_phoenix-9.0.1}/src/phoenix/db/insertion/document_annotation.py
RENAMED
|
@@ -24,9 +24,17 @@ _SpanRowId: TypeAlias = int
|
|
|
24
24
|
_DocumentPosition: TypeAlias = int
|
|
25
25
|
_AnnoRowId: TypeAlias = int
|
|
26
26
|
_NumDocs: TypeAlias = int
|
|
27
|
+
_Identifier: TypeAlias = str
|
|
27
28
|
|
|
28
|
-
|
|
29
|
-
|
|
29
|
+
|
|
30
|
+
class _Key(NamedTuple):
|
|
31
|
+
annotation_name: _Name
|
|
32
|
+
annotation_identifier: _Identifier
|
|
33
|
+
span_id: _SpanId
|
|
34
|
+
document_position: _DocumentPosition
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
_UniqueBy: TypeAlias = tuple[_Name, _SpanRowId, _DocumentPosition, _Identifier]
|
|
30
38
|
_Existing: TypeAlias = tuple[
|
|
31
39
|
_SpanRowId,
|
|
32
40
|
_SpanId,
|
|
@@ -34,6 +42,7 @@ _Existing: TypeAlias = tuple[
|
|
|
34
42
|
Optional[_AnnoRowId],
|
|
35
43
|
Optional[_Name],
|
|
36
44
|
Optional[_DocumentPosition],
|
|
45
|
+
Optional[_Identifier],
|
|
37
46
|
Optional[datetime],
|
|
38
47
|
]
|
|
39
48
|
|
|
@@ -46,7 +55,8 @@ class DocumentAnnotationQueueInserter(
|
|
|
46
55
|
DocumentAnnotationDmlEvent,
|
|
47
56
|
],
|
|
48
57
|
table=models.DocumentAnnotation,
|
|
49
|
-
unique_by=("name", "span_rowid", "document_position"),
|
|
58
|
+
unique_by=("name", "span_rowid", "document_position", "identifier"),
|
|
59
|
+
constraint_name="uq_document_annotations_name_span_rowid_document_pos_identifier",
|
|
50
60
|
):
|
|
51
61
|
async def _events(
|
|
52
62
|
self,
|
|
@@ -77,12 +87,14 @@ class DocumentAnnotationQueueInserter(
|
|
|
77
87
|
e.span_id: _SpanAttr(e.span_rowid, e.num_docs) for e in existing
|
|
78
88
|
}
|
|
79
89
|
existing_annos: Mapping[_Key, _AnnoAttr] = {
|
|
80
|
-
(
|
|
90
|
+
_Key(
|
|
91
|
+
annotation_name=e.name,
|
|
92
|
+
annotation_identifier=e.identifier,
|
|
93
|
+
span_id=e.span_id,
|
|
94
|
+
document_position=e.document_position,
|
|
95
|
+
): _AnnoAttr(e.span_rowid, e.id, e.updated_at)
|
|
81
96
|
for e in existing
|
|
82
|
-
if e.id is not None
|
|
83
|
-
and e.name is not None
|
|
84
|
-
and e.document_position is not None
|
|
85
|
-
and e.updated_at is not None
|
|
97
|
+
if e.id is not None and e.name is not None and e.updated_at is not None
|
|
86
98
|
}
|
|
87
99
|
|
|
88
100
|
for p in parcels:
|
|
@@ -129,13 +141,13 @@ class DocumentAnnotationQueueInserter(
|
|
|
129
141
|
anno = self.table
|
|
130
142
|
span = (
|
|
131
143
|
select(models.Span.id, models.Span.span_id, num_docs_col(self._db.dialect))
|
|
132
|
-
.where(models.Span.span_id.in_({span_id for
|
|
144
|
+
.where(models.Span.span_id.in_({k.span_id for k in keys}))
|
|
133
145
|
.cte()
|
|
134
146
|
)
|
|
135
147
|
onclause = and_(
|
|
136
148
|
span.c.id == anno.span_rowid,
|
|
137
|
-
anno.name.in_({
|
|
138
|
-
tuple_(anno.name, span.c.span_id, anno.document_position).in_(keys),
|
|
149
|
+
anno.name.in_({k.annotation_name for k in keys}),
|
|
150
|
+
tuple_(anno.name, anno.identifier, span.c.span_id, anno.document_position).in_(keys),
|
|
139
151
|
)
|
|
140
152
|
return select(
|
|
141
153
|
span.c.id.label("span_rowid"),
|
|
@@ -144,6 +156,7 @@ class DocumentAnnotationQueueInserter(
|
|
|
144
156
|
anno.id,
|
|
145
157
|
anno.name,
|
|
146
158
|
anno.document_position,
|
|
159
|
+
anno.identifier,
|
|
147
160
|
anno.updated_at,
|
|
148
161
|
).outerjoin_from(span, anno, onclause)
|
|
149
162
|
|
|
@@ -160,11 +173,16 @@ class _AnnoAttr(NamedTuple):
|
|
|
160
173
|
|
|
161
174
|
|
|
162
175
|
def _key(p: Received[Precursors.DocumentAnnotation]) -> _Key:
|
|
163
|
-
return
|
|
176
|
+
return _Key(
|
|
177
|
+
annotation_name=p.item.obj.name,
|
|
178
|
+
annotation_identifier=p.item.obj.identifier,
|
|
179
|
+
span_id=p.item.span_id,
|
|
180
|
+
document_position=p.item.document_position,
|
|
181
|
+
)
|
|
164
182
|
|
|
165
183
|
|
|
166
184
|
def _unique_by(p: Received[Insertables.DocumentAnnotation]) -> _UniqueBy:
|
|
167
|
-
return p.item.obj.name, p.item.span_rowid, p.item.document_position
|
|
185
|
+
return p.item.obj.name, p.item.span_rowid, p.item.document_position, p.item.identifier
|
|
168
186
|
|
|
169
187
|
|
|
170
188
|
def _time(p: Received[Any]) -> datetime:
|
|
@@ -86,13 +86,15 @@ async def _insert_trace_evaluation(
|
|
|
86
86
|
explanation=explanation,
|
|
87
87
|
metadata_={}, # `metadata_` must match ORM
|
|
88
88
|
annotator_kind="LLM",
|
|
89
|
+
identifier="",
|
|
90
|
+
source="API",
|
|
89
91
|
)
|
|
90
92
|
await session.execute(
|
|
91
93
|
insert_on_conflict(
|
|
92
94
|
values,
|
|
93
95
|
dialect=dialect,
|
|
94
96
|
table=models.TraceAnnotation,
|
|
95
|
-
unique_by=("name", "trace_rowid"),
|
|
97
|
+
unique_by=("name", "trace_rowid", "identifier"),
|
|
96
98
|
)
|
|
97
99
|
)
|
|
98
100
|
return TraceEvaluationInsertionEvent(project_rowid, evaluation_name)
|
|
@@ -128,13 +130,15 @@ async def _insert_span_evaluation(
|
|
|
128
130
|
explanation=explanation,
|
|
129
131
|
metadata_={}, # `metadata_` must match ORM
|
|
130
132
|
annotator_kind="LLM",
|
|
133
|
+
identifier="",
|
|
134
|
+
source="API",
|
|
131
135
|
)
|
|
132
136
|
await session.execute(
|
|
133
137
|
insert_on_conflict(
|
|
134
138
|
values,
|
|
135
139
|
dialect=dialect,
|
|
136
140
|
table=models.SpanAnnotation,
|
|
137
|
-
unique_by=("name", "span_rowid"),
|
|
141
|
+
unique_by=("name", "span_rowid", "identifier"),
|
|
138
142
|
)
|
|
139
143
|
)
|
|
140
144
|
return SpanEvaluationInsertionEvent(project_rowid, evaluation_name)
|
|
@@ -179,13 +183,21 @@ async def _insert_document_evaluation(
|
|
|
179
183
|
explanation=explanation,
|
|
180
184
|
metadata_={}, # `metadata_` must match ORM
|
|
181
185
|
annotator_kind="LLM",
|
|
186
|
+
identifier="",
|
|
187
|
+
source="API",
|
|
182
188
|
)
|
|
183
189
|
await session.execute(
|
|
184
190
|
insert_on_conflict(
|
|
185
191
|
values,
|
|
186
192
|
dialect=dialect,
|
|
187
193
|
table=models.DocumentAnnotation,
|
|
188
|
-
unique_by=(
|
|
194
|
+
unique_by=(
|
|
195
|
+
"name",
|
|
196
|
+
"span_rowid",
|
|
197
|
+
"document_position",
|
|
198
|
+
"identifier",
|
|
199
|
+
),
|
|
200
|
+
constraint_name="uq_document_annotations_name_span_rowid_document_pos_identifier", # The name of the unique constraint is specified manually since the auto-generated name is longer than the Postgres limit of 63 characters # noqa: E501
|
|
189
201
|
)
|
|
190
202
|
)
|
|
191
203
|
return DocumentEvaluationInsertionEvent(project_rowid, evaluation_name)
|
|
@@ -36,6 +36,7 @@ def insert_on_conflict(
|
|
|
36
36
|
unique_by: Sequence[str],
|
|
37
37
|
on_conflict: OnConflict = OnConflict.DO_UPDATE,
|
|
38
38
|
set_: Optional[Mapping[str, Any]] = None,
|
|
39
|
+
constraint_name: Optional[str] = None,
|
|
39
40
|
) -> Insert:
|
|
40
41
|
"""
|
|
41
42
|
Dialect specific insertion statement using ON CONFLICT DO syntax.
|
|
@@ -50,7 +51,7 @@ def insert_on_conflict(
|
|
|
50
51
|
unique_records.append(v)
|
|
51
52
|
seen.add(k)
|
|
52
53
|
records = tuple(reversed(unique_records))
|
|
53
|
-
constraint = "_".join(("uq", table.__tablename__, *unique_by))
|
|
54
|
+
constraint = constraint_name or "_".join(("uq", table.__tablename__, *unique_by))
|
|
54
55
|
if dialect is SupportedSQLDialect.POSTGRESQL:
|
|
55
56
|
stmt_postgresql = insert_postgresql(table).values(records)
|
|
56
57
|
if on_conflict is OnConflict.DO_NOTHING:
|
|
@@ -21,15 +21,23 @@ from phoenix.server.dml_event import SpanAnnotationDmlEvent
|
|
|
21
21
|
_Name: TypeAlias = str
|
|
22
22
|
_SpanId: TypeAlias = str
|
|
23
23
|
_SpanRowId: TypeAlias = int
|
|
24
|
+
_Identifier: TypeAlias = str
|
|
24
25
|
_AnnoRowId: TypeAlias = int
|
|
25
26
|
|
|
26
|
-
|
|
27
|
-
|
|
27
|
+
|
|
28
|
+
class _Key(NamedTuple):
|
|
29
|
+
annotation_name: _Name
|
|
30
|
+
annotation_identifier: _Identifier
|
|
31
|
+
span_id: _SpanId
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
_UniqueBy: TypeAlias = tuple[_Name, _SpanRowId, _Identifier]
|
|
28
35
|
_Existing: TypeAlias = tuple[
|
|
29
36
|
_SpanRowId,
|
|
30
37
|
_SpanId,
|
|
31
38
|
Optional[_AnnoRowId],
|
|
32
39
|
Optional[_Name],
|
|
40
|
+
Optional[_Identifier],
|
|
33
41
|
Optional[datetime],
|
|
34
42
|
]
|
|
35
43
|
|
|
@@ -42,7 +50,7 @@ class SpanAnnotationQueueInserter(
|
|
|
42
50
|
SpanAnnotationDmlEvent,
|
|
43
51
|
],
|
|
44
52
|
table=models.SpanAnnotation,
|
|
45
|
-
unique_by=("name", "span_rowid"),
|
|
53
|
+
unique_by=("name", "span_rowid", "identifier"),
|
|
46
54
|
):
|
|
47
55
|
async def _events(
|
|
48
56
|
self,
|
|
@@ -73,7 +81,11 @@ class SpanAnnotationQueueInserter(
|
|
|
73
81
|
e.span_id: _SpanAttr(e.span_rowid) for e in existing
|
|
74
82
|
}
|
|
75
83
|
existing_annos: Mapping[_Key, _AnnoAttr] = {
|
|
76
|
-
(
|
|
84
|
+
_Key(
|
|
85
|
+
annotation_name=e.name,
|
|
86
|
+
annotation_identifier=e.identifier,
|
|
87
|
+
span_id=e.span_id,
|
|
88
|
+
): _AnnoAttr(e.span_rowid, e.id, e.updated_at)
|
|
77
89
|
for e in existing
|
|
78
90
|
if e.id is not None and e.name is not None and e.updated_at is not None
|
|
79
91
|
}
|
|
@@ -119,19 +131,20 @@ class SpanAnnotationQueueInserter(
|
|
|
119
131
|
anno = self.table
|
|
120
132
|
span = (
|
|
121
133
|
select(models.Span.id, models.Span.span_id)
|
|
122
|
-
.where(models.Span.span_id.in_({span_id for
|
|
134
|
+
.where(models.Span.span_id.in_({k.span_id for k in keys}))
|
|
123
135
|
.cte()
|
|
124
136
|
)
|
|
125
137
|
onclause = and_(
|
|
126
138
|
span.c.id == anno.span_rowid,
|
|
127
|
-
anno.name.in_({
|
|
128
|
-
tuple_(anno.name, span.c.span_id).in_(keys),
|
|
139
|
+
anno.name.in_({k.annotation_name for k in keys}),
|
|
140
|
+
tuple_(anno.name, anno.identifier, span.c.span_id).in_(keys),
|
|
129
141
|
)
|
|
130
142
|
return select(
|
|
131
143
|
span.c.id.label("span_rowid"),
|
|
132
144
|
span.c.span_id,
|
|
133
145
|
anno.id,
|
|
134
146
|
anno.name,
|
|
147
|
+
anno.identifier,
|
|
135
148
|
anno.updated_at,
|
|
136
149
|
).outerjoin_from(span, anno, onclause)
|
|
137
150
|
|
|
@@ -147,11 +160,15 @@ class _AnnoAttr(NamedTuple):
|
|
|
147
160
|
|
|
148
161
|
|
|
149
162
|
def _key(p: Received[Precursors.SpanAnnotation]) -> _Key:
|
|
150
|
-
return
|
|
163
|
+
return _Key(
|
|
164
|
+
annotation_name=p.item.obj.name,
|
|
165
|
+
annotation_identifier=p.item.obj.identifier,
|
|
166
|
+
span_id=p.item.span_id,
|
|
167
|
+
)
|
|
151
168
|
|
|
152
169
|
|
|
153
170
|
def _unique_by(p: Received[Insertables.SpanAnnotation]) -> _UniqueBy:
|
|
154
|
-
return p.item.obj.name, p.item.span_rowid
|
|
171
|
+
return p.item.obj.name, p.item.span_rowid, p.item.identifier
|
|
155
172
|
|
|
156
173
|
|
|
157
174
|
def _time(p: Received[Any]) -> datetime:
|
|
@@ -22,9 +22,16 @@ _Name: TypeAlias = str
|
|
|
22
22
|
_TraceId: TypeAlias = str
|
|
23
23
|
_TraceRowId: TypeAlias = int
|
|
24
24
|
_AnnoRowId: TypeAlias = int
|
|
25
|
+
_Identifier: TypeAlias = str
|
|
25
26
|
|
|
26
|
-
|
|
27
|
-
|
|
27
|
+
|
|
28
|
+
class _Key(NamedTuple):
|
|
29
|
+
annotation_name: _Name
|
|
30
|
+
annotation_identifier: _Identifier
|
|
31
|
+
trace_id: _TraceId
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
_UniqueBy: TypeAlias = tuple[_Name, _TraceRowId, _Identifier]
|
|
28
35
|
_Existing: TypeAlias = tuple[
|
|
29
36
|
_TraceRowId,
|
|
30
37
|
_TraceId,
|
|
@@ -42,7 +49,7 @@ class TraceAnnotationQueueInserter(
|
|
|
42
49
|
TraceAnnotationDmlEvent,
|
|
43
50
|
],
|
|
44
51
|
table=models.TraceAnnotation,
|
|
45
|
-
unique_by=("name", "trace_rowid"),
|
|
52
|
+
unique_by=("name", "trace_rowid", "identifier"),
|
|
46
53
|
):
|
|
47
54
|
async def _events(
|
|
48
55
|
self,
|
|
@@ -73,7 +80,11 @@ class TraceAnnotationQueueInserter(
|
|
|
73
80
|
e.trace_id: _TraceAttr(e.trace_rowid) for e in existing
|
|
74
81
|
}
|
|
75
82
|
existing_annos: Mapping[_Key, _AnnoAttr] = {
|
|
76
|
-
(
|
|
83
|
+
_Key(
|
|
84
|
+
annotation_name=e.name,
|
|
85
|
+
annotation_identifier=e.identifier,
|
|
86
|
+
trace_id=e.trace_id,
|
|
87
|
+
): _AnnoAttr(e.trace_rowid, e.id, e.updated_at)
|
|
77
88
|
for e in existing
|
|
78
89
|
if e.id is not None and e.name is not None and e.updated_at is not None
|
|
79
90
|
}
|
|
@@ -119,19 +130,20 @@ class TraceAnnotationQueueInserter(
|
|
|
119
130
|
anno = self.table
|
|
120
131
|
trace = (
|
|
121
132
|
select(models.Trace.id, models.Trace.trace_id)
|
|
122
|
-
.where(models.Trace.trace_id.in_({trace_id for
|
|
133
|
+
.where(models.Trace.trace_id.in_({k.trace_id for k in keys}))
|
|
123
134
|
.cte()
|
|
124
135
|
)
|
|
125
136
|
onclause = and_(
|
|
126
137
|
trace.c.id == anno.trace_rowid,
|
|
127
|
-
anno.name.in_({
|
|
128
|
-
tuple_(anno.name, trace.c.trace_id).in_(keys),
|
|
138
|
+
anno.name.in_({k.annotation_name for k in keys}),
|
|
139
|
+
tuple_(anno.name, anno.identifier, trace.c.trace_id).in_(keys),
|
|
129
140
|
)
|
|
130
141
|
return select(
|
|
131
142
|
trace.c.id.label("trace_rowid"),
|
|
132
143
|
trace.c.trace_id,
|
|
133
144
|
anno.id,
|
|
134
145
|
anno.name,
|
|
146
|
+
anno.identifier,
|
|
135
147
|
anno.updated_at,
|
|
136
148
|
).outerjoin_from(trace, anno, onclause)
|
|
137
149
|
|
|
@@ -147,11 +159,15 @@ class _AnnoAttr(NamedTuple):
|
|
|
147
159
|
|
|
148
160
|
|
|
149
161
|
def _key(p: Received[Precursors.TraceAnnotation]) -> _Key:
|
|
150
|
-
return
|
|
162
|
+
return _Key(
|
|
163
|
+
annotation_name=p.item.obj.name,
|
|
164
|
+
annotation_identifier=p.item.obj.identifier,
|
|
165
|
+
trace_id=p.item.trace_id,
|
|
166
|
+
)
|
|
151
167
|
|
|
152
168
|
|
|
153
169
|
def _unique_by(p: Received[Insertables.TraceAnnotation]) -> _UniqueBy:
|
|
154
|
-
return p.item.obj.name, p.item.trace_rowid
|
|
170
|
+
return p.item.obj.name, p.item.trace_rowid, p.item.identifier
|
|
155
171
|
|
|
156
172
|
|
|
157
173
|
def _time(p: Received[Any]) -> datetime:
|
|
@@ -50,14 +50,17 @@ class Postponed(Received[_AnyT]):
|
|
|
50
50
|
class QueueInserter(ABC, Generic[_PrecursorT, _InsertableT, _RowT, _DmlEventT]):
|
|
51
51
|
table: type[_RowT]
|
|
52
52
|
unique_by: Sequence[str]
|
|
53
|
+
constraint_name: Optional[str] = None
|
|
53
54
|
|
|
54
55
|
def __init_subclass__(
|
|
55
56
|
cls,
|
|
56
57
|
table: type[_RowT],
|
|
57
58
|
unique_by: Sequence[str],
|
|
59
|
+
constraint_name: Optional[str] = None,
|
|
58
60
|
) -> None:
|
|
59
61
|
cls.table = table
|
|
60
62
|
cls.unique_by = unique_by
|
|
63
|
+
cls.constraint_name = constraint_name
|
|
61
64
|
|
|
62
65
|
def __init__(
|
|
63
66
|
self,
|
|
@@ -109,6 +112,7 @@ class QueueInserter(ABC, Generic[_PrecursorT, _InsertableT, _RowT, _DmlEventT]):
|
|
|
109
112
|
*records,
|
|
110
113
|
table=self.table,
|
|
111
114
|
unique_by=self.unique_by,
|
|
115
|
+
constraint_name=self.constraint_name,
|
|
112
116
|
dialect=self._db.dialect,
|
|
113
117
|
)
|
|
114
118
|
|
|
@@ -219,6 +223,7 @@ class Insertables(ABC):
|
|
|
219
223
|
@dataclass(frozen=True)
|
|
220
224
|
class SpanAnnotation(Precursors.SpanAnnotation):
|
|
221
225
|
span_rowid: int
|
|
226
|
+
identifier: str = ""
|
|
222
227
|
id_: Optional[int] = None
|
|
223
228
|
|
|
224
229
|
@property
|
|
@@ -232,6 +237,7 @@ class Insertables(ABC):
|
|
|
232
237
|
@dataclass(frozen=True)
|
|
233
238
|
class TraceAnnotation(Precursors.TraceAnnotation):
|
|
234
239
|
trace_rowid: int
|
|
240
|
+
identifier: str = ""
|
|
235
241
|
id_: Optional[int] = None
|
|
236
242
|
|
|
237
243
|
@property
|
|
@@ -245,6 +251,7 @@ class Insertables(ABC):
|
|
|
245
251
|
@dataclass(frozen=True)
|
|
246
252
|
class DocumentAnnotation(Precursors.DocumentAnnotation):
|
|
247
253
|
span_rowid: int
|
|
254
|
+
identifier: str = ""
|
|
248
255
|
id_: Optional[int] = None
|
|
249
256
|
|
|
250
257
|
@property
|