arize-phoenix 8.7.0__tar.gz → 8.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.

Files changed (373) hide show
  1. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/PKG-INFO +2 -2
  2. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/README.md +1 -1
  3. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/pyproject.toml +0 -128
  4. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/config.py +11 -0
  5. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/helpers/playground_clients.py +21 -0
  6. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/helpers/prompts/models.py +23 -2
  7. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/input_types/InvocationParameters.py +1 -0
  8. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/mutations/prompt_label_mutations.py +6 -5
  9. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/mutations/prompt_mutations.py +6 -5
  10. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/mutations/prompt_version_tag_mutations.py +3 -2
  11. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/queries.py +14 -1
  12. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/routers/v1/experiments.py +103 -2
  13. arize_phoenix-8.9.0/src/phoenix/server/static/.vite/manifest.json +87 -0
  14. arize_phoenix-8.7.0/src/phoenix/server/static/assets/components-Bj66FcRz.js → arize_phoenix-8.9.0/src/phoenix/server/static/assets/components-C4AzQH6p.js +245 -238
  15. arize_phoenix-8.7.0/src/phoenix/server/static/assets/index-Dwk10lgb.js → arize_phoenix-8.9.0/src/phoenix/server/static/assets/index-DYSOLesW.js +1 -1
  16. arize_phoenix-8.7.0/src/phoenix/server/static/assets/pages-BNZVqOUi.js → arize_phoenix-8.9.0/src/phoenix/server/static/assets/pages-DEHszGOs.js +385 -341
  17. arize_phoenix-8.7.0/src/phoenix/server/static/assets/vendor-yn6w6Ozi.js → arize_phoenix-8.9.0/src/phoenix/server/static/assets/vendor-VJCVsFqd.js +161 -161
  18. arize_phoenix-8.7.0/src/phoenix/server/static/assets/vendor-arizeai-DoGO67dU.js → arize_phoenix-8.9.0/src/phoenix/server/static/assets/vendor-arizeai-CLxvyk4B.js +1 -1
  19. arize_phoenix-8.7.0/src/phoenix/server/static/assets/vendor-codemirror-BLdSYxpm.js → arize_phoenix-8.9.0/src/phoenix/server/static/assets/vendor-codemirror-0mUqu36F.js +11 -11
  20. arize_phoenix-8.7.0/src/phoenix/server/static/assets/vendor-recharts-CjOpOw1c.js → arize_phoenix-8.9.0/src/phoenix/server/static/assets/vendor-recharts-CfKQSOmq.js +1 -1
  21. arize_phoenix-8.7.0/src/phoenix/server/static/assets/vendor-shiki-BwTCxCQY.js → arize_phoenix-8.9.0/src/phoenix/server/static/assets/vendor-shiki-BsgMOuir.js +1 -1
  22. arize_phoenix-8.9.0/src/phoenix/version.py +1 -0
  23. arize_phoenix-8.7.0/src/phoenix/server/static/.vite/manifest.json +0 -87
  24. arize_phoenix-8.7.0/src/phoenix/version.py +0 -1
  25. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/.gitignore +0 -0
  26. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/IP_NOTICE +0 -0
  27. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/LICENSE +0 -0
  28. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/__init__.py +0 -0
  29. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/auth.py +0 -0
  30. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/core/__init__.py +0 -0
  31. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/core/embedding_dimension.py +0 -0
  32. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/core/model.py +0 -0
  33. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/core/model_schema.py +0 -0
  34. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/core/model_schema_adapter.py +0 -0
  35. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/datetime_utils.py +0 -0
  36. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/db/README.md +0 -0
  37. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/db/__init__.py +0 -0
  38. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/db/alembic.ini +0 -0
  39. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/db/bulk_inserter.py +0 -0
  40. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/db/engines.py +0 -0
  41. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/db/enums.py +0 -0
  42. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/db/facilitator.py +0 -0
  43. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/db/helpers.py +0 -0
  44. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/db/insertion/__init__.py +0 -0
  45. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/db/insertion/constants.py +0 -0
  46. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/db/insertion/dataset.py +0 -0
  47. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/db/insertion/document_annotation.py +0 -0
  48. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/db/insertion/evaluation.py +0 -0
  49. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/db/insertion/helpers.py +0 -0
  50. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/db/insertion/span.py +0 -0
  51. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/db/insertion/span_annotation.py +0 -0
  52. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/db/insertion/trace_annotation.py +0 -0
  53. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/db/insertion/types.py +0 -0
  54. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/db/migrate.py +0 -0
  55. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/db/migrations/__init__.py +0 -0
  56. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/db/migrations/data_migration_scripts/__init__.py +0 -0
  57. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/db/migrations/data_migration_scripts/populate_project_sessions.py +0 -0
  58. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/db/migrations/env.py +0 -0
  59. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/db/migrations/script.py.mako +0 -0
  60. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/db/migrations/versions/10460e46d750_datasets.py +0 -0
  61. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/db/migrations/versions/3be8647b87d8_add_token_columns_to_spans_table.py +0 -0
  62. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/db/migrations/versions/4ded9e43755f_create_project_sessions_table.py +0 -0
  63. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/db/migrations/versions/bc8fea3c2bc8_add_prompt_tables.py +0 -0
  64. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/db/migrations/versions/cd164e83824f_users_and_tokens.py +0 -0
  65. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/db/migrations/versions/cf03bd6bae1d_init.py +0 -0
  66. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/db/models.py +0 -0
  67. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/db/types/__init__.py +0 -0
  68. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/db/types/identifier.py +0 -0
  69. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/db/types/model_provider.py +0 -0
  70. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/exceptions.py +0 -0
  71. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/experiments/__init__.py +0 -0
  72. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/experiments/evaluators/__init__.py +0 -0
  73. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/experiments/evaluators/base.py +0 -0
  74. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/experiments/evaluators/code_evaluators.py +0 -0
  75. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/experiments/evaluators/llm_evaluators.py +0 -0
  76. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/experiments/evaluators/utils.py +0 -0
  77. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/experiments/functions.py +0 -0
  78. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/experiments/tracing.py +0 -0
  79. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/experiments/types.py +0 -0
  80. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/experiments/utils.py +0 -0
  81. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/inferences/__init__.py +0 -0
  82. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/inferences/errors.py +0 -0
  83. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/inferences/fixtures.py +0 -0
  84. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/inferences/inferences.py +0 -0
  85. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/inferences/schema.py +0 -0
  86. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/inferences/validation.py +0 -0
  87. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/logging/__init__.py +0 -0
  88. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/logging/_config.py +0 -0
  89. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/logging/_filter.py +0 -0
  90. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/logging/_formatter.py +0 -0
  91. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/metrics/README.md +0 -0
  92. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/metrics/__init__.py +0 -0
  93. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/metrics/binning.py +0 -0
  94. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/metrics/metrics.py +0 -0
  95. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/metrics/mixins.py +0 -0
  96. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/metrics/retrieval_metrics.py +0 -0
  97. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/metrics/timeseries.py +0 -0
  98. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/metrics/wrappers.py +0 -0
  99. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/pointcloud/__init__.py +0 -0
  100. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/pointcloud/clustering.py +0 -0
  101. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/pointcloud/pointcloud.py +0 -0
  102. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/pointcloud/projectors.py +0 -0
  103. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/pointcloud/umap_parameters.py +0 -0
  104. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/py.typed +0 -0
  105. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/__init__.py +0 -0
  106. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/README.md +0 -0
  107. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/__init__.py +0 -0
  108. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/auth.py +0 -0
  109. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/context.py +0 -0
  110. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/dataloaders/__init__.py +0 -0
  111. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/dataloaders/annotation_summaries.py +0 -0
  112. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/dataloaders/average_experiment_run_latency.py +0 -0
  113. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/dataloaders/cache/__init__.py +0 -0
  114. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/dataloaders/cache/two_tier_cache.py +0 -0
  115. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/dataloaders/dataset_example_revisions.py +0 -0
  116. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/dataloaders/dataset_example_spans.py +0 -0
  117. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/dataloaders/document_evaluation_summaries.py +0 -0
  118. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/dataloaders/document_evaluations.py +0 -0
  119. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/dataloaders/document_retrieval_metrics.py +0 -0
  120. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/dataloaders/experiment_annotation_summaries.py +0 -0
  121. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/dataloaders/experiment_error_rates.py +0 -0
  122. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/dataloaders/experiment_run_annotations.py +0 -0
  123. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/dataloaders/experiment_run_counts.py +0 -0
  124. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/dataloaders/experiment_sequence_number.py +0 -0
  125. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/dataloaders/latency_ms_quantile.py +0 -0
  126. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/dataloaders/min_start_or_max_end_times.py +0 -0
  127. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/dataloaders/num_child_spans.py +0 -0
  128. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/dataloaders/num_spans_per_trace.py +0 -0
  129. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/dataloaders/project_by_name.py +0 -0
  130. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/dataloaders/prompt_version_sequence_number.py +0 -0
  131. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/dataloaders/record_counts.py +0 -0
  132. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/dataloaders/session_io.py +0 -0
  133. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/dataloaders/session_num_traces.py +0 -0
  134. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/dataloaders/session_num_traces_with_error.py +0 -0
  135. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/dataloaders/session_token_usages.py +0 -0
  136. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/dataloaders/session_trace_latency_ms_quantile.py +0 -0
  137. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/dataloaders/span_annotations.py +0 -0
  138. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/dataloaders/span_by_id.py +0 -0
  139. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/dataloaders/span_dataset_examples.py +0 -0
  140. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/dataloaders/span_descendants.py +0 -0
  141. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/dataloaders/span_projects.py +0 -0
  142. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/dataloaders/table_fields.py +0 -0
  143. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/dataloaders/token_counts.py +0 -0
  144. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/dataloaders/trace_by_trace_ids.py +0 -0
  145. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/dataloaders/trace_root_spans.py +0 -0
  146. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/dataloaders/user_roles.py +0 -0
  147. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/dataloaders/users.py +0 -0
  148. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/exceptions.py +0 -0
  149. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/helpers/__init__.py +0 -0
  150. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/helpers/dataset_helpers.py +0 -0
  151. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/helpers/experiment_run_filters.py +0 -0
  152. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/helpers/playground_registry.py +0 -0
  153. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/helpers/playground_spans.py +0 -0
  154. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/helpers/prompts/__init__.py +0 -0
  155. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/helpers/prompts/conversions/__init__.py +0 -0
  156. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/helpers/prompts/conversions/anthropic.py +0 -0
  157. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/helpers/prompts/conversions/openai.py +0 -0
  158. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/input_types/AddExamplesToDatasetInput.py +0 -0
  159. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/input_types/AddSpansToDatasetInput.py +0 -0
  160. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/input_types/ChatCompletionInput.py +0 -0
  161. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/input_types/ChatCompletionMessageInput.py +0 -0
  162. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/input_types/ClearProjectInput.py +0 -0
  163. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/input_types/ClusterInput.py +0 -0
  164. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/input_types/Coordinates.py +0 -0
  165. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/input_types/CreateDatasetInput.py +0 -0
  166. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/input_types/CreateSpanAnnotationInput.py +0 -0
  167. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/input_types/CreateTraceAnnotationInput.py +0 -0
  168. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/input_types/DataQualityMetricInput.py +0 -0
  169. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/input_types/DatasetExampleInput.py +0 -0
  170. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/input_types/DatasetSort.py +0 -0
  171. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/input_types/DatasetVersionSort.py +0 -0
  172. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/input_types/DeleteAnnotationsInput.py +0 -0
  173. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/input_types/DeleteDatasetExamplesInput.py +0 -0
  174. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/input_types/DeleteDatasetInput.py +0 -0
  175. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/input_types/DeleteExperimentsInput.py +0 -0
  176. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/input_types/DimensionFilter.py +0 -0
  177. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/input_types/DimensionInput.py +0 -0
  178. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/input_types/GenerativeModelInput.py +0 -0
  179. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/input_types/Granularity.py +0 -0
  180. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/input_types/PatchAnnotationInput.py +0 -0
  181. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/input_types/PatchDatasetExamplesInput.py +0 -0
  182. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/input_types/PatchDatasetInput.py +0 -0
  183. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/input_types/PerformanceMetricInput.py +0 -0
  184. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/input_types/ProjectSessionSort.py +0 -0
  185. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/input_types/PromptTemplateOptions.py +0 -0
  186. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/input_types/PromptVersionInput.py +0 -0
  187. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/input_types/SpanAnnotationSort.py +0 -0
  188. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/input_types/SpanSort.py +0 -0
  189. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/input_types/TimeRange.py +0 -0
  190. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/input_types/TraceAnnotationSort.py +0 -0
  191. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/input_types/UserRoleInput.py +0 -0
  192. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/input_types/__init__.py +0 -0
  193. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/interceptor.py +0 -0
  194. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/mutations/__init__.py +0 -0
  195. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/mutations/api_key_mutations.py +0 -0
  196. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/mutations/chat_mutations.py +0 -0
  197. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/mutations/dataset_mutations.py +0 -0
  198. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/mutations/experiment_mutations.py +0 -0
  199. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/mutations/export_events_mutations.py +0 -0
  200. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/mutations/project_mutations.py +0 -0
  201. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/mutations/span_annotations_mutations.py +0 -0
  202. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/mutations/trace_annotations_mutations.py +0 -0
  203. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/mutations/user_mutations.py +0 -0
  204. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/openapi/__init__.py +0 -0
  205. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/openapi/main.py +0 -0
  206. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/openapi/schema.py +0 -0
  207. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/routers/__init__.py +0 -0
  208. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/routers/auth.py +0 -0
  209. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/routers/embeddings.py +0 -0
  210. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/routers/oauth2.py +0 -0
  211. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/routers/utils.py +0 -0
  212. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/routers/v1/__init__.py +0 -0
  213. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/routers/v1/datasets.py +0 -0
  214. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/routers/v1/evaluations.py +0 -0
  215. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/routers/v1/experiment_evaluations.py +0 -0
  216. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/routers/v1/experiment_runs.py +0 -0
  217. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/routers/v1/models.py +0 -0
  218. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/routers/v1/prompts.py +0 -0
  219. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/routers/v1/spans.py +0 -0
  220. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/routers/v1/traces.py +0 -0
  221. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/routers/v1/utils.py +0 -0
  222. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/schema.py +0 -0
  223. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/subscriptions.py +0 -0
  224. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/Annotation.py +0 -0
  225. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/AnnotationSummary.py +0 -0
  226. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/AnnotatorKind.py +0 -0
  227. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/ApiKey.py +0 -0
  228. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/AuthMethod.py +0 -0
  229. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/ChatCompletionMessageRole.py +0 -0
  230. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/ChatCompletionSubscriptionPayload.py +0 -0
  231. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/Cluster.py +0 -0
  232. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/CreateDatasetPayload.py +0 -0
  233. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/DataQualityMetric.py +0 -0
  234. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/Dataset.py +0 -0
  235. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/DatasetExample.py +0 -0
  236. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/DatasetExampleRevision.py +0 -0
  237. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/DatasetValues.py +0 -0
  238. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/DatasetVersion.py +0 -0
  239. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/Dimension.py +0 -0
  240. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/DimensionDataType.py +0 -0
  241. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/DimensionShape.py +0 -0
  242. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/DimensionType.py +0 -0
  243. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/DimensionWithValue.py +0 -0
  244. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/DocumentEvaluationSummary.py +0 -0
  245. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/DocumentRetrievalMetrics.py +0 -0
  246. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/EmbeddingDimension.py +0 -0
  247. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/EmbeddingMetadata.py +0 -0
  248. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/Evaluation.py +0 -0
  249. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/EvaluationSummary.py +0 -0
  250. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/Event.py +0 -0
  251. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/EventMetadata.py +0 -0
  252. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/ExampleRevisionInterface.py +0 -0
  253. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/Experiment.py +0 -0
  254. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/ExperimentAnnotationSummary.py +0 -0
  255. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/ExperimentComparison.py +0 -0
  256. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/ExperimentRun.py +0 -0
  257. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/ExperimentRunAnnotation.py +0 -0
  258. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/ExportedFile.py +0 -0
  259. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/Functionality.py +0 -0
  260. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/GenerativeModel.py +0 -0
  261. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/GenerativeProvider.py +0 -0
  262. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/Identifier.py +0 -0
  263. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/Inferences.py +0 -0
  264. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/InferencesRole.py +0 -0
  265. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/LabelFraction.py +0 -0
  266. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/MimeType.py +0 -0
  267. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/Model.py +0 -0
  268. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/NumericRange.py +0 -0
  269. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/PerformanceMetric.py +0 -0
  270. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/Project.py +0 -0
  271. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/ProjectSession.py +0 -0
  272. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/Prompt.py +0 -0
  273. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/PromptLabel.py +0 -0
  274. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/PromptResponse.py +0 -0
  275. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/PromptVersion.py +0 -0
  276. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/PromptVersionTag.py +0 -0
  277. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/PromptVersionTemplate.py +0 -0
  278. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/ResponseFormat.py +0 -0
  279. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/Retrieval.py +0 -0
  280. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/ScalarDriftMetricEnum.py +0 -0
  281. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/Segments.py +0 -0
  282. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/SortDir.py +0 -0
  283. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/Span.py +0 -0
  284. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/SpanAnnotation.py +0 -0
  285. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/SpanIOValue.py +0 -0
  286. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/SystemApiKey.py +0 -0
  287. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/TimeSeries.py +0 -0
  288. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/TokenUsage.py +0 -0
  289. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/ToolDefinition.py +0 -0
  290. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/Trace.py +0 -0
  291. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/TraceAnnotation.py +0 -0
  292. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/UMAPPoints.py +0 -0
  293. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/User.py +0 -0
  294. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/UserApiKey.py +0 -0
  295. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/UserRole.py +0 -0
  296. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/ValidationResult.py +0 -0
  297. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/VectorDriftMetricEnum.py +0 -0
  298. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/__init__.py +0 -0
  299. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/node.py +0 -0
  300. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/types/pagination.py +0 -0
  301. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/api/utils.py +0 -0
  302. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/app.py +0 -0
  303. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/bearer_auth.py +0 -0
  304. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/dml_event.py +0 -0
  305. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/dml_event_handler.py +0 -0
  306. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/email/__init__.py +0 -0
  307. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/email/sender.py +0 -0
  308. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/email/templates/__init__.py +0 -0
  309. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/email/templates/password_reset.html +0 -0
  310. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/email/types.py +0 -0
  311. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/grpc_server.py +0 -0
  312. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/jwt_store.py +0 -0
  313. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/main.py +0 -0
  314. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/oauth2.py +0 -0
  315. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/openapi/__init__.py +0 -0
  316. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/prometheus.py +0 -0
  317. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/rate_limiters.py +0 -0
  318. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/static/apple-touch-icon-114x114.png +0 -0
  319. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/static/apple-touch-icon-120x120.png +0 -0
  320. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/static/apple-touch-icon-144x144.png +0 -0
  321. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/static/apple-touch-icon-152x152.png +0 -0
  322. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/static/apple-touch-icon-180x180.png +0 -0
  323. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/static/apple-touch-icon-72x72.png +0 -0
  324. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/static/apple-touch-icon-76x76.png +0 -0
  325. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/static/apple-touch-icon.png +0 -0
  326. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/static/assets/vendor-Cg6lcjUC.css +0 -0
  327. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/static/assets/vendor-three-C-AGeJYv.js +0 -0
  328. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/static/favicon.ico +0 -0
  329. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/static/modernizr.js +0 -0
  330. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/telemetry.py +0 -0
  331. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/templates/__init__.py +0 -0
  332. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/templates/index.html +0 -0
  333. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/thread_server.py +0 -0
  334. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/server/types.py +0 -0
  335. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/services.py +0 -0
  336. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/session/__init__.py +0 -0
  337. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/session/client.py +0 -0
  338. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/session/data_extractor.py +0 -0
  339. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/session/evaluation.py +0 -0
  340. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/session/session.py +0 -0
  341. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/settings.py +0 -0
  342. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/trace/__init__.py +0 -0
  343. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/trace/attributes.py +0 -0
  344. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/trace/dsl/README.md +0 -0
  345. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/trace/dsl/__init__.py +0 -0
  346. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/trace/dsl/filter.py +0 -0
  347. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/trace/dsl/helpers.py +0 -0
  348. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/trace/dsl/query.py +0 -0
  349. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/trace/errors.py +0 -0
  350. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/trace/evaluation_conventions.py +0 -0
  351. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/trace/exporter.py +0 -0
  352. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/trace/fixtures.py +0 -0
  353. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/trace/otel.py +0 -0
  354. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/trace/projects.py +0 -0
  355. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/trace/schemas.py +0 -0
  356. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/trace/span_evaluations.py +0 -0
  357. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/trace/span_json_decoder.py +0 -0
  358. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/trace/span_json_encoder.py +0 -0
  359. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/trace/trace_dataset.py +0 -0
  360. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/trace/utils.py +0 -0
  361. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/trace/v1/__init__.py +0 -0
  362. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/trace/v1/evaluation_pb2.py +0 -0
  363. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/trace/v1/evaluation_pb2.pyi +0 -0
  364. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/utilities/__init__.py +0 -0
  365. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/utilities/client.py +0 -0
  366. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/utilities/deprecation.py +0 -0
  367. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/utilities/error_handling.py +0 -0
  368. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/utilities/json.py +0 -0
  369. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/utilities/logging.py +0 -0
  370. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/utilities/project.py +0 -0
  371. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/utilities/re.py +0 -0
  372. {arize_phoenix-8.7.0 → arize_phoenix-8.9.0}/src/phoenix/utilities/span_store.py +0 -0
  373. {arize_phoenix-8.7.0 → arize_phoenix-8.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: 8.7.0
3
+ Version: 8.9.0
4
4
  Summary: AI Observability and Evaluation
5
5
  Project-URL: Documentation, https://docs.arize.com/phoenix/
6
6
  Project-URL: Issues, https://github.com/Arize-ai/phoenix/issues
@@ -164,7 +164,7 @@ Phoenix is an open-source AI observability platform designed for experimentation
164
164
  - [**_Playground_**](https://docs.arize.com/phoenix/prompt-engineering/overview-prompts)- Optimize prompts, compare models, adjust parameters, and replay traced LLM calls.
165
165
  - [**_Prompt Mangement_**](https://docs.arize.com/phoenix/prompt-engineering/overview-prompts/prompt-management)- Manage and test prompt changes systematically using version control, tagging, and experimentation.
166
166
 
167
- Phoenix is vendor and language agnostic with out-of-the-box support for popular frameworks (🦙[LlamaIndex](https://docs.arize.com/phoenix/tracing/integrations-tracing/llamaindex), 🦜⛓[LangChain](https://docs.arize.com/phoenix/tracing/integrations-tracing/langchain), [Haystack](https://docs.arize.com/phoenix/tracing/integrations-tracing/haystack), 🧩[DSPy](https://docs.arize.com/phoenix/tracing/integrations-tracing/dspy)) and LLM providers ([OpenAI](https://docs.arize.com/phoenix/tracing/integrations-tracing/openai), [Bedrock](https://docs.arize.com/phoenix/tracing/integrations-tracing/bedrock), [MistralAI](https://docs.arize.com/phoenix/tracing/integrations-tracing/mistralai), [VertexAI](https://docs.arize.com/phoenix/tracing/integrations-tracing/vertexai), [LiteLLM](https://docs.arize.com/phoenix/tracing/integrations-tracing/litellm), and more). For details on auto-instrumentation, check out the [OpenInference](https://github.com/Arize-ai/openinference) project.
167
+ Phoenix is vendor and language agnostic with out-of-the-box support for popular frameworks (🦙[LlamaIndex](https://docs.arize.com/phoenix/tracing/integrations-tracing/llamaindex), 🦜⛓[LangChain](https://docs.arize.com/phoenix/tracing/integrations-tracing/langchain), [Haystack](https://docs.arize.com/phoenix/tracing/integrations-tracing/haystack), 🧩[DSPy](https://docs.arize.com/phoenix/tracing/integrations-tracing/dspy), 🤗[smolagents](https://docs.arize.com/phoenix/tracing/integrations-tracing/hfsmolagents)) and LLM providers ([OpenAI](https://docs.arize.com/phoenix/tracing/integrations-tracing/openai), [Bedrock](https://docs.arize.com/phoenix/tracing/integrations-tracing/bedrock), [MistralAI](https://docs.arize.com/phoenix/tracing/integrations-tracing/mistralai), [VertexAI](https://docs.arize.com/phoenix/tracing/integrations-tracing/vertexai), [LiteLLM](https://docs.arize.com/phoenix/tracing/integrations-tracing/litellm), and more). For details on auto-instrumentation, check out the [OpenInference](https://github.com/Arize-ai/openinference) project.
168
168
 
169
169
  Phoenix runs practically anywhere, including your Jupyter notebook, local machine, containerized deployment, or in the cloud.
170
170
 
@@ -36,7 +36,7 @@ Phoenix is an open-source AI observability platform designed for experimentation
36
36
  - [**_Playground_**](https://docs.arize.com/phoenix/prompt-engineering/overview-prompts)- Optimize prompts, compare models, adjust parameters, and replay traced LLM calls.
37
37
  - [**_Prompt Mangement_**](https://docs.arize.com/phoenix/prompt-engineering/overview-prompts/prompt-management)- Manage and test prompt changes systematically using version control, tagging, and experimentation.
38
38
 
39
- Phoenix is vendor and language agnostic with out-of-the-box support for popular frameworks (🦙[LlamaIndex](https://docs.arize.com/phoenix/tracing/integrations-tracing/llamaindex), 🦜⛓[LangChain](https://docs.arize.com/phoenix/tracing/integrations-tracing/langchain), [Haystack](https://docs.arize.com/phoenix/tracing/integrations-tracing/haystack), 🧩[DSPy](https://docs.arize.com/phoenix/tracing/integrations-tracing/dspy)) and LLM providers ([OpenAI](https://docs.arize.com/phoenix/tracing/integrations-tracing/openai), [Bedrock](https://docs.arize.com/phoenix/tracing/integrations-tracing/bedrock), [MistralAI](https://docs.arize.com/phoenix/tracing/integrations-tracing/mistralai), [VertexAI](https://docs.arize.com/phoenix/tracing/integrations-tracing/vertexai), [LiteLLM](https://docs.arize.com/phoenix/tracing/integrations-tracing/litellm), and more). For details on auto-instrumentation, check out the [OpenInference](https://github.com/Arize-ai/openinference) project.
39
+ Phoenix is vendor and language agnostic with out-of-the-box support for popular frameworks (🦙[LlamaIndex](https://docs.arize.com/phoenix/tracing/integrations-tracing/llamaindex), 🦜⛓[LangChain](https://docs.arize.com/phoenix/tracing/integrations-tracing/langchain), [Haystack](https://docs.arize.com/phoenix/tracing/integrations-tracing/haystack), 🧩[DSPy](https://docs.arize.com/phoenix/tracing/integrations-tracing/dspy), 🤗[smolagents](https://docs.arize.com/phoenix/tracing/integrations-tracing/hfsmolagents)) and LLM providers ([OpenAI](https://docs.arize.com/phoenix/tracing/integrations-tracing/openai), [Bedrock](https://docs.arize.com/phoenix/tracing/integrations-tracing/bedrock), [MistralAI](https://docs.arize.com/phoenix/tracing/integrations-tracing/mistralai), [VertexAI](https://docs.arize.com/phoenix/tracing/integrations-tracing/vertexai), [LiteLLM](https://docs.arize.com/phoenix/tracing/integrations-tracing/litellm), and more). For details on auto-instrumentation, check out the [OpenInference](https://github.com/Arize-ai/openinference) project.
40
40
 
41
41
  Phoenix runs practically anywhere, including your Jupyter notebook, local machine, containerized deployment, or in the cloud.
42
42
 
@@ -187,94 +187,6 @@ artifacts = [
187
187
  "src/phoenix/db/migrations",
188
188
  ]
189
189
 
190
- [tool.hatch.envs.default]
191
- dependencies = [
192
- "numpy",
193
- "pandas==2.2.2; python_version>='3.9'",
194
- "pytest==8.3.3",
195
- "pytest-asyncio",
196
- "pytest-cov",
197
- "pytest-postgresql",
198
- "asyncpg",
199
- "psycopg[binary,pool]",
200
- "arize",
201
- "litellm>=1.0.3",
202
- "openai>=1.0.0",
203
- "tenacity",
204
- "protobuf==3.20.2", # version minimum (for tests)
205
- "grpc-interceptor[testing]",
206
- "responses",
207
- "tiktoken",
208
- "typing-extensions==4.7.0",
209
- "httpx", # For OpenAI testing
210
- "respx", # For OpenAI testing
211
- "nest-asyncio", # for executor testing
212
- "asgi-lifespan",
213
- "Faker>=30.1.0",
214
- "uvloop; platform_system != 'Windows'",
215
- ]
216
-
217
- [tool.hatch.envs.type]
218
- dependencies = [
219
- "grpcio",
220
- "litellm>=1.0.3",
221
- "mypy==1.12.1",
222
- "openai>=1.0.0",
223
- "opentelemetry-exporter-otlp",
224
- "opentelemetry-instrumentation-fastapi",
225
- "opentelemetry-instrumentation-grpc",
226
- "opentelemetry-instrumentation-sqlalchemy",
227
- "opentelemetry-proto>=1.12.0",
228
- "opentelemetry-sdk",
229
- "opentelemetry-semantic-conventions",
230
- "pandas-stubs==2.0.3.230814",
231
- "pandas>=1.0",
232
- "prometheus_client",
233
- "py-grpc-prometheus",
234
- "pypistats", # this is needed to type-check third-party packages
235
- "requests", # this is needed to type-check third-party packages
236
- "strawberry-graphql[opentelemetry]==0.253.1", # need to pin version because we're monkey-patching
237
- "tenacity",
238
- "types-cachetools",
239
- "types-protobuf",
240
- "types-psutil",
241
- "types-requests",
242
- "types-setuptools",
243
- "types-tabulate",
244
- "types-tqdm",
245
- ]
246
-
247
- [[tool.hatch.envs.type.matrix]]
248
- python = ["3.9", "3.12"]
249
-
250
- [tool.hatch.envs.style]
251
- detached = true
252
- dependencies = [
253
- "ruff==0.6.9",
254
- ]
255
-
256
- [[tool.hatch.envs.style.matrix]]
257
- python = ["3.9", "3.12"]
258
-
259
- [tool.hatch.envs.notebooks]
260
- detached = true
261
- dependencies = [
262
- "jupyter",
263
- ]
264
-
265
- [tool.hatch.envs.docs]
266
- detached = true
267
- dependencies = [
268
- "pyment",
269
- "interrogate",
270
- ]
271
-
272
- [tool.hatch.envs.default.scripts]
273
- tests = "pytest {args} tests/unit"
274
-
275
- [[tool.hatch.envs.test.matrix]]
276
- python = ["3.9", "3.12"]
277
-
278
190
  [tool.pytest.ini_options]
279
191
  asyncio_mode = "auto"
280
192
  asyncio_default_fixture_loop_scope="function"
@@ -306,26 +218,6 @@ exclude_lines = [
306
218
  "if TYPE_CHECKING:",
307
219
  ]
308
220
 
309
- [tool.hatch.envs.type.scripts]
310
- check = [
311
- "mypy .",
312
- ]
313
-
314
- [tool.hatch.envs.style.scripts]
315
- check = [
316
- "ruff format --check --diff .",
317
- "ruff check .",
318
- ]
319
- fix = [
320
- "ruff format .",
321
- "ruff check --fix .",
322
- ]
323
-
324
- [tool.hatch.envs.notebooks.scripts]
325
- clean = [
326
- "jupyter nbconvert --ClearOutputPreprocessor.enabled=True --ClearMetadataPreprocessor.enabled=True --inplace **/*.ipynb **/internal/*.ipynb **/tracing/*.ipynb **/dolly-pythia-fine-tuned/*.ipynb",
327
- ]
328
-
329
221
  [tool.hatch.envs.publish]
330
222
  dependencies = [
331
223
  "check-wheel-contents",
@@ -342,26 +234,6 @@ pypi = [
342
234
  "twine upload --verbose dist/*",
343
235
  ]
344
236
 
345
- [tool.hatch.envs.docs.scripts]
346
- check = [
347
- "interrogate -vv src/",
348
- ]
349
-
350
- [tool.interrogate]
351
- fail-under = 0
352
- # generate-badge = "badges/"
353
- omit-covered-files = true
354
- ignore-init-method = true
355
- ignore-init-module = true
356
- ignore-magic = false
357
- ignore-semiprivate = false
358
- ignore-private = false
359
- ignore-property-decorators = false
360
- ignore-module = false
361
- ignore-nested-functions = false
362
- ignore-nested-classes = false
363
- ignore-setters = false
364
-
365
237
  [tool.mypy]
366
238
  plugins = ["strawberry.ext.mypy_plugin", "pydantic.mypy"]
367
239
  strict = true
@@ -86,6 +86,13 @@ ENV_PHOENIX_SQL_DATABASE_SCHEMA = "PHOENIX_SQL_DATABASE_SCHEMA"
86
86
  The schema to use for the PostgresSQL database. (This is ignored for SQLite.)
87
87
  See e.g. https://www.postgresql.org/docs/current/ddl-schemas.html
88
88
  """
89
+ ENV_PHOENIX_DATABASE_ALLOCATED_STORAGE_CAPACITY_GIBIBYTES = (
90
+ "PHOENIX_DATABASE_ALLOCATED_STORAGE_CAPACITY_GIBIBYTES"
91
+ )
92
+ """
93
+ The allocated storage capacity for the Phoenix database in gibibytes (2^30 bytes). Use float for
94
+ fractional value. This is currently used only by the UI for informational displays.
95
+ """
89
96
  ENV_PHOENIX_ENABLE_PROMETHEUS = "PHOENIX_ENABLE_PROMETHEUS"
90
97
  """
91
98
  Whether to enable Prometheus. Defaults to false.
@@ -690,6 +697,10 @@ def get_env_database_schema() -> Optional[str]:
690
697
  return getenv(ENV_PHOENIX_SQL_DATABASE_SCHEMA)
691
698
 
692
699
 
700
+ def get_env_database_allocated_storage_capacity_gibibytes() -> Optional[float]:
701
+ return _float_val(ENV_PHOENIX_DATABASE_ALLOCATED_STORAGE_CAPACITY_GIBIBYTES)
702
+
703
+
693
704
  def get_env_enable_prometheus() -> bool:
694
705
  if (enable_promotheus := getenv(ENV_PHOENIX_ENABLE_PROMETHEUS)) is None or (
695
706
  enable_promotheus_lower := enable_promotheus.lower()
@@ -862,6 +862,27 @@ class AnthropicStreamingClient(PlaygroundStreamingClient):
862
862
  return content
863
863
 
864
864
 
865
+ @register_llm_client(
866
+ provider_key=GenerativeProviderKey.ANTHROPIC,
867
+ model_names=[
868
+ "claude-3-7-sonnet-latest",
869
+ "claude-3-7-sonnet-20250219",
870
+ ],
871
+ )
872
+ class AnthropicReasoningStreamingClient(AnthropicStreamingClient):
873
+ @classmethod
874
+ def supported_invocation_parameters(cls) -> list[InvocationParameter]:
875
+ invocation_params = super().supported_invocation_parameters()
876
+ invocation_params.append(
877
+ JSONInvocationParameter(
878
+ invocation_name="thinking",
879
+ canonical_name=CanonicalParameterName.ANTHROPIC_EXTENDED_THINKING,
880
+ label="Thinking Budget",
881
+ )
882
+ )
883
+ return invocation_params
884
+
885
+
865
886
  @register_llm_client(
866
887
  provider_key=GenerativeProviderKey.GOOGLE,
867
888
  model_names=[
@@ -3,8 +3,8 @@ from __future__ import annotations
3
3
  from enum import Enum
4
4
  from typing import Any, Literal, Mapping, Optional, Union
5
5
 
6
- from pydantic import BaseModel, ConfigDict, Field, RootModel
7
- from typing_extensions import Annotated, TypeAlias, TypeGuard, assert_never
6
+ from pydantic import BaseModel, ConfigDict, Field, RootModel, model_validator
7
+ from typing_extensions import Annotated, Self, TypeAlias, TypeGuard, assert_never
8
8
 
9
9
  from phoenix.db.types.model_provider import ModelProvider
10
10
  from phoenix.server.api.helpers.prompts.conversions.anthropic import AnthropicToolChoiceConversion
@@ -370,11 +370,32 @@ class PromptAzureOpenAIInvocationParameters(PromptModel):
370
370
  azure_openai: PromptAzureOpenAIInvocationParametersContent
371
371
 
372
372
 
373
+ class PromptAnthropicThinkingConfigDisabled(PromptModel):
374
+ type: Literal["disabled"]
375
+
376
+
377
+ class PromptAnthropicThinkingConfigEnabled(PromptModel):
378
+ type: Literal["enabled"]
379
+ budget_tokens: int = Field(..., ge=1024)
380
+
381
+
373
382
  class PromptAnthropicInvocationParametersContent(PromptModel):
374
383
  max_tokens: int
375
384
  temperature: float = UNDEFINED
376
385
  top_p: float = UNDEFINED
377
386
  stop_sequences: list[str] = UNDEFINED
387
+ thinking: Annotated[
388
+ Union[PromptAnthropicThinkingConfigDisabled, PromptAnthropicThinkingConfigEnabled],
389
+ Field(..., discriminator="type"),
390
+ ] = UNDEFINED
391
+
392
+ @model_validator(mode="after")
393
+ def check_thinking_budget_tokens_lt_max_tokens(self) -> Self:
394
+ if self.thinking is UNDEFINED:
395
+ return self
396
+ if self.thinking.type == "enabled" and self.thinking.budget_tokens >= self.max_tokens:
397
+ raise ValueError("The thinking budget must be less than max tokens.")
398
+ return self
378
399
 
379
400
 
380
401
  class PromptAnthropicInvocationParameters(PromptModel):
@@ -16,6 +16,7 @@ class CanonicalParameterName(str, Enum):
16
16
  TOOL_CHOICE = "tool_choice"
17
17
  RESPONSE_FORMAT = "response_format"
18
18
  REASONING_EFFORT = "reasoning_effort"
19
+ ANTHROPIC_EXTENDED_THINKING = "anthropic_extended_thinking"
19
20
 
20
21
 
21
22
  @strawberry.enum
@@ -11,6 +11,7 @@ from strawberry.types import Info
11
11
 
12
12
  from phoenix.db import models
13
13
  from phoenix.db.types.identifier import Identifier as IdentifierModel
14
+ from phoenix.server.api.auth import IsLocked, IsNotReadOnly
14
15
  from phoenix.server.api.context import Context
15
16
  from phoenix.server.api.exceptions import Conflict, NotFound
16
17
  from phoenix.server.api.queries import Query
@@ -58,7 +59,7 @@ class PromptLabelMutationPayload:
58
59
 
59
60
  @strawberry.type
60
61
  class PromptLabelMutationMixin:
61
- @strawberry.mutation
62
+ @strawberry.mutation(permission_classes=[IsNotReadOnly, IsLocked]) # type: ignore
62
63
  async def create_prompt_label(
63
64
  self, info: Info[Context, None], input: CreatePromptLabelInput
64
65
  ) -> PromptLabelMutationPayload:
@@ -77,7 +78,7 @@ class PromptLabelMutationMixin:
77
78
  query=Query(),
78
79
  )
79
80
 
80
- @strawberry.mutation
81
+ @strawberry.mutation(permission_classes=[IsNotReadOnly, IsLocked]) # type: ignore
81
82
  async def patch_prompt_label(
82
83
  self, info: Info[Context, None], input: PatchPromptLabelInput
83
84
  ) -> PromptLabelMutationPayload:
@@ -106,7 +107,7 @@ class PromptLabelMutationMixin:
106
107
  query=Query(),
107
108
  )
108
109
 
109
- @strawberry.mutation
110
+ @strawberry.mutation(permission_classes=[IsNotReadOnly]) # type: ignore
110
111
  async def delete_prompt_label(
111
112
  self, info: Info[Context, None], input: DeletePromptLabelInput
112
113
  ) -> PromptLabelMutationPayload:
@@ -130,7 +131,7 @@ class PromptLabelMutationMixin:
130
131
  query=Query(),
131
132
  )
132
133
 
133
- @strawberry.mutation
134
+ @strawberry.mutation(permission_classes=[IsNotReadOnly, IsLocked]) # type: ignore
134
135
  async def set_prompt_label(
135
136
  self, info: Info[Context, None], input: SetPromptLabelInput
136
137
  ) -> PromptLabelMutationPayload:
@@ -160,7 +161,7 @@ class PromptLabelMutationMixin:
160
161
  query=Query(),
161
162
  )
162
163
 
163
- @strawberry.mutation
164
+ @strawberry.mutation(permission_classes=[IsNotReadOnly]) # type: ignore
164
165
  async def unset_prompt_label(
165
166
  self, info: Info[Context, None], input: UnsetPromptLabelInput
166
167
  ) -> PromptLabelMutationPayload:
@@ -13,6 +13,7 @@ from strawberry.types import Info
13
13
  from phoenix.db import models
14
14
  from phoenix.db.types.identifier import Identifier as IdentifierModel
15
15
  from phoenix.db.types.model_provider import ModelProvider
16
+ from phoenix.server.api.auth import IsLocked, IsNotReadOnly
16
17
  from phoenix.server.api.context import Context
17
18
  from phoenix.server.api.exceptions import BadRequest, Conflict, NotFound
18
19
  from phoenix.server.api.helpers.prompts.models import (
@@ -74,7 +75,7 @@ class DeletePromptMutationPayload:
74
75
 
75
76
  @strawberry.type
76
77
  class PromptMutationMixin:
77
- @strawberry.mutation
78
+ @strawberry.mutation(permission_classes=[IsNotReadOnly, IsLocked]) # type: ignore
78
79
  async def create_chat_prompt(
79
80
  self, info: Info[Context, None], input: CreateChatPromptInput
80
81
  ) -> Prompt:
@@ -141,7 +142,7 @@ class PromptMutationMixin:
141
142
  raise Conflict(f"A prompt named '{input.name}' already exists")
142
143
  return to_gql_prompt_from_orm(prompt)
143
144
 
144
- @strawberry.mutation
145
+ @strawberry.mutation(permission_classes=[IsNotReadOnly, IsLocked]) # type: ignore
145
146
  async def create_chat_prompt_version(
146
147
  self,
147
148
  info: Info[Context, None],
@@ -219,7 +220,7 @@ class PromptMutationMixin:
219
220
 
220
221
  return to_gql_prompt_from_orm(prompt)
221
222
 
222
- @strawberry.mutation
223
+ @strawberry.mutation(permission_classes=[IsNotReadOnly]) # type: ignore
223
224
  async def delete_prompt(
224
225
  self, info: Info[Context, None], input: DeletePromptInput
225
226
  ) -> DeletePromptMutationPayload:
@@ -236,7 +237,7 @@ class PromptMutationMixin:
236
237
  await session.commit()
237
238
  return DeletePromptMutationPayload(query=Query())
238
239
 
239
- @strawberry.mutation
240
+ @strawberry.mutation(permission_classes=[IsNotReadOnly, IsLocked]) # type: ignore
240
241
  async def clone_prompt(self, info: Info[Context, None], input: ClonePromptInput) -> Prompt:
241
242
  prompt_id = from_global_id_with_expected_type(
242
243
  global_id=input.prompt_id, expected_type_name=Prompt.__name__
@@ -289,7 +290,7 @@ class PromptMutationMixin:
289
290
  raise Conflict(f"A prompt named '{input.name}' already exists")
290
291
  return to_gql_prompt_from_orm(new_prompt)
291
292
 
292
- @strawberry.mutation
293
+ @strawberry.mutation(permission_classes=[IsNotReadOnly, IsLocked]) # type: ignore
293
294
  async def patch_prompt(self, info: Info[Context, None], input: PatchPromptInput) -> Prompt:
294
295
  prompt_id = from_global_id_with_expected_type(
295
296
  global_id=input.prompt_id, expected_type_name=Prompt.__name__
@@ -10,6 +10,7 @@ from strawberry.types import Info
10
10
 
11
11
  from phoenix.db import models
12
12
  from phoenix.db.types.identifier import Identifier as IdentifierModel
13
+ from phoenix.server.api.auth import IsLocked, IsNotReadOnly
13
14
  from phoenix.server.api.context import Context
14
15
  from phoenix.server.api.exceptions import BadRequest, Conflict, NotFound
15
16
  from phoenix.server.api.queries import Query
@@ -41,7 +42,7 @@ class PromptVersionTagMutationPayload:
41
42
 
42
43
  @strawberry.type
43
44
  class PromptVersionTagMutationMixin:
44
- @strawberry.mutation
45
+ @strawberry.mutation(permission_classes=[IsNotReadOnly]) # type: ignore
45
46
  async def delete_prompt_version_tag(
46
47
  self, info: Info[Context, None], input: DeletePromptVersionTagInput
47
48
  ) -> PromptVersionTagMutationPayload:
@@ -77,7 +78,7 @@ class PromptVersionTagMutationMixin:
77
78
  prompt_version_tag=None, query=Query(), prompt=to_gql_prompt_from_orm(prompt)
78
79
  )
79
80
 
80
- @strawberry.mutation
81
+ @strawberry.mutation(permission_classes=[IsNotReadOnly, IsLocked]) # type: ignore
81
82
  async def set_prompt_version_tag(
82
83
  self, info: Info[Context, None], input: SetPromptVersionTagInput
83
84
  ) -> PromptVersionTagMutationPayload:
@@ -13,7 +13,11 @@ from strawberry.relay import Connection, GlobalID, Node
13
13
  from strawberry.types import Info
14
14
  from typing_extensions import Annotated, TypeAlias, assert_never
15
15
 
16
- from phoenix.config import ENV_PHOENIX_SQL_DATABASE_SCHEMA, getenv
16
+ from phoenix.config import (
17
+ ENV_PHOENIX_SQL_DATABASE_SCHEMA,
18
+ get_env_database_allocated_storage_capacity_gibibytes,
19
+ getenv,
20
+ )
17
21
  from phoenix.db import enums, models
18
22
  from phoenix.db.helpers import SupportedSQLDialect
19
23
  from phoenix.db.models import DatasetExample as OrmExample
@@ -789,6 +793,15 @@ class Query:
789
793
  clustered_events=clustered_events,
790
794
  )
791
795
 
796
+ @strawberry.field(
797
+ description="The allocated storage capacity of the database in bytes. "
798
+ "Return None if this information is unavailable.",
799
+ ) # type: ignore
800
+ async def db_storage_capacity_bytes(self) -> Optional[float]:
801
+ if gibibytes := get_env_database_allocated_storage_capacity_gibibytes():
802
+ return gibibytes * 2**30
803
+ return None
804
+
792
805
  @strawberry.field
793
806
  async def db_table_stats(
794
807
  self,
@@ -1,11 +1,13 @@
1
+ import json
1
2
  from datetime import datetime
2
3
  from random import getrandbits
3
4
  from typing import Any, Optional
4
5
 
5
- from fastapi import APIRouter, HTTPException, Path
6
+ from fastapi import APIRouter, HTTPException, Path, Response
6
7
  from pydantic import Field
7
- from sqlalchemy import select
8
+ from sqlalchemy import and_, func, select
8
9
  from starlette.requests import Request
10
+ from starlette.responses import PlainTextResponse
9
11
  from starlette.status import HTTP_404_NOT_FOUND
10
12
  from strawberry.relay import GlobalID
11
13
 
@@ -306,3 +308,102 @@ async def list_experiments(
306
308
  ]
307
309
 
308
310
  return ListExperimentsResponseBody(data=data)
311
+
312
+
313
+ @router.get(
314
+ "/experiments/{experiment_id}/json",
315
+ operation_id="getExperimentJSON",
316
+ summary="Download experiment runs as a JSON file",
317
+ response_class=PlainTextResponse,
318
+ responses=add_errors_to_responses(
319
+ [
320
+ {"status_code": HTTP_404_NOT_FOUND, "description": "Experiment not found"},
321
+ ]
322
+ ),
323
+ )
324
+ async def get_experiment_jsonl(
325
+ request: Request,
326
+ response: Response,
327
+ experiment_id: str = Path(..., title="Experiment ID"),
328
+ ) -> str:
329
+ experiment_globalid = GlobalID.from_id(experiment_id)
330
+ try:
331
+ experiment_rowid = from_global_id_with_expected_type(experiment_globalid, "Experiment")
332
+ except ValueError:
333
+ raise HTTPException(
334
+ detail=f"Experiment with ID {experiment_globalid} does not exist",
335
+ status_code=HTTP_404_NOT_FOUND,
336
+ )
337
+
338
+ async with request.app.state.db() as session:
339
+ experiment = await session.get(models.Experiment, experiment_rowid)
340
+ if not experiment:
341
+ raise HTTPException(
342
+ detail=f"Experiment with ID {experiment_globalid} does not exist",
343
+ status_code=HTTP_404_NOT_FOUND,
344
+ )
345
+ revision_ids = (
346
+ select(func.max(models.DatasetExampleRevision.id))
347
+ .join(
348
+ models.DatasetExample,
349
+ models.DatasetExample.id == models.DatasetExampleRevision.dataset_example_id,
350
+ )
351
+ .where(
352
+ and_(
353
+ models.DatasetExampleRevision.dataset_version_id
354
+ <= experiment.dataset_version_id,
355
+ models.DatasetExample.dataset_id == experiment.dataset_id,
356
+ )
357
+ )
358
+ .group_by(models.DatasetExampleRevision.dataset_example_id)
359
+ .scalar_subquery()
360
+ )
361
+ runs_and_revisions = (
362
+ await session.execute(
363
+ select(models.ExperimentRun, models.DatasetExampleRevision)
364
+ .join(
365
+ models.DatasetExample,
366
+ models.DatasetExample.id == models.ExperimentRun.dataset_example_id,
367
+ )
368
+ .join(
369
+ models.DatasetExampleRevision,
370
+ and_(
371
+ models.DatasetExample.id
372
+ == models.DatasetExampleRevision.dataset_example_id,
373
+ models.DatasetExampleRevision.id.in_(revision_ids),
374
+ models.DatasetExampleRevision.revision_kind != "DELETE",
375
+ ),
376
+ )
377
+ .where(models.ExperimentRun.experiment_id == experiment_rowid)
378
+ .order_by(
379
+ models.ExperimentRun.dataset_example_id, models.ExperimentRun.repetition_number
380
+ )
381
+ )
382
+ ).all()
383
+ if not runs_and_revisions:
384
+ raise HTTPException(
385
+ detail=f"Experiment with ID {experiment_globalid} has no runs",
386
+ status_code=HTTP_404_NOT_FOUND,
387
+ )
388
+ records = []
389
+ for run, revision in runs_and_revisions:
390
+ record = {
391
+ "example_id": str(
392
+ GlobalID(models.DatasetExample.__name__, str(run.dataset_example_id))
393
+ ),
394
+ "repetition_number": run.repetition_number,
395
+ "input": revision.input,
396
+ "reference_output": revision.output,
397
+ "output": run.output,
398
+ "error": run.error,
399
+ "latency_ms": run.latency_ms,
400
+ "start_time": run.start_time.isoformat(),
401
+ "end_time": run.end_time.isoformat(),
402
+ "trace_id": run.trace_id,
403
+ "prompt_token_count": run.prompt_token_count,
404
+ "completion_token_count": run.completion_token_count,
405
+ }
406
+ records.append(record)
407
+
408
+ response.headers["content-disposition"] = f'attachment; filename="{experiment.name}.json"'
409
+ return json.dumps(records, ensure_ascii=False, indent=2)
@@ -0,0 +1,87 @@
1
+ {
2
+ "_components-C4AzQH6p.js": {
3
+ "file": "assets/components-C4AzQH6p.js",
4
+ "name": "components",
5
+ "imports": [
6
+ "_vendor-VJCVsFqd.js",
7
+ "_pages-DEHszGOs.js",
8
+ "_vendor-arizeai-CLxvyk4B.js",
9
+ "_vendor-codemirror-0mUqu36F.js",
10
+ "_vendor-three-C-AGeJYv.js"
11
+ ]
12
+ },
13
+ "_pages-DEHszGOs.js": {
14
+ "file": "assets/pages-DEHszGOs.js",
15
+ "name": "pages",
16
+ "imports": [
17
+ "_vendor-VJCVsFqd.js",
18
+ "_vendor-arizeai-CLxvyk4B.js",
19
+ "_components-C4AzQH6p.js",
20
+ "_vendor-codemirror-0mUqu36F.js",
21
+ "_vendor-recharts-CfKQSOmq.js"
22
+ ]
23
+ },
24
+ "_vendor-Cg6lcjUC.css": {
25
+ "file": "assets/vendor-Cg6lcjUC.css",
26
+ "src": "_vendor-Cg6lcjUC.css"
27
+ },
28
+ "_vendor-VJCVsFqd.js": {
29
+ "file": "assets/vendor-VJCVsFqd.js",
30
+ "name": "vendor",
31
+ "imports": [
32
+ "_vendor-three-C-AGeJYv.js"
33
+ ],
34
+ "css": [
35
+ "assets/vendor-Cg6lcjUC.css"
36
+ ]
37
+ },
38
+ "_vendor-arizeai-CLxvyk4B.js": {
39
+ "file": "assets/vendor-arizeai-CLxvyk4B.js",
40
+ "name": "vendor-arizeai",
41
+ "imports": [
42
+ "_vendor-VJCVsFqd.js"
43
+ ]
44
+ },
45
+ "_vendor-codemirror-0mUqu36F.js": {
46
+ "file": "assets/vendor-codemirror-0mUqu36F.js",
47
+ "name": "vendor-codemirror",
48
+ "imports": [
49
+ "_vendor-VJCVsFqd.js",
50
+ "_vendor-shiki-BsgMOuir.js"
51
+ ]
52
+ },
53
+ "_vendor-recharts-CfKQSOmq.js": {
54
+ "file": "assets/vendor-recharts-CfKQSOmq.js",
55
+ "name": "vendor-recharts",
56
+ "imports": [
57
+ "_vendor-VJCVsFqd.js"
58
+ ]
59
+ },
60
+ "_vendor-shiki-BsgMOuir.js": {
61
+ "file": "assets/vendor-shiki-BsgMOuir.js",
62
+ "name": "vendor-shiki",
63
+ "imports": [
64
+ "_vendor-VJCVsFqd.js"
65
+ ]
66
+ },
67
+ "_vendor-three-C-AGeJYv.js": {
68
+ "file": "assets/vendor-three-C-AGeJYv.js",
69
+ "name": "vendor-three"
70
+ },
71
+ "index.tsx": {
72
+ "file": "assets/index-DYSOLesW.js",
73
+ "name": "index",
74
+ "src": "index.tsx",
75
+ "isEntry": true,
76
+ "imports": [
77
+ "_vendor-VJCVsFqd.js",
78
+ "_vendor-arizeai-CLxvyk4B.js",
79
+ "_pages-DEHszGOs.js",
80
+ "_components-C4AzQH6p.js",
81
+ "_vendor-three-C-AGeJYv.js",
82
+ "_vendor-codemirror-0mUqu36F.js",
83
+ "_vendor-shiki-BsgMOuir.js",
84
+ "_vendor-recharts-CfKQSOmq.js"
85
+ ]
86
+ }
87
+ }