arize-phoenix 11.3.0__tar.gz → 11.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.

Files changed (446) hide show
  1. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/PKG-INFO +4 -2
  2. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/pyproject.toml +3 -1
  3. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/config.py +51 -2
  4. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/facilitator.py +15 -24
  5. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/auth.py +1 -1
  6. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/queries.py +34 -22
  7. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/routers/v1/annotation_configs.py +4 -1
  8. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/routers/v1/datasets.py +3 -1
  9. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/routers/v1/evaluations.py +3 -1
  10. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/routers/v1/experiment_evaluations.py +3 -2
  11. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/routers/v1/experiment_runs.py +3 -1
  12. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/routers/v1/experiments.py +3 -1
  13. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/routers/v1/projects.py +4 -1
  14. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/routers/v1/prompts.py +4 -1
  15. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/routers/v1/spans.py +4 -1
  16. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/routers/v1/traces.py +4 -1
  17. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/routers/v1/users.py +2 -2
  18. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/app.py +41 -2
  19. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/authorization.py +9 -0
  20. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/bearer_auth.py +18 -15
  21. arize_phoenix-11.5.0/src/phoenix/server/cost_tracking/model_cost_manifest.json +2343 -0
  22. arize_phoenix-11.5.0/src/phoenix/server/daemons/db_disk_usage_monitor.py +209 -0
  23. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/email/sender.py +25 -0
  24. arize_phoenix-11.5.0/src/phoenix/server/email/templates/db_disk_usage_notification.html +16 -0
  25. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/email/types.py +11 -0
  26. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/grpc_server.py +3 -3
  27. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/prometheus.py +22 -0
  28. arize_phoenix-11.5.0/src/phoenix/server/static/.vite/manifest.json +87 -0
  29. arize_phoenix-11.3.0/src/phoenix/server/static/assets/components-DlL7ybQ2.js → arize_phoenix-11.5.0/src/phoenix/server/static/assets/components-Bwf6zNbg.js +186 -187
  30. arize_phoenix-11.3.0/src/phoenix/server/static/assets/index-QP9R8k34.js → arize_phoenix-11.5.0/src/phoenix/server/static/assets/index-Bfg9uQ43.js +2 -2
  31. arize_phoenix-11.3.0/src/phoenix/server/static/assets/pages-B7wCtpad.js → arize_phoenix-11.5.0/src/phoenix/server/static/assets/pages-BCR8hW_l.js +447 -431
  32. arize_phoenix-11.3.0/src/phoenix/server/static/assets/vendor-DqQvHbPa.js → arize_phoenix-11.5.0/src/phoenix/server/static/assets/vendor-DRWIRkSJ.js +1 -1
  33. arize_phoenix-11.3.0/src/phoenix/server/static/assets/vendor-arizeai-CLX44PFA.js → arize_phoenix-11.5.0/src/phoenix/server/static/assets/vendor-arizeai-DUhQaeau.js +2 -2
  34. arize_phoenix-11.3.0/src/phoenix/server/static/assets/vendor-codemirror-Du3XyJnB.js → arize_phoenix-11.5.0/src/phoenix/server/static/assets/vendor-codemirror-D_6Q6Auv.js +1 -1
  35. arize_phoenix-11.3.0/src/phoenix/server/static/assets/vendor-recharts-B2PJDrnX.js → arize_phoenix-11.5.0/src/phoenix/server/static/assets/vendor-recharts-BNBwj7vz.js +1 -1
  36. arize_phoenix-11.3.0/src/phoenix/server/static/assets/vendor-shiki-CNbrFjf9.js → arize_phoenix-11.5.0/src/phoenix/server/static/assets/vendor-shiki-k1qj_XjP.js +1 -1
  37. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/types.py +7 -0
  38. arize_phoenix-11.5.0/src/phoenix/version.py +1 -0
  39. arize_phoenix-11.3.0/src/phoenix/server/cost_tracking/model_cost_manifest.json +0 -587
  40. arize_phoenix-11.3.0/src/phoenix/server/static/.vite/manifest.json +0 -87
  41. arize_phoenix-11.3.0/src/phoenix/version.py +0 -1
  42. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/.gitignore +0 -0
  43. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/IP_NOTICE +0 -0
  44. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/LICENSE +0 -0
  45. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/README.md +0 -0
  46. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/__init__.py +0 -0
  47. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/auth.py +0 -0
  48. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/core/__init__.py +0 -0
  49. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/core/embedding_dimension.py +0 -0
  50. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/core/model.py +0 -0
  51. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/core/model_schema.py +0 -0
  52. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/core/model_schema_adapter.py +0 -0
  53. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/datetime_utils.py +0 -0
  54. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/README.md +0 -0
  55. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/__init__.py +0 -0
  56. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/alembic.ini +0 -0
  57. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/bulk_inserter.py +0 -0
  58. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/constants.py +0 -0
  59. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/engines.py +0 -0
  60. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/enums.py +0 -0
  61. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/helpers.py +0 -0
  62. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/insertion/__init__.py +0 -0
  63. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/insertion/constants.py +0 -0
  64. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/insertion/dataset.py +0 -0
  65. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/insertion/document_annotation.py +0 -0
  66. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/insertion/evaluation.py +0 -0
  67. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/insertion/helpers.py +0 -0
  68. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/insertion/span.py +0 -0
  69. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/insertion/span_annotation.py +0 -0
  70. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/insertion/trace_annotation.py +0 -0
  71. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/insertion/types.py +0 -0
  72. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/migrate.py +0 -0
  73. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/migrations/__init__.py +0 -0
  74. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/migrations/data_migration_scripts/__init__.py +0 -0
  75. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/migrations/data_migration_scripts/populate_project_sessions.py +0 -0
  76. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/migrations/env.py +0 -0
  77. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/migrations/script.py.mako +0 -0
  78. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/migrations/versions/10460e46d750_datasets.py +0 -0
  79. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/migrations/versions/2f9d1a65945f_annotation_config_migration.py +0 -0
  80. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/migrations/versions/3be8647b87d8_add_token_columns_to_spans_table.py +0 -0
  81. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/migrations/versions/4ded9e43755f_create_project_sessions_table.py +0 -0
  82. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/migrations/versions/6a88424799fe_update_users_with_auth_method.py +0 -0
  83. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/migrations/versions/8a3764fe7f1a_change_jsonb_to_json_for_prompts.py +0 -0
  84. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/migrations/versions/a20694b15f82_cost.py +0 -0
  85. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/migrations/versions/bb8139330879_create_project_trace_retention_policies_table.py +0 -0
  86. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/migrations/versions/bc8fea3c2bc8_add_prompt_tables.py +0 -0
  87. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/migrations/versions/cd164e83824f_users_and_tokens.py +0 -0
  88. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/migrations/versions/cf03bd6bae1d_init.py +0 -0
  89. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/models.py +0 -0
  90. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/pg_config.py +0 -0
  91. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/types/__init__.py +0 -0
  92. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/types/annotation_configs.py +0 -0
  93. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/types/db_models.py +0 -0
  94. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/types/identifier.py +0 -0
  95. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/types/model_provider.py +0 -0
  96. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/types/token_price_customization.py +0 -0
  97. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/db/types/trace_retention.py +0 -0
  98. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/exceptions.py +0 -0
  99. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/experiments/__init__.py +0 -0
  100. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/experiments/evaluators/__init__.py +0 -0
  101. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/experiments/evaluators/base.py +0 -0
  102. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/experiments/evaluators/code_evaluators.py +0 -0
  103. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/experiments/evaluators/llm_evaluators.py +0 -0
  104. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/experiments/evaluators/utils.py +0 -0
  105. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/experiments/functions.py +0 -0
  106. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/experiments/tracing.py +0 -0
  107. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/experiments/types.py +0 -0
  108. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/experiments/utils.py +0 -0
  109. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/inferences/__init__.py +0 -0
  110. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/inferences/errors.py +0 -0
  111. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/inferences/fixtures.py +0 -0
  112. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/inferences/inferences.py +0 -0
  113. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/inferences/schema.py +0 -0
  114. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/inferences/validation.py +0 -0
  115. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/logging/__init__.py +0 -0
  116. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/logging/_config.py +0 -0
  117. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/logging/_filter.py +0 -0
  118. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/logging/_formatter.py +0 -0
  119. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/metrics/README.md +0 -0
  120. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/metrics/__init__.py +0 -0
  121. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/metrics/binning.py +0 -0
  122. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/metrics/metrics.py +0 -0
  123. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/metrics/mixins.py +0 -0
  124. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/metrics/retrieval_metrics.py +0 -0
  125. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/metrics/timeseries.py +0 -0
  126. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/metrics/wrappers.py +0 -0
  127. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/pointcloud/__init__.py +0 -0
  128. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/pointcloud/clustering.py +0 -0
  129. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/pointcloud/pointcloud.py +0 -0
  130. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/pointcloud/projectors.py +0 -0
  131. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/pointcloud/umap_parameters.py +0 -0
  132. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/py.typed +0 -0
  133. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/__init__.py +0 -0
  134. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/README.md +0 -0
  135. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/__init__.py +0 -0
  136. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/context.py +0 -0
  137. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/__init__.py +0 -0
  138. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/annotation_configs_by_project.py +0 -0
  139. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/annotation_summaries.py +0 -0
  140. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/average_experiment_run_latency.py +0 -0
  141. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/cache/__init__.py +0 -0
  142. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/cache/two_tier_cache.py +0 -0
  143. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/dataset_example_revisions.py +0 -0
  144. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/dataset_example_spans.py +0 -0
  145. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/document_evaluation_summaries.py +0 -0
  146. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/document_evaluations.py +0 -0
  147. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/document_retrieval_metrics.py +0 -0
  148. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/experiment_annotation_summaries.py +0 -0
  149. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/experiment_error_rates.py +0 -0
  150. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/experiment_run_annotations.py +0 -0
  151. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/experiment_run_counts.py +0 -0
  152. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/experiment_sequence_number.py +0 -0
  153. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/last_used_times_by_generative_model_id.py +0 -0
  154. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/latency_ms_quantile.py +0 -0
  155. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/min_start_or_max_end_times.py +0 -0
  156. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/num_child_spans.py +0 -0
  157. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/num_spans_per_trace.py +0 -0
  158. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/project_by_name.py +0 -0
  159. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/project_ids_by_trace_retention_policy_id.py +0 -0
  160. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/prompt_version_sequence_number.py +0 -0
  161. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/record_counts.py +0 -0
  162. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/session_io.py +0 -0
  163. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/session_num_traces.py +0 -0
  164. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/session_num_traces_with_error.py +0 -0
  165. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/session_token_usages.py +0 -0
  166. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/session_trace_latency_ms_quantile.py +0 -0
  167. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/span_annotations.py +0 -0
  168. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/span_by_id.py +0 -0
  169. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/span_cost_by_span.py +0 -0
  170. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/span_cost_detail_summary_entries_by_generative_model.py +0 -0
  171. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/span_cost_detail_summary_entries_by_project_session.py +0 -0
  172. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/span_cost_detail_summary_entries_by_span.py +0 -0
  173. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/span_cost_detail_summary_entries_by_trace.py +0 -0
  174. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/span_cost_details_by_span_cost.py +0 -0
  175. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_experiment.py +0 -0
  176. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_experiment_run.py +0 -0
  177. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_generative_model.py +0 -0
  178. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_project.py +0 -0
  179. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_project_session.py +0 -0
  180. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_trace.py +0 -0
  181. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/span_costs.py +0 -0
  182. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/span_dataset_examples.py +0 -0
  183. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/span_descendants.py +0 -0
  184. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/span_projects.py +0 -0
  185. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/table_fields.py +0 -0
  186. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/token_counts.py +0 -0
  187. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/trace_by_trace_ids.py +0 -0
  188. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/trace_retention_policy_id_by_project_id.py +0 -0
  189. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/trace_root_spans.py +0 -0
  190. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/types.py +0 -0
  191. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/user_roles.py +0 -0
  192. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/dataloaders/users.py +0 -0
  193. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/exceptions.py +0 -0
  194. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/helpers/__init__.py +0 -0
  195. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/helpers/annotations.py +0 -0
  196. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/helpers/dataset_helpers.py +0 -0
  197. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/helpers/experiment_run_filters.py +0 -0
  198. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/helpers/playground_clients.py +0 -0
  199. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/helpers/playground_registry.py +0 -0
  200. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/helpers/playground_spans.py +0 -0
  201. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/helpers/prompts/__init__.py +0 -0
  202. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/helpers/prompts/conversions/__init__.py +0 -0
  203. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/helpers/prompts/conversions/anthropic.py +0 -0
  204. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/helpers/prompts/conversions/aws.py +0 -0
  205. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/helpers/prompts/conversions/openai.py +0 -0
  206. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/helpers/prompts/models.py +0 -0
  207. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/AddExamplesToDatasetInput.py +0 -0
  208. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/AddSpansToDatasetInput.py +0 -0
  209. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/ChatCompletionInput.py +0 -0
  210. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/ChatCompletionMessageInput.py +0 -0
  211. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/ClearProjectInput.py +0 -0
  212. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/ClusterInput.py +0 -0
  213. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/Coordinates.py +0 -0
  214. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/CreateDatasetInput.py +0 -0
  215. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/CreateSpanAnnotationInput.py +0 -0
  216. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/CreateTraceAnnotationInput.py +0 -0
  217. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/DataQualityMetricInput.py +0 -0
  218. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/DatasetExampleInput.py +0 -0
  219. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/DatasetFilter.py +0 -0
  220. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/DatasetSort.py +0 -0
  221. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/DatasetVersionSort.py +0 -0
  222. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/DeleteAnnotationsInput.py +0 -0
  223. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/DeleteDatasetExamplesInput.py +0 -0
  224. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/DeleteDatasetInput.py +0 -0
  225. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/DeleteExperimentsInput.py +0 -0
  226. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/DimensionFilter.py +0 -0
  227. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/DimensionInput.py +0 -0
  228. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/GenerativeCredentialInput.py +0 -0
  229. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/GenerativeModelInput.py +0 -0
  230. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/Granularity.py +0 -0
  231. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/InvocationParameters.py +0 -0
  232. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/PatchAnnotationInput.py +0 -0
  233. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/PatchDatasetExamplesInput.py +0 -0
  234. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/PatchDatasetInput.py +0 -0
  235. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/PerformanceMetricInput.py +0 -0
  236. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/ProjectFilter.py +0 -0
  237. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/ProjectSessionSort.py +0 -0
  238. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/ProjectSort.py +0 -0
  239. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/PromptTemplateOptions.py +0 -0
  240. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/PromptVersionInput.py +0 -0
  241. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/SpanAnnotationFilter.py +0 -0
  242. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/SpanAnnotationSort.py +0 -0
  243. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/SpanSort.py +0 -0
  244. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/TimeRange.py +0 -0
  245. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/TraceAnnotationSort.py +0 -0
  246. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/UserRoleInput.py +0 -0
  247. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/input_types/__init__.py +0 -0
  248. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/interceptor.py +0 -0
  249. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/mutations/__init__.py +0 -0
  250. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/mutations/annotation_config_mutations.py +0 -0
  251. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/mutations/api_key_mutations.py +0 -0
  252. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/mutations/chat_mutations.py +0 -0
  253. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/mutations/dataset_mutations.py +0 -0
  254. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/mutations/experiment_mutations.py +0 -0
  255. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/mutations/export_events_mutations.py +0 -0
  256. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/mutations/model_mutations.py +0 -0
  257. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/mutations/project_mutations.py +0 -0
  258. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/mutations/project_trace_retention_policy_mutations.py +0 -0
  259. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/mutations/prompt_label_mutations.py +0 -0
  260. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/mutations/prompt_mutations.py +0 -0
  261. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/mutations/prompt_version_tag_mutations.py +0 -0
  262. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/mutations/span_annotations_mutations.py +0 -0
  263. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/mutations/trace_annotations_mutations.py +0 -0
  264. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/mutations/trace_mutations.py +0 -0
  265. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/mutations/user_mutations.py +0 -0
  266. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/openapi/__init__.py +0 -0
  267. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/openapi/main.py +0 -0
  268. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/openapi/schema.py +0 -0
  269. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/routers/__init__.py +0 -0
  270. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/routers/auth.py +0 -0
  271. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/routers/embeddings.py +0 -0
  272. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/routers/oauth2.py +0 -0
  273. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/routers/utils.py +0 -0
  274. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/routers/v1/__init__.py +0 -0
  275. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/routers/v1/annotations.py +0 -0
  276. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/routers/v1/models.py +0 -0
  277. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/routers/v1/utils.py +0 -0
  278. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/schema.py +0 -0
  279. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/subscriptions.py +0 -0
  280. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/Annotation.py +0 -0
  281. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/AnnotationConfig.py +0 -0
  282. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/AnnotationSource.py +0 -0
  283. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/AnnotationSummary.py +0 -0
  284. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/AnnotatorKind.py +0 -0
  285. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/ApiKey.py +0 -0
  286. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/AuthMethod.py +0 -0
  287. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/ChatCompletionMessageRole.py +0 -0
  288. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/ChatCompletionSubscriptionPayload.py +0 -0
  289. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/Cluster.py +0 -0
  290. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/CostBreakdown.py +0 -0
  291. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/CreateDatasetPayload.py +0 -0
  292. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/CronExpression.py +0 -0
  293. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/DataQualityMetric.py +0 -0
  294. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/Dataset.py +0 -0
  295. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/DatasetExample.py +0 -0
  296. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/DatasetExampleRevision.py +0 -0
  297. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/DatasetValues.py +0 -0
  298. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/DatasetVersion.py +0 -0
  299. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/Dimension.py +0 -0
  300. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/DimensionDataType.py +0 -0
  301. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/DimensionShape.py +0 -0
  302. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/DimensionType.py +0 -0
  303. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/DimensionWithValue.py +0 -0
  304. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/DocumentEvaluationSummary.py +0 -0
  305. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/DocumentRetrievalMetrics.py +0 -0
  306. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/EmbeddingDimension.py +0 -0
  307. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/EmbeddingMetadata.py +0 -0
  308. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/Evaluation.py +0 -0
  309. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/EvaluationSummary.py +0 -0
  310. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/Event.py +0 -0
  311. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/EventMetadata.py +0 -0
  312. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/ExampleRevisionInterface.py +0 -0
  313. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/Experiment.py +0 -0
  314. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/ExperimentAnnotationSummary.py +0 -0
  315. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/ExperimentComparison.py +0 -0
  316. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/ExperimentRun.py +0 -0
  317. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/ExperimentRunAnnotation.py +0 -0
  318. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/ExportedFile.py +0 -0
  319. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/Functionality.py +0 -0
  320. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/GenerativeModel.py +0 -0
  321. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/GenerativeProvider.py +0 -0
  322. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/Identifier.py +0 -0
  323. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/InferenceModel.py +0 -0
  324. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/Inferences.py +0 -0
  325. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/InferencesRole.py +0 -0
  326. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/LabelFraction.py +0 -0
  327. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/MimeType.py +0 -0
  328. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/ModelInterface.py +0 -0
  329. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/NumericRange.py +0 -0
  330. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/PerformanceMetric.py +0 -0
  331. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/PlaygroundModel.py +0 -0
  332. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/Project.py +0 -0
  333. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/ProjectSession.py +0 -0
  334. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/ProjectTraceRetentionPolicy.py +0 -0
  335. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/Prompt.py +0 -0
  336. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/PromptLabel.py +0 -0
  337. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/PromptResponse.py +0 -0
  338. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/PromptVersion.py +0 -0
  339. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/PromptVersionTag.py +0 -0
  340. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/PromptVersionTemplate.py +0 -0
  341. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/ResponseFormat.py +0 -0
  342. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/Retrieval.py +0 -0
  343. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/ScalarDriftMetricEnum.py +0 -0
  344. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/Segments.py +0 -0
  345. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/SortDir.py +0 -0
  346. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/Span.py +0 -0
  347. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/SpanAnnotation.py +0 -0
  348. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/SpanCostDetailSummaryEntry.py +0 -0
  349. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/SpanCostSummary.py +0 -0
  350. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/SpanIOValue.py +0 -0
  351. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/SystemApiKey.py +0 -0
  352. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/TimeSeries.py +0 -0
  353. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/TokenCountPromptDetails.py +0 -0
  354. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/TokenPrice.py +0 -0
  355. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/TokenUsage.py +0 -0
  356. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/ToolDefinition.py +0 -0
  357. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/Trace.py +0 -0
  358. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/TraceAnnotation.py +0 -0
  359. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/UMAPPoints.py +0 -0
  360. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/User.py +0 -0
  361. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/UserApiKey.py +0 -0
  362. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/UserRole.py +0 -0
  363. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/ValidationResult.py +0 -0
  364. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/VectorDriftMetricEnum.py +0 -0
  365. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/__init__.py +0 -0
  366. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/node.py +0 -0
  367. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/types/pagination.py +0 -0
  368. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/api/utils.py +0 -0
  369. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/cost_tracking/__init__.py +0 -0
  370. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/cost_tracking/cost_details_calculator.py +0 -0
  371. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/cost_tracking/cost_model_lookup.py +0 -0
  372. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/cost_tracking/helpers.py +0 -0
  373. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/cost_tracking/regex_specificity.py +0 -0
  374. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/cost_tracking/token_cost_calculator.py +0 -0
  375. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/daemons/__init__.py +0 -0
  376. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/daemons/generative_model_store.py +0 -0
  377. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/daemons/span_cost_calculator.py +0 -0
  378. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/dml_event.py +0 -0
  379. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/dml_event_handler.py +0 -0
  380. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/email/__init__.py +0 -0
  381. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/email/templates/__init__.py +0 -0
  382. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/email/templates/password_reset.html +0 -0
  383. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/email/templates/welcome.html +0 -0
  384. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/jwt_store.py +0 -0
  385. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/main.py +0 -0
  386. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/middleware/__init__.py +0 -0
  387. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/middleware/gzip.py +0 -0
  388. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/oauth2.py +0 -0
  389. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/openapi/__init__.py +0 -0
  390. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/rate_limiters.py +0 -0
  391. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/retention.py +0 -0
  392. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/static/apple-touch-icon-114x114.png +0 -0
  393. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/static/apple-touch-icon-120x120.png +0 -0
  394. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/static/apple-touch-icon-144x144.png +0 -0
  395. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/static/apple-touch-icon-152x152.png +0 -0
  396. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/static/apple-touch-icon-180x180.png +0 -0
  397. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/static/apple-touch-icon-72x72.png +0 -0
  398. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/static/apple-touch-icon-76x76.png +0 -0
  399. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/static/apple-touch-icon.png +0 -0
  400. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/static/assets/vendor-WIZid84E.css +0 -0
  401. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/static/assets/vendor-three-C5WAXd5r.js +0 -0
  402. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/static/favicon.ico +0 -0
  403. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/static/modernizr.js +0 -0
  404. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/telemetry.py +0 -0
  405. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/templates/__init__.py +0 -0
  406. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/templates/index.html +0 -0
  407. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/server/thread_server.py +0 -0
  408. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/services.py +0 -0
  409. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/session/__init__.py +0 -0
  410. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/session/client.py +0 -0
  411. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/session/data_extractor.py +0 -0
  412. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/session/evaluation.py +0 -0
  413. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/session/session.py +0 -0
  414. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/settings.py +0 -0
  415. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/trace/__init__.py +0 -0
  416. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/trace/attributes.py +0 -0
  417. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/trace/dsl/README.md +0 -0
  418. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/trace/dsl/__init__.py +0 -0
  419. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/trace/dsl/filter.py +0 -0
  420. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/trace/dsl/helpers.py +0 -0
  421. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/trace/dsl/query.py +0 -0
  422. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/trace/errors.py +0 -0
  423. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/trace/evaluation_conventions.py +0 -0
  424. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/trace/exporter.py +0 -0
  425. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/trace/fixtures.py +0 -0
  426. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/trace/otel.py +0 -0
  427. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/trace/projects.py +0 -0
  428. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/trace/schemas.py +0 -0
  429. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/trace/span_evaluations.py +0 -0
  430. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/trace/span_json_decoder.py +0 -0
  431. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/trace/span_json_encoder.py +0 -0
  432. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/trace/trace_dataset.py +0 -0
  433. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/trace/utils.py +0 -0
  434. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/trace/v1/__init__.py +0 -0
  435. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/trace/v1/evaluation_pb2.py +0 -0
  436. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/trace/v1/evaluation_pb2.pyi +0 -0
  437. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/utilities/__init__.py +0 -0
  438. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/utilities/client.py +0 -0
  439. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/utilities/deprecation.py +0 -0
  440. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/utilities/error_handling.py +0 -0
  441. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/utilities/json.py +0 -0
  442. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/utilities/logging.py +0 -0
  443. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/utilities/project.py +0 -0
  444. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/utilities/re.py +0 -0
  445. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/utilities/span_store.py +0 -0
  446. {arize_phoenix-11.3.0 → arize_phoenix-11.5.0}/src/phoenix/utilities/template_formatters.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: arize-phoenix
