arize-phoenix 12.8.0__tar.gz → 12.9.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.8.0 → arize_phoenix-12.9.0}/PKG-INFO +3 -1
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/pyproject.toml +3 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/config.py +131 -9
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/db/engines.py +127 -14
- arize_phoenix-12.9.0/src/phoenix/db/iam_auth.py +64 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/db/pg_config.py +10 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/context.py +23 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/dataloaders/__init__.py +6 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/dataloaders/experiment_repeated_run_groups.py +0 -2
- arize_phoenix-12.9.0/src/phoenix/server/api/dataloaders/experiment_runs_by_experiment_and_example.py +44 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/dataloaders/span_costs.py +3 -9
- arize_phoenix-12.9.0/src/phoenix/server/api/dataloaders/token_prices_by_model.py +30 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/helpers/playground_clients.py +3 -3
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/input_types/PromptVersionInput.py +47 -1
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/mutations/annotation_config_mutations.py +2 -2
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/mutations/api_key_mutations.py +2 -15
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/mutations/chat_mutations.py +3 -2
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/mutations/dataset_label_mutations.py +12 -6
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/mutations/dataset_mutations.py +8 -8
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/mutations/dataset_split_mutations.py +13 -9
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/mutations/model_mutations.py +4 -4
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/mutations/project_session_annotations_mutations.py +4 -7
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/mutations/prompt_label_mutations.py +3 -3
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/mutations/prompt_mutations.py +24 -117
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/mutations/prompt_version_tag_mutations.py +8 -5
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/mutations/span_annotations_mutations.py +10 -5
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/mutations/trace_annotations_mutations.py +9 -4
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/mutations/user_mutations.py +4 -4
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/queries.py +65 -210
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/subscriptions.py +4 -4
- arize_phoenix-12.9.0/src/phoenix/server/api/types/Annotation.py +98 -0
- arize_phoenix-12.9.0/src/phoenix/server/api/types/ApiKey.py +23 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/Dataset.py +88 -48
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/DatasetExample.py +34 -30
- arize_phoenix-12.9.0/src/phoenix/server/api/types/DatasetLabel.py +57 -0
- arize_phoenix-12.9.0/src/phoenix/server/api/types/DatasetSplit.py +98 -0
- arize_phoenix-12.9.0/src/phoenix/server/api/types/DatasetVersion.py +59 -0
- arize_phoenix-12.9.0/src/phoenix/server/api/types/DocumentAnnotation.py +212 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/Experiment.py +146 -55
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/ExperimentRepeatedRunGroup.py +10 -1
- arize_phoenix-12.9.0/src/phoenix/server/api/types/ExperimentRun.py +223 -0
- arize_phoenix-12.9.0/src/phoenix/server/api/types/ExperimentRunAnnotation.py +175 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/GenerativeModel.py +95 -42
- arize_phoenix-12.9.0/src/phoenix/server/api/types/ModelInterface.py +16 -0
- arize_phoenix-12.9.0/src/phoenix/server/api/types/PlaygroundModel.py +20 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/Project.py +70 -75
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/ProjectSession.py +69 -37
- arize_phoenix-12.9.0/src/phoenix/server/api/types/ProjectSessionAnnotation.py +187 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/ProjectTraceRetentionPolicy.py +1 -1
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/Prompt.py +82 -44
- arize_phoenix-12.9.0/src/phoenix/server/api/types/PromptLabel.py +58 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/PromptVersion.py +11 -8
- arize_phoenix-12.9.0/src/phoenix/server/api/types/PromptVersionTag.py +80 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/Span.py +116 -115
- arize_phoenix-12.9.0/src/phoenix/server/api/types/SpanAnnotation.py +214 -0
- arize_phoenix-12.9.0/src/phoenix/server/api/types/SystemApiKey.py +73 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/Trace.py +45 -44
- arize_phoenix-12.9.0/src/phoenix/server/api/types/TraceAnnotation.py +167 -0
- arize_phoenix-12.9.0/src/phoenix/server/api/types/User.py +140 -0
- arize_phoenix-12.9.0/src/phoenix/server/api/types/UserApiKey.py +92 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/app.py +29 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/static/.vite/manifest.json +9 -9
- arize_phoenix-12.8.0/src/phoenix/server/static/assets/components-Bem6_7MW.js → arize_phoenix-12.9.0/src/phoenix/server/static/assets/components-v927s3NF.js +427 -397
- arize_phoenix-12.8.0/src/phoenix/server/static/assets/index-NdiXbuNL.js → arize_phoenix-12.9.0/src/phoenix/server/static/assets/index-DrD9eSrN.js +9 -5
- arize_phoenix-12.8.0/src/phoenix/server/static/assets/pages-CEJgMVKU.js → arize_phoenix-12.9.0/src/phoenix/server/static/assets/pages-GVybXa_W.js +489 -486
- arize_phoenix-12.9.0/src/phoenix/version.py +1 -0
- arize_phoenix-12.8.0/src/phoenix/server/api/types/Annotation.py +0 -31
- arize_phoenix-12.8.0/src/phoenix/server/api/types/ApiKey.py +0 -27
- arize_phoenix-12.8.0/src/phoenix/server/api/types/DatasetLabel.py +0 -23
- arize_phoenix-12.8.0/src/phoenix/server/api/types/DatasetSplit.py +0 -32
- arize_phoenix-12.8.0/src/phoenix/server/api/types/DatasetVersion.py +0 -14
- arize_phoenix-12.8.0/src/phoenix/server/api/types/DocumentAnnotation.py +0 -92
- arize_phoenix-12.8.0/src/phoenix/server/api/types/ExperimentRun.py +0 -166
- arize_phoenix-12.8.0/src/phoenix/server/api/types/ExperimentRunAnnotation.py +0 -56
- arize_phoenix-12.8.0/src/phoenix/server/api/types/ModelInterface.py +0 -11
- arize_phoenix-12.8.0/src/phoenix/server/api/types/PlaygroundModel.py +0 -10
- arize_phoenix-12.8.0/src/phoenix/server/api/types/ProjectSessionAnnotation.py +0 -68
- arize_phoenix-12.8.0/src/phoenix/server/api/types/PromptLabel.py +0 -24
- arize_phoenix-12.8.0/src/phoenix/server/api/types/PromptVersionTag.py +0 -40
- arize_phoenix-12.8.0/src/phoenix/server/api/types/SpanAnnotation.py +0 -67
- arize_phoenix-12.8.0/src/phoenix/server/api/types/SystemApiKey.py +0 -9
- arize_phoenix-12.8.0/src/phoenix/server/api/types/TraceAnnotation.py +0 -71
- arize_phoenix-12.8.0/src/phoenix/server/api/types/User.py +0 -70
- arize_phoenix-12.8.0/src/phoenix/server/api/types/UserApiKey.py +0 -45
- arize_phoenix-12.8.0/src/phoenix/version.py +0 -1
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/.gitignore +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/IP_NOTICE +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/LICENSE +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/README.md +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/__init__.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/auth.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/core/__init__.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/core/embedding_dimension.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/core/model.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/core/model_schema.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/core/model_schema_adapter.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/datetime_utils.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/db/README.md +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/db/__init__.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/db/alembic.ini +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/db/bulk_inserter.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/db/constants.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/db/enums.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/db/facilitator.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/db/helpers.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/db/insertion/__init__.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/db/insertion/constants.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/db/insertion/dataset.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/db/insertion/document_annotation.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/db/insertion/evaluation.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/db/insertion/helpers.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/db/insertion/session_annotation.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/db/insertion/span.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/db/insertion/span_annotation.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/db/insertion/trace_annotation.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/db/insertion/types.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/db/migrate.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/db/migrations/__init__.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/db/migrations/data_migration_scripts/__init__.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/db/migrations/data_migration_scripts/populate_project_sessions.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/db/migrations/env.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/db/migrations/script.py.mako +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/db/migrations/versions/01a8342c9cdf_add_user_id_on_datasets.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/db/migrations/versions/0df286449799_add_session_annotations_table.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/db/migrations/versions/10460e46d750_datasets.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/db/migrations/versions/272b66ff50f8_drop_single_indices.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/db/migrations/versions/2f9d1a65945f_annotation_config_migration.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/db/migrations/versions/3be8647b87d8_add_token_columns_to_spans_table.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/db/migrations/versions/4ded9e43755f_create_project_sessions_table.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/db/migrations/versions/58228d933c91_dataset_labels.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/db/migrations/versions/699f655af132_experiment_tags.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/db/migrations/versions/6a88424799fe_update_users_with_auth_method.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/db/migrations/versions/735d3d93c33e_add_composite_indices.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/db/migrations/versions/8a3764fe7f1a_change_jsonb_to_json_for_prompts.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/db/migrations/versions/a20694b15f82_cost.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/db/migrations/versions/ab513d89518b_add_user_id_on_dataset_versions.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/db/migrations/versions/bb8139330879_create_project_trace_retention_policies_table.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/db/migrations/versions/bc8fea3c2bc8_add_prompt_tables.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/db/migrations/versions/cd164e83824f_users_and_tokens.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/db/migrations/versions/cf03bd6bae1d_init.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/db/migrations/versions/d0690a79ea51_users_on_experiments.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/db/migrations/versions/deb2c81c0bb2_dataset_splits.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/db/migrations/versions/e76cbd66ffc3_add_experiments_dataset_examples.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/db/models.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/db/types/__init__.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/db/types/annotation_configs.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/db/types/db_models.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/db/types/identifier.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/db/types/model_provider.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/db/types/token_price_customization.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/db/types/trace_retention.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/exceptions.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/experiments/__init__.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/experiments/evaluators/__init__.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/experiments/evaluators/base.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/experiments/evaluators/code_evaluators.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/experiments/evaluators/llm_evaluators.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/experiments/evaluators/utils.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/experiments/functions.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/experiments/tracing.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/experiments/types.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/experiments/utils.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/inferences/__init__.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/inferences/errors.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/inferences/fixtures.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/inferences/inferences.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/inferences/schema.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/inferences/validation.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/logging/__init__.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/logging/_config.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/logging/_filter.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/logging/_formatter.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/metrics/README.md +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/metrics/__init__.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/metrics/binning.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/metrics/metrics.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/metrics/mixins.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/metrics/retrieval_metrics.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/metrics/timeseries.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/metrics/wrappers.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/pointcloud/__init__.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/pointcloud/clustering.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/pointcloud/pointcloud.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/pointcloud/projectors.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/pointcloud/umap_parameters.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/py.typed +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/__init__.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/README.md +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/__init__.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/auth.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/auth_messages.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/dataloaders/annotation_configs_by_project.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/dataloaders/annotation_summaries.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/dataloaders/average_experiment_repeated_run_group_latency.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/dataloaders/average_experiment_run_latency.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/dataloaders/cache/__init__.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/dataloaders/cache/two_tier_cache.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/dataloaders/dataset_dataset_splits.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/dataloaders/dataset_example_revisions.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/dataloaders/dataset_example_spans.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/dataloaders/dataset_example_splits.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/dataloaders/dataset_examples_and_versions_by_experiment_run.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/dataloaders/dataset_labels.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/dataloaders/document_evaluation_summaries.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/dataloaders/document_evaluations.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/dataloaders/document_retrieval_metrics.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/dataloaders/experiment_annotation_summaries.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/dataloaders/experiment_dataset_splits.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/dataloaders/experiment_error_rates.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/dataloaders/experiment_repeated_run_group_annotation_summaries.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/dataloaders/experiment_run_annotations.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/dataloaders/experiment_run_counts.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/dataloaders/experiment_sequence_number.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/dataloaders/last_used_times_by_generative_model_id.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/dataloaders/latency_ms_quantile.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/dataloaders/min_start_or_max_end_times.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/dataloaders/num_child_spans.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/dataloaders/num_spans_per_trace.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/dataloaders/project_by_name.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/dataloaders/project_ids_by_trace_retention_policy_id.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/dataloaders/prompt_version_sequence_number.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/dataloaders/record_counts.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/dataloaders/session_annotations_by_session.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/dataloaders/session_io.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/dataloaders/session_num_traces.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/dataloaders/session_num_traces_with_error.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/dataloaders/session_token_usages.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/dataloaders/session_trace_latency_ms_quantile.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/dataloaders/span_annotations.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/dataloaders/span_by_id.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/dataloaders/span_cost_by_span.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/dataloaders/span_cost_detail_summary_entries_by_generative_model.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/dataloaders/span_cost_detail_summary_entries_by_project_session.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/dataloaders/span_cost_detail_summary_entries_by_span.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/dataloaders/span_cost_detail_summary_entries_by_trace.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/dataloaders/span_cost_details_by_span_cost.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_experiment.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_experiment_repeated_run_group.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_experiment_run.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_generative_model.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_project.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_project_session.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_trace.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/dataloaders/span_dataset_examples.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/dataloaders/span_descendants.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/dataloaders/span_projects.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/dataloaders/table_fields.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/dataloaders/token_counts.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/dataloaders/trace_annotations_by_trace.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/dataloaders/trace_by_trace_ids.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/dataloaders/trace_retention_policy_id_by_project_id.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/dataloaders/trace_root_spans.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/dataloaders/types.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/dataloaders/user_roles.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/dataloaders/users.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/exceptions.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/helpers/__init__.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/helpers/annotations.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/helpers/dataset_helpers.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/helpers/experiment_run_filters.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/helpers/playground_registry.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/helpers/playground_spans.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/helpers/playground_users.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/helpers/prompts/__init__.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/helpers/prompts/conversions/__init__.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/helpers/prompts/conversions/anthropic.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/helpers/prompts/conversions/aws.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/helpers/prompts/conversions/openai.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/helpers/prompts/models.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/input_types/AddExamplesToDatasetInput.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/input_types/AddSpansToDatasetInput.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/input_types/AnnotationFilter.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/input_types/ChatCompletionInput.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/input_types/ChatCompletionMessageInput.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/input_types/ClearProjectInput.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/input_types/ClusterInput.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/input_types/Coordinates.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/input_types/CreateDatasetInput.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/input_types/CreateProjectInput.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/input_types/CreateProjectSessionAnnotationInput.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/input_types/CreateSpanAnnotationInput.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/input_types/CreateTraceAnnotationInput.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/input_types/DataQualityMetricInput.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/input_types/DatasetExampleInput.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/input_types/DatasetFilter.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/input_types/DatasetSort.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/input_types/DatasetVersionSort.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/input_types/DeleteAnnotationsInput.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/input_types/DeleteDatasetExamplesInput.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/input_types/DeleteDatasetInput.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/input_types/DeleteExperimentsInput.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/input_types/DimensionFilter.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/input_types/DimensionInput.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/input_types/ExperimentRunSort.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/input_types/GenerativeCredentialInput.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/input_types/GenerativeModelInput.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/input_types/Granularity.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/input_types/InvocationParameters.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/input_types/PatchAnnotationInput.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/input_types/PatchDatasetExamplesInput.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/input_types/PatchDatasetInput.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/input_types/PerformanceMetricInput.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/input_types/ProjectFilter.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/input_types/ProjectSessionSort.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/input_types/ProjectSort.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/input_types/PromptFilter.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/input_types/PromptTemplateOptions.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/input_types/SpanAnnotationSort.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/input_types/SpanSort.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/input_types/TimeBinConfig.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/input_types/TimeRange.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/input_types/TraceAnnotationSort.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/input_types/UpdateAnnotationInput.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/input_types/UserRoleInput.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/input_types/__init__.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/interceptor.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/mutations/__init__.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/mutations/experiment_mutations.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/mutations/export_events_mutations.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/mutations/project_mutations.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/mutations/project_trace_retention_policy_mutations.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/mutations/trace_mutations.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/openapi/__init__.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/openapi/main.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/openapi/schema.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/routers/__init__.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/routers/auth.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/routers/embeddings.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/routers/oauth2.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/routers/utils.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/routers/v1/__init__.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/routers/v1/annotation_configs.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/routers/v1/annotations.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/routers/v1/datasets.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/routers/v1/documents.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/routers/v1/evaluations.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/routers/v1/experiment_evaluations.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/routers/v1/experiment_runs.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/routers/v1/experiments.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/routers/v1/models.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/routers/v1/projects.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/routers/v1/prompts.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/routers/v1/sessions.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/routers/v1/spans.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/routers/v1/traces.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/routers/v1/users.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/routers/v1/utils.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/schema.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/AnnotationConfig.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/AnnotationSource.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/AnnotationSummary.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/AnnotatorKind.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/AuthMethod.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/ChatCompletionMessageRole.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/ChatCompletionSubscriptionPayload.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/Cluster.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/CostBreakdown.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/CreateDatasetPayload.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/CronExpression.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/DataQualityMetric.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/DatasetExampleRevision.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/DatasetExperimentAnnotationSummary.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/DatasetValues.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/Dimension.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/DimensionDataType.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/DimensionShape.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/DimensionType.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/DimensionWithValue.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/DocumentEvaluationSummary.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/DocumentRetrievalMetrics.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/EmbeddingDimension.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/EmbeddingMetadata.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/EvaluationSummary.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/Event.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/EventMetadata.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/ExampleRevisionInterface.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/ExperimentAnnotationSummary.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/ExperimentComparison.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/ExperimentRepeatedRunGroupAnnotationSummary.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/ExportedFile.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/Functionality.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/GenerativeProvider.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/Identifier.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/InferenceModel.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/Inferences.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/InferencesRole.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/LabelFraction.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/MimeType.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/NumericRange.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/PerformanceMetric.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/PromptResponse.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/PromptVersionTemplate.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/ResponseFormat.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/Retrieval.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/ScalarDriftMetricEnum.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/Segments.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/ServerStatus.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/SortDir.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/SpanCostDetailSummaryEntry.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/SpanCostSummary.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/SpanIOValue.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/TimeSeries.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/TokenCountPromptDetails.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/TokenPrice.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/TokenUsage.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/ToolDefinition.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/UMAPPoints.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/UserRole.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/ValidationResult.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/VectorDriftMetricEnum.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/__init__.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/node.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/types/pagination.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/utils.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/authorization.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/bearer_auth.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/cost_tracking/__init__.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/cost_tracking/cost_details_calculator.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/cost_tracking/cost_model_lookup.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/cost_tracking/helpers.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/cost_tracking/model_cost_manifest.json +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/cost_tracking/regex_specificity.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/cost_tracking/token_cost_calculator.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/daemons/__init__.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/daemons/db_disk_usage_monitor.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/daemons/generative_model_store.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/daemons/span_cost_calculator.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/dml_event.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/dml_event_handler.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/email/__init__.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/email/sender.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/email/templates/__init__.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/email/templates/db_disk_usage_notification.html +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/email/templates/password_reset.html +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/email/templates/welcome.html +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/email/types.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/experiments/__init__.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/experiments/utils.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/grpc_server.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/jwt_store.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/main.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/middleware/__init__.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/middleware/gzip.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/oauth2.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/openapi/__init__.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/prometheus.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/rate_limiters.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/retention.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/session_filters.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/static/apple-touch-icon-114x114.png +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/static/apple-touch-icon-120x120.png +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/static/apple-touch-icon-144x144.png +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/static/apple-touch-icon-152x152.png +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/static/apple-touch-icon-180x180.png +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/static/apple-touch-icon-72x72.png +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/static/apple-touch-icon-76x76.png +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/static/apple-touch-icon.png +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/static/assets/vendor-BGzfc4EU.css +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/static/assets/vendor-D-csRHGZ.js +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/static/assets/vendor-arizeai-BJLCG_Gc.js +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/static/assets/vendor-codemirror-Cr963DyP.js +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/static/assets/vendor-recharts-DgmPLgIp.js +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/static/assets/vendor-shiki-wYOt1s7u.js +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/static/assets/vendor-three-BtCyLs1w.js +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/static/favicon.ico +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/static/modernizr.js +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/telemetry.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/templates/__init__.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/templates/index.html +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/thread_server.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/types.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/utils.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/services.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/session/__init__.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/session/client.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/session/data_extractor.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/session/evaluation.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/session/session.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/settings.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/trace/__init__.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/trace/attributes.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/trace/dsl/README.md +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/trace/dsl/__init__.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/trace/dsl/filter.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/trace/dsl/helpers.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/trace/dsl/query.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/trace/errors.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/trace/evaluation_conventions.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/trace/exporter.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/trace/fixtures.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/trace/otel.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/trace/projects.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/trace/schemas.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/trace/span_evaluations.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/trace/span_json_decoder.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/trace/span_json_encoder.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/trace/trace_dataset.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/trace/utils.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/trace/v1/__init__.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/trace/v1/evaluation_pb2.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/trace/v1/evaluation_pb2.pyi +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/utilities/__init__.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/utilities/client.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/utilities/error_handling.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/utilities/json.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/utilities/logging.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/utilities/project.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/utilities/re.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/utilities/span_store.py +0 -0
- {arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/utilities/template_formatters.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: arize-phoenix
|
|
3
|
-
Version: 12.
|
|
3
|
+
Version: 12.9.0
|
|
4
4
|
Summary: AI Observability and Evaluation
|
|
5
5
|
Project-URL: Documentation, https://arize.com/docs/phoenix/
|
|
6
6
|
Project-URL: Issues, https://github.com/Arize-ai/phoenix/issues
|
|
@@ -59,6 +59,8 @@ Requires-Dist: tqdm
|
|
|
59
59
|
Requires-Dist: typing-extensions>=4.6
|
|
60
60
|
Requires-Dist: uvicorn
|
|
61
61
|
Requires-Dist: wrapt<2,>=1.17.2
|
|
62
|
+
Provides-Extra: aws
|
|
63
|
+
Requires-Dist: boto3; extra == 'aws'
|
|
62
64
|
Provides-Extra: container
|
|
63
65
|
Requires-Dist: aiohttp; extra == 'container'
|
|
64
66
|
Requires-Dist: anthropic>=0.49.0; extra == 'container'
|
|
@@ -91,16 +91,44 @@ Used with PHOENIX_POSTGRES_HOST to specify the port to use for the PostgreSQL da
|
|
|
91
91
|
ENV_PHOENIX_POSTGRES_USER = "PHOENIX_POSTGRES_USER"
|
|
92
92
|
"""
|
|
93
93
|
Used with PHOENIX_POSTGRES_HOST to specify the user to use for the PostgreSQL database (required).
|
|
94
|
+
|
|
95
|
+
When using AWS RDS IAM authentication (PHOENIX_POSTGRES_USE_AWS_IAM_AUTH=true), this should be
|
|
96
|
+
set to the IAM-enabled database username configured in your RDS/Aurora instance.
|
|
94
97
|
"""
|
|
95
98
|
ENV_PHOENIX_POSTGRES_PASSWORD = "PHOENIX_POSTGRES_PASSWORD"
|
|
96
99
|
"""
|
|
97
100
|
Used with PHOENIX_POSTGRES_HOST to specify the password to use for the PostgreSQL database
|
|
98
|
-
(required).
|
|
101
|
+
(required, unless PHOENIX_POSTGRES_USE_AWS_IAM_AUTH is enabled).
|
|
102
|
+
|
|
103
|
+
When using AWS RDS IAM authentication (PHOENIX_POSTGRES_USE_AWS_IAM_AUTH=true), this password
|
|
104
|
+
is NOT used. Instead, authentication tokens are generated dynamically using AWS IAM credentials.
|
|
99
105
|
"""
|
|
100
106
|
ENV_PHOENIX_POSTGRES_DB = "PHOENIX_POSTGRES_DB"
|
|
101
107
|
"""
|
|
102
108
|
Used with PHOENIX_POSTGRES_HOST to specify the database to use for the PostgreSQL database.
|
|
103
109
|
"""
|
|
110
|
+
ENV_PHOENIX_POSTGRES_USE_AWS_IAM_AUTH = "PHOENIX_POSTGRES_USE_AWS_IAM_AUTH"
|
|
111
|
+
"""
|
|
112
|
+
Enable AWS RDS IAM database authentication. When enabled, Phoenix will use AWS IAM credentials
|
|
113
|
+
to generate short-lived authentication tokens instead of using a static password.
|
|
114
|
+
|
|
115
|
+
This requires:
|
|
116
|
+
- boto3 to be installed: pip install 'arize-phoenix[aws]'
|
|
117
|
+
- AWS credentials configured (via environment, ~/.aws/credentials, or IAM role)
|
|
118
|
+
- AWS region configured via standard AWS methods
|
|
119
|
+
- The database user to be configured for IAM authentication in RDS/Aurora
|
|
120
|
+
- SSL to be enabled (required by AWS RDS IAM auth)
|
|
121
|
+
|
|
122
|
+
When enabled, PHOENIX_POSTGRES_PASSWORD should NOT be set.
|
|
123
|
+
"""
|
|
124
|
+
ENV_PHOENIX_POSTGRES_AWS_IAM_TOKEN_LIFETIME_SECONDS = (
|
|
125
|
+
"PHOENIX_POSTGRES_AWS_IAM_TOKEN_LIFETIME_SECONDS"
|
|
126
|
+
)
|
|
127
|
+
"""
|
|
128
|
+
Token lifetime in seconds for connection pool recycling when using AWS RDS IAM authentication.
|
|
129
|
+
AWS RDS auth tokens are valid for 15 minutes. This should be set slightly lower to ensure
|
|
130
|
+
tokens are refreshed before expiration. Defaults to 840 seconds (14 minutes).
|
|
131
|
+
"""
|
|
104
132
|
ENV_PHOENIX_SQL_DATABASE_SCHEMA = "PHOENIX_SQL_DATABASE_SCHEMA"
|
|
105
133
|
"""
|
|
106
134
|
The schema to use for the PostgresSQL database. (This is ignored for SQLite.)
|
|
@@ -1400,18 +1428,36 @@ def get_env_postgres_connection_str() -> Optional[str]:
|
|
|
1400
1428
|
"""
|
|
1401
1429
|
Build PostgreSQL connection string from environment variables.
|
|
1402
1430
|
"""
|
|
1403
|
-
|
|
1404
|
-
|
|
1405
|
-
|
|
1406
|
-
|
|
1407
|
-
|
|
1431
|
+
pg_host = getenv(ENV_PHOENIX_POSTGRES_HOST, "").rstrip("/")
|
|
1432
|
+
pg_user = getenv(ENV_PHOENIX_POSTGRES_USER)
|
|
1433
|
+
pg_password = getenv(ENV_PHOENIX_POSTGRES_PASSWORD)
|
|
1434
|
+
use_iam_auth = _bool_val(ENV_PHOENIX_POSTGRES_USE_AWS_IAM_AUTH, False)
|
|
1435
|
+
|
|
1436
|
+
if not (pg_host and pg_user):
|
|
1408
1437
|
return None
|
|
1438
|
+
|
|
1439
|
+
if use_iam_auth:
|
|
1440
|
+
if pg_password:
|
|
1441
|
+
raise ValueError(
|
|
1442
|
+
f"The environment variable {ENV_PHOENIX_POSTGRES_PASSWORD} is set but will be "
|
|
1443
|
+
"ignored when using AWS RDS IAM authentication "
|
|
1444
|
+
f"({ENV_PHOENIX_POSTGRES_USE_AWS_IAM_AUTH}=true). Authentication tokens will be "
|
|
1445
|
+
"generated using AWS credentials."
|
|
1446
|
+
)
|
|
1447
|
+
connection_str = f"postgresql://{quote(pg_user)}@{pg_host}"
|
|
1448
|
+
else:
|
|
1449
|
+
if not pg_password:
|
|
1450
|
+
raise ValueError(
|
|
1451
|
+
f"The environment variable {ENV_PHOENIX_POSTGRES_PASSWORD} is not set. "
|
|
1452
|
+
"Please set it to the password for the PostgreSQL database."
|
|
1453
|
+
)
|
|
1454
|
+
encoded_user = quote(pg_user)
|
|
1455
|
+
encoded_password = quote(pg_password)
|
|
1456
|
+
connection_str = f"postgresql://{encoded_user}:{encoded_password}@{pg_host}"
|
|
1457
|
+
|
|
1409
1458
|
pg_port = getenv(ENV_PHOENIX_POSTGRES_PORT)
|
|
1410
1459
|
pg_db = getenv(ENV_PHOENIX_POSTGRES_DB)
|
|
1411
1460
|
|
|
1412
|
-
encoded_user = quote(pg_user)
|
|
1413
|
-
encoded_password = quote(pg_password)
|
|
1414
|
-
connection_str = f"postgresql://{encoded_user}:{encoded_password}@{pg_host}"
|
|
1415
1461
|
if pg_port:
|
|
1416
1462
|
connection_str = f"{connection_str}:{pg_port}"
|
|
1417
1463
|
if pg_db:
|
|
@@ -1968,6 +2014,7 @@ def verify_server_environment_variables() -> None:
|
|
|
1968
2014
|
get_env_database_usage_insertion_blocking_threshold_percentage()
|
|
1969
2015
|
get_env_max_spans_queue_size()
|
|
1970
2016
|
validate_env_support_email()
|
|
2017
|
+
_validate_iam_auth_config()
|
|
1971
2018
|
|
|
1972
2019
|
# Notify users about deprecated environment variables if they are being used.
|
|
1973
2020
|
if os.getenv("PHOENIX_ENABLE_WEBSOCKETS") is not None:
|
|
@@ -2026,3 +2073,78 @@ def get_env_allow_external_resources() -> bool:
|
|
|
2026
2073
|
Defaults to True if not set.
|
|
2027
2074
|
"""
|
|
2028
2075
|
return _bool_val(ENV_PHOENIX_ALLOW_EXTERNAL_RESOURCES, True)
|
|
2076
|
+
|
|
2077
|
+
|
|
2078
|
+
def get_env_postgres_use_iam_auth() -> bool:
|
|
2079
|
+
"""
|
|
2080
|
+
Gets whether AWS RDS IAM authentication is enabled for PostgreSQL connections.
|
|
2081
|
+
|
|
2082
|
+
Returns:
|
|
2083
|
+
bool: True if IAM authentication should be used, False otherwise (default)
|
|
2084
|
+
"""
|
|
2085
|
+
return _bool_val(ENV_PHOENIX_POSTGRES_USE_AWS_IAM_AUTH, False)
|
|
2086
|
+
|
|
2087
|
+
|
|
2088
|
+
def get_env_postgres_iam_token_lifetime() -> int:
|
|
2089
|
+
"""
|
|
2090
|
+
Gets the token lifetime in seconds for AWS RDS IAM authentication pool recycling.
|
|
2091
|
+
|
|
2092
|
+
AWS RDS IAM tokens are valid for 15 minutes (900 seconds). This value should be
|
|
2093
|
+
set slightly lower to ensure connections are recycled before token expiration.
|
|
2094
|
+
|
|
2095
|
+
Returns:
|
|
2096
|
+
int: Token lifetime in seconds (default: 840 = 14 minutes)
|
|
2097
|
+
"""
|
|
2098
|
+
lifetime = _int_val(ENV_PHOENIX_POSTGRES_AWS_IAM_TOKEN_LIFETIME_SECONDS, 840)
|
|
2099
|
+
if lifetime <= 0:
|
|
2100
|
+
raise ValueError(
|
|
2101
|
+
f"{ENV_PHOENIX_POSTGRES_AWS_IAM_TOKEN_LIFETIME_SECONDS} must be a positive integer. "
|
|
2102
|
+
f"Got: {lifetime}"
|
|
2103
|
+
)
|
|
2104
|
+
if lifetime > 900:
|
|
2105
|
+
logger.warning(
|
|
2106
|
+
f"{ENV_PHOENIX_POSTGRES_AWS_IAM_TOKEN_LIFETIME_SECONDS} is set to {lifetime} seconds, "
|
|
2107
|
+
f"which exceeds AWS RDS IAM token validity (900 seconds / 15 minutes). "
|
|
2108
|
+
f"Consider setting it to 840 seconds (14 minutes) or less."
|
|
2109
|
+
)
|
|
2110
|
+
return lifetime
|
|
2111
|
+
|
|
2112
|
+
|
|
2113
|
+
def _validate_iam_auth_config() -> None:
|
|
2114
|
+
"""
|
|
2115
|
+
Validate AWS RDS IAM authentication configuration if enabled.
|
|
2116
|
+
|
|
2117
|
+
Raises:
|
|
2118
|
+
ImportError: If boto3 is not installed when IAM auth is enabled
|
|
2119
|
+
ValueError: If configuration is invalid
|
|
2120
|
+
"""
|
|
2121
|
+
if not get_env_postgres_use_iam_auth():
|
|
2122
|
+
return
|
|
2123
|
+
|
|
2124
|
+
pg_host = getenv(ENV_PHOENIX_POSTGRES_HOST)
|
|
2125
|
+
if not pg_host:
|
|
2126
|
+
return
|
|
2127
|
+
|
|
2128
|
+
try:
|
|
2129
|
+
import boto3 # type: ignore # noqa: F401
|
|
2130
|
+
except ImportError:
|
|
2131
|
+
raise ImportError(
|
|
2132
|
+
f"boto3 is required when {ENV_PHOENIX_POSTGRES_USE_AWS_IAM_AUTH} is enabled. "
|
|
2133
|
+
"Install it with: pip install 'arize-phoenix[aws]'"
|
|
2134
|
+
)
|
|
2135
|
+
|
|
2136
|
+
if not getenv(ENV_PHOENIX_POSTGRES_USER):
|
|
2137
|
+
raise ValueError(
|
|
2138
|
+
f"{ENV_PHOENIX_POSTGRES_USER} must be set when using AWS RDS IAM authentication"
|
|
2139
|
+
)
|
|
2140
|
+
|
|
2141
|
+
try:
|
|
2142
|
+
client = boto3.client("sts") # pyright: ignore
|
|
2143
|
+
client.get_caller_identity() # pyright: ignore
|
|
2144
|
+
logger.info("✓ AWS credentials validated for RDS IAM authentication")
|
|
2145
|
+
except Exception as e:
|
|
2146
|
+
raise ValueError(
|
|
2147
|
+
f"Failed to validate AWS credentials for RDS IAM authentication: {e}. "
|
|
2148
|
+
"Ensure AWS credentials are configured via environment variables, "
|
|
2149
|
+
"~/.aws/credentials, or IAM role."
|
|
2150
|
+
)
|
|
@@ -5,7 +5,7 @@ import logging
|
|
|
5
5
|
from collections.abc import Callable
|
|
6
6
|
from enum import Enum
|
|
7
7
|
from sqlite3 import Connection
|
|
8
|
-
from typing import Any
|
|
8
|
+
from typing import Any, Optional
|
|
9
9
|
|
|
10
10
|
import aiosqlite
|
|
11
11
|
import numpy as np
|
|
@@ -168,29 +168,142 @@ def aio_postgresql_engine(
|
|
|
168
168
|
log_to_stdout: bool = False,
|
|
169
169
|
log_migrations_to_stdout: bool = True,
|
|
170
170
|
) -> AsyncEngine:
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
connect_args=asyncpg_args,
|
|
175
|
-
echo=log_to_stdout,
|
|
176
|
-
json_serializer=_dumps,
|
|
171
|
+
from phoenix.config import (
|
|
172
|
+
get_env_postgres_iam_token_lifetime,
|
|
173
|
+
get_env_postgres_use_iam_auth,
|
|
177
174
|
)
|
|
175
|
+
|
|
176
|
+
use_iam_auth = get_env_postgres_use_iam_auth()
|
|
177
|
+
|
|
178
|
+
asyncpg_url, asyncpg_args = get_pg_config(url, "asyncpg", enforce_ssl=use_iam_auth)
|
|
179
|
+
|
|
180
|
+
iam_config: Optional[dict[str, Any]] = None
|
|
181
|
+
token_lifetime: int = 0
|
|
182
|
+
if use_iam_auth:
|
|
183
|
+
iam_config = _extract_iam_config_from_url(url)
|
|
184
|
+
token_lifetime = get_env_postgres_iam_token_lifetime()
|
|
185
|
+
|
|
186
|
+
async def iam_async_creator() -> Any:
|
|
187
|
+
import asyncpg # type: ignore
|
|
188
|
+
|
|
189
|
+
from phoenix.db.iam_auth import generate_aws_rds_token
|
|
190
|
+
|
|
191
|
+
assert iam_config is not None
|
|
192
|
+
token = generate_aws_rds_token(
|
|
193
|
+
host=iam_config["host"],
|
|
194
|
+
port=iam_config["port"],
|
|
195
|
+
user=iam_config["user"],
|
|
196
|
+
)
|
|
197
|
+
|
|
198
|
+
conn_kwargs = {
|
|
199
|
+
"host": iam_config["host"],
|
|
200
|
+
"port": iam_config["port"],
|
|
201
|
+
"user": iam_config["user"],
|
|
202
|
+
"password": token,
|
|
203
|
+
"database": iam_config["database"],
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
if asyncpg_args:
|
|
207
|
+
conn_kwargs.update(asyncpg_args)
|
|
208
|
+
|
|
209
|
+
return await asyncpg.connect(**conn_kwargs)
|
|
210
|
+
|
|
211
|
+
engine = create_async_engine(
|
|
212
|
+
url=asyncpg_url,
|
|
213
|
+
async_creator=iam_async_creator,
|
|
214
|
+
echo=log_to_stdout,
|
|
215
|
+
json_serializer=_dumps,
|
|
216
|
+
pool_recycle=token_lifetime,
|
|
217
|
+
)
|
|
218
|
+
else:
|
|
219
|
+
engine = create_async_engine(
|
|
220
|
+
url=asyncpg_url,
|
|
221
|
+
connect_args=asyncpg_args,
|
|
222
|
+
echo=log_to_stdout,
|
|
223
|
+
json_serializer=_dumps,
|
|
224
|
+
)
|
|
225
|
+
|
|
178
226
|
if not migrate:
|
|
179
227
|
return engine
|
|
180
228
|
|
|
181
|
-
psycopg_url, psycopg_args = get_pg_config(url, "psycopg")
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
229
|
+
psycopg_url, psycopg_args = get_pg_config(url, "psycopg", enforce_ssl=use_iam_auth)
|
|
230
|
+
|
|
231
|
+
if use_iam_auth:
|
|
232
|
+
assert iam_config is not None
|
|
233
|
+
|
|
234
|
+
def iam_sync_creator() -> Any:
|
|
235
|
+
import psycopg
|
|
236
|
+
|
|
237
|
+
from phoenix.db.iam_auth import generate_aws_rds_token
|
|
238
|
+
|
|
239
|
+
token = generate_aws_rds_token(
|
|
240
|
+
host=iam_config["host"],
|
|
241
|
+
port=iam_config["port"],
|
|
242
|
+
user=iam_config["user"],
|
|
243
|
+
)
|
|
244
|
+
|
|
245
|
+
conn_kwargs = {
|
|
246
|
+
"host": iam_config["host"],
|
|
247
|
+
"port": iam_config["port"],
|
|
248
|
+
"user": iam_config["user"],
|
|
249
|
+
"password": token,
|
|
250
|
+
"dbname": iam_config["database"],
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
if psycopg_args:
|
|
254
|
+
conn_kwargs.update(psycopg_args)
|
|
255
|
+
|
|
256
|
+
return psycopg.connect(**conn_kwargs)
|
|
257
|
+
|
|
258
|
+
sync_engine = sqlalchemy.create_engine(
|
|
259
|
+
url=psycopg_url,
|
|
260
|
+
creator=iam_sync_creator,
|
|
261
|
+
echo=log_migrations_to_stdout,
|
|
262
|
+
json_serializer=_dumps,
|
|
263
|
+
pool_recycle=token_lifetime,
|
|
264
|
+
)
|
|
265
|
+
else:
|
|
266
|
+
sync_engine = sqlalchemy.create_engine(
|
|
267
|
+
url=psycopg_url,
|
|
268
|
+
connect_args=psycopg_args,
|
|
269
|
+
echo=log_migrations_to_stdout,
|
|
270
|
+
json_serializer=_dumps,
|
|
271
|
+
)
|
|
272
|
+
|
|
188
273
|
if schema := get_env_database_schema():
|
|
189
274
|
event.listen(sync_engine, "connect", set_postgresql_search_path(schema))
|
|
190
275
|
migrate_in_thread(sync_engine)
|
|
191
276
|
return engine
|
|
192
277
|
|
|
193
278
|
|
|
279
|
+
def _extract_iam_config_from_url(url: URL) -> dict[str, Any]:
|
|
280
|
+
"""Extract connection parameters needed for IAM authentication from a SQLAlchemy URL.
|
|
281
|
+
|
|
282
|
+
Args:
|
|
283
|
+
url: SQLAlchemy database URL
|
|
284
|
+
|
|
285
|
+
Returns:
|
|
286
|
+
Dictionary with host, port, user, and database
|
|
287
|
+
"""
|
|
288
|
+
host = url.host
|
|
289
|
+
if not host:
|
|
290
|
+
raise ValueError("Database host is required for IAM authentication")
|
|
291
|
+
|
|
292
|
+
port = url.port or 5432
|
|
293
|
+
user = url.username
|
|
294
|
+
if not user:
|
|
295
|
+
raise ValueError("Database user is required for IAM authentication")
|
|
296
|
+
|
|
297
|
+
database = url.database or "postgres"
|
|
298
|
+
|
|
299
|
+
return {
|
|
300
|
+
"host": host,
|
|
301
|
+
"port": port,
|
|
302
|
+
"user": user,
|
|
303
|
+
"database": database,
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
|
|
194
307
|
def _dumps(obj: Any) -> str:
|
|
195
308
|
return orjson.dumps(obj, default=_default).decode()
|
|
196
309
|
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import logging
|
|
4
|
+
|
|
5
|
+
logger = logging.getLogger(__name__)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def generate_aws_rds_token(
|
|
9
|
+
host: str,
|
|
10
|
+
port: int,
|
|
11
|
+
user: str,
|
|
12
|
+
) -> str:
|
|
13
|
+
"""Generate an AWS RDS IAM authentication token.
|
|
14
|
+
|
|
15
|
+
This function creates a short-lived (15 minutes) authentication token for connecting
|
|
16
|
+
to AWS RDS/Aurora PostgreSQL instances using IAM database authentication.
|
|
17
|
+
|
|
18
|
+
The AWS region is automatically resolved using boto3.
|
|
19
|
+
|
|
20
|
+
Args:
|
|
21
|
+
host: The database hostname (e.g., 'mydb.abc123.us-west-2.rds.amazonaws.com')
|
|
22
|
+
port: The database port (typically 5432 for PostgreSQL)
|
|
23
|
+
user: The database username (must match an IAM-enabled database user)
|
|
24
|
+
|
|
25
|
+
Returns:
|
|
26
|
+
A temporary authentication token string to use as the database password
|
|
27
|
+
|
|
28
|
+
Raises:
|
|
29
|
+
ImportError: If boto3 is not installed
|
|
30
|
+
Exception: If AWS credentials/region are not configured or token generation fails
|
|
31
|
+
|
|
32
|
+
Example:
|
|
33
|
+
>>> token = generate_aws_rds_token(
|
|
34
|
+
... host='mydb.us-west-2.rds.amazonaws.com',
|
|
35
|
+
... port=5432,
|
|
36
|
+
... user='myuser'
|
|
37
|
+
... )
|
|
38
|
+
"""
|
|
39
|
+
try:
|
|
40
|
+
import boto3 # type: ignore
|
|
41
|
+
except ImportError as e:
|
|
42
|
+
raise ImportError(
|
|
43
|
+
"boto3 is required for AWS RDS IAM authentication. "
|
|
44
|
+
"Install it with: pip install 'arize-phoenix[aws]'"
|
|
45
|
+
) from e
|
|
46
|
+
|
|
47
|
+
try:
|
|
48
|
+
client = boto3.client("rds")
|
|
49
|
+
|
|
50
|
+
logger.debug(f"Generating AWS RDS IAM auth token for user '{user}' at {host}:{port}")
|
|
51
|
+
token = client.generate_db_auth_token( # pyright: ignore
|
|
52
|
+
DBHostname=host,
|
|
53
|
+
Port=port,
|
|
54
|
+
DBUsername=user,
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
return str(token) # pyright: ignore
|
|
58
|
+
|
|
59
|
+
except Exception as e:
|
|
60
|
+
logger.error(
|
|
61
|
+
f"Failed to generate AWS RDS IAM authentication token: {e}. "
|
|
62
|
+
"Ensure AWS credentials are configured and have 'rds-db:connect' permission."
|
|
63
|
+
)
|
|
64
|
+
raise
|
|
@@ -10,12 +10,14 @@ from typing_extensions import assert_never
|
|
|
10
10
|
def get_pg_config(
|
|
11
11
|
url: URL,
|
|
12
12
|
driver: Literal["psycopg", "asyncpg"],
|
|
13
|
+
enforce_ssl: bool = False,
|
|
13
14
|
) -> tuple[URL, dict[str, Any]]:
|
|
14
15
|
"""Convert SQLAlchemy URL to driver-specific configuration.
|
|
15
16
|
|
|
16
17
|
Args:
|
|
17
18
|
url: SQLAlchemy URL
|
|
18
19
|
driver: "psycopg" or "asyncpg"
|
|
20
|
+
enforce_ssl: If True, ensure SSL is enabled (required for AWS RDS IAM auth)
|
|
19
21
|
|
|
20
22
|
Returns:
|
|
21
23
|
Tuple of (base_url, connect_args):
|
|
@@ -26,6 +28,14 @@ def get_pg_config(
|
|
|
26
28
|
query = url.query
|
|
27
29
|
ssl_args = _get_ssl_args(query)
|
|
28
30
|
|
|
31
|
+
if enforce_ssl and not ssl_args:
|
|
32
|
+
ssl_args = {"sslmode": "require"}
|
|
33
|
+
elif enforce_ssl and ssl_args.get("sslmode") == "disable":
|
|
34
|
+
raise ValueError(
|
|
35
|
+
"SSL cannot be disabled when using AWS RDS IAM authentication. "
|
|
36
|
+
"Remove 'sslmode=disable' from the connection string."
|
|
37
|
+
)
|
|
38
|
+
|
|
29
39
|
# Create base URL without SSL parameters
|
|
30
40
|
base_url = url.set(
|
|
31
41
|
drivername=f"postgresql+{driver}",
|
|
@@ -35,6 +35,7 @@ from phoenix.server.api.dataloaders import (
|
|
|
35
35
|
ExperimentRepeatedRunGroupsDataLoader,
|
|
36
36
|
ExperimentRunAnnotations,
|
|
37
37
|
ExperimentRunCountsDataLoader,
|
|
38
|
+
ExperimentRunsByExperimentAndExampleDataLoader,
|
|
38
39
|
ExperimentSequenceNumberDataLoader,
|
|
39
40
|
LastUsedTimesByGenerativeModelIdDataLoader,
|
|
40
41
|
LatencyMsQuantileDataLoader,
|
|
@@ -71,6 +72,7 @@ from phoenix.server.api.dataloaders import (
|
|
|
71
72
|
SpanProjectsDataLoader,
|
|
72
73
|
TableFieldsDataLoader,
|
|
73
74
|
TokenCountDataLoader,
|
|
75
|
+
TokenPricesByModelDataLoader,
|
|
74
76
|
TraceAnnotationsByTraceDataLoader,
|
|
75
77
|
TraceByTraceIdsDataLoader,
|
|
76
78
|
TraceRetentionPolicyIdByProjectIdDataLoader,
|
|
@@ -100,27 +102,38 @@ class DataLoaders:
|
|
|
100
102
|
AverageExperimentRepeatedRunGroupLatencyDataLoader
|
|
101
103
|
)
|
|
102
104
|
average_experiment_run_latency: AverageExperimentRunLatencyDataLoader
|
|
105
|
+
dataset_example_fields: TableFieldsDataLoader
|
|
103
106
|
dataset_example_revisions: DatasetExampleRevisionsDataLoader
|
|
104
107
|
dataset_example_spans: DatasetExampleSpansDataLoader
|
|
105
108
|
dataset_labels: DatasetLabelsDataLoader
|
|
109
|
+
dataset_label_fields: TableFieldsDataLoader
|
|
106
110
|
dataset_dataset_splits: DatasetDatasetSplitsDataLoader
|
|
107
111
|
dataset_examples_and_versions_by_experiment_run: (
|
|
108
112
|
DatasetExamplesAndVersionsByExperimentRunDataLoader
|
|
109
113
|
)
|
|
110
114
|
dataset_example_splits: DatasetExampleSplitsDataLoader
|
|
115
|
+
dataset_fields: TableFieldsDataLoader
|
|
116
|
+
dataset_split_fields: TableFieldsDataLoader
|
|
117
|
+
dataset_version_fields: TableFieldsDataLoader
|
|
118
|
+
document_annotation_fields: TableFieldsDataLoader
|
|
111
119
|
document_evaluation_summaries: DocumentEvaluationSummaryDataLoader
|
|
112
120
|
document_evaluations: DocumentEvaluationsDataLoader
|
|
113
121
|
document_retrieval_metrics: DocumentRetrievalMetricsDataLoader
|
|
114
122
|
experiment_annotation_summaries: ExperimentAnnotationSummaryDataLoader
|
|
115
123
|
experiment_dataset_splits: ExperimentDatasetSplitsDataLoader
|
|
116
124
|
experiment_error_rates: ExperimentErrorRatesDataLoader
|
|
125
|
+
experiment_fields: TableFieldsDataLoader
|
|
117
126
|
experiment_repeated_run_group_annotation_summaries: (
|
|
118
127
|
ExperimentRepeatedRunGroupAnnotationSummariesDataLoader
|
|
119
128
|
)
|
|
120
129
|
experiment_repeated_run_groups: ExperimentRepeatedRunGroupsDataLoader
|
|
130
|
+
experiment_run_annotation_fields: TableFieldsDataLoader
|
|
121
131
|
experiment_run_annotations: ExperimentRunAnnotations
|
|
122
132
|
experiment_run_counts: ExperimentRunCountsDataLoader
|
|
133
|
+
experiment_run_fields: TableFieldsDataLoader
|
|
134
|
+
experiment_runs_by_experiment_and_example: ExperimentRunsByExperimentAndExampleDataLoader
|
|
123
135
|
experiment_sequence_number: ExperimentSequenceNumberDataLoader
|
|
136
|
+
generative_model_fields: TableFieldsDataLoader
|
|
124
137
|
last_used_times_by_generative_model_id: LastUsedTimesByGenerativeModelIdDataLoader
|
|
125
138
|
latency_ms_quantile: LatencyMsQuantileDataLoader
|
|
126
139
|
min_start_or_max_end_times: MinStartOrMaxEndTimeDataLoader
|
|
@@ -130,7 +143,12 @@ class DataLoaders:
|
|
|
130
143
|
project_fields: TableFieldsDataLoader
|
|
131
144
|
project_trace_retention_policy_fields: TableFieldsDataLoader
|
|
132
145
|
projects_by_trace_retention_policy_id: ProjectIdsByTraceRetentionPolicyIdDataLoader
|
|
146
|
+
prompt_fields: TableFieldsDataLoader
|
|
147
|
+
prompt_label_fields: TableFieldsDataLoader
|
|
133
148
|
prompt_version_sequence_number: PromptVersionSequenceNumberDataLoader
|
|
149
|
+
prompt_version_tag_fields: TableFieldsDataLoader
|
|
150
|
+
project_session_annotation_fields: TableFieldsDataLoader
|
|
151
|
+
project_session_fields: TableFieldsDataLoader
|
|
134
152
|
record_counts: RecordCountDataLoader
|
|
135
153
|
session_annotations_by_session: SessionAnnotationsBySessionDataLoader
|
|
136
154
|
session_first_inputs: SessionIODataLoader
|
|
@@ -139,6 +157,7 @@ class DataLoaders:
|
|
|
139
157
|
session_num_traces_with_error: SessionNumTracesWithErrorDataLoader
|
|
140
158
|
session_token_usages: SessionTokenUsagesDataLoader
|
|
141
159
|
session_trace_latency_ms_quantile: SessionTraceLatencyMsQuantileDataLoader
|
|
160
|
+
span_annotation_fields: TableFieldsDataLoader
|
|
142
161
|
span_annotations: SpanAnnotationsDataLoader
|
|
143
162
|
span_by_id: SpanByIdDataLoader
|
|
144
163
|
span_cost_by_span: SpanCostBySpanDataLoader
|
|
@@ -167,12 +186,16 @@ class DataLoaders:
|
|
|
167
186
|
span_fields: TableFieldsDataLoader
|
|
168
187
|
span_projects: SpanProjectsDataLoader
|
|
169
188
|
token_counts: TokenCountDataLoader
|
|
189
|
+
token_prices_by_model: TokenPricesByModelDataLoader
|
|
190
|
+
trace_annotation_fields: TableFieldsDataLoader
|
|
170
191
|
trace_annotations_by_trace: TraceAnnotationsByTraceDataLoader
|
|
171
192
|
trace_by_trace_ids: TraceByTraceIdsDataLoader
|
|
172
193
|
trace_fields: TableFieldsDataLoader
|
|
173
194
|
trace_retention_policy_id_by_project_id: TraceRetentionPolicyIdByProjectIdDataLoader
|
|
174
195
|
trace_root_spans: TraceRootSpansDataLoader
|
|
175
196
|
user_roles: UserRolesDataLoader
|
|
197
|
+
user_api_key_fields: TableFieldsDataLoader
|
|
198
|
+
user_fields: TableFieldsDataLoader
|
|
176
199
|
users: UsersDataLoader
|
|
177
200
|
|
|
178
201
|
|
{arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/dataloaders/__init__.py
RENAMED
|
@@ -33,6 +33,9 @@ from .experiment_repeated_run_group_annotation_summaries import (
|
|
|
33
33
|
from .experiment_repeated_run_groups import ExperimentRepeatedRunGroupsDataLoader
|
|
34
34
|
from .experiment_run_annotations import ExperimentRunAnnotations
|
|
35
35
|
from .experiment_run_counts import ExperimentRunCountsDataLoader
|
|
36
|
+
from .experiment_runs_by_experiment_and_example import (
|
|
37
|
+
ExperimentRunsByExperimentAndExampleDataLoader,
|
|
38
|
+
)
|
|
36
39
|
from .experiment_sequence_number import ExperimentSequenceNumberDataLoader
|
|
37
40
|
from .last_used_times_by_generative_model_id import LastUsedTimesByGenerativeModelIdDataLoader
|
|
38
41
|
from .latency_ms_quantile import LatencyMsQuantileCache, LatencyMsQuantileDataLoader
|
|
@@ -73,6 +76,7 @@ from .span_descendants import SpanDescendantsDataLoader
|
|
|
73
76
|
from .span_projects import SpanProjectsDataLoader
|
|
74
77
|
from .table_fields import TableFieldsDataLoader
|
|
75
78
|
from .token_counts import TokenCountCache, TokenCountDataLoader
|
|
79
|
+
from .token_prices_by_model import TokenPricesByModelDataLoader
|
|
76
80
|
from .trace_annotations_by_trace import TraceAnnotationsByTraceDataLoader
|
|
77
81
|
from .trace_by_trace_ids import TraceByTraceIdsDataLoader
|
|
78
82
|
from .trace_retention_policy_id_by_project_id import TraceRetentionPolicyIdByProjectIdDataLoader
|
|
@@ -102,6 +106,7 @@ __all__ = [
|
|
|
102
106
|
"ExperimentRepeatedRunGroupAnnotationSummariesDataLoader",
|
|
103
107
|
"ExperimentRunAnnotations",
|
|
104
108
|
"ExperimentRunCountsDataLoader",
|
|
109
|
+
"ExperimentRunsByExperimentAndExampleDataLoader",
|
|
105
110
|
"ExperimentSequenceNumberDataLoader",
|
|
106
111
|
"LastUsedTimesByGenerativeModelIdDataLoader",
|
|
107
112
|
"LatencyMsQuantileDataLoader",
|
|
@@ -139,6 +144,7 @@ __all__ = [
|
|
|
139
144
|
"SpanProjectsDataLoader",
|
|
140
145
|
"TableFieldsDataLoader",
|
|
141
146
|
"TokenCountDataLoader",
|
|
147
|
+
"TokenPricesByModelDataLoader",
|
|
142
148
|
"TraceAnnotationsByTraceDataLoader",
|
|
143
149
|
"TraceByTraceIdsDataLoader",
|
|
144
150
|
"TraceRetentionPolicyIdByProjectIdDataLoader",
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
from dataclasses import dataclass
|
|
2
2
|
|
|
3
3
|
from sqlalchemy import select, tuple_
|
|
4
|
-
from sqlalchemy.orm import joinedload
|
|
5
4
|
from strawberry.dataloader import DataLoader
|
|
6
5
|
from typing_extensions import TypeAlias
|
|
7
6
|
|
|
@@ -38,7 +37,6 @@ class ExperimentRepeatedRunGroupsDataLoader(DataLoader[Key, Result]):
|
|
|
38
37
|
).in_(set(keys))
|
|
39
38
|
)
|
|
40
39
|
.order_by(models.ExperimentRun.repetition_number)
|
|
41
|
-
.options(joinedload(models.ExperimentRun.trace).load_only(models.Trace.trace_id))
|
|
42
40
|
)
|
|
43
41
|
|
|
44
42
|
async with self._db() as session:
|
arize_phoenix-12.9.0/src/phoenix/server/api/dataloaders/experiment_runs_by_experiment_and_example.py
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
from collections import defaultdict
|
|
2
|
+
|
|
3
|
+
from sqlalchemy import select, tuple_
|
|
4
|
+
from strawberry.dataloader import DataLoader
|
|
5
|
+
from typing_extensions import TypeAlias
|
|
6
|
+
|
|
7
|
+
from phoenix.db import models
|
|
8
|
+
from phoenix.server.types import DbSessionFactory
|
|
9
|
+
|
|
10
|
+
ExperimentId: TypeAlias = int
|
|
11
|
+
DatasetExampleId: TypeAlias = int
|
|
12
|
+
Key: TypeAlias = tuple[ExperimentId, DatasetExampleId]
|
|
13
|
+
Result: TypeAlias = list[models.ExperimentRun]
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class ExperimentRunsByExperimentAndExampleDataLoader(DataLoader[Key, Result]):
|
|
17
|
+
def __init__(self, db: DbSessionFactory) -> None:
|
|
18
|
+
super().__init__(load_fn=self._load_fn)
|
|
19
|
+
self._db = db
|
|
20
|
+
|
|
21
|
+
async def _load_fn(self, keys: list[Key]) -> list[Result]:
|
|
22
|
+
runs_by_key: defaultdict[Key, Result] = defaultdict(list)
|
|
23
|
+
|
|
24
|
+
async with self._db() as session:
|
|
25
|
+
stmt = (
|
|
26
|
+
select(models.ExperimentRun)
|
|
27
|
+
.where(
|
|
28
|
+
tuple_(
|
|
29
|
+
models.ExperimentRun.experiment_id,
|
|
30
|
+
models.ExperimentRun.dataset_example_id,
|
|
31
|
+
).in_(keys)
|
|
32
|
+
)
|
|
33
|
+
.order_by(
|
|
34
|
+
models.ExperimentRun.experiment_id,
|
|
35
|
+
models.ExperimentRun.dataset_example_id,
|
|
36
|
+
models.ExperimentRun.repetition_number,
|
|
37
|
+
)
|
|
38
|
+
)
|
|
39
|
+
result = await session.stream_scalars(stmt)
|
|
40
|
+
async for run in result:
|
|
41
|
+
key = (run.experiment_id, run.dataset_example_id)
|
|
42
|
+
runs_by_key[key].append(run)
|
|
43
|
+
|
|
44
|
+
return [runs_by_key[key] for key in keys]
|
{arize_phoenix-12.8.0 → arize_phoenix-12.9.0}/src/phoenix/server/api/dataloaders/span_costs.py
RENAMED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
from typing import Optional
|
|
2
2
|
|
|
3
3
|
from sqlalchemy import select
|
|
4
|
-
from sqlalchemy.orm import joinedload, load_only
|
|
5
4
|
from strawberry.dataloader import DataLoader
|
|
6
5
|
from typing_extensions import TypeAlias
|
|
7
6
|
|
|
@@ -22,14 +21,9 @@ class SpanCostsDataLoader(DataLoader[Key, Result]):
|
|
|
22
21
|
span_ids = list(set(keys))
|
|
23
22
|
async with self._db() as session:
|
|
24
23
|
costs = {
|
|
25
|
-
|
|
26
|
-
async for
|
|
27
|
-
select(models.
|
|
28
|
-
.where(models.Span.id.in_(span_ids))
|
|
29
|
-
.options(
|
|
30
|
-
load_only(models.Span.id),
|
|
31
|
-
joinedload(models.Span.span_cost),
|
|
32
|
-
)
|
|
24
|
+
span_cost.span_rowid: span_cost
|
|
25
|
+
async for span_cost in await session.stream_scalars(
|
|
26
|
+
select(models.SpanCost).where(models.SpanCost.span_rowid.in_(span_ids))
|
|
33
27
|
)
|
|
34
28
|
}
|
|
35
29
|
return [costs.get(span_id) for span_id in keys]
|