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

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

Potentially problematic release.


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

Files changed (489) hide show
  1. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/PKG-INFO +1 -1
  2. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/auth.py +8 -2
  3. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/models.py +3 -3
  4. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/auth.py +9 -0
  5. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/context.py +2 -0
  6. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/__init__.py +2 -0
  7. arize_phoenix-12.5.0/src/phoenix/server/api/dataloaders/dataset_dataset_splits.py +52 -0
  8. arize_phoenix-12.5.0/src/phoenix/server/api/input_types/ProjectSessionSort.py +189 -0
  9. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/SpanSort.py +2 -1
  10. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/UserRoleInput.py +1 -0
  11. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/mutations/annotation_config_mutations.py +6 -6
  12. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/mutations/api_key_mutations.py +13 -5
  13. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/mutations/chat_mutations.py +3 -3
  14. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/mutations/dataset_label_mutations.py +6 -6
  15. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/mutations/dataset_mutations.py +8 -8
  16. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/mutations/dataset_split_mutations.py +7 -7
  17. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/mutations/experiment_mutations.py +2 -2
  18. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/mutations/export_events_mutations.py +3 -3
  19. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/mutations/model_mutations.py +4 -4
  20. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/mutations/project_mutations.py +4 -4
  21. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/mutations/project_session_annotations_mutations.py +4 -4
  22. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/mutations/project_trace_retention_policy_mutations.py +8 -4
  23. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/mutations/prompt_label_mutations.py +7 -7
  24. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/mutations/prompt_mutations.py +7 -7
  25. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/mutations/prompt_version_tag_mutations.py +3 -3
  26. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/mutations/span_annotations_mutations.py +5 -5
  27. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/mutations/trace_annotations_mutations.py +4 -4
  28. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/mutations/trace_mutations.py +3 -3
  29. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/mutations/user_mutations.py +8 -5
  30. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/routers/auth.py +2 -2
  31. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/routers/v1/__init__.py +16 -1
  32. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/routers/v1/annotation_configs.py +7 -1
  33. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/routers/v1/datasets.py +48 -8
  34. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/routers/v1/experiment_runs.py +7 -1
  35. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/routers/v1/experiments.py +41 -5
  36. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/routers/v1/projects.py +3 -31
  37. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/routers/v1/users.py +0 -7
  38. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/subscriptions.py +3 -3
  39. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/Dataset.py +95 -6
  40. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/Project.py +24 -68
  41. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/app.py +2 -0
  42. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/authorization.py +3 -1
  43. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/bearer_auth.py +9 -0
  44. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/jwt_store.py +8 -6
  45. arize_phoenix-12.5.0/src/phoenix/server/static/.vite/manifest.json +93 -0
  46. arize_phoenix-12.4.0/src/phoenix/server/static/assets/components-BvsExS75.js → arize_phoenix-12.5.0/src/phoenix/server/static/assets/components-cwdYEs7B.js +501 -394
  47. arize_phoenix-12.4.0/src/phoenix/server/static/assets/index-iq8WDxat.js → arize_phoenix-12.5.0/src/phoenix/server/static/assets/index-Dc0vD1Rn.js +1 -1
  48. arize_phoenix-12.4.0/src/phoenix/server/static/assets/pages-Ckg4SLQ9.js → arize_phoenix-12.5.0/src/phoenix/server/static/assets/pages-BDkB3a_a.js +577 -533
  49. arize_phoenix-12.4.0/src/phoenix/server/static/assets/vendor-D2eEI-6h.js → arize_phoenix-12.5.0/src/phoenix/server/static/assets/vendor-Ce6GTAin.js +1 -1
  50. arize_phoenix-12.4.0/src/phoenix/server/static/assets/vendor-arizeai-kfOei7nf.js → arize_phoenix-12.5.0/src/phoenix/server/static/assets/vendor-arizeai-CSF-1Kc5.js +1 -1
  51. arize_phoenix-12.4.0/src/phoenix/server/static/assets/vendor-codemirror-1bq_t1Ec.js → arize_phoenix-12.5.0/src/phoenix/server/static/assets/vendor-codemirror-Bv8J_7an.js +3 -3
  52. arize_phoenix-12.4.0/src/phoenix/server/static/assets/vendor-recharts-DQ4xfrf4.js → arize_phoenix-12.5.0/src/phoenix/server/static/assets/vendor-recharts-DcLgzI7g.js +1 -1
  53. arize_phoenix-12.4.0/src/phoenix/server/static/assets/vendor-shiki-GGmcIQxA.js → arize_phoenix-12.5.0/src/phoenix/server/static/assets/vendor-shiki-BF8rh_7m.js +1 -1
  54. arize_phoenix-12.5.0/src/phoenix/version.py +1 -0
  55. arize_phoenix-12.4.0/src/phoenix/server/api/input_types/ProjectSessionSort.py +0 -32
  56. arize_phoenix-12.4.0/src/phoenix/server/static/.vite/manifest.json +0 -93
  57. arize_phoenix-12.4.0/src/phoenix/version.py +0 -1
  58. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/.gitignore +0 -0
  59. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/IP_NOTICE +0 -0
  60. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/LICENSE +0 -0
  61. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/README.md +0 -0
  62. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/pyproject.toml +0 -0
  63. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/__init__.py +0 -0
  64. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/config.py +0 -0
  65. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/core/__init__.py +0 -0
  66. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/core/embedding_dimension.py +0 -0
  67. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/core/model.py +0 -0
  68. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/core/model_schema.py +0 -0
  69. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/core/model_schema_adapter.py +0 -0
  70. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/datetime_utils.py +0 -0
  71. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/README.md +0 -0
  72. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/__init__.py +0 -0
  73. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/alembic.ini +0 -0
  74. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/bulk_inserter.py +0 -0
  75. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/constants.py +0 -0
  76. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/engines.py +0 -0
  77. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/enums.py +0 -0
  78. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/facilitator.py +0 -0
  79. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/helpers.py +0 -0
  80. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/insertion/__init__.py +0 -0
  81. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/insertion/constants.py +0 -0
  82. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/insertion/dataset.py +0 -0
  83. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/insertion/document_annotation.py +0 -0
  84. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/insertion/evaluation.py +0 -0
  85. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/insertion/helpers.py +0 -0
  86. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/insertion/session_annotation.py +0 -0
  87. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/insertion/span.py +0 -0
  88. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/insertion/span_annotation.py +0 -0
  89. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/insertion/trace_annotation.py +0 -0
  90. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/insertion/types.py +0 -0
  91. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/migrate.py +0 -0
  92. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/migrations/__init__.py +0 -0
  93. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/migrations/data_migration_scripts/__init__.py +0 -0
  94. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/migrations/data_migration_scripts/populate_project_sessions.py +0 -0
  95. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/migrations/env.py +0 -0
  96. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/migrations/script.py.mako +0 -0
  97. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/migrations/versions/01a8342c9cdf_add_user_id_on_datasets.py +0 -0
  98. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/migrations/versions/0df286449799_add_session_annotations_table.py +0 -0
  99. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/migrations/versions/10460e46d750_datasets.py +0 -0
  100. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/migrations/versions/272b66ff50f8_drop_single_indices.py +0 -0
  101. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/migrations/versions/2f9d1a65945f_annotation_config_migration.py +0 -0
  102. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/migrations/versions/3be8647b87d8_add_token_columns_to_spans_table.py +0 -0
  103. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/migrations/versions/4ded9e43755f_create_project_sessions_table.py +0 -0
  104. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/migrations/versions/58228d933c91_dataset_labels.py +0 -0
  105. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/migrations/versions/699f655af132_experiment_tags.py +0 -0
  106. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/migrations/versions/6a88424799fe_update_users_with_auth_method.py +0 -0
  107. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/migrations/versions/735d3d93c33e_add_composite_indices.py +0 -0
  108. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/migrations/versions/8a3764fe7f1a_change_jsonb_to_json_for_prompts.py +0 -0
  109. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/migrations/versions/a20694b15f82_cost.py +0 -0
  110. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/migrations/versions/ab513d89518b_add_user_id_on_dataset_versions.py +0 -0
  111. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/migrations/versions/bb8139330879_create_project_trace_retention_policies_table.py +0 -0
  112. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/migrations/versions/bc8fea3c2bc8_add_prompt_tables.py +0 -0
  113. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/migrations/versions/cd164e83824f_users_and_tokens.py +0 -0
  114. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/migrations/versions/cf03bd6bae1d_init.py +0 -0
  115. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/migrations/versions/d0690a79ea51_users_on_experiments.py +0 -0
  116. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/migrations/versions/deb2c81c0bb2_dataset_splits.py +0 -0
  117. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/migrations/versions/e76cbd66ffc3_add_experiments_dataset_examples.py +0 -0
  118. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/pg_config.py +0 -0
  119. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/types/__init__.py +0 -0
  120. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/types/annotation_configs.py +0 -0
  121. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/types/db_models.py +0 -0
  122. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/types/identifier.py +0 -0
  123. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/types/model_provider.py +0 -0
  124. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/types/token_price_customization.py +0 -0
  125. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/db/types/trace_retention.py +0 -0
  126. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/exceptions.py +0 -0
  127. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/experiments/__init__.py +0 -0
  128. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/experiments/evaluators/__init__.py +0 -0
  129. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/experiments/evaluators/base.py +0 -0
  130. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/experiments/evaluators/code_evaluators.py +0 -0
  131. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/experiments/evaluators/llm_evaluators.py +0 -0
  132. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/experiments/evaluators/utils.py +0 -0
  133. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/experiments/functions.py +0 -0
  134. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/experiments/tracing.py +0 -0
  135. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/experiments/types.py +0 -0
  136. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/experiments/utils.py +0 -0
  137. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/inferences/__init__.py +0 -0
  138. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/inferences/errors.py +0 -0
  139. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/inferences/fixtures.py +0 -0
  140. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/inferences/inferences.py +0 -0
  141. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/inferences/schema.py +0 -0
  142. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/inferences/validation.py +0 -0
  143. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/logging/__init__.py +0 -0
  144. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/logging/_config.py +0 -0
  145. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/logging/_filter.py +0 -0
  146. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/logging/_formatter.py +0 -0
  147. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/metrics/README.md +0 -0
  148. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/metrics/__init__.py +0 -0
  149. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/metrics/binning.py +0 -0
  150. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/metrics/metrics.py +0 -0
  151. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/metrics/mixins.py +0 -0
  152. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/metrics/retrieval_metrics.py +0 -0
  153. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/metrics/timeseries.py +0 -0
  154. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/metrics/wrappers.py +0 -0
  155. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/pointcloud/__init__.py +0 -0
  156. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/pointcloud/clustering.py +0 -0
  157. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/pointcloud/pointcloud.py +0 -0
  158. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/pointcloud/projectors.py +0 -0
  159. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/pointcloud/umap_parameters.py +0 -0
  160. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/py.typed +0 -0
  161. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/__init__.py +0 -0
  162. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/README.md +0 -0
  163. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/__init__.py +0 -0
  164. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/auth_messages.py +0 -0
  165. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/annotation_configs_by_project.py +0 -0
  166. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/annotation_summaries.py +0 -0
  167. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/average_experiment_repeated_run_group_latency.py +0 -0
  168. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/average_experiment_run_latency.py +0 -0
  169. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/cache/__init__.py +0 -0
  170. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/cache/two_tier_cache.py +0 -0
  171. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/dataset_example_revisions.py +0 -0
  172. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/dataset_example_spans.py +0 -0
  173. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/dataset_example_splits.py +0 -0
  174. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/dataset_examples_and_versions_by_experiment_run.py +0 -0
  175. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/dataset_labels.py +0 -0
  176. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/document_evaluation_summaries.py +0 -0
  177. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/document_evaluations.py +0 -0
  178. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/document_retrieval_metrics.py +0 -0
  179. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/experiment_annotation_summaries.py +0 -0
  180. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/experiment_error_rates.py +0 -0
  181. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/experiment_repeated_run_group_annotation_summaries.py +0 -0
  182. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/experiment_repeated_run_groups.py +0 -0
  183. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/experiment_run_annotations.py +0 -0
  184. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/experiment_run_counts.py +0 -0
  185. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/experiment_sequence_number.py +0 -0
  186. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/last_used_times_by_generative_model_id.py +0 -0
  187. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/latency_ms_quantile.py +0 -0
  188. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/min_start_or_max_end_times.py +0 -0
  189. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/num_child_spans.py +0 -0
  190. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/num_spans_per_trace.py +0 -0
  191. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/project_by_name.py +0 -0
  192. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/project_ids_by_trace_retention_policy_id.py +0 -0
  193. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/prompt_version_sequence_number.py +0 -0
  194. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/record_counts.py +0 -0
  195. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/session_annotations_by_session.py +0 -0
  196. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/session_io.py +0 -0
  197. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/session_num_traces.py +0 -0
  198. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/session_num_traces_with_error.py +0 -0
  199. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/session_token_usages.py +0 -0
  200. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/session_trace_latency_ms_quantile.py +0 -0
  201. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/span_annotations.py +0 -0
  202. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/span_by_id.py +0 -0
  203. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/span_cost_by_span.py +0 -0
  204. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/span_cost_detail_summary_entries_by_generative_model.py +0 -0
  205. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/span_cost_detail_summary_entries_by_project_session.py +0 -0
  206. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/span_cost_detail_summary_entries_by_span.py +0 -0
  207. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/span_cost_detail_summary_entries_by_trace.py +0 -0
  208. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/span_cost_details_by_span_cost.py +0 -0
  209. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_experiment.py +0 -0
  210. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_experiment_repeated_run_group.py +0 -0
  211. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_experiment_run.py +0 -0
  212. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_generative_model.py +0 -0
  213. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_project.py +0 -0
  214. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_project_session.py +0 -0
  215. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_trace.py +0 -0
  216. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/span_costs.py +0 -0
  217. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/span_dataset_examples.py +0 -0
  218. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/span_descendants.py +0 -0
  219. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/span_projects.py +0 -0
  220. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/table_fields.py +0 -0
  221. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/token_counts.py +0 -0
  222. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/trace_annotations_by_trace.py +0 -0
  223. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/trace_by_trace_ids.py +0 -0
  224. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/trace_retention_policy_id_by_project_id.py +0 -0
  225. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/trace_root_spans.py +0 -0
  226. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/types.py +0 -0
  227. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/user_roles.py +0 -0
  228. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/dataloaders/users.py +0 -0
  229. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/exceptions.py +0 -0
  230. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/helpers/__init__.py +0 -0
  231. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/helpers/annotations.py +0 -0
  232. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/helpers/dataset_helpers.py +0 -0
  233. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/helpers/experiment_run_filters.py +0 -0
  234. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/helpers/playground_clients.py +0 -0
  235. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/helpers/playground_registry.py +0 -0
  236. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/helpers/playground_spans.py +0 -0
  237. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/helpers/playground_users.py +0 -0
  238. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/helpers/prompts/__init__.py +0 -0
  239. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/helpers/prompts/conversions/__init__.py +0 -0
  240. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/helpers/prompts/conversions/anthropic.py +0 -0
  241. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/helpers/prompts/conversions/aws.py +0 -0
  242. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/helpers/prompts/conversions/openai.py +0 -0
  243. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/helpers/prompts/models.py +0 -0
  244. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/AddExamplesToDatasetInput.py +0 -0
  245. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/AddSpansToDatasetInput.py +0 -0
  246. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/AnnotationFilter.py +0 -0
  247. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/ChatCompletionInput.py +0 -0
  248. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/ChatCompletionMessageInput.py +0 -0
  249. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/ClearProjectInput.py +0 -0
  250. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/ClusterInput.py +0 -0
  251. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/Coordinates.py +0 -0
  252. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/CreateDatasetInput.py +0 -0
  253. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/CreateProjectInput.py +0 -0
  254. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/CreateProjectSessionAnnotationInput.py +0 -0
  255. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/CreateSpanAnnotationInput.py +0 -0
  256. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/CreateTraceAnnotationInput.py +0 -0
  257. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/DataQualityMetricInput.py +0 -0
  258. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/DatasetExampleInput.py +0 -0
  259. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/DatasetFilter.py +0 -0
  260. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/DatasetSort.py +0 -0
  261. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/DatasetVersionSort.py +0 -0
  262. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/DeleteAnnotationsInput.py +0 -0
  263. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/DeleteDatasetExamplesInput.py +0 -0
  264. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/DeleteDatasetInput.py +0 -0
  265. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/DeleteExperimentsInput.py +0 -0
  266. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/DimensionFilter.py +0 -0
  267. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/DimensionInput.py +0 -0
  268. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/GenerativeCredentialInput.py +0 -0
  269. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/GenerativeModelInput.py +0 -0
  270. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/Granularity.py +0 -0
  271. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/InvocationParameters.py +0 -0
  272. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/PatchAnnotationInput.py +0 -0
  273. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/PatchDatasetExamplesInput.py +0 -0
  274. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/PatchDatasetInput.py +0 -0
  275. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/PerformanceMetricInput.py +0 -0
  276. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/ProjectFilter.py +0 -0
  277. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/ProjectSort.py +0 -0
  278. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/PromptFilter.py +0 -0
  279. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/PromptTemplateOptions.py +0 -0
  280. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/PromptVersionInput.py +0 -0
  281. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/SpanAnnotationSort.py +0 -0
  282. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/TimeBinConfig.py +0 -0
  283. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/TimeRange.py +0 -0
  284. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/TraceAnnotationSort.py +0 -0
  285. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/UpdateAnnotationInput.py +0 -0
  286. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/input_types/__init__.py +0 -0
  287. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/interceptor.py +0 -0
  288. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/mutations/__init__.py +0 -0
  289. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/openapi/__init__.py +0 -0
  290. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/openapi/main.py +0 -0
  291. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/openapi/schema.py +0 -0
  292. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/queries.py +0 -0
  293. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/routers/__init__.py +0 -0
  294. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/routers/embeddings.py +0 -0
  295. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/routers/oauth2.py +0 -0
  296. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/routers/utils.py +0 -0
  297. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/routers/v1/annotations.py +0 -0
  298. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/routers/v1/documents.py +0 -0
  299. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/routers/v1/evaluations.py +0 -0
  300. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/routers/v1/experiment_evaluations.py +0 -0
  301. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/routers/v1/models.py +0 -0
  302. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/routers/v1/prompts.py +0 -0
  303. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/routers/v1/sessions.py +0 -0
  304. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/routers/v1/spans.py +0 -0
  305. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/routers/v1/traces.py +0 -0
  306. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/routers/v1/utils.py +0 -0
  307. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/schema.py +0 -0
  308. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/Annotation.py +0 -0
  309. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/AnnotationConfig.py +0 -0
  310. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/AnnotationSource.py +0 -0
  311. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/AnnotationSummary.py +0 -0
  312. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/AnnotatorKind.py +0 -0
  313. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/ApiKey.py +0 -0
  314. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/AuthMethod.py +0 -0
  315. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/ChatCompletionMessageRole.py +0 -0
  316. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/ChatCompletionSubscriptionPayload.py +0 -0
  317. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/Cluster.py +0 -0
  318. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/CostBreakdown.py +0 -0
  319. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/CreateDatasetPayload.py +0 -0
  320. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/CronExpression.py +0 -0
  321. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/DataQualityMetric.py +0 -0
  322. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/DatasetExample.py +0 -0
  323. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/DatasetExampleRevision.py +0 -0
  324. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/DatasetExperimentAnnotationSummary.py +0 -0
  325. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/DatasetLabel.py +0 -0
  326. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/DatasetSplit.py +0 -0
  327. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/DatasetValues.py +0 -0
  328. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/DatasetVersion.py +0 -0
  329. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/Dimension.py +0 -0
  330. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/DimensionDataType.py +0 -0
  331. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/DimensionShape.py +0 -0
  332. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/DimensionType.py +0 -0
  333. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/DimensionWithValue.py +0 -0
  334. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/DocumentAnnotation.py +0 -0
  335. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/DocumentEvaluationSummary.py +0 -0
  336. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/DocumentRetrievalMetrics.py +0 -0
  337. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/EmbeddingDimension.py +0 -0
  338. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/EmbeddingMetadata.py +0 -0
  339. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/EvaluationSummary.py +0 -0
  340. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/Event.py +0 -0
  341. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/EventMetadata.py +0 -0
  342. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/ExampleRevisionInterface.py +0 -0
  343. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/Experiment.py +0 -0
  344. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/ExperimentAnnotationSummary.py +0 -0
  345. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/ExperimentComparison.py +0 -0
  346. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/ExperimentRepeatedRunGroup.py +0 -0
  347. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/ExperimentRepeatedRunGroupAnnotationSummary.py +0 -0
  348. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/ExperimentRun.py +0 -0
  349. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/ExperimentRunAnnotation.py +0 -0
  350. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/ExportedFile.py +0 -0
  351. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/Functionality.py +0 -0
  352. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/GenerativeModel.py +0 -0
  353. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/GenerativeProvider.py +0 -0
  354. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/Identifier.py +0 -0
  355. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/InferenceModel.py +0 -0
  356. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/Inferences.py +0 -0
  357. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/InferencesRole.py +0 -0
  358. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/LabelFraction.py +0 -0
  359. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/MimeType.py +0 -0
  360. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/ModelInterface.py +0 -0
  361. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/NumericRange.py +0 -0
  362. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/PerformanceMetric.py +0 -0
  363. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/PlaygroundModel.py +0 -0
  364. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/ProjectSession.py +0 -0
  365. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/ProjectSessionAnnotation.py +0 -0
  366. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/ProjectTraceRetentionPolicy.py +0 -0
  367. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/Prompt.py +0 -0
  368. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/PromptLabel.py +0 -0
  369. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/PromptResponse.py +0 -0
  370. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/PromptVersion.py +0 -0
  371. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/PromptVersionTag.py +0 -0
  372. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/PromptVersionTemplate.py +0 -0
  373. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/ResponseFormat.py +0 -0
  374. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/Retrieval.py +0 -0
  375. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/ScalarDriftMetricEnum.py +0 -0
  376. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/Segments.py +0 -0
  377. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/ServerStatus.py +0 -0
  378. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/SortDir.py +0 -0
  379. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/Span.py +0 -0
  380. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/SpanAnnotation.py +0 -0
  381. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/SpanCostDetailSummaryEntry.py +0 -0
  382. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/SpanCostSummary.py +0 -0
  383. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/SpanIOValue.py +0 -0
  384. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/SystemApiKey.py +0 -0
  385. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/TimeSeries.py +0 -0
  386. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/TokenCountPromptDetails.py +0 -0
  387. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/TokenPrice.py +0 -0
  388. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/TokenUsage.py +0 -0
  389. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/ToolDefinition.py +0 -0
  390. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/Trace.py +0 -0
  391. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/TraceAnnotation.py +0 -0
  392. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/UMAPPoints.py +0 -0
  393. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/User.py +0 -0
  394. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/UserApiKey.py +0 -0
  395. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/UserRole.py +0 -0
  396. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/ValidationResult.py +0 -0
  397. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/VectorDriftMetricEnum.py +0 -0
  398. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/__init__.py +0 -0
  399. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/node.py +0 -0
  400. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/types/pagination.py +0 -0
  401. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/api/utils.py +0 -0
  402. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/cost_tracking/__init__.py +0 -0
  403. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/cost_tracking/cost_details_calculator.py +0 -0
  404. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/cost_tracking/cost_model_lookup.py +0 -0
  405. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/cost_tracking/helpers.py +0 -0
  406. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/cost_tracking/model_cost_manifest.json +0 -0
  407. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/cost_tracking/regex_specificity.py +0 -0
  408. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/cost_tracking/token_cost_calculator.py +0 -0
  409. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/daemons/__init__.py +0 -0
  410. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/daemons/db_disk_usage_monitor.py +0 -0
  411. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/daemons/generative_model_store.py +0 -0
  412. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/daemons/span_cost_calculator.py +0 -0
  413. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/dml_event.py +0 -0
  414. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/dml_event_handler.py +0 -0
  415. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/email/__init__.py +0 -0
  416. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/email/sender.py +0 -0
  417. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/email/templates/__init__.py +0 -0
  418. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/email/templates/db_disk_usage_notification.html +0 -0
  419. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/email/templates/password_reset.html +0 -0
  420. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/email/templates/welcome.html +0 -0
  421. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/email/types.py +0 -0
  422. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/experiments/__init__.py +0 -0
  423. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/experiments/utils.py +0 -0
  424. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/grpc_server.py +0 -0
  425. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/main.py +0 -0
  426. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/middleware/__init__.py +0 -0
  427. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/middleware/gzip.py +0 -0
  428. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/oauth2.py +0 -0
  429. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/openapi/__init__.py +0 -0
  430. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/prometheus.py +0 -0
  431. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/rate_limiters.py +0 -0
  432. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/retention.py +0 -0
  433. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/session_filters.py +0 -0
  434. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/static/apple-touch-icon-114x114.png +0 -0
  435. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/static/apple-touch-icon-120x120.png +0 -0
  436. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/static/apple-touch-icon-144x144.png +0 -0
  437. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/static/apple-touch-icon-152x152.png +0 -0
  438. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/static/apple-touch-icon-180x180.png +0 -0
  439. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/static/apple-touch-icon-72x72.png +0 -0
  440. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/static/apple-touch-icon-76x76.png +0 -0
  441. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/static/apple-touch-icon.png +0 -0
  442. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/static/assets/vendor-BGzfc4EU.css +0 -0
  443. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/static/assets/vendor-three-BLWp5bic.js +0 -0
  444. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/static/favicon.ico +0 -0
  445. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/static/modernizr.js +0 -0
  446. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/telemetry.py +0 -0
  447. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/templates/__init__.py +0 -0
  448. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/templates/index.html +0 -0
  449. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/thread_server.py +0 -0
  450. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/types.py +0 -0
  451. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/server/utils.py +0 -0
  452. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/services.py +0 -0
  453. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/session/__init__.py +0 -0
  454. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/session/client.py +0 -0
  455. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/session/data_extractor.py +0 -0
  456. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/session/evaluation.py +0 -0
  457. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/session/session.py +0 -0
  458. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/settings.py +0 -0
  459. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/trace/__init__.py +0 -0
  460. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/trace/attributes.py +0 -0
  461. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/trace/dsl/README.md +0 -0
  462. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/trace/dsl/__init__.py +0 -0
  463. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/trace/dsl/filter.py +0 -0
  464. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/trace/dsl/helpers.py +0 -0
  465. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/trace/dsl/query.py +0 -0
  466. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/trace/errors.py +0 -0
  467. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/trace/evaluation_conventions.py +0 -0
  468. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/trace/exporter.py +0 -0
  469. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/trace/fixtures.py +0 -0
  470. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/trace/otel.py +0 -0
  471. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/trace/projects.py +0 -0
  472. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/trace/schemas.py +0 -0
  473. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/trace/span_evaluations.py +0 -0
  474. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/trace/span_json_decoder.py +0 -0
  475. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/trace/span_json_encoder.py +0 -0
  476. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/trace/trace_dataset.py +0 -0
  477. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/trace/utils.py +0 -0
  478. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/trace/v1/__init__.py +0 -0
  479. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/trace/v1/evaluation_pb2.py +0 -0
  480. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/trace/v1/evaluation_pb2.pyi +0 -0
  481. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/utilities/__init__.py +0 -0
  482. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/utilities/client.py +0 -0
  483. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/utilities/error_handling.py +0 -0
  484. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/utilities/json.py +0 -0
  485. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/utilities/logging.py +0 -0
  486. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/utilities/project.py +0 -0
  487. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/utilities/re.py +0 -0
  488. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/utilities/span_store.py +0 -0
  489. {arize_phoenix-12.4.0 → arize_phoenix-12.5.0}/src/phoenix/utilities/template_formatters.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: arize-phoenix
