arize-phoenix 12.4.0__tar.gz → 12.6.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of arize-phoenix might be problematic. Click here for more details.

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