3
- Version: 11.3.0
3
+ Version: 11.5.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
@@ -39,10 +39,12 @@ Requires-Dist: opentelemetry-proto>=1.12.0
39
39
  Requires-Dist: opentelemetry-sdk
40
40
  Requires-Dist: opentelemetry-semantic-conventions
41
41
  Requires-Dist: pandas>=1.0
42
+ Requires-Dist: prometheus-client
42
43
  Requires-Dist: protobuf<6.0,>=4.25.8
43
44
  Requires-Dist: psutil
44
45
  Requires-Dist: pyarrow
45
46
  Requires-Dist: pydantic>=2.1.0
47
+ Requires-Dist: python-dateutil
46
48
  Requires-Dist: python-multipart
47
49
  Requires-Dist: scikit-learn
48
50
  Requires-Dist: scipy
@@ -95,7 +97,6 @@ Requires-Dist: pandas-stubs==2.2.2.240603; extra == 'dev'
95
97
  Requires-Dist: pandas>=1.0; extra == 'dev'
96
98
  Requires-Dist: portpicker; extra == 'dev'
97
99
  Requires-Dist: pre-commit; extra == 'dev'
98
- Requires-Dist: prometheus-client; extra == 'dev'
99
100
  Requires-Dist: psycopg[binary,pool]; extra == 'dev'