3
- Version: 12.4.0
3
+ Version: 12.5.0
4
4
  Summary: AI Observability and Evaluation
5
5
  Project-URL: Documentation, https://arize.com/docs/phoenix/
6
6
  Project-URL: Issues, https://github.com/Arize-ai/phoenix/issues
@@ -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,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],
@@ -1,5 +1,5 @@
1
1
  from datetime import datetime, timezone
2
- from typing import Optional
2
+ from typing import Literal, Optional
3
3
 
4
4
  import strawberry
5
5
  from sqlalchemy import select
@@ -9,7 +9,7 @@ from strawberry.types import Info
9
9
 
10
10
  from phoenix.db import models
11
11
  from phoenix.db.models import UserRoleName
12
- from phoenix.server.api.auth import IsAdmin, IsLocked, IsNotReadOnly
12
+ from phoenix.server.api.auth import IsAdmin, IsLocked, IsNotReadOnly, IsNotViewer
13
13
  from phoenix.server.api.context import Context
14
14
  from phoenix.server.api.exceptions import Unauthorized
15
15
  from phoenix.server.api.queries import Query
@@ -61,7 +61,7 @@ class DeleteApiKeyMutationPayload:
61
61
 
62
62
  @strawberry.type
63
63
  class ApiKeyMutationMixin:
