arize-phoenix 12.4.0__tar.gz → 12.6.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-12.4.0 → arize_phoenix-12.6.0}/PKG-INFO +1 -1
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/auth.py +8 -2
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/db/models.py +3 -3
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/auth.py +9 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/context.py +2 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/dataloaders/__init__.py +2 -0
- arize_phoenix-12.6.0/src/phoenix/server/api/dataloaders/dataset_dataset_splits.py +52 -0
- arize_phoenix-12.6.0/src/phoenix/server/api/input_types/ExperimentRunSort.py +237 -0
- arize_phoenix-12.6.0/src/phoenix/server/api/input_types/ProjectSessionSort.py +189 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/input_types/SpanSort.py +2 -1
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/input_types/UserRoleInput.py +1 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/mutations/annotation_config_mutations.py +6 -6
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/mutations/api_key_mutations.py +13 -5
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/mutations/chat_mutations.py +3 -3
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/mutations/dataset_label_mutations.py +6 -6
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/mutations/dataset_mutations.py +8 -8
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/mutations/dataset_split_mutations.py +7 -7
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/mutations/experiment_mutations.py +2 -2
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/mutations/export_events_mutations.py +3 -3
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/mutations/model_mutations.py +4 -4
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/mutations/project_mutations.py +4 -4
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/mutations/project_session_annotations_mutations.py +4 -4
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/mutations/project_trace_retention_policy_mutations.py +8 -4
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/mutations/prompt_label_mutations.py +7 -7
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/mutations/prompt_mutations.py +7 -7
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/mutations/prompt_version_tag_mutations.py +3 -3
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/mutations/span_annotations_mutations.py +5 -5
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/mutations/trace_annotations_mutations.py +4 -4
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/mutations/trace_mutations.py +3 -3
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/mutations/user_mutations.py +8 -5
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/routers/auth.py +2 -2
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/routers/v1/__init__.py +16 -1
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/routers/v1/annotation_configs.py +7 -1
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/routers/v1/datasets.py +48 -8
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/routers/v1/experiment_runs.py +7 -1
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/routers/v1/experiments.py +41 -5
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/routers/v1/projects.py +3 -31
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/routers/v1/users.py +0 -7
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/subscriptions.py +3 -3
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/Dataset.py +95 -6
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/Experiment.py +60 -25
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/Project.py +24 -68
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/app.py +2 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/authorization.py +3 -1
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/bearer_auth.py +9 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/jwt_store.py +8 -6
- arize_phoenix-12.6.0/src/phoenix/server/static/.vite/manifest.json +93 -0
- arize_phoenix-12.4.0/src/phoenix/server/static/assets/components-BvsExS75.js → arize_phoenix-12.6.0/src/phoenix/server/static/assets/components-CboqzKQ9.js +520 -397
- arize_phoenix-12.4.0/src/phoenix/server/static/assets/index-iq8WDxat.js → arize_phoenix-12.6.0/src/phoenix/server/static/assets/index-CYYGI5-x.js +2 -2
- arize_phoenix-12.4.0/src/phoenix/server/static/assets/pages-Ckg4SLQ9.js → arize_phoenix-12.6.0/src/phoenix/server/static/assets/pages-DdlUeKi2.js +616 -604
- arize_phoenix-12.6.0/src/phoenix/server/static/assets/vendor-CQ4tN9P7.js +918 -0
- arize_phoenix-12.6.0/src/phoenix/server/static/assets/vendor-arizeai-Cb1ncvYH.js +106 -0
- arize_phoenix-12.4.0/src/phoenix/server/static/assets/vendor-codemirror-1bq_t1Ec.js → arize_phoenix-12.6.0/src/phoenix/server/static/assets/vendor-codemirror-CckmKopH.js +3 -3
- arize_phoenix-12.4.0/src/phoenix/server/static/assets/vendor-recharts-DQ4xfrf4.js → arize_phoenix-12.6.0/src/phoenix/server/static/assets/vendor-recharts-BC1ysIKu.js +1 -1
- arize_phoenix-12.4.0/src/phoenix/server/static/assets/vendor-shiki-GGmcIQxA.js → arize_phoenix-12.6.0/src/phoenix/server/static/assets/vendor-shiki-B45T-YxN.js +1 -1
- arize_phoenix-12.6.0/src/phoenix/server/static/assets/vendor-three-BtCyLs1w.js +3840 -0
- arize_phoenix-12.6.0/src/phoenix/version.py +1 -0
- arize_phoenix-12.4.0/src/phoenix/server/api/input_types/ProjectSessionSort.py +0 -32
- arize_phoenix-12.4.0/src/phoenix/server/static/.vite/manifest.json +0 -93
- arize_phoenix-12.4.0/src/phoenix/server/static/assets/vendor-D2eEI-6h.js +0 -914
- arize_phoenix-12.4.0/src/phoenix/server/static/assets/vendor-arizeai-kfOei7nf.js +0 -156
- arize_phoenix-12.4.0/src/phoenix/server/static/assets/vendor-three-BLWp5bic.js +0 -2998
- arize_phoenix-12.4.0/src/phoenix/version.py +0 -1
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/.gitignore +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/IP_NOTICE +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/LICENSE +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/README.md +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/pyproject.toml +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/__init__.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/config.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/core/__init__.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/core/embedding_dimension.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/core/model.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/core/model_schema.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/core/model_schema_adapter.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/datetime_utils.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/db/README.md +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/db/__init__.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/db/alembic.ini +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/db/bulk_inserter.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/db/constants.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/db/engines.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/db/enums.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/db/facilitator.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/db/helpers.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/db/insertion/__init__.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/db/insertion/constants.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/db/insertion/dataset.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/db/insertion/document_annotation.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/db/insertion/evaluation.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/db/insertion/helpers.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/db/insertion/session_annotation.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/db/insertion/span.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/db/insertion/span_annotation.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/db/insertion/trace_annotation.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/db/insertion/types.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/db/migrate.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/db/migrations/__init__.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/db/migrations/data_migration_scripts/__init__.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/db/migrations/data_migration_scripts/populate_project_sessions.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/db/migrations/env.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/db/migrations/script.py.mako +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/db/migrations/versions/01a8342c9cdf_add_user_id_on_datasets.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/db/migrations/versions/0df286449799_add_session_annotations_table.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/db/migrations/versions/10460e46d750_datasets.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/db/migrations/versions/272b66ff50f8_drop_single_indices.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/db/migrations/versions/2f9d1a65945f_annotation_config_migration.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/db/migrations/versions/3be8647b87d8_add_token_columns_to_spans_table.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/db/migrations/versions/4ded9e43755f_create_project_sessions_table.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/db/migrations/versions/58228d933c91_dataset_labels.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/db/migrations/versions/699f655af132_experiment_tags.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/db/migrations/versions/6a88424799fe_update_users_with_auth_method.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/db/migrations/versions/735d3d93c33e_add_composite_indices.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/db/migrations/versions/8a3764fe7f1a_change_jsonb_to_json_for_prompts.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/db/migrations/versions/a20694b15f82_cost.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/db/migrations/versions/ab513d89518b_add_user_id_on_dataset_versions.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/db/migrations/versions/bb8139330879_create_project_trace_retention_policies_table.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/db/migrations/versions/bc8fea3c2bc8_add_prompt_tables.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/db/migrations/versions/cd164e83824f_users_and_tokens.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/db/migrations/versions/cf03bd6bae1d_init.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/db/migrations/versions/d0690a79ea51_users_on_experiments.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/db/migrations/versions/deb2c81c0bb2_dataset_splits.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/db/migrations/versions/e76cbd66ffc3_add_experiments_dataset_examples.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/db/pg_config.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/db/types/__init__.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/db/types/annotation_configs.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/db/types/db_models.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/db/types/identifier.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/db/types/model_provider.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/db/types/token_price_customization.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/db/types/trace_retention.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/exceptions.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/experiments/__init__.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/experiments/evaluators/__init__.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/experiments/evaluators/base.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/experiments/evaluators/code_evaluators.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/experiments/evaluators/llm_evaluators.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/experiments/evaluators/utils.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/experiments/functions.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/experiments/tracing.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/experiments/types.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/experiments/utils.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/inferences/__init__.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/inferences/errors.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/inferences/fixtures.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/inferences/inferences.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/inferences/schema.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/inferences/validation.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/logging/__init__.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/logging/_config.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/logging/_filter.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/logging/_formatter.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/metrics/README.md +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/metrics/__init__.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/metrics/binning.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/metrics/metrics.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/metrics/mixins.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/metrics/retrieval_metrics.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/metrics/timeseries.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/metrics/wrappers.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/pointcloud/__init__.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/pointcloud/clustering.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/pointcloud/pointcloud.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/pointcloud/projectors.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/pointcloud/umap_parameters.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/py.typed +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/__init__.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/README.md +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/__init__.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/auth_messages.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/dataloaders/annotation_configs_by_project.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/dataloaders/annotation_summaries.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/dataloaders/average_experiment_repeated_run_group_latency.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/dataloaders/average_experiment_run_latency.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/dataloaders/cache/__init__.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/dataloaders/cache/two_tier_cache.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/dataloaders/dataset_example_revisions.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/dataloaders/dataset_example_spans.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/dataloaders/dataset_example_splits.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/dataloaders/dataset_examples_and_versions_by_experiment_run.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/dataloaders/dataset_labels.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/dataloaders/document_evaluation_summaries.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/dataloaders/document_evaluations.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/dataloaders/document_retrieval_metrics.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/dataloaders/experiment_annotation_summaries.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/dataloaders/experiment_error_rates.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/dataloaders/experiment_repeated_run_group_annotation_summaries.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/dataloaders/experiment_repeated_run_groups.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/dataloaders/experiment_run_annotations.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/dataloaders/experiment_run_counts.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/dataloaders/experiment_sequence_number.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/dataloaders/last_used_times_by_generative_model_id.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/dataloaders/latency_ms_quantile.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/dataloaders/min_start_or_max_end_times.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/dataloaders/num_child_spans.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/dataloaders/num_spans_per_trace.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/dataloaders/project_by_name.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/dataloaders/project_ids_by_trace_retention_policy_id.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/dataloaders/prompt_version_sequence_number.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/dataloaders/record_counts.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/dataloaders/session_annotations_by_session.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/dataloaders/session_io.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/dataloaders/session_num_traces.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/dataloaders/session_num_traces_with_error.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/dataloaders/session_token_usages.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/dataloaders/session_trace_latency_ms_quantile.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/dataloaders/span_annotations.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/dataloaders/span_by_id.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/dataloaders/span_cost_by_span.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/dataloaders/span_cost_detail_summary_entries_by_generative_model.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/dataloaders/span_cost_detail_summary_entries_by_project_session.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/dataloaders/span_cost_detail_summary_entries_by_span.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/dataloaders/span_cost_detail_summary_entries_by_trace.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/dataloaders/span_cost_details_by_span_cost.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_experiment.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_experiment_repeated_run_group.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_experiment_run.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_generative_model.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_project.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_project_session.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_trace.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/dataloaders/span_costs.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/dataloaders/span_dataset_examples.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/dataloaders/span_descendants.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/dataloaders/span_projects.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/dataloaders/table_fields.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/dataloaders/token_counts.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/dataloaders/trace_annotations_by_trace.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/dataloaders/trace_by_trace_ids.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/dataloaders/trace_retention_policy_id_by_project_id.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/dataloaders/trace_root_spans.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/dataloaders/types.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/dataloaders/user_roles.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/dataloaders/users.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/exceptions.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/helpers/__init__.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/helpers/annotations.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/helpers/dataset_helpers.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/helpers/experiment_run_filters.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/helpers/playground_clients.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/helpers/playground_registry.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/helpers/playground_spans.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/helpers/playground_users.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/helpers/prompts/__init__.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/helpers/prompts/conversions/__init__.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/helpers/prompts/conversions/anthropic.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/helpers/prompts/conversions/aws.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/helpers/prompts/conversions/openai.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/helpers/prompts/models.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/input_types/AddExamplesToDatasetInput.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/input_types/AddSpansToDatasetInput.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/input_types/AnnotationFilter.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/input_types/ChatCompletionInput.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/input_types/ChatCompletionMessageInput.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/input_types/ClearProjectInput.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/input_types/ClusterInput.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/input_types/Coordinates.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/input_types/CreateDatasetInput.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/input_types/CreateProjectInput.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/input_types/CreateProjectSessionAnnotationInput.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/input_types/CreateSpanAnnotationInput.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/input_types/CreateTraceAnnotationInput.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/input_types/DataQualityMetricInput.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/input_types/DatasetExampleInput.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/input_types/DatasetFilter.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/input_types/DatasetSort.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/input_types/DatasetVersionSort.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/input_types/DeleteAnnotationsInput.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/input_types/DeleteDatasetExamplesInput.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/input_types/DeleteDatasetInput.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/input_types/DeleteExperimentsInput.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/input_types/DimensionFilter.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/input_types/DimensionInput.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/input_types/GenerativeCredentialInput.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/input_types/GenerativeModelInput.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/input_types/Granularity.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/input_types/InvocationParameters.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/input_types/PatchAnnotationInput.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/input_types/PatchDatasetExamplesInput.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/input_types/PatchDatasetInput.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/input_types/PerformanceMetricInput.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/input_types/ProjectFilter.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/input_types/ProjectSort.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/input_types/PromptFilter.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/input_types/PromptTemplateOptions.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/input_types/PromptVersionInput.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/input_types/SpanAnnotationSort.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/input_types/TimeBinConfig.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/input_types/TimeRange.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/input_types/TraceAnnotationSort.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/input_types/UpdateAnnotationInput.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/input_types/__init__.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/interceptor.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/mutations/__init__.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/openapi/__init__.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/openapi/main.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/openapi/schema.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/queries.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/routers/__init__.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/routers/embeddings.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/routers/oauth2.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/routers/utils.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/routers/v1/annotations.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/routers/v1/documents.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/routers/v1/evaluations.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/routers/v1/experiment_evaluations.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/routers/v1/models.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/routers/v1/prompts.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/routers/v1/sessions.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/routers/v1/spans.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/routers/v1/traces.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/routers/v1/utils.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/schema.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/Annotation.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/AnnotationConfig.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/AnnotationSource.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/AnnotationSummary.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/AnnotatorKind.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/ApiKey.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/AuthMethod.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/ChatCompletionMessageRole.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/ChatCompletionSubscriptionPayload.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/Cluster.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/CostBreakdown.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/CreateDatasetPayload.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/CronExpression.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/DataQualityMetric.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/DatasetExample.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/DatasetExampleRevision.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/DatasetExperimentAnnotationSummary.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/DatasetLabel.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/DatasetSplit.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/DatasetValues.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/DatasetVersion.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/Dimension.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/DimensionDataType.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/DimensionShape.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/DimensionType.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/DimensionWithValue.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/DocumentAnnotation.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/DocumentEvaluationSummary.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/DocumentRetrievalMetrics.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/EmbeddingDimension.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/EmbeddingMetadata.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/EvaluationSummary.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/Event.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/EventMetadata.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/ExampleRevisionInterface.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/ExperimentAnnotationSummary.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/ExperimentComparison.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/ExperimentRepeatedRunGroup.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/ExperimentRepeatedRunGroupAnnotationSummary.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/ExperimentRun.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/ExperimentRunAnnotation.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/ExportedFile.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/Functionality.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/GenerativeModel.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/GenerativeProvider.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/Identifier.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/InferenceModel.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/Inferences.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/InferencesRole.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/LabelFraction.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/MimeType.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/ModelInterface.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/NumericRange.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/PerformanceMetric.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/PlaygroundModel.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/ProjectSession.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/ProjectSessionAnnotation.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/ProjectTraceRetentionPolicy.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/Prompt.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/PromptLabel.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/PromptResponse.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/PromptVersion.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/PromptVersionTag.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/PromptVersionTemplate.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/ResponseFormat.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/Retrieval.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/ScalarDriftMetricEnum.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/Segments.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/ServerStatus.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/SortDir.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/Span.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/SpanAnnotation.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/SpanCostDetailSummaryEntry.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/SpanCostSummary.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/SpanIOValue.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/SystemApiKey.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/TimeSeries.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/TokenCountPromptDetails.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/TokenPrice.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/TokenUsage.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/ToolDefinition.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/Trace.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/TraceAnnotation.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/UMAPPoints.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/User.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/UserApiKey.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/UserRole.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/ValidationResult.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/VectorDriftMetricEnum.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/__init__.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/node.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/types/pagination.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/utils.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/cost_tracking/__init__.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/cost_tracking/cost_details_calculator.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/cost_tracking/cost_model_lookup.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/cost_tracking/helpers.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/cost_tracking/model_cost_manifest.json +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/cost_tracking/regex_specificity.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/cost_tracking/token_cost_calculator.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/daemons/__init__.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/daemons/db_disk_usage_monitor.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/daemons/generative_model_store.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/daemons/span_cost_calculator.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/dml_event.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/dml_event_handler.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/email/__init__.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/email/sender.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/email/templates/__init__.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/email/templates/db_disk_usage_notification.html +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/email/templates/password_reset.html +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/email/templates/welcome.html +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/email/types.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/experiments/__init__.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/experiments/utils.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/grpc_server.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/main.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/middleware/__init__.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/middleware/gzip.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/oauth2.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/openapi/__init__.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/prometheus.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/rate_limiters.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/retention.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/session_filters.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/static/apple-touch-icon-114x114.png +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/static/apple-touch-icon-120x120.png +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/static/apple-touch-icon-144x144.png +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/static/apple-touch-icon-152x152.png +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/static/apple-touch-icon-180x180.png +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/static/apple-touch-icon-72x72.png +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/static/apple-touch-icon-76x76.png +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/static/apple-touch-icon.png +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/static/assets/vendor-BGzfc4EU.css +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/static/favicon.ico +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/static/modernizr.js +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/telemetry.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/templates/__init__.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/templates/index.html +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/thread_server.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/types.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/utils.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/services.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/session/__init__.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/session/client.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/session/data_extractor.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/session/evaluation.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/session/session.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/settings.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/trace/__init__.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/trace/attributes.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/trace/dsl/README.md +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/trace/dsl/__init__.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/trace/dsl/filter.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/trace/dsl/helpers.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/trace/dsl/query.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/trace/errors.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/trace/evaluation_conventions.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/trace/exporter.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/trace/fixtures.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/trace/otel.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/trace/projects.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/trace/schemas.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/trace/span_evaluations.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/trace/span_json_decoder.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/trace/span_json_encoder.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/trace/trace_dataset.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/trace/utils.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/trace/v1/__init__.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/trace/v1/evaluation_pb2.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/trace/v1/evaluation_pb2.pyi +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/utilities/__init__.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/utilities/client.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/utilities/error_handling.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/utilities/json.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/utilities/logging.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/utilities/project.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/utilities/re.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/utilities/span_store.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/utilities/template_formatters.py +0 -0
|
@@ -2,7 +2,7 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
import re
|
|
4
4
|
from dataclasses import dataclass
|
|
5
|
-
from datetime import datetime, timedelta
|
|
5
|
+
from datetime import datetime, timedelta, timezone
|
|
6
6
|
from enum import Enum, auto
|
|
7
7
|
from hashlib import pbkdf2_hmac
|
|
8
8
|
from typing import Any, Literal, Optional, Protocol
|
|
@@ -331,7 +331,13 @@ class ClaimSet:
|
|
|
331
331
|
|
|
332
332
|
@property
|
|
333
333
|
def status(self) -> ClaimSetStatus:
|
|
334
|
-
|
|
334
|
+
# Per JWT RFC 7519 Section 4.1.4, the expiration time identifies the time
|
|
335
|
+
# "on or after which" the JWT must not be accepted. Use <= for inclusive check.
|
|
336
|
+
# https://datatracker.ietf.org/doc/html/rfc7519#section-4.1.4
|
|
337
|
+
if (
|
|
338
|
+
self.expiration_time
|
|
339
|
+
and self.expiration_time.timestamp() <= datetime.now(timezone.utc).timestamp()
|
|
340
|
+
):
|
|
335
341
|
return ClaimSetStatus.EXPIRED
|
|
336
342
|
if self.token_id is not None and self.subject is not None:
|
|
337
343
|
return ClaimSetStatus.VALID
|
|
@@ -1607,7 +1607,7 @@ class PasswordResetToken(HasId):
|
|
|
1607
1607
|
)
|
|
1608
1608
|
user: Mapped["User"] = relationship("User", back_populates="password_reset_token")
|
|
1609
1609
|
created_at: Mapped[datetime] = mapped_column(UtcTimeStamp, server_default=func.now())
|
|
1610
|
-
expires_at: Mapped[
|
|
1610
|
+
expires_at: Mapped[datetime] = mapped_column(UtcTimeStamp, nullable=False, index=True)
|
|
1611
1611
|
__table_args__ = (dict(sqlite_autoincrement=True),)
|
|
1612
1612
|
|
|
1613
1613
|
|
|
@@ -1619,7 +1619,7 @@ class RefreshToken(HasId):
|
|
|
1619
1619
|
)
|
|
1620
1620
|
user: Mapped["User"] = relationship("User", back_populates="refresh_tokens")
|
|
1621
1621
|
created_at: Mapped[datetime] = mapped_column(UtcTimeStamp, server_default=func.now())
|
|
1622
|
-
expires_at: Mapped[
|
|
1622
|
+
expires_at: Mapped[datetime] = mapped_column(UtcTimeStamp, nullable=False, index=True)
|
|
1623
1623
|
__table_args__ = (dict(sqlite_autoincrement=True),)
|
|
1624
1624
|
|
|
1625
1625
|
|
|
@@ -1631,7 +1631,7 @@ class AccessToken(HasId):
|
|
|
1631
1631
|
)
|
|
1632
1632
|
user: Mapped["User"] = relationship("User", back_populates="access_tokens")
|
|
1633
1633
|
created_at: Mapped[datetime] = mapped_column(UtcTimeStamp, server_default=func.now())
|
|
1634
|
-
expires_at: Mapped[
|
|
1634
|
+
expires_at: Mapped[datetime] = mapped_column(UtcTimeStamp, nullable=False, index=True)
|
|
1635
1635
|
refresh_token_id: Mapped[int] = mapped_column(
|
|
1636
1636
|
ForeignKey("refresh_tokens.id", ondelete="CASCADE"),
|
|
1637
1637
|
index=True,
|
|
@@ -22,6 +22,15 @@ class IsNotReadOnly(Authorization):
|
|
|
22
22
|
return not info.context.read_only
|
|
23
23
|
|
|
24
24
|
|
|
25
|
+
class IsNotViewer(Authorization):
|
|
26
|
+
message = "Viewers cannot perform this action"
|
|
27
|
+
|
|
28
|
+
def has_permission(self, source: Any, info: Info, **kwargs: Any) -> bool:
|
|
29
|
+
if not info.context.auth_enabled:
|
|
30
|
+
return True
|
|
31
|
+
return isinstance((user := info.context.user), PhoenixUser) and not user.is_viewer
|
|
32
|
+
|
|
33
|
+
|
|
25
34
|
class IsLocked(BasePermission):
|
|
26
35
|
"""
|
|
27
36
|
Permission class that restricts data-modifying operations when insufficient storage.
|
|
@@ -20,6 +20,7 @@ from phoenix.server.api.dataloaders import (
|
|
|
20
20
|
AverageExperimentRepeatedRunGroupLatencyDataLoader,
|
|
21
21
|
AverageExperimentRunLatencyDataLoader,
|
|
22
22
|
CacheForDataLoaders,
|
|
23
|
+
DatasetDatasetSplitsDataLoader,
|
|
23
24
|
DatasetExampleRevisionsDataLoader,
|
|
24
25
|
DatasetExamplesAndVersionsByExperimentRunDataLoader,
|
|
25
26
|
DatasetExampleSpansDataLoader,
|
|
@@ -101,6 +102,7 @@ class DataLoaders:
|
|
|
101
102
|
dataset_example_revisions: DatasetExampleRevisionsDataLoader
|
|
102
103
|
dataset_example_spans: DatasetExampleSpansDataLoader
|
|
103
104
|
dataset_labels: DatasetLabelsDataLoader
|
|
105
|
+
dataset_dataset_splits: DatasetDatasetSplitsDataLoader
|
|
104
106
|
dataset_examples_and_versions_by_experiment_run: (
|
|
105
107
|
DatasetExamplesAndVersionsByExperimentRunDataLoader
|
|
106
108
|
)
|
{arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/dataloaders/__init__.py
RENAMED
|
@@ -10,6 +10,7 @@ from .average_experiment_repeated_run_group_latency import (
|
|
|
10
10
|
AverageExperimentRepeatedRunGroupLatencyDataLoader,
|
|
11
11
|
)
|
|
12
12
|
from .average_experiment_run_latency import AverageExperimentRunLatencyDataLoader
|
|
13
|
+
from .dataset_dataset_splits import DatasetDatasetSplitsDataLoader
|
|
13
14
|
from .dataset_example_revisions import DatasetExampleRevisionsDataLoader
|
|
14
15
|
from .dataset_example_spans import DatasetExampleSpansDataLoader
|
|
15
16
|
from .dataset_example_splits import DatasetExampleSplitsDataLoader
|
|
@@ -84,6 +85,7 @@ __all__ = [
|
|
|
84
85
|
"AverageExperimentRepeatedRunGroupLatencyDataLoader",
|
|
85
86
|
"AverageExperimentRunLatencyDataLoader",
|
|
86
87
|
"CacheForDataLoaders",
|
|
88
|
+
"DatasetDatasetSplitsDataLoader",
|
|
87
89
|
"DatasetExampleRevisionsDataLoader",
|
|
88
90
|
"DatasetExampleSpansDataLoader",
|
|
89
91
|
"DatasetExamplesAndVersionsByExperimentRunDataLoader",
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
from sqlalchemy import select
|
|
2
|
+
from strawberry.dataloader import DataLoader
|
|
3
|
+
from typing_extensions import TypeAlias
|
|
4
|
+
|
|
5
|
+
from phoenix.db import models
|
|
6
|
+
from phoenix.server.types import DbSessionFactory
|
|
7
|
+
|
|
8
|
+
DatasetID: TypeAlias = int
|
|
9
|
+
Key: TypeAlias = DatasetID
|
|
10
|
+
Result: TypeAlias = list[models.DatasetSplit]
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class DatasetDatasetSplitsDataLoader(DataLoader[Key, Result]):
|
|
14
|
+
def __init__(self, db: DbSessionFactory) -> None:
|
|
15
|
+
super().__init__(
|
|
16
|
+
load_fn=self._load_fn,
|
|
17
|
+
)
|
|
18
|
+
self._db = db
|
|
19
|
+
|
|
20
|
+
async def _load_fn(self, keys: list[Key]) -> list[Result]:
|
|
21
|
+
dataset_ids = keys
|
|
22
|
+
async with self._db() as session:
|
|
23
|
+
splits: dict[DatasetID, dict[int, models.DatasetSplit]] = {
|
|
24
|
+
dataset_id: {} for dataset_id in dataset_ids
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
async for dataset_id, split in await session.stream(
|
|
28
|
+
select(models.DatasetExample.dataset_id, models.DatasetSplit)
|
|
29
|
+
.select_from(models.DatasetSplit)
|
|
30
|
+
.join(
|
|
31
|
+
models.DatasetSplitDatasetExample,
|
|
32
|
+
onclause=(
|
|
33
|
+
models.DatasetSplit.id == models.DatasetSplitDatasetExample.dataset_split_id
|
|
34
|
+
),
|
|
35
|
+
)
|
|
36
|
+
.join(
|
|
37
|
+
models.DatasetExample,
|
|
38
|
+
onclause=(
|
|
39
|
+
models.DatasetSplitDatasetExample.dataset_example_id
|
|
40
|
+
== models.DatasetExample.id
|
|
41
|
+
),
|
|
42
|
+
)
|
|
43
|
+
.where(models.DatasetExample.dataset_id.in_(dataset_ids))
|
|
44
|
+
):
|
|
45
|
+
# Use dict to deduplicate splits by split.id
|
|
46
|
+
if dataset_id in splits:
|
|
47
|
+
splits[dataset_id][split.id] = split
|
|
48
|
+
|
|
49
|
+
return [
|
|
50
|
+
sorted(splits.get(dataset_id, {}).values(), key=lambda x: x.name)
|
|
51
|
+
for dataset_id in keys
|
|
52
|
+
]
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
import operator
|
|
2
|
+
from enum import Enum, auto
|
|
3
|
+
from typing import Any, Optional
|
|
4
|
+
|
|
5
|
+
import strawberry
|
|
6
|
+
from sqlalchemy import ColumnElement, Select, and_, func, literal, or_, select, tuple_
|
|
7
|
+
from sqlalchemy.sql.selectable import NamedFromClause
|
|
8
|
+
from strawberry import Maybe
|
|
9
|
+
from typing_extensions import assert_never
|
|
10
|
+
|
|
11
|
+
from phoenix.db import models
|
|
12
|
+
from phoenix.server.api.types.pagination import (
|
|
13
|
+
Cursor,
|
|
14
|
+
CursorSortColumn,
|
|
15
|
+
CursorSortColumnDataType,
|
|
16
|
+
CursorSortColumnValue,
|
|
17
|
+
)
|
|
18
|
+
from phoenix.server.api.types.SortDir import SortDir
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
@strawberry.enum
|
|
22
|
+
class ExperimentRunMetric(Enum):
|
|
23
|
+
latencyMs = auto()
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
@strawberry.input(one_of=True)
|
|
27
|
+
class ExperimentRunColumn:
|
|
28
|
+
metric: Maybe[ExperimentRunMetric]
|
|
29
|
+
annotation_name: Maybe[str]
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
@strawberry.input(description="The sort key and direction for experiment run connections")
|
|
33
|
+
class ExperimentRunSort:
|
|
34
|
+
col: ExperimentRunColumn
|
|
35
|
+
dir: SortDir
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def get_experiment_run_cursor(
|
|
39
|
+
run: models.ExperimentRun, annotation_score: Optional[float], sort: Optional[ExperimentRunSort]
|
|
40
|
+
) -> Cursor:
|
|
41
|
+
sort_column: Optional[CursorSortColumn] = None
|
|
42
|
+
if sort:
|
|
43
|
+
if sort.col.metric:
|
|
44
|
+
metric = sort.col.metric.value
|
|
45
|
+
assert metric is not None
|
|
46
|
+
if metric is ExperimentRunMetric.latencyMs:
|
|
47
|
+
sort_column = CursorSortColumn(
|
|
48
|
+
type=CursorSortColumnDataType.FLOAT,
|
|
49
|
+
value=run.latency_ms,
|
|
50
|
+
)
|
|
51
|
+
else:
|
|
52
|
+
assert_never(metric)
|
|
53
|
+
elif sort.col.annotation_name:
|
|
54
|
+
data_type = (
|
|
55
|
+
CursorSortColumnDataType.FLOAT
|
|
56
|
+
if annotation_score is not None
|
|
57
|
+
else CursorSortColumnDataType.NULL
|
|
58
|
+
)
|
|
59
|
+
sort_column = CursorSortColumn(
|
|
60
|
+
type=data_type,
|
|
61
|
+
value=annotation_score,
|
|
62
|
+
)
|
|
63
|
+
return Cursor(rowid=run.id, sort_column=sort_column)
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
def add_order_by_and_page_start_to_query(
|
|
67
|
+
query: Select[Any],
|
|
68
|
+
sort: Optional[ExperimentRunSort],
|
|
69
|
+
experiment_rowid: int,
|
|
70
|
+
after_experiment_run_rowid: Optional[int],
|
|
71
|
+
after_sort_column_value: Optional[CursorSortColumnValue] = None,
|
|
72
|
+
) -> Select[Any]:
|
|
73
|
+
mean_annotation_scores: Optional[NamedFromClause] = None
|
|
74
|
+
if sort and sort.col.annotation_name:
|
|
75
|
+
annotation_name = sort.col.annotation_name.value
|
|
76
|
+
assert annotation_name is not None
|
|
77
|
+
mean_annotation_scores = _get_mean_annotation_scores_subquery(annotation_name)
|
|
78
|
+
order_by_columns = _get_order_by_columns(
|
|
79
|
+
sort=sort, experiment_rowid=experiment_rowid, mean_annotation_scores=mean_annotation_scores
|
|
80
|
+
)
|
|
81
|
+
query = query.order_by(*order_by_columns)
|
|
82
|
+
if after_experiment_run_rowid is not None:
|
|
83
|
+
query = _add_after_expression(
|
|
84
|
+
query=query,
|
|
85
|
+
sort=sort,
|
|
86
|
+
experiment_run_rowid=after_experiment_run_rowid,
|
|
87
|
+
after_sort_column_value=after_sort_column_value,
|
|
88
|
+
mean_annotation_scores=mean_annotation_scores,
|
|
89
|
+
)
|
|
90
|
+
query = _add_joins_and_selects_to_query(
|
|
91
|
+
query=query,
|
|
92
|
+
sort=sort,
|
|
93
|
+
mean_annotation_scores=mean_annotation_scores,
|
|
94
|
+
)
|
|
95
|
+
return query
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
def _get_order_by_columns(
|
|
99
|
+
sort: Optional[ExperimentRunSort],
|
|
100
|
+
experiment_rowid: int,
|
|
101
|
+
mean_annotation_scores: Optional[NamedFromClause],
|
|
102
|
+
) -> tuple[ColumnElement[Any], ...]:
|
|
103
|
+
if not sort:
|
|
104
|
+
# Ideally, this would sort the runs by (example_id, repetition_number),
|
|
105
|
+
# but this would require making the cursor more complex or adding an additional query
|
|
106
|
+
# to handle the after cursor.
|
|
107
|
+
return (models.ExperimentRun.id.asc(),)
|
|
108
|
+
sort_direction = sort.dir
|
|
109
|
+
if sort.col.metric:
|
|
110
|
+
metric = sort.col.metric.value
|
|
111
|
+
assert metric is not None
|
|
112
|
+
if metric is ExperimentRunMetric.latencyMs:
|
|
113
|
+
if sort_direction is SortDir.asc:
|
|
114
|
+
return (models.ExperimentRun.latency_ms.asc(), models.ExperimentRun.id.asc())
|
|
115
|
+
else:
|
|
116
|
+
return (models.ExperimentRun.latency_ms.desc(), models.ExperimentRun.id.desc())
|
|
117
|
+
else:
|
|
118
|
+
assert_never(metric)
|
|
119
|
+
elif sort.col.annotation_name:
|
|
120
|
+
annotation_name = sort.col.annotation_name.value
|
|
121
|
+
assert annotation_name is not None
|
|
122
|
+
assert mean_annotation_scores is not None
|
|
123
|
+
if sort_direction is SortDir.asc:
|
|
124
|
+
return (
|
|
125
|
+
mean_annotation_scores.c.score.asc().nulls_last(),
|
|
126
|
+
models.ExperimentRun.id.asc(),
|
|
127
|
+
)
|
|
128
|
+
else:
|
|
129
|
+
return (
|
|
130
|
+
mean_annotation_scores.c.score.desc().nulls_last(),
|
|
131
|
+
models.ExperimentRun.id.desc(),
|
|
132
|
+
)
|
|
133
|
+
raise NotImplementedError
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
def _add_after_expression(
|
|
137
|
+
query: Select[Any],
|
|
138
|
+
sort: Optional[ExperimentRunSort],
|
|
139
|
+
experiment_run_rowid: int,
|
|
140
|
+
after_sort_column_value: Optional[CursorSortColumnValue],
|
|
141
|
+
mean_annotation_scores: Optional[NamedFromClause],
|
|
142
|
+
) -> Select[Any]:
|
|
143
|
+
if not sort:
|
|
144
|
+
# Ideally, this would return the runs sorted by (example_id, repetition_number),
|
|
145
|
+
# but this would require making the cursor more complex or adding an additional query.
|
|
146
|
+
return query.where(models.ExperimentRun.id > literal(experiment_run_rowid))
|
|
147
|
+
sort_direction = sort.dir
|
|
148
|
+
compare_fn = operator.gt if sort_direction is SortDir.asc else operator.lt
|
|
149
|
+
if sort.col.metric:
|
|
150
|
+
metric = sort.col.metric.value
|
|
151
|
+
assert metric is not None
|
|
152
|
+
if metric is ExperimentRunMetric.latencyMs:
|
|
153
|
+
assert after_sort_column_value is not None
|
|
154
|
+
return query.where(
|
|
155
|
+
compare_fn(
|
|
156
|
+
tuple_(models.ExperimentRun.latency_ms, models.ExperimentRun.id),
|
|
157
|
+
tuple_(
|
|
158
|
+
literal(after_sort_column_value),
|
|
159
|
+
literal(experiment_run_rowid),
|
|
160
|
+
),
|
|
161
|
+
)
|
|
162
|
+
)
|
|
163
|
+
else:
|
|
164
|
+
assert_never(metric)
|
|
165
|
+
elif sort.col.annotation_name:
|
|
166
|
+
annotation_name = sort.col.annotation_name.value
|
|
167
|
+
assert annotation_name is not None
|
|
168
|
+
assert mean_annotation_scores is not None
|
|
169
|
+
if after_sort_column_value is None:
|
|
170
|
+
return query.where(
|
|
171
|
+
and_(
|
|
172
|
+
compare_fn(models.ExperimentRun.id, literal(experiment_run_rowid)),
|
|
173
|
+
mean_annotation_scores.c.score.is_(None),
|
|
174
|
+
)
|
|
175
|
+
)
|
|
176
|
+
else:
|
|
177
|
+
return query.where(
|
|
178
|
+
or_(
|
|
179
|
+
compare_fn(
|
|
180
|
+
tuple_(mean_annotation_scores.c.score, models.ExperimentRun.id),
|
|
181
|
+
tuple_(
|
|
182
|
+
literal(after_sort_column_value),
|
|
183
|
+
literal(experiment_run_rowid),
|
|
184
|
+
),
|
|
185
|
+
),
|
|
186
|
+
mean_annotation_scores.c.score.is_(None),
|
|
187
|
+
)
|
|
188
|
+
)
|
|
189
|
+
raise NotImplementedError
|
|
190
|
+
|
|
191
|
+
|
|
192
|
+
def _get_mean_annotation_scores_subquery(annotation_name: str) -> NamedFromClause:
|
|
193
|
+
return (
|
|
194
|
+
select(
|
|
195
|
+
func.avg(models.ExperimentRunAnnotation.score).label("score"),
|
|
196
|
+
models.ExperimentRunAnnotation.experiment_run_id.label("experiment_run_id"),
|
|
197
|
+
)
|
|
198
|
+
.select_from(models.ExperimentRunAnnotation)
|
|
199
|
+
.join(
|
|
200
|
+
models.ExperimentRun,
|
|
201
|
+
models.ExperimentRunAnnotation.experiment_run_id == models.ExperimentRun.id,
|
|
202
|
+
)
|
|
203
|
+
.where(models.ExperimentRunAnnotation.name == annotation_name)
|
|
204
|
+
.group_by(models.ExperimentRunAnnotation.experiment_run_id)
|
|
205
|
+
.subquery()
|
|
206
|
+
.alias("mean_annotation_scores")
|
|
207
|
+
)
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
def _add_joins_and_selects_to_query(
|
|
211
|
+
query: Select[tuple[models.ExperimentRun]],
|
|
212
|
+
sort: Optional[ExperimentRunSort],
|
|
213
|
+
mean_annotation_scores: Optional[NamedFromClause],
|
|
214
|
+
) -> Select[tuple[models.ExperimentRun]]:
|
|
215
|
+
if not sort:
|
|
216
|
+
return query
|
|
217
|
+
if sort.col.metric:
|
|
218
|
+
metric = sort.col.metric.value
|
|
219
|
+
assert metric is not None
|
|
220
|
+
if metric is ExperimentRunMetric.latencyMs:
|
|
221
|
+
return query
|
|
222
|
+
else:
|
|
223
|
+
assert_never(metric)
|
|
224
|
+
elif sort.col.annotation_name:
|
|
225
|
+
annotation_name = sort.col.annotation_name.value
|
|
226
|
+
assert annotation_name is not None
|
|
227
|
+
assert mean_annotation_scores is not None
|
|
228
|
+
query = query.join(
|
|
229
|
+
mean_annotation_scores,
|
|
230
|
+
mean_annotation_scores.c.experiment_run_id == models.ExperimentRun.id,
|
|
231
|
+
isouter=True,
|
|
232
|
+
)
|
|
233
|
+
query = query.add_columns(
|
|
234
|
+
mean_annotation_scores.c.score.label("score")
|
|
235
|
+
) # the score must be in the select so that the value can be included in the cursor
|
|
236
|
+
return query
|
|
237
|
+
raise NotImplementedError
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
from dataclasses import dataclass
|
|
2
|
+
from enum import Enum, auto
|
|
3
|
+
from typing import Any, Optional
|
|
4
|
+
|
|
5
|
+
import strawberry
|
|
6
|
+
from sqlalchemy import and_, desc, func, nulls_last, select
|
|
7
|
+
from sqlalchemy.orm import InstrumentedAttribute
|
|
8
|
+
from sqlalchemy.sql.expression import Select
|
|
9
|
+
from strawberry import UNSET
|
|
10
|
+
from typing_extensions import assert_never
|
|
11
|
+
|
|
12
|
+
from phoenix.db import models
|
|
13
|
+
from phoenix.db.helpers import truncate_name
|
|
14
|
+
from phoenix.server.api.types.pagination import CursorSortColumnDataType
|
|
15
|
+
from phoenix.server.api.types.SortDir import SortDir
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
@strawberry.enum
|
|
19
|
+
class ProjectSessionColumn(Enum):
|
|
20
|
+
startTime = auto()
|
|
21
|
+
endTime = auto()
|
|
22
|
+
tokenCountTotal = auto()
|
|
23
|
+
numTraces = auto()
|
|
24
|
+
costTotal = auto()
|
|
25
|
+
|
|
26
|
+
@property
|
|
27
|
+
def column_name(self) -> str:
|
|
28
|
+
return truncate_name(f"{self.name}_project_session_sort_column")
|
|
29
|
+
|
|
30
|
+
def as_orm_expression(self, joined_table: Optional[Any] = None) -> Any:
|
|
31
|
+
expr: Any
|
|
32
|
+
if self is ProjectSessionColumn.startTime:
|
|
33
|
+
expr = models.ProjectSession.start_time
|
|
34
|
+
elif self is ProjectSessionColumn.endTime:
|
|
35
|
+
expr = models.ProjectSession.end_time
|
|
36
|
+
elif self is ProjectSessionColumn.tokenCountTotal:
|
|
37
|
+
assert joined_table is not None
|
|
38
|
+
expr = joined_table.c.key
|
|
39
|
+
elif self is ProjectSessionColumn.numTraces:
|
|
40
|
+
assert joined_table is not None
|
|
41
|
+
expr = joined_table.c.key
|
|
42
|
+
elif self is ProjectSessionColumn.costTotal:
|
|
43
|
+
assert joined_table is not None
|
|
44
|
+
expr = joined_table.c.key
|
|
45
|
+
else:
|
|
46
|
+
assert_never(self)
|
|
47
|
+
return expr.label(self.column_name)
|
|
48
|
+
|
|
49
|
+
@property
|
|
50
|
+
def data_type(self) -> CursorSortColumnDataType:
|
|
51
|
+
if self is ProjectSessionColumn.tokenCountTotal or self is ProjectSessionColumn.numTraces:
|
|
52
|
+
return CursorSortColumnDataType.INT
|
|
53
|
+
if self is ProjectSessionColumn.startTime or self is ProjectSessionColumn.endTime:
|
|
54
|
+
return CursorSortColumnDataType.DATETIME
|
|
55
|
+
if self is ProjectSessionColumn.costTotal:
|
|
56
|
+
return CursorSortColumnDataType.FLOAT
|
|
57
|
+
assert_never(self)
|
|
58
|
+
|
|
59
|
+
def join_tables(self, stmt: Select[Any]) -> tuple[Select[Any], Any]:
|
|
60
|
+
"""
|
|
61
|
+
If needed, joins tables required for the sort column.
|
|
62
|
+
"""
|
|
63
|
+
if self is ProjectSessionColumn.tokenCountTotal:
|
|
64
|
+
sort_subq = (
|
|
65
|
+
select(
|
|
66
|
+
models.Trace.project_session_rowid.label("id"),
|
|
67
|
+
func.sum(models.Span.cumulative_llm_token_count_total).label("key"),
|
|
68
|
+
)
|
|
69
|
+
.join_from(models.Trace, models.Span)
|
|
70
|
+
.where(models.Span.parent_id.is_(None))
|
|
71
|
+
.group_by(models.Trace.project_session_rowid)
|
|
72
|
+
).subquery()
|
|
73
|
+
stmt = stmt.join(sort_subq, models.ProjectSession.id == sort_subq.c.id)
|
|
74
|
+
return stmt, sort_subq
|
|
75
|
+
if self is ProjectSessionColumn.numTraces:
|
|
76
|
+
sort_subq = (
|
|
77
|
+
select(
|
|
78
|
+
models.Trace.project_session_rowid.label("id"),
|
|
79
|
+
func.count(models.Trace.id).label("key"),
|
|
80
|
+
).group_by(models.Trace.project_session_rowid)
|
|
81
|
+
).subquery()
|
|
82
|
+
stmt = stmt.join(sort_subq, models.ProjectSession.id == sort_subq.c.id)
|
|
83
|
+
return stmt, sort_subq
|
|
84
|
+
if self is ProjectSessionColumn.costTotal:
|
|
85
|
+
sort_subq = (
|
|
86
|
+
select(
|
|
87
|
+
models.Trace.project_session_rowid.label("id"),
|
|
88
|
+
func.sum(models.SpanCost.total_cost).label("key"),
|
|
89
|
+
)
|
|
90
|
+
.join_from(
|
|
91
|
+
models.Trace,
|
|
92
|
+
models.SpanCost,
|
|
93
|
+
models.Trace.id == models.SpanCost.trace_rowid,
|
|
94
|
+
)
|
|
95
|
+
.group_by(models.Trace.project_session_rowid)
|
|
96
|
+
).subquery()
|
|
97
|
+
stmt = stmt.join(sort_subq, models.ProjectSession.id == sort_subq.c.id)
|
|
98
|
+
return stmt, sort_subq
|
|
99
|
+
return stmt, None
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
@strawberry.enum
|
|
103
|
+
class ProjectSessionAnnoAttr(Enum):
|
|
104
|
+
score = "score"
|
|
105
|
+
label = "label"
|
|
106
|
+
|
|
107
|
+
@property
|
|
108
|
+
def column_name(self) -> str:
|
|
109
|
+
return f"{self.value}_anno_sort_column"
|
|
110
|
+
|
|
111
|
+
@property
|
|
112
|
+
def orm_expression(self) -> Any:
|
|
113
|
+
expr: InstrumentedAttribute[Any]
|
|
114
|
+
if self is ProjectSessionAnnoAttr.score:
|
|
115
|
+
expr = models.ProjectSessionAnnotation.score
|
|
116
|
+
elif self is ProjectSessionAnnoAttr.label:
|
|
117
|
+
expr = models.ProjectSessionAnnotation.label
|
|
118
|
+
else:
|
|
119
|
+
assert_never(self)
|
|
120
|
+
return expr.label(self.column_name)
|
|
121
|
+
|
|
122
|
+
@property
|
|
123
|
+
def data_type(self) -> CursorSortColumnDataType:
|
|
124
|
+
if self is ProjectSessionAnnoAttr.label:
|
|
125
|
+
return CursorSortColumnDataType.STRING
|
|
126
|
+
if self is ProjectSessionAnnoAttr.score:
|
|
127
|
+
return CursorSortColumnDataType.FLOAT
|
|
128
|
+
assert_never(self)
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
@strawberry.input
|
|
132
|
+
class ProjectSessionAnnoResultKey:
|
|
133
|
+
name: str
|
|
134
|
+
attr: ProjectSessionAnnoAttr
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
@dataclass(frozen=True)
|
|
138
|
+
class ProjectSessionSortConfig:
|
|
139
|
+
stmt: Select[Any]
|
|
140
|
+
orm_expression: Any
|
|
141
|
+
dir: SortDir
|
|
142
|
+
column_name: str
|
|
143
|
+
column_data_type: CursorSortColumnDataType
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
@strawberry.input(description="The sort key and direction for ProjectSession connections.")
|
|
147
|
+
class ProjectSessionSort:
|
|
148
|
+
col: Optional[ProjectSessionColumn] = UNSET
|
|
149
|
+
anno_result_key: Optional[ProjectSessionAnnoResultKey] = UNSET
|
|
150
|
+
dir: SortDir
|
|
151
|
+
|
|
152
|
+
def update_orm_expr(self, stmt: Select[Any]) -> ProjectSessionSortConfig:
|
|
153
|
+
if (col := self.col) and not self.anno_result_key:
|
|
154
|
+
stmt, joined_table = col.join_tables(stmt)
|
|
155
|
+
expr = col.as_orm_expression(joined_table)
|
|
156
|
+
stmt = stmt.add_columns(expr)
|
|
157
|
+
if self.dir == SortDir.desc:
|
|
158
|
+
expr = desc(expr)
|
|
159
|
+
return ProjectSessionSortConfig(
|
|
160
|
+
stmt=stmt.order_by(nulls_last(expr)),
|
|
161
|
+
orm_expression=col.as_orm_expression(joined_table),
|
|
162
|
+
dir=self.dir,
|
|
163
|
+
column_name=col.column_name,
|
|
164
|
+
column_data_type=col.data_type,
|
|
165
|
+
)
|
|
166
|
+
if (anno_result_key := self.anno_result_key) and not col:
|
|
167
|
+
anno_name = anno_result_key.name
|
|
168
|
+
anno_attr = anno_result_key.attr
|
|
169
|
+
expr = anno_result_key.attr.orm_expression
|
|
170
|
+
stmt = stmt.add_columns(expr)
|
|
171
|
+
if self.dir == SortDir.desc:
|
|
172
|
+
expr = desc(expr)
|
|
173
|
+
stmt = stmt.join(
|
|
174
|
+
models.ProjectSessionAnnotation,
|
|
175
|
+
onclause=and_(
|
|
176
|
+
models.ProjectSessionAnnotation.project_session_id == models.ProjectSession.id,
|
|
177
|
+
models.ProjectSessionAnnotation.name == anno_name,
|
|
178
|
+
),
|
|
179
|
+
).order_by(nulls_last(expr))
|
|
180
|
+
return ProjectSessionSortConfig(
|
|
181
|
+
stmt=stmt,
|
|
182
|
+
orm_expression=anno_result_key.attr.orm_expression,
|
|
183
|
+
dir=self.dir,
|
|
184
|
+
column_name=anno_attr.column_name,
|
|
185
|
+
column_data_type=anno_attr.data_type,
|
|
186
|
+
)
|
|
187
|
+
raise ValueError(
|
|
188
|
+
"Exactly one of `col` or `annoResultKey` must be specified on `ProjectSessionSort`."
|
|
189
|
+
)
|
{arize_phoenix-12.4.0 → arize_phoenix-12.6.0}/src/phoenix/server/api/input_types/SpanSort.py
RENAMED
|
@@ -11,6 +11,7 @@ from typing_extensions import assert_never
|
|
|
11
11
|
|
|
12
12
|
import phoenix.trace.v1 as pb
|
|
13
13
|
from phoenix.db import models
|
|
14
|
+
from phoenix.db.helpers import truncate_name
|
|
14
15
|
from phoenix.server.api.types.pagination import CursorSortColumnDataType
|
|
15
16
|
from phoenix.server.api.types.SortDir import SortDir
|
|
16
17
|
from phoenix.trace.schemas import SpanID
|
|
@@ -32,7 +33,7 @@ class SpanColumn(Enum):
|
|
|
32
33
|
|
|
33
34
|
@property
|
|
34
35
|
def column_name(self) -> str:
|
|
35
|
-
return f"{self.name}_span_sort_column"
|
|
36
|
+
return truncate_name(f"{self.name}_span_sort_column")
|
|
36
37
|
|
|
37
38
|
def as_orm_expression(self, joined_table: Optional[Any] = None) -> Any:
|
|
38
39
|
expr: Any
|
|
@@ -23,7 +23,7 @@ from phoenix.db.types.annotation_configs import (
|
|
|
23
23
|
from phoenix.db.types.annotation_configs import (
|
|
24
24
|
FreeformAnnotationConfig as FreeformAnnotationConfigModel,
|
|
25
25
|
)
|
|
26
|
-
from phoenix.server.api.auth import IsNotReadOnly
|
|
26
|
+
from phoenix.server.api.auth import IsNotReadOnly, IsNotViewer
|
|
27
27
|
from phoenix.server.api.context import Context
|
|
28
28
|
from phoenix.server.api.exceptions import BadRequest, Conflict, NotFound
|
|
29
29
|
from phoenix.server.api.queries import Query
|
|
@@ -197,7 +197,7 @@ def _to_pydantic_freeform_annotation_config(
|
|
|
197
197
|
|
|
198
198
|
@strawberry.type
|
|
199
199
|
class AnnotationConfigMutationMixin:
|
|
200
|
-
@strawberry.mutation(permission_classes=[IsNotReadOnly]) # type: ignore[misc]
|
|
200
|
+
@strawberry.mutation(permission_classes=[IsNotReadOnly, IsNotViewer]) # type: ignore[misc]
|
|
201
201
|
async def create_annotation_config(
|
|
202
202
|
self,
|
|
203
203
|
info: Info[Context, None],
|
|
@@ -236,7 +236,7 @@ class AnnotationConfigMutationMixin:
|
|
|
236
236
|
annotation_config=to_gql_annotation_config(annotation_config),
|
|
237
237
|
)
|
|
238
238
|
|
|
239
|
-
@strawberry.mutation(permission_classes=[IsNotReadOnly]) # type: ignore[misc]
|
|
239
|
+
@strawberry.mutation(permission_classes=[IsNotReadOnly, IsNotViewer]) # type: ignore[misc]
|
|
240
240
|
async def update_annotation_config(
|
|
241
241
|
self,
|
|
242
242
|
info: Info[Context, None],
|
|
@@ -285,7 +285,7 @@ class AnnotationConfigMutationMixin:
|
|
|
285
285
|
annotation_config=to_gql_annotation_config(annotation_config),
|
|
286
286
|
)
|
|
287
287
|
|
|
288
|
-
@strawberry.mutation(permission_classes=[IsNotReadOnly]) # type: ignore[misc]
|
|
288
|
+
@strawberry.mutation(permission_classes=[IsNotReadOnly, IsNotViewer]) # type: ignore[misc]
|
|
289
289
|
async def delete_annotation_configs(
|
|
290
290
|
self,
|
|
291
291
|
info: Info[Context, None],
|
|
@@ -317,7 +317,7 @@ class AnnotationConfigMutationMixin:
|
|
|
317
317
|
],
|
|
318
318
|
)
|
|
319
319
|
|
|
320
|
-
@strawberry.mutation(permission_classes=[IsNotReadOnly]) # type: ignore[misc]
|
|
320
|
+
@strawberry.mutation(permission_classes=[IsNotReadOnly, IsNotViewer]) # type: ignore[misc]
|
|
321
321
|
async def add_annotation_config_to_project(
|
|
322
322
|
self,
|
|
323
323
|
info: Info[Context, None],
|
|
@@ -377,7 +377,7 @@ class AnnotationConfigMutationMixin:
|
|
|
377
377
|
project=Project(project_rowid=project_id),
|
|
378
378
|
)
|
|
379
379
|
|
|
380
|
-
@strawberry.mutation(permission_classes=[IsNotReadOnly]) # type: ignore[misc]
|
|
380
|
+
@strawberry.mutation(permission_classes=[IsNotReadOnly, IsNotViewer]) # type: ignore[misc]
|
|
381
381
|
async def remove_annotation_config_from_project(
|
|
382
382
|
self,
|
|
383
383
|
info: Info[Context, None],
|