100
101
  Requires-Dist: pytest-asyncio; extra == 'dev'
101
102
  Requires-Dist: pytest-cov; extra == 'dev'
@@ -108,6 +109,7 @@ Requires-Dist: tabulate; extra == 'dev'
108
109
  Requires-Dist: tox-uv==1.11.3; extra == 'dev'
109
110
  Requires-Dist: tox==4.18.1; extra == 'dev'
110
111
  Requires-Dist: types-jsonschema; extra == 'dev'
112
+ Requires-Dist: types-python-dateutil; extra == 'dev'
111
113
  Requires-Dist: types-tabulate; extra == 'dev'
112
114
  Requires-Dist: uv==0.7.12; extra == 'dev'
113
115
  Requires-Dist: uvloop; (platform_system != 'Windows') and extra == 'dev'
@@ -59,6 +59,8 @@ dependencies = [
59
59
  "authlib",
60
60
  "arize-phoenix-client",
61
61
  "email-validator",
62
+ "python-dateutil",
63
+ "prometheus_client",
62
64
  ]
63
65
  dynamic = ["version"]
64
66
 
@@ -96,13 +98,13 @@ dev = [
96
98
  "litellm>=1.0.3,<1.57.5", # windows compatibility broken on 1.57.5 (https://github.com/BerriAI/litellm/issues/7677)
97
99
  "google-cloud-aiplatform>=1.3",
98
100
  "anthropic>=0.49.0",
99
- "prometheus_client",
100
101
  "asgi-lifespan",
101
102
  "Faker>=30.1.0",
102
103
  "portpicker",
103
104
  "uvloop; platform_system != 'Windows'",
104
105
  "grpc-interceptor[testing]",
105
106
  "types-jsonschema",
107
+ "types-python-dateutil",
106
108
  ]