64
- @strawberry.mutation(permission_classes=[IsNotReadOnly, IsAdmin, IsLocked]) # type: ignore
64
+ @strawberry.mutation(permission_classes=[IsNotReadOnly, IsNotViewer, IsAdmin, IsLocked]) # type: ignore
65
65
  async def create_system_api_key(
66
66
  self, info: Info[Context, None], input: CreateApiKeyInput
67
67
  ) -> CreateSystemApiKeyMutationPayload:
@@ -113,12 +113,20 @@ class ApiKeyMutationMixin:
113
113
  except AttributeError:
114
114
  raise ValueError("User not found")
115
115
  issued_at = datetime.now(timezone.utc)
116
+ # Determine user role for API key
117
+ user_role: Literal["ADMIN", "MEMBER", "VIEWER"]
118
+ if user.is_admin:
119
+ user_role = "ADMIN"
120
+ elif user.is_viewer:
121
+ user_role = "VIEWER"
122
+ else:
123
+ user_role = "MEMBER"
116
124
  claims = ApiKeyClaims(
117
125
  subject=user.identity,
118
126
  issued_at=issued_at,
119
127
  expiration_time=input.expires_at or None,
120
128
  attributes=ApiKeyAttributes(
121
- user_role="ADMIN" if user.is_admin else "MEMBER",
129
+ user_role=user_role,
122
130
  name=input.name,
123
131
  description=input.description,
124
132
  ),
@@ -137,7 +145,7 @@ class ApiKeyMutationMixin:
137
145
  query=Query(),
138
146
  )
