arize-phoenix 12.4.0__tar.gz → 12.5.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.5.0}/PKG-INFO +1 -1
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/auth.py +8 -2
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/models.py +3 -3
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/auth.py +9 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/context.py +2 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/__init__.py +2 -0
- arize_phoenix-12.5.0/src/phoenix/server/api/dataloaders/dataset_dataset_splits.py +52 -0
- arize_phoenix-12.5.0/src/phoenix/server/api/input_types/ProjectSessionSort.py +189 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/SpanSort.py +2 -1
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/UserRoleInput.py +1 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/mutations/annotation_config_mutations.py +6 -6
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/mutations/api_key_mutations.py +13 -5
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/mutations/chat_mutations.py +3 -3
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/mutations/dataset_label_mutations.py +6 -6
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/mutations/dataset_mutations.py +8 -8
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/mutations/dataset_split_mutations.py +7 -7
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/mutations/experiment_mutations.py +2 -2
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/mutations/export_events_mutations.py +3 -3
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/mutations/model_mutations.py +4 -4
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/mutations/project_mutations.py +4 -4
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/mutations/project_session_annotations_mutations.py +4 -4
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/mutations/project_trace_retention_policy_mutations.py +8 -4
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/mutations/prompt_label_mutations.py +7 -7
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/mutations/prompt_mutations.py +7 -7
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/mutations/prompt_version_tag_mutations.py +3 -3
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/mutations/span_annotations_mutations.py +5 -5
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/mutations/trace_annotations_mutations.py +4 -4
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/mutations/trace_mutations.py +3 -3
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/mutations/user_mutations.py +8 -5
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/routers/auth.py +2 -2
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/routers/v1/__init__.py +16 -1
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/routers/v1/annotation_configs.py +7 -1
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/routers/v1/datasets.py +48 -8
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/routers/v1/experiment_runs.py +7 -1
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/routers/v1/experiments.py +41 -5
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/routers/v1/projects.py +3 -31
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/routers/v1/users.py +0 -7
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/subscriptions.py +3 -3
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/Dataset.py +95 -6
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/Project.py +24 -68
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/app.py +2 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/authorization.py +3 -1
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/bearer_auth.py +9 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/jwt_store.py +8 -6
- arize_phoenix-12.5.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.5.0/src/phoenix/server/static/assets/components-cwdYEs7B.js +501 -394
- arize_phoenix-12.4.0/src/phoenix/server/static/assets/index-iq8WDxat.js → arize_phoenix-12.5.0/src/phoenix/server/static/assets/index-Dc0vD1Rn.js +1 -1
- arize_phoenix-12.4.0/src/phoenix/server/static/assets/pages-Ckg4SLQ9.js → arize_phoenix-12.5.0/src/phoenix/server/static/assets/pages-BDkB3a_a.js +577 -533
- arize_phoenix-12.4.0/src/phoenix/server/static/assets/vendor-D2eEI-6h.js → arize_phoenix-12.5.0/src/phoenix/server/static/assets/vendor-Ce6GTAin.js +1 -1
- arize_phoenix-12.4.0/src/phoenix/server/static/assets/vendor-arizeai-kfOei7nf.js → arize_phoenix-12.5.0/src/phoenix/server/static/assets/vendor-arizeai-CSF-1Kc5.js +1 -1
- arize_phoenix-12.4.0/src/phoenix/server/static/assets/vendor-codemirror-1bq_t1Ec.js → arize_phoenix-12.5.0/src/phoenix/server/static/assets/vendor-codemirror-Bv8J_7an.js +3 -3
- arize_phoenix-12.4.0/src/phoenix/server/static/assets/vendor-recharts-DQ4xfrf4.js → arize_phoenix-12.5.0/src/phoenix/server/static/assets/vendor-recharts-DcLgzI7g.js +1 -1
- arize_phoenix-12.4.0/src/phoenix/server/static/assets/vendor-shiki-GGmcIQxA.js → arize_phoenix-12.5.0/src/phoenix/server/static/assets/vendor-shiki-BF8rh_7m.js +1 -1
- arize_phoenix-12.5.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/version.py +0 -1
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/.gitignore +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/IP_NOTICE +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/LICENSE +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/README.md +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/pyproject.toml +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/__init__.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/config.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/core/__init__.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/core/embedding_dimension.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/core/model.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/core/model_schema.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/core/model_schema_adapter.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/datetime_utils.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/README.md +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/__init__.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/alembic.ini +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/bulk_inserter.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/constants.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/engines.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/enums.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/facilitator.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/helpers.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/insertion/__init__.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/insertion/constants.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/insertion/dataset.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/insertion/document_annotation.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/insertion/evaluation.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/insertion/helpers.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/insertion/session_annotation.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/insertion/span.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/insertion/span_annotation.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/insertion/trace_annotation.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/insertion/types.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/migrate.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/migrations/__init__.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/migrations/data_migration_scripts/__init__.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/migrations/data_migration_scripts/populate_project_sessions.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/migrations/env.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/migrations/script.py.mako +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/migrations/versions/01a8342c9cdf_add_user_id_on_datasets.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/migrations/versions/0df286449799_add_session_annotations_table.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/migrations/versions/10460e46d750_datasets.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/migrations/versions/272b66ff50f8_drop_single_indices.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/migrations/versions/2f9d1a65945f_annotation_config_migration.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/migrations/versions/3be8647b87d8_add_token_columns_to_spans_table.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/migrations/versions/4ded9e43755f_create_project_sessions_table.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/migrations/versions/58228d933c91_dataset_labels.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/migrations/versions/699f655af132_experiment_tags.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/migrations/versions/6a88424799fe_update_users_with_auth_method.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/migrations/versions/735d3d93c33e_add_composite_indices.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/migrations/versions/8a3764fe7f1a_change_jsonb_to_json_for_prompts.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/migrations/versions/a20694b15f82_cost.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/migrations/versions/ab513d89518b_add_user_id_on_dataset_versions.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/migrations/versions/bb8139330879_create_project_trace_retention_policies_table.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/migrations/versions/bc8fea3c2bc8_add_prompt_tables.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/migrations/versions/cd164e83824f_users_and_tokens.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/migrations/versions/cf03bd6bae1d_init.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/migrations/versions/d0690a79ea51_users_on_experiments.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/migrations/versions/deb2c81c0bb2_dataset_splits.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/migrations/versions/e76cbd66ffc3_add_experiments_dataset_examples.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/pg_config.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/types/__init__.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/types/annotation_configs.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/types/db_models.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/types/identifier.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/types/model_provider.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/types/token_price_customization.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/types/trace_retention.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/exceptions.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/experiments/__init__.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/experiments/evaluators/__init__.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/experiments/evaluators/base.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/experiments/evaluators/code_evaluators.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/experiments/evaluators/llm_evaluators.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/experiments/evaluators/utils.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/experiments/functions.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/experiments/tracing.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/experiments/types.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/experiments/utils.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/inferences/__init__.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/inferences/errors.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/inferences/fixtures.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/inferences/inferences.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/inferences/schema.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/inferences/validation.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/logging/__init__.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/logging/_config.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/logging/_filter.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/logging/_formatter.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/metrics/README.md +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/metrics/__init__.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/metrics/binning.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/metrics/metrics.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/metrics/mixins.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/metrics/retrieval_metrics.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/metrics/timeseries.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/metrics/wrappers.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/pointcloud/__init__.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/pointcloud/clustering.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/pointcloud/pointcloud.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/pointcloud/projectors.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/pointcloud/umap_parameters.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/py.typed +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/__init__.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/README.md +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/__init__.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/auth_messages.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/annotation_configs_by_project.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/annotation_summaries.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/average_experiment_repeated_run_group_latency.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/average_experiment_run_latency.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/cache/__init__.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/cache/two_tier_cache.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/dataset_example_revisions.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/dataset_example_spans.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/dataset_example_splits.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/dataset_examples_and_versions_by_experiment_run.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/dataset_labels.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/document_evaluation_summaries.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/document_evaluations.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/document_retrieval_metrics.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/experiment_annotation_summaries.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/experiment_error_rates.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/experiment_repeated_run_group_annotation_summaries.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/experiment_repeated_run_groups.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/experiment_run_annotations.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/experiment_run_counts.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/experiment_sequence_number.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/last_used_times_by_generative_model_id.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/latency_ms_quantile.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/min_start_or_max_end_times.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/num_child_spans.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/num_spans_per_trace.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/project_by_name.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/project_ids_by_trace_retention_policy_id.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/prompt_version_sequence_number.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/record_counts.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/session_annotations_by_session.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/session_io.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/session_num_traces.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/session_num_traces_with_error.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/session_token_usages.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/session_trace_latency_ms_quantile.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/span_annotations.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/span_by_id.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/span_cost_by_span.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.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.5.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.5.0}/src/phoenix/server/api/dataloaders/span_cost_detail_summary_entries_by_span.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/span_cost_detail_summary_entries_by_trace.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/span_cost_details_by_span_cost.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_experiment.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.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.5.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_experiment_run.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_generative_model.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_project.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_project_session.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_trace.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/span_costs.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/span_dataset_examples.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/span_descendants.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/span_projects.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/table_fields.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/token_counts.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/trace_annotations_by_trace.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/trace_by_trace_ids.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/trace_retention_policy_id_by_project_id.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/trace_root_spans.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/types.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/user_roles.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/users.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/exceptions.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/helpers/__init__.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/helpers/annotations.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/helpers/dataset_helpers.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/helpers/experiment_run_filters.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/helpers/playground_clients.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/helpers/playground_registry.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/helpers/playground_spans.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/helpers/playground_users.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/helpers/prompts/__init__.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/helpers/prompts/conversions/__init__.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/helpers/prompts/conversions/anthropic.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/helpers/prompts/conversions/aws.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/helpers/prompts/conversions/openai.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/helpers/prompts/models.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/AddExamplesToDatasetInput.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/AddSpansToDatasetInput.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/AnnotationFilter.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/ChatCompletionInput.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/ChatCompletionMessageInput.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/ClearProjectInput.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/ClusterInput.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/Coordinates.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/CreateDatasetInput.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/CreateProjectInput.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/CreateProjectSessionAnnotationInput.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/CreateSpanAnnotationInput.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/CreateTraceAnnotationInput.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/DataQualityMetricInput.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/DatasetExampleInput.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/DatasetFilter.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/DatasetSort.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/DatasetVersionSort.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/DeleteAnnotationsInput.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/DeleteDatasetExamplesInput.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/DeleteDatasetInput.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/DeleteExperimentsInput.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/DimensionFilter.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/DimensionInput.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/GenerativeCredentialInput.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/GenerativeModelInput.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/Granularity.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/InvocationParameters.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/PatchAnnotationInput.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/PatchDatasetExamplesInput.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/PatchDatasetInput.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/PerformanceMetricInput.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/ProjectFilter.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/ProjectSort.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/PromptFilter.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/PromptTemplateOptions.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/PromptVersionInput.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/SpanAnnotationSort.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/TimeBinConfig.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/TimeRange.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/TraceAnnotationSort.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/UpdateAnnotationInput.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/__init__.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/interceptor.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/mutations/__init__.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/openapi/__init__.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/openapi/main.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/openapi/schema.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/queries.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/routers/__init__.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/routers/embeddings.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/routers/oauth2.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/routers/utils.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/routers/v1/annotations.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/routers/v1/documents.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/routers/v1/evaluations.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/routers/v1/experiment_evaluations.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/routers/v1/models.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/routers/v1/prompts.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/routers/v1/sessions.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/routers/v1/spans.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/routers/v1/traces.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/routers/v1/utils.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/schema.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/Annotation.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/AnnotationConfig.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/AnnotationSource.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/AnnotationSummary.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/AnnotatorKind.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/ApiKey.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/AuthMethod.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/ChatCompletionMessageRole.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/ChatCompletionSubscriptionPayload.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/Cluster.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/CostBreakdown.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/CreateDatasetPayload.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/CronExpression.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/DataQualityMetric.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/DatasetExample.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/DatasetExampleRevision.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/DatasetExperimentAnnotationSummary.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/DatasetLabel.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/DatasetSplit.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/DatasetValues.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/DatasetVersion.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/Dimension.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/DimensionDataType.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/DimensionShape.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/DimensionType.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/DimensionWithValue.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/DocumentAnnotation.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/DocumentEvaluationSummary.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/DocumentRetrievalMetrics.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/EmbeddingDimension.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/EmbeddingMetadata.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/EvaluationSummary.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/Event.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/EventMetadata.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/ExampleRevisionInterface.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/Experiment.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/ExperimentAnnotationSummary.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/ExperimentComparison.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/ExperimentRepeatedRunGroup.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/ExperimentRepeatedRunGroupAnnotationSummary.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/ExperimentRun.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/ExperimentRunAnnotation.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/ExportedFile.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/Functionality.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/GenerativeModel.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/GenerativeProvider.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/Identifier.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/InferenceModel.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/Inferences.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/InferencesRole.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/LabelFraction.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/MimeType.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/ModelInterface.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/NumericRange.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/PerformanceMetric.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/PlaygroundModel.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/ProjectSession.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/ProjectSessionAnnotation.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/ProjectTraceRetentionPolicy.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/Prompt.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/PromptLabel.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/PromptResponse.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/PromptVersion.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/PromptVersionTag.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/PromptVersionTemplate.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/ResponseFormat.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/Retrieval.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/ScalarDriftMetricEnum.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/Segments.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/ServerStatus.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/SortDir.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/Span.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/SpanAnnotation.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/SpanCostDetailSummaryEntry.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/SpanCostSummary.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/SpanIOValue.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/SystemApiKey.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/TimeSeries.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/TokenCountPromptDetails.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/TokenPrice.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/TokenUsage.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/ToolDefinition.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/Trace.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/TraceAnnotation.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/UMAPPoints.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/User.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/UserApiKey.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/UserRole.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/ValidationResult.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/VectorDriftMetricEnum.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/__init__.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/node.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/pagination.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/utils.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/cost_tracking/__init__.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/cost_tracking/cost_details_calculator.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/cost_tracking/cost_model_lookup.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/cost_tracking/helpers.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/cost_tracking/model_cost_manifest.json +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/cost_tracking/regex_specificity.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/cost_tracking/token_cost_calculator.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/daemons/__init__.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/daemons/db_disk_usage_monitor.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/daemons/generative_model_store.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/daemons/span_cost_calculator.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/dml_event.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/dml_event_handler.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/email/__init__.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/email/sender.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/email/templates/__init__.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/email/templates/db_disk_usage_notification.html +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/email/templates/password_reset.html +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/email/templates/welcome.html +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/email/types.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/experiments/__init__.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/experiments/utils.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/grpc_server.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/main.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/middleware/__init__.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/middleware/gzip.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/oauth2.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/openapi/__init__.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/prometheus.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/rate_limiters.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/retention.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/session_filters.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/static/apple-touch-icon-114x114.png +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/static/apple-touch-icon-120x120.png +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/static/apple-touch-icon-144x144.png +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/static/apple-touch-icon-152x152.png +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/static/apple-touch-icon-180x180.png +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/static/apple-touch-icon-72x72.png +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/static/apple-touch-icon-76x76.png +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/static/apple-touch-icon.png +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/static/assets/vendor-BGzfc4EU.css +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/static/assets/vendor-three-BLWp5bic.js +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/static/favicon.ico +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/static/modernizr.js +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/telemetry.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/templates/__init__.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/templates/index.html +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/thread_server.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/types.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/utils.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/services.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/session/__init__.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/session/client.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/session/data_extractor.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/session/evaluation.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/session/session.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/settings.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/trace/__init__.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/trace/attributes.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/trace/dsl/README.md +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/trace/dsl/__init__.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/trace/dsl/filter.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/trace/dsl/helpers.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/trace/dsl/query.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/trace/errors.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/trace/evaluation_conventions.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/trace/exporter.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/trace/fixtures.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/trace/otel.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/trace/projects.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/trace/schemas.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/trace/span_evaluations.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/trace/span_json_decoder.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/trace/span_json_encoder.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/trace/trace_dataset.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/trace/utils.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/trace/v1/__init__.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/trace/v1/evaluation_pb2.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/trace/v1/evaluation_pb2.pyi +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/utilities/__init__.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/utilities/client.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/utilities/error_handling.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/utilities/json.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/utilities/logging.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/utilities/project.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/utilities/re.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/utilities/span_store.py +0 -0
- {arize_phoenix-12.4.0 → arize_phoenix-12.5.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.5.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,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.5.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],
|
{arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/mutations/api_key_mutations.py
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
from datetime import datetime, timezone
|
|
2
|
-
from typing import Optional
|
|
2
|
+
from typing import Literal, Optional
|
|
3
3
|
|
|
4
4
|
import strawberry
|
|
5
5
|
from sqlalchemy import select
|
|
@@ -9,7 +9,7 @@ from strawberry.types import Info
|
|
|
9
9
|
|
|
10
10
|
from phoenix.db import models
|
|
11
11
|
from phoenix.db.models import UserRoleName
|
|
12
|
-
from phoenix.server.api.auth import IsAdmin, IsLocked, IsNotReadOnly
|
|
12
|
+
from phoenix.server.api.auth import IsAdmin, IsLocked, IsNotReadOnly, IsNotViewer
|
|
13
13
|
from phoenix.server.api.context import Context
|
|
14
14
|
from phoenix.server.api.exceptions import Unauthorized
|
|
15
15
|
from phoenix.server.api.queries import Query
|
|
@@ -61,7 +61,7 @@ class DeleteApiKeyMutationPayload:
|
|
|
61
61
|
|
|
62
62
|
@strawberry.type
|
|
63
63
|
class ApiKeyMutationMixin:
|
|
64
|
-
@strawberry.mutation(permission_classes=[IsNotReadOnly, IsAdmin, IsLocked]) # type: ignore
|
|
64
|
+
@strawberry.mutation(permission_classes=[IsNotReadOnly, IsNotViewer, IsAdmin, IsLocked]) # type: ignore
|
|
65
65
|
async def create_system_api_key(
|
|
66
66
|
self, info: Info[Context, None], input: CreateApiKeyInput
|
|
67
67
|
) -> CreateSystemApiKeyMutationPayload:
|
|
@@ -113,12 +113,20 @@ class ApiKeyMutationMixin:
|
|
|
113
113
|
except AttributeError:
|
|
114
114
|
raise ValueError("User not found")
|
|
115
115
|
issued_at = datetime.now(timezone.utc)
|
|
116
|
+
# Determine user role for API key
|
|
117
|
+
user_role: Literal["ADMIN", "MEMBER", "VIEWER"]
|
|
118
|
+
if user.is_admin:
|
|
119
|
+
user_role = "ADMIN"
|
|
120
|
+
elif user.is_viewer:
|
|
121
|
+
user_role = "VIEWER"
|
|
122
|
+
else:
|
|
123
|
+
user_role = "MEMBER"
|
|
116
124
|
claims = ApiKeyClaims(
|
|
117
125
|
subject=user.identity,
|
|
118
126
|
issued_at=issued_at,
|
|
119
127
|
expiration_time=input.expires_at or None,
|
|
120
128
|
attributes=ApiKeyAttributes(
|
|
121
|
-
user_role=
|
|
129
|
+
user_role=user_role,
|
|
122
130
|
name=input.name,
|
|
123
131
|
description=input.description,
|
|
124
132
|
),
|
|
@@ -137,7 +145,7 @@ class ApiKeyMutationMixin:
|
|
|
137
145
|
query=Query(),
|
|
138
146
|
)
|
|
139
147
|
|
|
140
|
-
@strawberry.mutation(permission_classes=[IsNotReadOnly, IsAdmin]) # type: ignore
|
|
148
|
+
@strawberry.mutation(permission_classes=[IsNotReadOnly, IsNotViewer, IsAdmin]) # type: ignore
|
|
141
149
|
async def delete_system_api_key(
|
|
142
150
|
self, info: Info[Context, None], input: DeleteApiKeyInput
|
|
143
151
|
) -> DeleteApiKeyMutationPayload:
|
{arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/mutations/chat_mutations.py
RENAMED
|
@@ -30,7 +30,7 @@ from phoenix.db.helpers import (
|
|
|
30
30
|
get_dataset_example_revisions,
|
|
31
31
|
insert_experiment_with_examples_snapshot,
|
|
32
32
|
)
|
|
33
|
-
from phoenix.server.api.auth import IsLocked, IsNotReadOnly
|
|
33
|
+
from phoenix.server.api.auth import IsLocked, IsNotReadOnly, IsNotViewer
|
|
34
34
|
from phoenix.server.api.context import Context
|
|
35
35
|
from phoenix.server.api.exceptions import BadRequest, CustomGraphQLError, NotFound
|
|
36
36
|
from phoenix.server.api.helpers.dataset_helpers import get_dataset_example_output
|
|
@@ -131,7 +131,7 @@ class ChatCompletionOverDatasetMutationPayload:
|
|
|
131
131
|
|
|
132
132
|
@strawberry.type
|
|
133
133
|
class ChatCompletionMutationMixin:
|
|
134
|
-
@strawberry.mutation(permission_classes=[IsNotReadOnly, IsLocked]) # type: ignore
|
|
134
|
+
@strawberry.mutation(permission_classes=[IsNotReadOnly, IsNotViewer, IsLocked]) # type: ignore
|
|
135
135
|
@classmethod
|
|
136
136
|
async def chat_completion_over_dataset(
|
|
137
137
|
cls,
|
|
@@ -302,7 +302,7 @@ class ChatCompletionMutationMixin:
|
|
|
302
302
|
payload.examples.append(example_payload)
|
|
303
303
|
return payload
|
|
304
304
|
|
|
305
|
-
@strawberry.mutation(permission_classes=[IsNotReadOnly, IsLocked]) # type: ignore
|
|
305
|
+
@strawberry.mutation(permission_classes=[IsNotReadOnly, IsNotViewer, IsLocked]) # type: ignore
|
|
306
306
|
@classmethod
|
|
307
307
|
async def chat_completion(
|
|
308
308
|
cls, info: Info[Context, None], input: ChatCompletionInput
|
|
@@ -10,7 +10,7 @@ from strawberry.relay.types import GlobalID
|
|
|
10
10
|
from strawberry.types import Info
|
|
11
11
|
|
|
12
12
|
from phoenix.db import models
|
|
13
|
-
from phoenix.server.api.auth import IsLocked, IsNotReadOnly
|
|
13
|
+
from phoenix.server.api.auth import IsLocked, IsNotReadOnly, IsNotViewer
|
|
14
14
|
from phoenix.server.api.context import Context
|
|
15
15
|
from phoenix.server.api.exceptions import BadRequest, Conflict, NotFound
|
|
16
16
|
from phoenix.server.api.queries import Query
|
|
@@ -78,7 +78,7 @@ class UnsetDatasetLabelsMutationPayload:
|
|
|
78
78
|
|
|
79
79
|
@strawberry.type
|
|
80
80
|
class DatasetLabelMutationMixin:
|
|
81
|
-
@strawberry.mutation(permission_classes=[IsNotReadOnly, IsLocked]) # type: ignore
|
|
81
|
+
@strawberry.mutation(permission_classes=[IsNotReadOnly, IsNotViewer, IsLocked]) # type: ignore
|
|
82
82
|
async def create_dataset_label(
|
|
83
83
|
self,
|
|
84
84
|
info: Info[Context, None],
|
|
@@ -100,7 +100,7 @@ class DatasetLabelMutationMixin:
|
|
|
100
100
|
dataset_label=to_gql_dataset_label(dataset_label_orm)
|
|
101
101
|
)
|
|
102
102
|
|
|
103
|
-
@strawberry.mutation(permission_classes=[IsNotReadOnly, IsLocked]) # type: ignore
|
|
103
|
+
@strawberry.mutation(permission_classes=[IsNotReadOnly, IsNotViewer, IsLocked]) # type: ignore
|
|
104
104
|
async def update_dataset_label(
|
|
105
105
|
self, info: Info[Context, None], input: UpdateDatasetLabelInput
|
|
106
106
|
) -> UpdateDatasetLabelMutationPayload:
|
|
@@ -133,7 +133,7 @@ class DatasetLabelMutationMixin:
|
|
|
133
133
|
dataset_label=to_gql_dataset_label(dataset_label_orm)
|
|
134
134
|
)
|
|
135
135
|
|
|
136
|
-
@strawberry.mutation(permission_classes=[IsNotReadOnly, IsLocked]) # type: ignore
|
|
136
|
+
@strawberry.mutation(permission_classes=[IsNotReadOnly, IsNotViewer, IsLocked]) # type: ignore
|
|
137
137
|
async def delete_dataset_labels(
|
|
138
138
|
self, info: Info[Context, None], input: DeleteDatasetLabelsInput
|
|
139
139
|
) -> DeleteDatasetLabelsMutationPayload:
|
|
@@ -166,7 +166,7 @@ class DatasetLabelMutationMixin:
|
|
|
166
166
|
]
|
|
167
167
|
)
|
|
168
168
|
|
|
169
|
-
@strawberry.mutation(permission_classes=[IsNotReadOnly, IsLocked]) # type: ignore
|
|
169
|
+
@strawberry.mutation(permission_classes=[IsNotReadOnly, IsNotViewer, IsLocked]) # type: ignore
|
|
170
170
|
async def set_dataset_labels(
|
|
171
171
|
self, info: Info[Context, None], input: SetDatasetLabelsInput
|
|
172
172
|
) -> SetDatasetLabelsMutationPayload:
|
|
@@ -248,7 +248,7 @@ class DatasetLabelMutationMixin:
|
|
|
248
248
|
query=Query(),
|
|
249
249
|
)
|
|
250
250
|
|
|
251
|
-
@strawberry.mutation(permission_classes=[IsNotReadOnly, IsLocked]) # type: ignore
|
|
251
|
+
@strawberry.mutation(permission_classes=[IsNotReadOnly, IsNotViewer, IsLocked]) # type: ignore
|
|
252
252
|
async def unset_dataset_labels(
|
|
253
253
|
self, info: Info[Context, None], input: UnsetDatasetLabelsInput
|
|
254
254
|
) -> UnsetDatasetLabelsMutationPayload:
|
{arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/mutations/dataset_mutations.py
RENAMED
|
@@ -18,7 +18,7 @@ from strawberry.types import Info
|
|
|
18
18
|
|
|
19
19
|
from phoenix.db import models
|
|
20
20
|
from phoenix.db.helpers import get_eval_trace_ids_for_datasets, get_project_names_for_datasets
|
|
21
|
-
from phoenix.server.api.auth import IsLocked, IsNotReadOnly
|
|
21
|
+
from phoenix.server.api.auth import IsLocked, IsNotReadOnly, IsNotViewer
|
|
22
22
|
from phoenix.server.api.context import Context
|
|
23
23
|
from phoenix.server.api.exceptions import BadRequest, NotFound
|
|
24
24
|
from phoenix.server.api.helpers.dataset_helpers import (
|
|
@@ -50,7 +50,7 @@ class DatasetMutationPayload:
|
|
|
50
50
|
|
|
51
51
|
@strawberry.type
|
|
52
52
|
class DatasetMutationMixin:
|
|
53
|
-
@strawberry.mutation(permission_classes=[IsNotReadOnly, IsLocked]) # type: ignore
|
|
53
|
+
@strawberry.mutation(permission_classes=[IsNotReadOnly, IsNotViewer, IsLocked]) # type: ignore
|
|
54
54
|
async def create_dataset(
|
|
55
55
|
self,
|
|
56
56
|
info: Info[Context, None],
|
|
@@ -74,7 +74,7 @@ class DatasetMutationMixin:
|
|
|
74
74
|
info.context.event_queue.put(DatasetInsertEvent((dataset.id,)))
|
|
75
75
|
return DatasetMutationPayload(dataset=to_gql_dataset(dataset))
|
|
76
76
|
|
|
77
|
-
@strawberry.mutation(permission_classes=[IsNotReadOnly, IsLocked]) # type: ignore
|
|
77
|
+
@strawberry.mutation(permission_classes=[IsNotReadOnly, IsNotViewer, IsLocked]) # type: ignore
|
|
78
78
|
async def patch_dataset(
|
|
79
79
|
self,
|
|
80
80
|
info: Info[Context, None],
|
|
@@ -103,7 +103,7 @@ class DatasetMutationMixin:
|
|
|
103
103
|
info.context.event_queue.put(DatasetInsertEvent((dataset.id,)))
|
|
104
104
|
return DatasetMutationPayload(dataset=to_gql_dataset(dataset))
|
|
105
105
|
|
|
106
|
-
@strawberry.mutation(permission_classes=[IsNotReadOnly, IsLocked]) # type: ignore
|
|
106
|
+
@strawberry.mutation(permission_classes=[IsNotReadOnly, IsNotViewer, IsLocked]) # type: ignore
|
|
107
107
|
async def add_spans_to_dataset(
|
|
108
108
|
self,
|
|
109
109
|
info: Info[Context, None],
|
|
@@ -223,7 +223,7 @@ class DatasetMutationMixin:
|
|
|
223
223
|
info.context.event_queue.put(DatasetInsertEvent((dataset.id,)))
|
|
224
224
|
return DatasetMutationPayload(dataset=to_gql_dataset(dataset))
|
|
225
225
|
|
|
226
|
-
@strawberry.mutation(permission_classes=[IsNotReadOnly, IsLocked]) # type: ignore
|
|
226
|
+
@strawberry.mutation(permission_classes=[IsNotReadOnly, IsNotViewer, IsLocked]) # type: ignore
|
|
227
227
|
async def add_examples_to_dataset(
|
|
228
228
|
self, info: Info[Context, None], input: AddExamplesToDatasetInput
|
|
229
229
|
) -> DatasetMutationPayload:
|
|
@@ -350,7 +350,7 @@ class DatasetMutationMixin:
|
|
|
350
350
|
info.context.event_queue.put(DatasetInsertEvent((dataset.id,)))
|
|
351
351
|
return DatasetMutationPayload(dataset=to_gql_dataset(dataset))
|
|
352
352
|
|
|
353
|
-
@strawberry.mutation(permission_classes=[IsNotReadOnly]) # type: ignore
|
|
353
|
+
@strawberry.mutation(permission_classes=[IsNotReadOnly, IsNotViewer]) # type: ignore
|
|
354
354
|
async def delete_dataset(
|
|
355
355
|
self,
|
|
356
356
|
info: Info[Context, None],
|
|
@@ -381,7 +381,7 @@ class DatasetMutationMixin:
|
|
|
381
381
|
info.context.event_queue.put(DatasetDeleteEvent((dataset.id,)))
|
|
382
382
|
return DatasetMutationPayload(dataset=to_gql_dataset(dataset))
|
|
383
383
|
|
|
384
|
-
@strawberry.mutation(permission_classes=[IsNotReadOnly, IsLocked]) # type: ignore
|
|
384
|
+
@strawberry.mutation(permission_classes=[IsNotReadOnly, IsNotViewer, IsLocked]) # type: ignore
|
|
385
385
|
async def patch_dataset_examples(
|
|
386
386
|
self,
|
|
387
387
|
info: Info[Context, None],
|
|
@@ -474,7 +474,7 @@ class DatasetMutationMixin:
|
|
|
474
474
|
info.context.event_queue.put(DatasetInsertEvent((dataset.id,)))
|
|
475
475
|
return DatasetMutationPayload(dataset=to_gql_dataset(dataset))
|
|
476
476
|
|
|
477
|
-
@strawberry.mutation(permission_classes=[IsNotReadOnly, IsLocked]) # type: ignore
|
|
477
|
+
@strawberry.mutation(permission_classes=[IsNotReadOnly, IsNotViewer, IsLocked]) # type: ignore
|
|
478
478
|
async def delete_dataset_examples(
|
|
479
479
|
self, info: Info[Context, None], input: DeleteDatasetExamplesInput
|
|
480
480
|
) -> DatasetMutationPayload:
|