107
109
  embeddings = [
108
110
  "fast-hdbscan>=0.2.0",
@@ -106,7 +106,24 @@ ENV_PHOENIX_DATABASE_ALLOCATED_STORAGE_CAPACITY_GIBIBYTES = (
106
106
  )
107
107
  """
108
108
  The allocated storage capacity for the Phoenix database in gibibytes (2^30 bytes). Use float for
109
- fractional value. This is currently used only by the UI for informational displays.
109
+ fractional value.
110
+ """
111
+ ENV_PHOENIX_DATABASE_USAGE_EMAIL_WARNING_THRESHOLD_PERCENTAGE = (
112
+ "PHOENIX_DATABASE_USAGE_EMAIL_WARNING_THRESHOLD_PERCENTAGE"
113
+ )
114
+ """
115
+ The percentage of the allocated storage capacity that, when exceeded, triggers a email notifications
116
+ to admin users with valid email addresses. Must be specified in conjunction with allocated storage
117
+ capacity. This is a percentage value between 0 and 100. This setting is ignored if SMTP is not
118
+ configured.
119
+ """
120
+ ENV_PHOENIX_DATABASE_USAGE_INSERTION_BLOCKING_THRESHOLD_PERCENTAGE = (
121
+ "PHOENIX_DATABASE_USAGE_INSERTION_BLOCKING_THRESHOLD_PERCENTAGE"
122
+ )
123
+ """
124
+ The percentage of the allocated storage capacity that blocks insertions and updates of database
125
+ records when exceeded. Deletions are not blocked. Must be specified in conjunction with allocated
126
+ storage capacity. This is a percentage value between 0 and 100.
110
127
  """
111
128
  ENV_PHOENIX_ENABLE_PROMETHEUS = "PHOENIX_ENABLE_PROMETHEUS"
112
129
  """
@@ -1312,7 +1329,36 @@ def get_env_database_schema() -> Optional[str]:
1312
1329
 
1313
1330
 
1314
1331
  def get_env_database_allocated_storage_capacity_gibibytes() -> Optional[float]:
1315
- return _float_val(ENV_PHOENIX_DATABASE_ALLOCATED_STORAGE_CAPACITY_GIBIBYTES)
1332
+ ans = _float_val(ENV_PHOENIX_DATABASE_ALLOCATED_STORAGE_CAPACITY_GIBIBYTES)
1333
+ if ans is not None and ans <= 0:
1334
+ raise ValueError(
1335
+ f"Invalid value for environment variable "
1336
+ f"{ENV_PHOENIX_DATABASE_ALLOCATED_STORAGE_CAPACITY_GIBIBYTES}: "
1337
+ f"{ans}. Value must be a positive number."
1338
+ )
1339
+ return ans
1340
+
1341
+
1342
+ def get_env_database_usage_email_warning_threshold_percentage() -> Optional[float]:
1343
+ ans = _float_val(ENV_PHOENIX_DATABASE_USAGE_EMAIL_WARNING_THRESHOLD_PERCENTAGE)
1344
+ if ans is not None and not (0 <= ans <= 100):
1345
+ raise ValueError(
1346
+ f"Invalid value for environment variable "
1347
+ f"{ENV_PHOENIX_DATABASE_USAGE_EMAIL_WARNING_THRESHOLD_PERCENTAGE}: "
1348
+ f"{ans}. Value must be a percentage between 0 and 100."
1349
+ )
1350
+ return ans
1351
+
1352
+
1353
+ def get_env_database_usage_insertion_blocking_threshold_percentage() -> Optional[float]:
1354
+ ans = _float_val(ENV_PHOENIX_DATABASE_USAGE_INSERTION_BLOCKING_THRESHOLD_PERCENTAGE)
1355
+ if ans is not None and not (0 <= ans <= 100):
1356
+ raise ValueError(
1357
+ f"Invalid value for environment variable "
1358
+ f"{ENV_PHOENIX_DATABASE_USAGE_INSERTION_BLOCKING_THRESHOLD_PERCENTAGE}: "
1359
+ f"{ans}. Value must be a percentage between 0 and 100."
1360
+ )
1361
+ return ans
1316
1362
 
1317
1363
 
1318
1364
  def get_env_enable_prometheus() -> bool:
@@ -1558,6 +1604,9 @@ def verify_server_environment_variables() -> None:
1558
1604
  get_env_root_url()
1559
1605
  get_env_phoenix_secret()
1560
1606
  get_env_phoenix_admin_secret()
1607
+ get_env_database_allocated_storage_capacity_gibibytes()
1608
+ get_env_database_usage_email_warning_threshold_percentage()
1609
+ get_env_database_usage_insertion_blocking_threshold_percentage()
1561
1610
 
1562
1611
  # Notify users about deprecated environment variables if they are being used.
1563
1612
  if os.getenv("PHOENIX_ENABLE_WEBSOCKETS") is not None:
@@ -406,17 +406,6 @@ async def _ensure_model_costs(db: DbSessionFactory) -> None:
406
406
  with open(_COST_MODEL_MANIFEST) as f:
407
407
  manifest = json.load(f)
408
408
 
409
- # Define all supported token types with their prompt/non-prompt classification
410
- # This determines how tokens are categorized for billing purposes
411
- token_types: list[_TokenTypeKey] = [
412
- _TokenTypeKey("input", True), # Standard input tokens
413
- _TokenTypeKey("cache_write", True), # Tokens written to cache
414
- _TokenTypeKey("cache_read", True), # Tokens read from cache
415
- _TokenTypeKey("output", False), # Generated output tokens
416
- _TokenTypeKey("audio", True), # Audio input tokens
417
- _TokenTypeKey("audio", False), # Audio output tokens
418
- ]
419
-
420
409
  async with db() as session:
421
410
  # Fetch all existing built-in models with their token prices eagerly loaded
422
411
  # Using .unique() to deduplicate models when multiple token prices are joined
@@ -435,9 +424,8 @@ async def _ensure_model_costs(db: DbSessionFactory) -> None:
435
424
  seen_names: set[str] = set()
436
425
  seen_patterns: set[tuple[re.Pattern[str], str]] = set()
437
426
 
438
- # Process each model in the manifest
439
- for model_data in manifest:
440
- name = str(model_data.get("model") or "").strip()
427
+ for model_data in manifest["models"]:
428
+ name = str(model_data.get("name") or "").strip()
441
429
  if not name:
442
430
  logger.warning("Skipping model with empty name in manifest")
443
431
  continue
@@ -445,7 +433,7 @@ async def _ensure_model_costs(db: DbSessionFactory) -> None:
445
433
  logger.warning(f"Skipping model '{name}' with duplicate name in manifest")
446
434
  continue
447
435
  seen_names.add(name)
448
- regex = str(model_data.get("regex") or "").strip()
436
+ regex = str(model_data.get("name_pattern") or "").strip()
449
437
  try:
450
438
  pattern = re.compile(regex)
451
439
  except re.error as e:
@@ -460,7 +448,7 @@ async def _ensure_model_costs(db: DbSessionFactory) -> None:
460
448
  seen_patterns.add((pattern, provider))
461
449
  # Remove model from built_in_models dict (for cleanup tracking)
462
450
  # or create new model if not found
463
- model = built_in_models.pop(model_data["model"], None)
451
+ model = built_in_models.pop(model_data["name"], None)
464
452
  if model is None:
465
453
  # Create new built-in model from manifest data
466
454
  model = models.GenerativeModel(
@@ -477,24 +465,27 @@ async def _ensure_model_costs(db: DbSessionFactory) -> None:
477
465
 
478
466
  # Create lookup table for existing token prices by (token_type, is_prompt)
479
467
  # Using pop() during iteration allows us to track which prices are no longer needed
480
- token_prices = {
468
+ existing_token_prices = {
481
469
  _TokenTypeKey(token_price.token_type, token_price.is_prompt): token_price
482
470
  for token_price in model.token_prices
483
471
  }
484
472
 
485
473
  # Synchronize token prices for all supported token types
486
- for token_type, is_prompt in token_types:
474
+ for manifest_token_price in model_data["token_prices"]:
487
475
  # Skip if this token type has no rate in the manifest
488
- if not (base_rate := model_data.get(token_type)):
476
+ if not (base_rate := manifest_token_price.get("base_rate")):
489
477
  continue
490
478
 
491
- key = _TokenTypeKey(token_type, is_prompt)
479
+ key = _TokenTypeKey(
480
+ manifest_token_price["token_type"],
481
+ manifest_token_price["is_prompt"],
482
+ )
492
483
  # Remove from tracking dict and get existing price (if any)
493
- if not (token_price := token_prices.pop(key, None)):
484
+ if not (token_price := existing_token_prices.pop(key, None)):
494
485
  # Create new token price if it doesn't exist
495
486
  token_price = models.TokenPrice(
496
- token_type=token_type,
497
- is_prompt=is_prompt,
487
+ token_type=manifest_token_price["token_type"],
488
+ is_prompt=manifest_token_price["is_prompt"],
498
489
  base_rate=base_rate,
499
490
  )
500
491
  model.token_prices.append(token_price)
@@ -504,7 +495,7 @@ async def _ensure_model_costs(db: DbSessionFactory) -> None:
504
495
 
505
496
  # Remove any token prices that are no longer in the manifest
506
497
  # These are prices that weren't popped from the token_prices dict above
507
- for token_price in token_prices.values():
498
+ for token_price in existing_token_prices.values():
508
499
  model.token_prices.remove(token_price)
509
500
 
510
501
  # Clean up built-in models that are no longer in the manifest
@@ -29,7 +29,7 @@ class IsLocked(Authorization):
29
29
  message = "Operations that write or modify data are locked"
30
30
 
31
31
  def has_permission(self, source: Any, info: Info, **kwargs: Any) -> bool:
32
- return not info.context.locked
32
+ return not info.context.db.should_not_insert_or_update
33
33
 
34
34
 
35
35
  MSG_ADMIN_ONLY = "Only admin can perform this action"
@@ -25,7 +25,7 @@ from phoenix.db.helpers import SupportedSQLDialect, exclude_experiment_projects
25
25
  from phoenix.pointcloud.clustering import Hdbscan
26
26
  from phoenix.server.api.auth import MSG_ADMIN_ONLY, IsAdmin
27
27
  from phoenix.server.api.context import Context
28
- from phoenix.server.api.exceptions import NotFound, Unauthorized
28
+ from phoenix.server.api.exceptions import BadRequest, NotFound, Unauthorized
29
29
  from phoenix.server.api.helpers import ensure_list
30
30
  from phoenix.server.api.helpers.experiment_run_filters import (
31
31
  ExperimentRunFilterConditionSyntaxError,
@@ -62,7 +62,13 @@ from phoenix.server.api.types.GenerativeProvider import GenerativeProvider, Gene
62
62
  from phoenix.server.api.types.InferenceModel import InferenceModel
63
63
  from phoenix.server.api.types.InferencesRole import AncillaryInferencesRole, InferencesRole
64
64
  from phoenix.server.api.types.node import from_global_id, from_global_id_with_expected_type
65
- from phoenix.server.api.types.pagination import ConnectionArgs, CursorString, connection_from_list
65
+ from phoenix.server.api.types.pagination import (
66
+ ConnectionArgs,
67
+ Cursor,
68
+ CursorString,
69
+ connection_from_cursors_and_nodes,
70
+ connection_from_list,
71
+ )
66
72
  from phoenix.server.api.types.PlaygroundModel import PlaygroundModel
67
73
  from phoenix.server.api.types.Project import Project
68
74
  from phoenix.server.api.types.ProjectSession import ProjectSession, to_gql_project_session
@@ -349,7 +355,10 @@ class Query:
349
355
  for experiment_id in experiment_ids
350
356
  ]
351
357
  if len(set(experiment_ids_)) != len(experiment_ids_):
352
- raise ValueError("Experiment IDs must be unique.")
358
+ raise BadRequest("Experiment IDs must be unique.")
359
+
360
+ cursor = Cursor.from_string(after) if after else None
361
+ page_size = first or 50
353
362
 
354
363
  async with info.context.db() as session:
355
364
  validation_result = (
@@ -371,13 +380,13 @@ class Query:
371
380
  )
372
381
  ).first()
373
382
  if validation_result is None:
374
- raise ValueError("No experiments could be found for input IDs.")
383
+ raise NotFound("No experiments could be found for input IDs.")
375
384
 
376
385
  num_datasets, dataset_id, version_id, num_resolved_experiment_ids = validation_result
377
386
  if num_datasets != 1:
378
- raise ValueError("Experiments must belong to the same dataset.")
387
+ raise BadRequest("Experiments must belong to the same dataset.")
379
388
  if num_resolved_experiment_ids != len(experiment_ids_):
380
- raise ValueError("Unable to resolve one or more experiment IDs.")
389
+ raise NotFound("Unable to resolve one or more experiment IDs.")
381
390
 
382
391
  revision_ids = (
383
392
  select(func.max(models.DatasetExampleRevision.id))
@@ -407,7 +416,10 @@ class Query:
407
416
  ),
408
417
  )
409
418
  .order_by(models.DatasetExample.id.desc())
419
+ .limit(page_size + 1)
410
420
  )
421
+ if cursor is not None:
422
+ examples_query = examples_query.where(models.DatasetExample.id < cursor.rowid)
411
423
 
412
424
  if filter_condition:
413
425
  examples_query = update_examples_query_with_filter_condition(
@@ -417,6 +429,8 @@ class Query:
417
429
  )
418
430
 
419
431
  examples = (await session.scalars(examples_query)).all()
432
+ has_next_page = len(examples) > page_size
433
+ examples = examples[:page_size]
420
434
 
421
435
  ExampleID: TypeAlias = int
422
436
  ExperimentID: TypeAlias = int
@@ -437,7 +451,7 @@ class Query:
437
451
  ):
438
452
  runs[run.dataset_example_id][run.experiment_id].append(run)
439
453
 
440
- experiment_comparisons = []
454
+ cursors_and_nodes = []
441
455
  for example in examples:
442
456
  run_comparison_items = []
443
457
  for experiment_id in experiment_ids_:
@@ -452,23 +466,21 @@ class Query:
452
466
  ],
453
467
  )
454
468
  )
455
- experiment_comparisons.append(
456
- ExperimentComparison(
469
+ experiment_comparison = ExperimentComparison(
470
+ id_attr=example.id,
471
+ example=DatasetExample(
457
472
  id_attr=example.id,
458
- example=DatasetExample(
459
- id_attr=example.id,
460
- created_at=example.created_at,
461
- version_id=version_id,
462
- ),
463
- run_comparison_items=run_comparison_items,
464
- )
473
+ created_at=example.created_at,
474
+ version_id=version_id,
475
+ ),
476
+ run_comparison_items=run_comparison_items,
465
477
  )
466
- return connection_from_list(
467
- data=experiment_comparisons,
468
- args=ConnectionArgs(
469
- first=first,
470
- after=after if isinstance(after, CursorString) else None,
471
- ),
478
+ cursors_and_nodes.append((Cursor(rowid=example.id), experiment_comparison))
479
+
480
+ return connection_from_cursors_and_nodes(
481
+ cursors_and_nodes=cursors_and_nodes,
482
+ has_previous_page=False,
483
+ has_next_page=has_next_page,
472
484
  )
473
485
 
474
486
  @strawberry.field
@@ -1,7 +1,7 @@
1
1
  import logging
2
2
  from typing import Annotated, List, Literal, Optional, Union
3
3
 
4
- from fastapi import APIRouter, HTTPException, Path, Query
4
+ from fastapi import APIRouter, Depends, HTTPException, Path, Query
5
5
  from pydantic import Field, RootModel
6
6
  from sqlalchemy import delete, select
7
7
  from sqlalchemy.exc import IntegrityError as PostgreSQLIntegrityError
@@ -44,6 +44,7 @@ from phoenix.server.api.types.AnnotationConfig import (
44
44
  from phoenix.server.api.types.AnnotationConfig import (
45
45
  FreeformAnnotationConfig as FreeformAnnotationConfigType,
46
46
  )
47
+ from phoenix.server.authorization import is_not_locked
47
48
 
48
49
  logger = logging.getLogger(__name__)
49
50
 
@@ -268,6 +269,7 @@ async def get_annotation_config_by_name_or_id(
268
269
 
269
270
  @router.post(
270
271
  "/annotation_configs",
272
+ dependencies=[Depends(is_not_locked)],
271
273
  summary="Create an annotation configuration",
272
274
  )
273
275
  async def create_annotation_config(
@@ -302,6 +304,7 @@ async def create_annotation_config(
302
304
 
303
305
  @router.put(
304
306
  "/annotation_configs/{config_id}",
307
+ dependencies=[Depends(is_not_locked)],
305
308
  summary="Update an annotation configuration",
306
309
  )
307
310
  async def update_annotation_config(
@@ -15,7 +15,7 @@ from typing import Any, Optional, Union, cast
15
15
 
16
16
  import pandas as pd
17
17
  import pyarrow as pa
18
- from fastapi import APIRouter, BackgroundTasks, HTTPException, Path, Query
18
+ from fastapi import APIRouter, BackgroundTasks, Depends, HTTPException, Path, Query
19
19
  from fastapi.responses import PlainTextResponse, StreamingResponse
20
20
  from sqlalchemy import and_, delete, func, select
21
21
  from sqlalchemy.ext.asyncio import AsyncSession
@@ -47,6 +47,7 @@ from phoenix.server.api.types.DatasetExample import DatasetExample as DatasetExa
47
47
  from phoenix.server.api.types.DatasetVersion import DatasetVersion as DatasetVersionNodeType
48
48
  from phoenix.server.api.types.node import from_global_id_with_expected_type
49
49
  from phoenix.server.api.utils import delete_projects, delete_traces
50
+ from phoenix.server.authorization import is_not_locked
50
51
  from phoenix.server.dml_event import DatasetInsertEvent
51
52
 
52
53
  from .models import V1RoutesBaseModel
@@ -326,6 +327,7 @@ class UploadDatasetResponseBody(ResponseBody[UploadDatasetData]):
326
327
 
327
328
  @router.post(
328
329
  "/datasets/upload",
330
+ dependencies=[Depends(is_not_locked)],
329
331
  operation_id="uploadDataset",
330
332
  summary="Upload dataset from JSON, CSV, or PyArrow",
331
333
  responses=add_errors_to_responses(
@@ -5,7 +5,7 @@ from typing import Any, Iterator, Optional, Union, cast
5
5
 
6
6
  import pandas as pd
7
7
  import pyarrow as pa
8
- from fastapi import APIRouter, Header, HTTPException, Query
8
+ from fastapi import APIRouter, Depends, Header, HTTPException, Query
9
9
  from google.protobuf.message import DecodeError
10
10
  from pandas import DataFrame
11
11
  from sqlalchemy import select
@@ -28,6 +28,7 @@ from phoenix.db import models
28
28
  from phoenix.db.insertion.types import Precursors
29
29
  from phoenix.exceptions import PhoenixEvaluationNameIsMissing
30
30
  from phoenix.server.api.routers.utils import table_to_bytes
31
+ from phoenix.server.authorization import is_not_locked
31
32
  from phoenix.server.types import DbSessionFactory
32
33
  from phoenix.trace.span_evaluations import (
33
34
  DocumentEvaluations,
@@ -45,6 +46,7 @@ router = APIRouter(tags=["traces"], include_in_schema=True)
45
46
 
46
47
  @router.post(
47
48
  "/evaluations",
49
+ dependencies=[Depends(is_not_locked)],
48
50
  operation_id="addEvaluations",
49
51
  summary="Add span, trace, or document evaluations",
50
52
  status_code=HTTP_204_NO_CONTENT,
@@ -1,6 +1,7 @@
1
1
  from datetime import datetime
2
2
  from typing import Any, Literal, Optional
3
3
 
4
+ from dateutil.parser import isoparse
4
5
  from fastapi import APIRouter, HTTPException
5
6
  from pydantic import Field
6
7
  from starlette.requests import Request
@@ -95,8 +96,8 @@ async def upsert_experiment_evaluation(
95
96
  explanation=explanation,
96
97
  error=error,
97
98
  metadata_=metadata, # `metadata_` must match database
98
- start_time=datetime.fromisoformat(start_time),
99
- end_time=datetime.fromisoformat(end_time),
99
+ start_time=isoparse(start_time),
100
+ end_time=isoparse(end_time),
100
101
  trace_id=payload.get("trace_id"),
101
102
  )
102
103
  dialect = SupportedSQLDialect(session.bind.dialect.name)
@@ -1,7 +1,7 @@
1
1
  from datetime import datetime
2
2
  from typing import Any, Optional
3
3
 
4
- from fastapi import APIRouter, HTTPException
4
+ from fastapi import APIRouter, Depends, HTTPException
5
5
  from pydantic import Field
6
6
  from sqlalchemy import select
7
7
  from sqlalchemy.exc import IntegrityError as PostgreSQLIntegrityError
@@ -13,6 +13,7 @@ from strawberry.relay import GlobalID
13
13
  from phoenix.db import models
14
14
  from phoenix.db.models import ExperimentRunOutput
15
15
  from phoenix.server.api.types.node import from_global_id_with_expected_type
16
+ from phoenix.server.authorization import is_not_locked
16
17
  from phoenix.server.dml_event import ExperimentRunInsertEvent
17
18
 
18
19
  from .models import V1RoutesBaseModel
@@ -52,6 +53,7 @@ class CreateExperimentRunResponseBody(ResponseBody[CreateExperimentRunResponseBo
52
53
 
53
54
  @router.post(
54
55
  "/experiments/{experiment_id}/runs",
56
+ dependencies=[Depends(is_not_locked)],
55
57
  operation_id="createExperimentRun",
56
58
  summary="Create run for an experiment",
57
59
  response_description="Experiment run created successfully",
@@ -4,7 +4,7 @@ from random import getrandbits
4
4
  from typing import Any, Optional
5
5
 
6
6
  import pandas as pd
7
- from fastapi import APIRouter, HTTPException, Path, Response
7
+ from fastapi import APIRouter, Depends, HTTPException, Path, Response
8
8
  from pydantic import Field
9
9
  from sqlalchemy import and_, func, select
10
10
  from sqlalchemy.ext.asyncio import AsyncSession
@@ -18,6 +18,7 @@ from phoenix.db import models
18
18
  from phoenix.db.helpers import SupportedSQLDialect
19
19
  from phoenix.db.insertion.helpers import insert_on_conflict
20
20
  from phoenix.server.api.types.node import from_global_id_with_expected_type
21
+ from phoenix.server.authorization import is_not_locked
21
22
  from phoenix.server.dml_event import ExperimentInsertEvent
22
23
 
23
24
  from .models import V1RoutesBaseModel
@@ -86,6 +87,7 @@ class CreateExperimentResponseBody(ResponseBody[Experiment]):
86
87
 
87
88
  @router.post(
88
89
  "/datasets/{dataset_id}/experiments",
90
+ dependencies=[Depends(is_not_locked)],
89
91
  operation_id="createExperiment",
90
92
  summary="Create experiment on a dataset",
91
93
  responses=add_errors_to_responses(
@@ -1,6 +1,6 @@
1
1
  from typing import Optional
2
2
 
3
- from fastapi import APIRouter, HTTPException, Path, Query
3
+ from fastapi import APIRouter, Depends, HTTPException, Path, Query
4
4
  from pydantic import Field
5
5
  from sqlalchemy import select
6
6
  from starlette.requests import Request
@@ -23,6 +23,7 @@ from phoenix.server.api.routers.v1.utils import (
23
23
  add_errors_to_responses,
24
24
  )
25
25
  from phoenix.server.api.types.Project import Project as ProjectNodeType
26
+ from phoenix.server.authorization import is_not_locked
26
27
 
27
28
  router = APIRouter(tags=["projects"])
28
29
 
@@ -173,6 +174,7 @@ async def get_project(
173
174
 
174
175
  @router.post(
175
176
  "/projects",
177
+ dependencies=[Depends(is_not_locked)],
176
178
  operation_id="createProject",
177
179
  summary="Create a new project", # noqa: E501
178
180
  description="Create a new project with the specified configuration.", # noqa: E501
@@ -213,6 +215,7 @@ async def create_project(
213
215
 
214
216
  @router.put(
215
217
  "/projects/{project_identifier}",
218
+ dependencies=[Depends(is_not_locked)],
216
219
  operation_id="updateProject",
217
220
  summary="Update a project by ID or name", # noqa: E501
218
221
  description="Update an existing project with new configuration. Project names cannot be changed. The project identifier is either project ID or project name. Note: When using a project name as the identifier, it cannot contain slash (/), question mark (?), or pound sign (#) characters.", # noqa: E501
@@ -1,7 +1,7 @@
1
1
  import logging
2
2
  from typing import Any, Optional, Union
3
3
 
4
- from fastapi import APIRouter, HTTPException, Path, Query
4
+ from fastapi import APIRouter, Depends, HTTPException, Path, Query
5
5
  from pydantic import ValidationError, model_validator
6
6
  from sqlalchemy import select
7
7
  from sqlalchemy.sql import Select
@@ -33,6 +33,7 @@ from phoenix.server.api.types.node import from_global_id_with_expected_type
33
33
  from phoenix.server.api.types.Prompt import Prompt as PromptNodeType
34
34
  from phoenix.server.api.types.PromptVersion import PromptVersion as PromptVersionNodeType
35
35
  from phoenix.server.api.types.PromptVersionTag import PromptVersionTag as PromptVersionTagNodeType
36
+ from phoenix.server.authorization import is_not_locked
36
37
  from phoenix.server.bearer_auth import PhoenixUser
37
38
 
38
39
  logger = logging.getLogger(__name__)
@@ -393,6 +394,7 @@ async def get_prompt_version_by_latest(
393
394
 
394
395
  @router.post(
395
396
  "/prompts",
397
+ dependencies=[Depends(is_not_locked)],
396
398
  operation_id="postPromptVersion",
397
399
  summary="Create a new prompt",
398
400
  description="Create a new prompt and its initial version. A prompt can have multiple versions.",
@@ -602,6 +604,7 @@ async def list_prompt_version_tags(
602
604
 
603
605
  @router.post(
604
606
  "/prompt_versions/{prompt_version_id}/tags",
607
+ dependencies=[Depends(is_not_locked)],
605
608
  operation_id="createPromptVersionTag",
606
609
  summary="Add tag to prompt version",
607
610
  description="Add a new tag to a specific prompt version. Tags help identify and categorize "
@@ -8,7 +8,7 @@ from secrets import token_urlsafe
8
8
  from typing import Annotated, Any, Literal, Optional, Union
9
9
 
10
10
  import pandas as pd
11
- from fastapi import APIRouter, Header, HTTPException, Path, Query
11
+ from fastapi import APIRouter, Depends, Header, HTTPException, Path, Query
12
12
  from pydantic import BaseModel, Field
13
13
  from sqlalchemy import select
14
14
  from starlette.requests import Request
@@ -28,6 +28,7 @@ from phoenix.db.helpers import SupportedSQLDialect
28
28
  from phoenix.db.insertion.helpers import as_kv, insert_on_conflict
29
29
  from phoenix.db.insertion.types import Precursors
30
30
  from phoenix.server.api.routers.utils import df_to_bytes
31
+ from phoenix.server.authorization import is_not_locked
31
32
  from phoenix.server.bearer_auth import PhoenixUser
32
33
  from phoenix.server.dml_event import SpanAnnotationInsertEvent
33
34
  from phoenix.trace.attributes import flatten
@@ -907,6 +908,7 @@ class AnnotateSpansResponseBody(ResponseBody[list[InsertedSpanAnnotation]]):
907
908
 
908
909
  @router.post(
909
910
  "/span_annotations",
911
+ dependencies=[Depends(is_not_locked)],
910
912
  operation_id="annotateSpans",
911
913
  summary="Create span annotations",
912
914
  responses=add_errors_to_responses(
@@ -990,6 +992,7 @@ class CreateSpansResponseBody(V1RoutesBaseModel):
990
992
 
991
993
  @router.post(
992
994
  "/projects/{project_identifier}/spans",
995
+ dependencies=[Depends(is_not_locked)],
993
996
  operation_id="createSpans",
994
997
  summary="Create spans",
995
998
  description=(
@@ -2,7 +2,7 @@ import gzip
2
2
  import zlib
3
3
  from typing import Any, Literal, Optional
4
4
 
5
- from fastapi import APIRouter, BackgroundTasks, Header, HTTPException, Query
5
+ from fastapi import APIRouter, BackgroundTasks, Depends, Header, HTTPException, Query
6
6
  from google.protobuf.message import DecodeError
7
7
  from opentelemetry.proto.collector.trace.v1.trace_service_pb2 import (
8
8
  ExportTraceServiceRequest,
@@ -24,6 +24,7 @@ from strawberry.relay import GlobalID
24
24
  from phoenix.db import models
25
25
  from phoenix.db.insertion.helpers import as_kv
26
26
  from phoenix.db.insertion.types import Precursors
27
+ from phoenix.server.authorization import is_not_locked
27
28
  from phoenix.server.bearer_auth import PhoenixUser
28
29
  from phoenix.server.dml_event import TraceAnnotationInsertEvent
29
30
  from phoenix.trace.otel import decode_otlp_span
@@ -37,6 +38,7 @@ router = APIRouter(tags=["traces"])
37
38
 
38
39
  @router.post(
39
40
  "/traces",
41
+ dependencies=[Depends(is_not_locked)],
40
42
  operation_id="addTraces",
41
43
  summary="Send traces",
42
44
  responses=add_errors_to_responses(
@@ -160,6 +162,7 @@ class AnnotateTracesResponseBody(ResponseBody[list[InsertedTraceAnnotation]]):
160
162
 
161
163
  @router.post(
162
164
  "/trace_annotations",
165
+ dependencies=[Depends(is_not_locked)],
163
166
  operation_id="annotateTraces",
164
167
  summary="Create trace annotations",
165
168
  responses=add_errors_to_responses(
@@ -43,7 +43,7 @@ from phoenix.server.api.routers.v1.utils import (
43
43
  add_errors_to_responses,
44
44
  )
45
45
  from phoenix.server.api.types.node import from_global_id_with_expected_type
46
- from phoenix.server.authorization import require_admin
46
+ from phoenix.server.authorization import is_not_locked, require_admin
47
47
 
48
48
  logger = logging.getLogger(__name__)
49
49
 
@@ -194,7 +194,7 @@ async def list_users(
194
194
  HTTP_422_UNPROCESSABLE_ENTITY,
195
195
  ]
196
196
  ),
197
- dependencies=[Depends(require_admin)],
197
+ dependencies=[Depends(require_admin), Depends(is_not_locked)],
198
198
  response_model_by_alias=True,
199
199
  response_model_exclude_unset=True,
200
200
  response_model_exclude_defaults=True,