139
147
 
140
- @strawberry.mutation(permission_classes=[IsNotReadOnly, IsAdmin]) # type: ignore
148
+ @strawberry.mutation(permission_classes=[IsNotReadOnly, IsNotViewer, IsAdmin]) # type: ignore
141
149
  async def delete_system_api_key(
142
150
  self, info: Info[Context, None], input: DeleteApiKeyInput
143
151
  ) -> DeleteApiKeyMutationPayload:
@@ -30,7 +30,7 @@ from phoenix.db.helpers import (
30
30
  get_dataset_example_revisions,
31
31
  insert_experiment_with_examples_snapshot,
32
32
  )
33
- from phoenix.server.api.auth import IsLocked, IsNotReadOnly
33
+ from phoenix.server.api.auth import IsLocked, IsNotReadOnly, IsNotViewer
34
34
  from phoenix.server.api.context import Context
35
35
  from phoenix.server.api.exceptions import BadRequest, CustomGraphQLError, NotFound
36
36
  from phoenix.server.api.helpers.dataset_helpers import get_dataset_example_output
@@ -131,7 +131,7 @@ class ChatCompletionOverDatasetMutationPayload:
131
131
 
132
132
  @strawberry.type
133
133
  class ChatCompletionMutationMixin:
134
- @strawberry.mutation(permission_classes=[IsNotReadOnly, IsLocked]) # type: ignore
134
+ @strawberry.mutation(permission_classes=[IsNotReadOnly, IsNotViewer, IsLocked]) # type: ignore
135
135
  @classmethod
136
136
  async def chat_completion_over_dataset(
137
137
  cls,
@@ -302,7 +302,7 @@ class ChatCompletionMutationMixin:
302
302
  payload.examples.append(example_payload)
303
303
  return payload
304
304
 
305
- @strawberry.mutation(permission_classes=[IsNotReadOnly, IsLocked]) # type: ignore
305
+ @strawberry.mutation(permission_classes=[IsNotReadOnly, IsNotViewer, IsLocked]) # type: ignore
306
306
  @classmethod
307
307
  async def chat_completion(
308
308
  cls, info: Info[Context, None], input: ChatCompletionInput
@@ -10,7 +10,7 @@ from strawberry.relay.types import GlobalID
10
10
  from strawberry.types import Info
11
11
 
12
12
  from phoenix.db import models
13
- from phoenix.server.api.auth import IsLocked, IsNotReadOnly
13
+ from phoenix.server.api.auth import IsLocked, IsNotReadOnly, IsNotViewer
14
14
  from phoenix.server.api.context import Context
15
15
  from phoenix.server.api.exceptions import BadRequest, Conflict, NotFound
16
16
  from phoenix.server.api.queries import Query
@@ -78,7 +78,7 @@ class UnsetDatasetLabelsMutationPayload:
78
78
 
79
79
  @strawberry.type
80
80
  class DatasetLabelMutationMixin:
81
- @strawberry.mutation(permission_classes=[IsNotReadOnly, IsLocked]) # type: ignore
81
+ @strawberry.mutation(permission_classes=[IsNotReadOnly, IsNotViewer, IsLocked]) # type: ignore
82
82
  async def create_dataset_label(
83
83
  self,
84
84
  info: Info[Context, None],
@@ -100,7 +100,7 @@ class DatasetLabelMutationMixin:
100
100
  dataset_label=to_gql_dataset_label(dataset_label_orm)
101
101
  )
102
102
 
103
- @strawberry.mutation(permission_classes=[IsNotReadOnly, IsLocked]) # type: ignore
103
+ @strawberry.mutation(permission_classes=[IsNotReadOnly, IsNotViewer, IsLocked]) # type: ignore
104
104
  async def update_dataset_label(
105
105
  self, info: Info[Context, None], input: UpdateDatasetLabelInput
106
106
  ) -> UpdateDatasetLabelMutationPayload:
@@ -133,7 +133,7 @@ class DatasetLabelMutationMixin:
133
133
  dataset_label=to_gql_dataset_label(dataset_label_orm)
134
134
  )
135
135
 
136
- @strawberry.mutation(permission_classes=[IsNotReadOnly, IsLocked]) # type: ignore
136
+ @strawberry.mutation(permission_classes=[IsNotReadOnly, IsNotViewer, IsLocked]) # type: ignore
137
137
  async def delete_dataset_labels(
138
138
  self, info: Info[Context, None], input: DeleteDatasetLabelsInput
139
139
  ) -> DeleteDatasetLabelsMutationPayload:
@@ -166,7 +166,7 @@ class DatasetLabelMutationMixin:
166
166
  ]
167
167
  )
168
168
 
169
- @strawberry.mutation(permission_classes=[IsNotReadOnly, IsLocked]) # type: ignore
169
+ @strawberry.mutation(permission_classes=[IsNotReadOnly, IsNotViewer, IsLocked]) # type: ignore
170
170
  async def set_dataset_labels(
171
171
  self, info: Info[Context, None], input: SetDatasetLabelsInput
172
172
  ) -> SetDatasetLabelsMutationPayload:
@@ -248,7 +248,7 @@ class DatasetLabelMutationMixin:
248
248
  query=Query(),
249
249
  )
250
250
 
251
- @strawberry.mutation(permission_classes=[IsNotReadOnly, IsLocked]) # type: ignore
251
+ @strawberry.mutation(permission_classes=[IsNotReadOnly, IsNotViewer, IsLocked]) # type: ignore
252
252
  async def unset_dataset_labels(
253
253
  self, info: Info[Context, None], input: UnsetDatasetLabelsInput
254
254
  ) -> UnsetDatasetLabelsMutationPayload:
@@ -18,7 +18,7 @@ from strawberry.types import Info
18
18
 
19
19
  from phoenix.db import models
20
20
  from phoenix.db.helpers import get_eval_trace_ids_for_datasets, get_project_names_for_datasets
21
- from phoenix.server.api.auth import IsLocked, IsNotReadOnly
21
+ from phoenix.server.api.auth import IsLocked, IsNotReadOnly, IsNotViewer
22
22
  from phoenix.server.api.context import Context
23
23
  from phoenix.server.api.exceptions import BadRequest, NotFound
24
24
  from phoenix.server.api.helpers.dataset_helpers import (
@@ -50,7 +50,7 @@ class DatasetMutationPayload:
50
50
 
51
51
  @strawberry.type
52
52
  class DatasetMutationMixin:
53
- @strawberry.mutation(permission_classes=[IsNotReadOnly, IsLocked]) # type: ignore
53
+ @strawberry.mutation(permission_classes=[IsNotReadOnly, IsNotViewer, IsLocked]) # type: ignore
54
54
  async def create_dataset(
55
55
  self,
56
56
  info: Info[Context, None],
@@ -74,7 +74,7 @@ class DatasetMutationMixin:
74
74
  info.context.event_queue.put(DatasetInsertEvent((dataset.id,)))
75
75
  return DatasetMutationPayload(dataset=to_gql_dataset(dataset))
76
76
 
77
- @strawberry.mutation(permission_classes=[IsNotReadOnly, IsLocked]) # type: ignore
77
+ @strawberry.mutation(permission_classes=[IsNotReadOnly, IsNotViewer, IsLocked]) # type: ignore
78
78
  async def patch_dataset(
79
79
  self,
80
80
  info: Info[Context, None],
@@ -103,7 +103,7 @@ class DatasetMutationMixin:
103
103
  info.context.event_queue.put(DatasetInsertEvent((dataset.id,)))
104
104
  return DatasetMutationPayload(dataset=to_gql_dataset(dataset))
105
105
 
106
- @strawberry.mutation(permission_classes=[IsNotReadOnly, IsLocked]) # type: ignore
106
+ @strawberry.mutation(permission_classes=[IsNotReadOnly, IsNotViewer, IsLocked]) # type: ignore
107
107
  async def add_spans_to_dataset(
108
108
  self,
109
109
  info: Info[Context, None],
@@ -223,7 +223,7 @@ class DatasetMutationMixin:
223
223
  info.context.event_queue.put(DatasetInsertEvent((dataset.id,)))
224
224
  return DatasetMutationPayload(dataset=to_gql_dataset(dataset))
225
225
 
226
- @strawberry.mutation(permission_classes=[IsNotReadOnly, IsLocked]) # type: ignore
226
+ @strawberry.mutation(permission_classes=[IsNotReadOnly, IsNotViewer, IsLocked]) # type: ignore
227
227
  async def add_examples_to_dataset(
228
228
  self, info: Info[Context, None], input: AddExamplesToDatasetInput
229
229
  ) -> DatasetMutationPayload:
@@ -350,7 +350,7 @@ class DatasetMutationMixin:
350
350
  info.context.event_queue.put(DatasetInsertEvent((dataset.id,)))
351
351
  return DatasetMutationPayload(dataset=to_gql_dataset(dataset))
352
352
 
353
- @strawberry.mutation(permission_classes=[IsNotReadOnly]) # type: ignore
353
+ @strawberry.mutation(permission_classes=[IsNotReadOnly, IsNotViewer]) # type: ignore
354
354
  async def delete_dataset(
355
355
  self,
356
356
  info: Info[Context, None],
@@ -381,7 +381,7 @@ class DatasetMutationMixin:
381
381
  info.context.event_queue.put(DatasetDeleteEvent((dataset.id,)))
382
382
  return DatasetMutationPayload(dataset=to_gql_dataset(dataset))
383
383
 
384
- @strawberry.mutation(permission_classes=[IsNotReadOnly, IsLocked]) # type: ignore
384
+ @strawberry.mutation(permission_classes=[IsNotReadOnly, IsNotViewer, IsLocked]) # type: ignore
385
385
  async def patch_dataset_examples(
386
386
  self,
387
387
  info: Info[Context, None],
@@ -474,7 +474,7 @@ class DatasetMutationMixin:
474
474
  info.context.event_queue.put(DatasetInsertEvent((dataset.id,)))
475
475
  return DatasetMutationPayload(dataset=to_gql_dataset(dataset))
476
476
 
477
- @strawberry.mutation(permission_classes=[IsNotReadOnly, IsLocked]) # type: ignore
477
+ @strawberry.mutation(permission_classes=[IsNotReadOnly, IsNotViewer, IsLocked]) # type: ignore
478
478
  async def delete_dataset_examples(
479
479
  self, info: Info[Context, None], input: DeleteDatasetExamplesInput
480
480
  ) -> DatasetMutationPayload: