arize-phoenix 8.28.0__tar.gz → 8.29.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 (378) hide show
  1. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/PKG-INFO +1 -1
  2. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/config.py +269 -3
  3. arize_phoenix-8.29.0/src/phoenix/db/README.md +353 -0
  4. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/queries.py +0 -3
  5. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/Functionality.py +0 -3
  6. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/grpc_server.py +19 -2
  7. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/main.py +45 -7
  8. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/static/.vite/manifest.json +9 -9
  9. arize_phoenix-8.28.0/src/phoenix/server/static/assets/components-BEtrHoeq.js → arize_phoenix-8.29.0/src/phoenix/server/static/assets/components-DepxScNF.js +6 -1
  10. arize_phoenix-8.28.0/src/phoenix/server/static/assets/index-Cdj4_6tq.js → arize_phoenix-8.29.0/src/phoenix/server/static/assets/index-DUj7q3Q4.js +1 -1
  11. arize_phoenix-8.28.0/src/phoenix/server/static/assets/pages-CZ0wMeOx.js → arize_phoenix-8.29.0/src/phoenix/server/static/assets/pages-CJUakDKi.js +6 -7
  12. arize_phoenix-8.29.0/src/phoenix/version.py +1 -0
  13. arize_phoenix-8.28.0/src/phoenix/db/README.md +0 -54
  14. arize_phoenix-8.28.0/src/phoenix/version.py +0 -1
  15. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/.gitignore +0 -0
  16. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/IP_NOTICE +0 -0
  17. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/LICENSE +0 -0
  18. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/README.md +0 -0
  19. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/pyproject.toml +0 -0
  20. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/__init__.py +0 -0
  21. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/auth.py +0 -0
  22. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/core/__init__.py +0 -0
  23. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/core/embedding_dimension.py +0 -0
  24. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/core/model.py +0 -0
  25. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/core/model_schema.py +0 -0
  26. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/core/model_schema_adapter.py +0 -0
  27. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/datetime_utils.py +0 -0
  28. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/db/__init__.py +0 -0
  29. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/db/alembic.ini +0 -0
  30. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/db/bulk_inserter.py +0 -0
  31. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/db/engines.py +0 -0
  32. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/db/enums.py +0 -0
  33. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/db/facilitator.py +0 -0
  34. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/db/helpers.py +0 -0
  35. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/db/insertion/__init__.py +0 -0
  36. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/db/insertion/constants.py +0 -0
  37. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/db/insertion/dataset.py +0 -0
  38. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/db/insertion/document_annotation.py +0 -0
  39. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/db/insertion/evaluation.py +0 -0
  40. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/db/insertion/helpers.py +0 -0
  41. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/db/insertion/span.py +0 -0
  42. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/db/insertion/span_annotation.py +0 -0
  43. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/db/insertion/trace_annotation.py +0 -0
  44. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/db/insertion/types.py +0 -0
  45. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/db/migrate.py +0 -0
  46. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/db/migrations/__init__.py +0 -0
  47. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/db/migrations/data_migration_scripts/__init__.py +0 -0
  48. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/db/migrations/data_migration_scripts/populate_project_sessions.py +0 -0
  49. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/db/migrations/env.py +0 -0
  50. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/db/migrations/script.py.mako +0 -0
  51. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/db/migrations/versions/10460e46d750_datasets.py +0 -0
  52. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/db/migrations/versions/3be8647b87d8_add_token_columns_to_spans_table.py +0 -0
  53. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/db/migrations/versions/4ded9e43755f_create_project_sessions_table.py +0 -0
  54. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/db/migrations/versions/bc8fea3c2bc8_add_prompt_tables.py +0 -0
  55. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/db/migrations/versions/cd164e83824f_users_and_tokens.py +0 -0
  56. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/db/migrations/versions/cf03bd6bae1d_init.py +0 -0
  57. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/db/models.py +0 -0
  58. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/db/types/__init__.py +0 -0
  59. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/db/types/identifier.py +0 -0
  60. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/db/types/model_provider.py +0 -0
  61. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/exceptions.py +0 -0
  62. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/experiments/__init__.py +0 -0
  63. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/experiments/evaluators/__init__.py +0 -0
  64. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/experiments/evaluators/base.py +0 -0
  65. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/experiments/evaluators/code_evaluators.py +0 -0
  66. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/experiments/evaluators/llm_evaluators.py +0 -0
  67. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/experiments/evaluators/utils.py +0 -0
  68. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/experiments/functions.py +0 -0
  69. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/experiments/tracing.py +0 -0
  70. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/experiments/types.py +0 -0
  71. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/experiments/utils.py +0 -0
  72. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/inferences/__init__.py +0 -0
  73. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/inferences/errors.py +0 -0
  74. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/inferences/fixtures.py +0 -0
  75. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/inferences/inferences.py +0 -0
  76. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/inferences/schema.py +0 -0
  77. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/inferences/validation.py +0 -0
  78. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/logging/__init__.py +0 -0
  79. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/logging/_config.py +0 -0
  80. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/logging/_filter.py +0 -0
  81. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/logging/_formatter.py +0 -0
  82. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/metrics/README.md +0 -0
  83. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/metrics/__init__.py +0 -0
  84. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/metrics/binning.py +0 -0
  85. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/metrics/metrics.py +0 -0
  86. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/metrics/mixins.py +0 -0
  87. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/metrics/retrieval_metrics.py +0 -0
  88. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/metrics/timeseries.py +0 -0
  89. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/metrics/wrappers.py +0 -0
  90. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/pointcloud/__init__.py +0 -0
  91. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/pointcloud/clustering.py +0 -0
  92. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/pointcloud/pointcloud.py +0 -0
  93. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/pointcloud/projectors.py +0 -0
  94. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/pointcloud/umap_parameters.py +0 -0
  95. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/py.typed +0 -0
  96. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/__init__.py +0 -0
  97. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/README.md +0 -0
  98. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/__init__.py +0 -0
  99. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/auth.py +0 -0
  100. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/context.py +0 -0
  101. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/dataloaders/__init__.py +0 -0
  102. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/dataloaders/annotation_summaries.py +0 -0
  103. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/dataloaders/average_experiment_run_latency.py +0 -0
  104. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/dataloaders/cache/__init__.py +0 -0
  105. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/dataloaders/cache/two_tier_cache.py +0 -0
  106. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/dataloaders/dataset_example_revisions.py +0 -0
  107. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/dataloaders/dataset_example_spans.py +0 -0
  108. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/dataloaders/document_evaluation_summaries.py +0 -0
  109. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/dataloaders/document_evaluations.py +0 -0
  110. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/dataloaders/document_retrieval_metrics.py +0 -0
  111. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/dataloaders/experiment_annotation_summaries.py +0 -0
  112. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/dataloaders/experiment_error_rates.py +0 -0
  113. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/dataloaders/experiment_run_annotations.py +0 -0
  114. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/dataloaders/experiment_run_counts.py +0 -0
  115. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/dataloaders/experiment_sequence_number.py +0 -0
  116. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/dataloaders/latency_ms_quantile.py +0 -0
  117. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/dataloaders/min_start_or_max_end_times.py +0 -0
  118. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/dataloaders/num_child_spans.py +0 -0
  119. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/dataloaders/num_spans_per_trace.py +0 -0
  120. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/dataloaders/project_by_name.py +0 -0
  121. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/dataloaders/prompt_version_sequence_number.py +0 -0
  122. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/dataloaders/record_counts.py +0 -0
  123. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/dataloaders/session_io.py +0 -0
  124. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/dataloaders/session_num_traces.py +0 -0
  125. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/dataloaders/session_num_traces_with_error.py +0 -0
  126. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/dataloaders/session_token_usages.py +0 -0
  127. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/dataloaders/session_trace_latency_ms_quantile.py +0 -0
  128. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/dataloaders/span_annotations.py +0 -0
  129. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/dataloaders/span_by_id.py +0 -0
  130. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/dataloaders/span_dataset_examples.py +0 -0
  131. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/dataloaders/span_descendants.py +0 -0
  132. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/dataloaders/span_projects.py +0 -0
  133. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/dataloaders/table_fields.py +0 -0
  134. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/dataloaders/token_counts.py +0 -0
  135. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/dataloaders/trace_by_trace_ids.py +0 -0
  136. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/dataloaders/trace_root_spans.py +0 -0
  137. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/dataloaders/user_roles.py +0 -0
  138. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/dataloaders/users.py +0 -0
  139. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/exceptions.py +0 -0
  140. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/helpers/__init__.py +0 -0
  141. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/helpers/dataset_helpers.py +0 -0
  142. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/helpers/experiment_run_filters.py +0 -0
  143. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/helpers/playground_clients.py +0 -0
  144. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/helpers/playground_registry.py +0 -0
  145. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/helpers/playground_spans.py +0 -0
  146. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/helpers/prompts/__init__.py +0 -0
  147. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/helpers/prompts/conversions/__init__.py +0 -0
  148. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/helpers/prompts/conversions/anthropic.py +0 -0
  149. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/helpers/prompts/conversions/openai.py +0 -0
  150. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/helpers/prompts/models.py +0 -0
  151. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/input_types/AddExamplesToDatasetInput.py +0 -0
  152. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/input_types/AddSpansToDatasetInput.py +0 -0
  153. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/input_types/ChatCompletionInput.py +0 -0
  154. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/input_types/ChatCompletionMessageInput.py +0 -0
  155. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/input_types/ClearProjectInput.py +0 -0
  156. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/input_types/ClusterInput.py +0 -0
  157. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/input_types/Coordinates.py +0 -0
  158. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/input_types/CreateDatasetInput.py +0 -0
  159. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/input_types/CreateSpanAnnotationInput.py +0 -0
  160. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/input_types/CreateTraceAnnotationInput.py +0 -0
  161. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/input_types/DataQualityMetricInput.py +0 -0
  162. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/input_types/DatasetExampleInput.py +0 -0
  163. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/input_types/DatasetSort.py +0 -0
  164. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/input_types/DatasetVersionSort.py +0 -0
  165. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/input_types/DeleteAnnotationsInput.py +0 -0
  166. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/input_types/DeleteDatasetExamplesInput.py +0 -0
  167. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/input_types/DeleteDatasetInput.py +0 -0
  168. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/input_types/DeleteExperimentsInput.py +0 -0
  169. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/input_types/DimensionFilter.py +0 -0
  170. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/input_types/DimensionInput.py +0 -0
  171. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/input_types/GenerativeModelInput.py +0 -0
  172. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/input_types/Granularity.py +0 -0
  173. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/input_types/InvocationParameters.py +0 -0
  174. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/input_types/PatchAnnotationInput.py +0 -0
  175. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/input_types/PatchDatasetExamplesInput.py +0 -0
  176. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/input_types/PatchDatasetInput.py +0 -0
  177. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/input_types/PerformanceMetricInput.py +0 -0
  178. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/input_types/ProjectSessionSort.py +0 -0
  179. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/input_types/PromptTemplateOptions.py +0 -0
  180. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/input_types/PromptVersionInput.py +0 -0
  181. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/input_types/SpanAnnotationSort.py +0 -0
  182. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/input_types/SpanSort.py +0 -0
  183. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/input_types/TimeRange.py +0 -0
  184. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/input_types/TraceAnnotationSort.py +0 -0
  185. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/input_types/UserRoleInput.py +0 -0
  186. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/input_types/__init__.py +0 -0
  187. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/interceptor.py +0 -0
  188. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/mutations/__init__.py +0 -0
  189. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/mutations/api_key_mutations.py +0 -0
  190. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/mutations/chat_mutations.py +0 -0
  191. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/mutations/dataset_mutations.py +0 -0
  192. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/mutations/experiment_mutations.py +0 -0
  193. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/mutations/export_events_mutations.py +0 -0
  194. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/mutations/project_mutations.py +0 -0
  195. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/mutations/prompt_label_mutations.py +0 -0
  196. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/mutations/prompt_mutations.py +0 -0
  197. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/mutations/prompt_version_tag_mutations.py +0 -0
  198. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/mutations/span_annotations_mutations.py +0 -0
  199. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/mutations/trace_annotations_mutations.py +0 -0
  200. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/mutations/trace_mutations.py +0 -0
  201. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/mutations/user_mutations.py +0 -0
  202. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/openapi/__init__.py +0 -0
  203. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/openapi/main.py +0 -0
  204. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/openapi/schema.py +0 -0
  205. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/routers/__init__.py +0 -0
  206. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/routers/auth.py +0 -0
  207. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/routers/embeddings.py +0 -0
  208. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/routers/oauth2.py +0 -0
  209. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/routers/utils.py +0 -0
  210. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/routers/v1/__init__.py +0 -0
  211. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/routers/v1/datasets.py +0 -0
  212. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/routers/v1/evaluations.py +0 -0
  213. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/routers/v1/experiment_evaluations.py +0 -0
  214. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/routers/v1/experiment_runs.py +0 -0
  215. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/routers/v1/experiments.py +0 -0
  216. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/routers/v1/models.py +0 -0
  217. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/routers/v1/projects.py +0 -0
  218. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/routers/v1/prompts.py +0 -0
  219. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/routers/v1/spans.py +0 -0
  220. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/routers/v1/traces.py +0 -0
  221. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/routers/v1/utils.py +0 -0
  222. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/schema.py +0 -0
  223. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/subscriptions.py +0 -0
  224. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/Annotation.py +0 -0
  225. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/AnnotationSummary.py +0 -0
  226. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/AnnotatorKind.py +0 -0
  227. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/ApiKey.py +0 -0
  228. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/AuthMethod.py +0 -0
  229. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/ChatCompletionMessageRole.py +0 -0
  230. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/ChatCompletionSubscriptionPayload.py +0 -0
  231. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/Cluster.py +0 -0
  232. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/CreateDatasetPayload.py +0 -0
  233. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/DataQualityMetric.py +0 -0
  234. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/Dataset.py +0 -0
  235. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/DatasetExample.py +0 -0
  236. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/DatasetExampleRevision.py +0 -0
  237. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/DatasetValues.py +0 -0
  238. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/DatasetVersion.py +0 -0
  239. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/Dimension.py +0 -0
  240. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/DimensionDataType.py +0 -0
  241. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/DimensionShape.py +0 -0
  242. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/DimensionType.py +0 -0
  243. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/DimensionWithValue.py +0 -0
  244. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/DocumentEvaluationSummary.py +0 -0
  245. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/DocumentRetrievalMetrics.py +0 -0
  246. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/EmbeddingDimension.py +0 -0
  247. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/EmbeddingMetadata.py +0 -0
  248. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/Evaluation.py +0 -0
  249. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/EvaluationSummary.py +0 -0
  250. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/Event.py +0 -0
  251. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/EventMetadata.py +0 -0
  252. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/ExampleRevisionInterface.py +0 -0
  253. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/Experiment.py +0 -0
  254. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/ExperimentAnnotationSummary.py +0 -0
  255. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/ExperimentComparison.py +0 -0
  256. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/ExperimentRun.py +0 -0
  257. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/ExperimentRunAnnotation.py +0 -0
  258. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/ExportedFile.py +0 -0
  259. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/GenerativeModel.py +0 -0
  260. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/GenerativeProvider.py +0 -0
  261. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/Identifier.py +0 -0
  262. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/Inferences.py +0 -0
  263. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/InferencesRole.py +0 -0
  264. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/LabelFraction.py +0 -0
  265. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/MimeType.py +0 -0
  266. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/Model.py +0 -0
  267. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/NumericRange.py +0 -0
  268. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/PerformanceMetric.py +0 -0
  269. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/Project.py +0 -0
  270. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/ProjectSession.py +0 -0
  271. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/Prompt.py +0 -0
  272. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/PromptLabel.py +0 -0
  273. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/PromptResponse.py +0 -0
  274. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/PromptVersion.py +0 -0
  275. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/PromptVersionTag.py +0 -0
  276. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/PromptVersionTemplate.py +0 -0
  277. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/ResponseFormat.py +0 -0
  278. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/Retrieval.py +0 -0
  279. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/ScalarDriftMetricEnum.py +0 -0
  280. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/Segments.py +0 -0
  281. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/SortDir.py +0 -0
  282. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/Span.py +0 -0
  283. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/SpanAnnotation.py +0 -0
  284. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/SpanIOValue.py +0 -0
  285. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/SystemApiKey.py +0 -0
  286. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/TimeSeries.py +0 -0
  287. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/TokenUsage.py +0 -0
  288. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/ToolDefinition.py +0 -0
  289. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/Trace.py +0 -0
  290. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/TraceAnnotation.py +0 -0
  291. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/UMAPPoints.py +0 -0
  292. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/User.py +0 -0
  293. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/UserApiKey.py +0 -0
  294. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/UserRole.py +0 -0
  295. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/ValidationResult.py +0 -0
  296. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/VectorDriftMetricEnum.py +0 -0
  297. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/__init__.py +0 -0
  298. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/node.py +0 -0
  299. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/types/pagination.py +0 -0
  300. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/api/utils.py +0 -0
  301. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/app.py +0 -0
  302. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/bearer_auth.py +0 -0
  303. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/dml_event.py +0 -0
  304. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/dml_event_handler.py +0 -0
  305. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/email/__init__.py +0 -0
  306. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/email/sender.py +0 -0
  307. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/email/templates/__init__.py +0 -0
  308. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/email/templates/password_reset.html +0 -0
  309. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/email/templates/welcome.html +0 -0
  310. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/email/types.py +0 -0
  311. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/jwt_store.py +0 -0
  312. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/middleware/__init__.py +0 -0
  313. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/middleware/gzip.py +0 -0
  314. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/oauth2.py +0 -0
  315. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/openapi/__init__.py +0 -0
  316. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/prometheus.py +0 -0
  317. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/rate_limiters.py +0 -0
  318. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/static/apple-touch-icon-114x114.png +0 -0
  319. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/static/apple-touch-icon-120x120.png +0 -0
  320. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/static/apple-touch-icon-144x144.png +0 -0
  321. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/static/apple-touch-icon-152x152.png +0 -0
  322. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/static/apple-touch-icon-180x180.png +0 -0
  323. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/static/apple-touch-icon-72x72.png +0 -0
  324. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/static/apple-touch-icon-76x76.png +0 -0
  325. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/static/apple-touch-icon.png +0 -0
  326. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/static/assets/vendor-BfhM_F1u.js +0 -0
  327. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/static/assets/vendor-Cg6lcjUC.css +0 -0
  328. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/static/assets/vendor-arizeai-CxXYQNUl.js +0 -0
  329. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/static/assets/vendor-codemirror-B0NIFPOL.js +0 -0
  330. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/static/assets/vendor-recharts-CrrDFWK1.js +0 -0
  331. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/static/assets/vendor-shiki-C5bJ-RPf.js +0 -0
  332. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/static/assets/vendor-three-C5WAXd5r.js +0 -0
  333. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/static/favicon.ico +0 -0
  334. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/static/modernizr.js +0 -0
  335. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/telemetry.py +0 -0
  336. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/templates/__init__.py +0 -0
  337. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/templates/index.html +0 -0
  338. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/thread_server.py +0 -0
  339. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/server/types.py +0 -0
  340. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/services.py +0 -0
  341. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/session/__init__.py +0 -0
  342. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/session/client.py +0 -0
  343. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/session/data_extractor.py +0 -0
  344. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/session/evaluation.py +0 -0
  345. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/session/session.py +0 -0
  346. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/settings.py +0 -0
  347. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/trace/__init__.py +0 -0
  348. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/trace/attributes.py +0 -0
  349. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/trace/dsl/README.md +0 -0
  350. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/trace/dsl/__init__.py +0 -0
  351. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/trace/dsl/filter.py +0 -0
  352. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/trace/dsl/helpers.py +0 -0
  353. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/trace/dsl/query.py +0 -0
  354. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/trace/errors.py +0 -0
  355. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/trace/evaluation_conventions.py +0 -0
  356. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/trace/exporter.py +0 -0
  357. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/trace/fixtures.py +0 -0
  358. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/trace/otel.py +0 -0
  359. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/trace/projects.py +0 -0
  360. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/trace/schemas.py +0 -0
  361. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/trace/span_evaluations.py +0 -0
  362. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/trace/span_json_decoder.py +0 -0
  363. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/trace/span_json_encoder.py +0 -0
  364. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/trace/trace_dataset.py +0 -0
  365. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/trace/utils.py +0 -0
  366. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/trace/v1/__init__.py +0 -0
  367. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/trace/v1/evaluation_pb2.py +0 -0
  368. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/trace/v1/evaluation_pb2.pyi +0 -0
  369. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/utilities/__init__.py +0 -0
  370. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/utilities/client.py +0 -0
  371. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/utilities/deprecation.py +0 -0
  372. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/utilities/error_handling.py +0 -0
  373. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/utilities/json.py +0 -0
  374. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/utilities/logging.py +0 -0
  375. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/utilities/project.py +0 -0
  376. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/utilities/re.py +0 -0
  377. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/utilities/span_store.py +0 -0
  378. {arize_phoenix-8.28.0 → arize_phoenix-8.29.0}/src/phoenix/utilities/template_formatters.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: arize-phoenix
3
- Version: 8.28.0
3
+ Version: 8.29.0
4
4
  Summary: AI Observability and Evaluation
5
5
  Project-URL: Documentation, https://docs.arize.com/phoenix/
6
6
  Project-URL: Issues, https://github.com/Arize-ai/phoenix/issues
@@ -2,7 +2,7 @@ import logging
2
2
  import os
3
3
  import re
4
4
  import tempfile
5
- from dataclasses import dataclass
5
+ from dataclasses import dataclass, field
6
6
  from datetime import timedelta
7
7
  from enum import Enum
8
8
  from importlib.metadata import version
@@ -240,6 +240,243 @@ ENV_PHOENIX_FASTAPI_MIDDLEWARE_PATHS = "PHOENIX_FASTAPI_MIDDLEWARE_PATHS"
240
240
  ENV_PHOENIX_GQL_EXTENSION_PATHS = "PHOENIX_GQL_EXTENSION_PATHS"
241
241
  ENV_PHOENIX_GRPC_INTERCEPTOR_PATHS = "PHOENIX_GRPC_INTERCEPTOR_PATHS"
242
242
 
243
+ ENV_PHOENIX_TLS_ENABLED = "PHOENIX_TLS_ENABLED"
244
+ """
245
+ Whether to enable TLS for Phoenix HTTP and gRPC servers.
246
+ """
247
+ ENV_PHOENIX_TLS_CERT_FILE = "PHOENIX_TLS_CERT_FILE"
248
+ """
249
+ Path to the TLS certificate file for HTTPS connections.
250
+ When set, Phoenix will use HTTPS instead of HTTP for all connections.
251
+ """
252
+ ENV_PHOENIX_TLS_KEY_FILE = "PHOENIX_TLS_KEY_FILE"
253
+ """
254
+ Path to the TLS private key file for HTTPS connections.
255
+ Required when PHOENIX_TLS_CERT_FILE is set.
256
+ """
257
+ ENV_PHOENIX_TLS_KEY_FILE_PASSWORD = "PHOENIX_TLS_KEY_FILE_PASSWORD"
258
+ """
259
+ Password for the TLS private key file if it's encrypted.
260
+ Only needed if the private key file requires a password.
261
+ """
262
+ ENV_PHOENIX_TLS_CA_FILE = "PHOENIX_TLS_CA_FILE"
263
+ """
264
+ Path to the Certificate Authority (CA) file for client certificate verification.
265
+ Used when PHOENIX_TLS_VERIFY_CLIENT is set to true.
266
+ """
267
+ ENV_PHOENIX_TLS_VERIFY_CLIENT = "PHOENIX_TLS_VERIFY_CLIENT"
268
+ """
269
+ Whether to verify client certificates for mutual TLS (mTLS) authentication.
270
+ When set to true, clients must provide valid certificates signed by the CA specified in
271
+ PHOENIX_TLS_CA_FILE.
272
+ """
273
+
274
+
275
+ @dataclass(frozen=True)
276
+ class TLSConfig:
277
+ """Configuration for TLS (Transport Layer Security) connections.
278
+
279
+ This class manages TLS certificates and private keys for secure connections.
280
+ It handles reading certificate and key files, and decrypting private keys
281
+ if they are password-protected.
282
+
283
+ Attributes:
284
+ cert_file: Path to the TLS certificate file
285
+ key_file: Path to the TLS private key file
286
+ key_file_password: Optional password for decrypting the private key
287
+ _cert_data: Cached certificate data (internal use)
288
+ _key_data: Cached decrypted key data (internal use)
289
+ _decrypted_key_data: Cached decrypted key data (internal use)
290
+ """
291
+
292
+ cert_file: Path
293
+ key_file: Path
294
+ key_file_password: Optional[str]
295
+ _cert_data: bytes = field(default=b"", init=False, repr=False)
296
+ _key_data: bytes = field(default=b"", init=False, repr=False)
297
+ _decrypted_key_data: Optional[bytes] = field(default=None, init=False, repr=False)
298
+
299
+ @property
300
+ def cert_data(self) -> bytes:
301
+ """Get the certificate data, reading from file if not cached.
302
+
303
+ Returns:
304
+ bytes: The certificate data in PEM format
305
+ """
306
+ if not self._cert_data:
307
+ with open(self.cert_file, "rb") as f:
308
+ object.__setattr__(self, "_cert_data", f.read())
309
+ return self._cert_data
310
+
311
+ @property
312
+ def key_data(self) -> bytes:
313
+ """Get the decrypted key data, reading from file if not cached.
314
+
315
+ This property reads the private key file and decrypts it if a password
316
+ is provided. The decrypted key is cached for subsequent accesses.
317
+
318
+ Returns:
319
+ bytes: The decrypted private key data in PEM format
320
+
321
+ Raises:
322
+ ValueError: If the cryptography library is not installed or if
323
+ decryption fails
324
+ """
325
+ if not self._key_data:
326
+ self._read_and_cache_key_data()
327
+ return self._key_data
328
+
329
+ def _read_and_cache_key_data(self) -> None:
330
+ """Read and decrypt the private key file, then cache the result.
331
+
332
+ This method reads the private key file, decrypts it if a password
333
+ is provided, and stores the decrypted key in the _key_data attribute.
334
+
335
+ Raises:
336
+ ValueError: If the cryptography library is not installed or if
337
+ decryption fails
338
+ """
339
+ try:
340
+ from cryptography.hazmat.backends import default_backend
341
+ from cryptography.hazmat.primitives.serialization import (
342
+ Encoding,
343
+ NoEncryption,
344
+ PrivateFormat,
345
+ load_pem_private_key,
346
+ )
347
+ except ImportError:
348
+ raise ValueError(
349
+ "The cryptography library is needed to read private keys for "
350
+ "TLS configuration. Please install it with: pip install cryptography"
351
+ )
352
+
353
+ # First read the key file
354
+ with open(self.key_file, "rb") as f:
355
+ key_data = f.read()
356
+
357
+ try:
358
+ # Convert password to bytes if it exists
359
+ password_bytes = self.key_file_password.encode() if self.key_file_password else None
360
+
361
+ # Load the key (decrypting if password is provided)
362
+ private_key = load_pem_private_key(
363
+ key_data,
364
+ password=password_bytes,
365
+ backend=default_backend(),
366
+ )
367
+
368
+ # Convert to PEM format without encryption
369
+ decrypted_pem = private_key.private_bytes(
370
+ encoding=Encoding.PEM,
371
+ format=PrivateFormat.PKCS8,
372
+ encryption_algorithm=NoEncryption(),
373
+ )
374
+ except Exception as e:
375
+ raise ValueError(f"Failed to decrypt private key: {e}")
376
+ object.__setattr__(self, "_key_data", decrypted_pem)
377
+
378
+
379
+ @dataclass(frozen=True)
380
+ class TLSConfigVerifyClient(TLSConfig):
381
+ """TLS configuration with client verification enabled."""
382
+
383
+ ca_file: Path
384
+ _ca_data: bytes = field(default=b"", init=False, repr=False)
385
+
386
+ @property
387
+ def ca_data(self) -> bytes:
388
+ """Get the CA certificate data, reading from file if not cached."""
389
+ if not self._ca_data:
390
+ with open(self.ca_file, "rb") as f:
391
+ object.__setattr__(self, "_ca_data", f.read())
392
+ return self._ca_data
393
+
394
+
395
+ def get_env_tls_enabled() -> bool:
396
+ """
397
+ Gets the value of the PHOENIX_TLS_ENABLED environment variable.
398
+
399
+ Returns:
400
+ bool: True if TLS is enabled, False otherwise. Defaults to False if the environment
401
+ variable is not set.
402
+ """ # noqa: E501
403
+ return _bool_val(ENV_PHOENIX_TLS_ENABLED, False)
404
+
405
+
406
+ def get_env_tls_verify_client() -> bool:
407
+ """
408
+ Gets the value of the PHOENIX_TLS_VERIFY_CLIENT environment variable.
409
+
410
+ Returns:
411
+ bool: True if client certificate verification is enabled, False otherwise. Defaults to False
412
+ if the environment variable is not set.
413
+ """ # noqa: E501
414
+ return _bool_val(ENV_PHOENIX_TLS_VERIFY_CLIENT, False)
415
+
416
+
417
+ def get_env_tls_config() -> Optional[TLSConfig]:
418
+ """
419
+ Retrieves and validates TLS configuration from environment variables.
420
+
421
+ Returns:
422
+ Optional[TLSConfig]: A configuration object containing TLS settings, or None if TLS is disabled.
423
+ If client verification is enabled, returns TLSConfigVerifyClient instead.
424
+
425
+ The function reads the following environment variables:
426
+ - PHOENIX_TLS_ENABLED: Whether TLS is enabled (defaults to False)
427
+ - PHOENIX_TLS_CERT_FILE: Path to the TLS certificate file
428
+ - PHOENIX_TLS_KEY_FILE: Path to the TLS private key file
429
+ - PHOENIX_TLS_KEY_FILE_PASSWORD: Password for the TLS private key file
430
+ - PHOENIX_TLS_CA_FILE: Path to the Certificate Authority file (required for client verification)
431
+ - PHOENIX_TLS_VERIFY_CLIENT: Whether to verify client certificates
432
+
433
+ Raises:
434
+ ValueError: If required files are missing or don't exist when TLS is enabled
435
+ """ # noqa: E501
436
+ # Check if TLS is enabled
437
+ if not get_env_tls_enabled():
438
+ return None
439
+
440
+ # Get certificate file path if specified
441
+ if not (cert_file_str := getenv(ENV_PHOENIX_TLS_CERT_FILE)):
442
+ raise ValueError("PHOENIX_TLS_CERT_FILE must be set when PHOENIX_TLS_ENABLED is true")
443
+ cert_file = Path(cert_file_str)
444
+
445
+ # Get private key file path if specified
446
+ if not (key_file_str := getenv(ENV_PHOENIX_TLS_KEY_FILE)):
447
+ raise ValueError("PHOENIX_TLS_KEY_FILE must be set when PHOENIX_TLS_ENABLED is true")
448
+ key_file = Path(key_file_str)
449
+
450
+ # Get private key password if specified
451
+ key_file_password = getenv(ENV_PHOENIX_TLS_KEY_FILE_PASSWORD)
452
+
453
+ # Validate certificate and key files
454
+ _validate_file_exists_and_is_readable(cert_file, "certificate")
455
+ _validate_file_exists_and_is_readable(key_file, "key")
456
+
457
+ # If client verification is enabled, validate CA file and return TLSConfigVerifyClient
458
+ if get_env_tls_verify_client():
459
+ if not (ca_file_str := getenv(ENV_PHOENIX_TLS_CA_FILE)):
460
+ raise ValueError(
461
+ "PHOENIX_TLS_CA_FILE must be set when PHOENIX_TLS_VERIFY_CLIENT is true"
462
+ )
463
+
464
+ ca_file = Path(ca_file_str)
465
+ _validate_file_exists_and_is_readable(ca_file, "CA")
466
+
467
+ return TLSConfigVerifyClient(
468
+ cert_file=cert_file,
469
+ key_file=key_file,
470
+ key_file_password=key_file_password,
471
+ ca_file=ca_file,
472
+ )
473
+
474
+ return TLSConfig(
475
+ cert_file=cert_file,
476
+ key_file=key_file,
477
+ key_file_password=key_file_password,
478
+ )
479
+
243
480
 
244
481
  def server_instrumentation_is_enabled() -> bool:
245
482
  return bool(
@@ -956,7 +1193,8 @@ def get_env_root_url() -> URL:
956
1193
  host = get_env_host()
957
1194
  if host == "0.0.0.0":
958
1195
  host = "127.0.0.1"
959
- return URL(urljoin(f"http://{host}:{get_env_port()}", get_env_host_root_path()))
1196
+ scheme = "https" if get_env_tls_enabled() else "http"
1197
+ return URL(urljoin(f"{scheme}://{host}:{get_env_port()}", get_env_host_root_path()))
960
1198
 
961
1199
 
962
1200
  def get_base_url() -> str:
@@ -964,7 +1202,8 @@ def get_base_url() -> str:
964
1202
  host = get_env_host()
965
1203
  if host == "0.0.0.0":
966
1204
  host = "127.0.0.1"
967
- base_url = get_env_collector_endpoint() or f"http://{host}:{get_env_port()}"
1205
+ scheme = "https" if get_env_tls_enabled() else "http"
1206
+ base_url = get_env_collector_endpoint() or f"{scheme}://{host}:{get_env_port()}"
968
1207
  return base_url if base_url.endswith("/") else base_url + "/"
969
1208
 
970
1209
 
@@ -1159,3 +1398,30 @@ When the PHOENIX_ADMIN_SECRET is used as a bearer token in API requests, the
1159
1398
  request is authenticated as the system user with the user_id set to this
1160
1399
  SYSTEM_USER_ID value (only if this variable is not None).
1161
1400
  """
1401
+
1402
+
1403
+ def _validate_file_exists_and_is_readable(
1404
+ file_path: Path,
1405
+ description: str,
1406
+ check_non_empty: bool = True,
1407
+ ) -> None:
1408
+ """
1409
+ Validate that a file exists, is readable, and optionally has non-zero size.
1410
+
1411
+ Args:
1412
+ file_path: Path to the file to validate
1413
+ description: Description of the file for error messages (e.g., "certificate", "key", "CA")
1414
+ check_non_empty: Whether to check if the file has non-zero size. Defaults to True.
1415
+
1416
+ Raises:
1417
+ ValueError: If the path is not a file, isn't readable, or has zero size (if check_non_empty is True)
1418
+ """ # noqa: E501
1419
+ if not file_path.is_file():
1420
+ raise ValueError(f"{description} path is not a file: {file_path}")
1421
+ if check_non_empty and file_path.stat().st_size == 0:
1422
+ raise ValueError(f"{description} file is empty: {file_path}")
1423
+ try:
1424
+ with open(file_path, "rb") as f:
1425
+ f.read(1) # Read just one byte to verify readability
1426
+ except Exception as e:
1427
+ raise ValueError(f"{description} file is not readable: {e}")
@@ -0,0 +1,353 @@
1
+ # Database
2
+
3
+ This module is responsible for the database connection and the migrations.
4
+
5
+
6
+ ## Migrations
7
+
8
+ All migrations are managed by Alembic. Migrations are applied to the database automatically when the application starts.
9
+
10
+
11
+ ### Manually Applying Migrations
12
+
13
+ Sometimes, it's necessary to manually apply migrations, e.g., to recover from a failed migration. To manually apply migrations, you must first clone the Phoenix repository.
14
+
15
+ ```bash
16
+ git clone https://github.com/Arize-ai/phoenix.git
17
+ ```
18
+
19
+ Then navigate to the current directory.
20
+
21
+ ```bash
22
+ cd phoenix/src/phoenix/db
23
+ ```
24
+
25
+ If you are using a non-default SQL database URL (e.g., for running PostgreSQL), ensure your `PHOENIX_SQL_DATABASE_URL` is set. This is not needed if you are running Phoenix with the default SQLite URL.
26
+
27
+ ```bash
28
+ export PHOENIX_SQL_DATABASE_URL=<sql-database-url>
29
+ ```
30
+
31
+
32
+ To manually run up-migrations, run the following command:
33
+
34
+ ```bash
35
+ alembic upgrade head
36
+ ```
37
+
38
+ If the above command fails, it may be necessary to undo partially applied changes from a failed migration by first running down-migrations. This can be accomplished by identifying the ID of the migration revision you wish to return to. Revisions are defined [here](./migrations/versions/).
39
+
40
+ ⚠️ Running down-migrations can result in lost data. Only run down-migrations if you know what you are doing and consider backing up your database first. If you have any questions or doubts, contact the Phoenix team in the `#phoenix-support` channel of the [Arize AI Slack community](https://join.slack.com/t/arize-ai/shared_invite/zt-1px8dcmlf-fmThhDFD_V_48oU7ALan4Q) or via GitHub.
41
+
42
+ ```bash
43
+ alembic downgrade <revision-id>
44
+ ```
45
+
46
+ ### Creating a Migration
47
+
48
+ All migrations are stored in the `migrations` folder. To create a new migration, run the following command:
49
+
50
+ ```bash
51
+ alembic revision -m "your_revision_name"
52
+ ```
53
+
54
+ Then fill the migration file with the necessary changes.
55
+
56
+ ## Entity Relationship Diagram
57
+
58
+ Below is a Mermaid diagram showing the current relationships between the main entities in the database:
59
+
60
+ ```mermaid
61
+ erDiagram
62
+ Project ||--o{ Trace : has
63
+ Project {
64
+ int id PK
65
+ string name
66
+ string description
67
+ string gradient_start_color
68
+ string gradient_end_color
69
+ datetime created_at
70
+ datetime updated_at
71
+ }
72
+
73
+ ProjectSession ||--o{ Trace : has
74
+ ProjectSession {
75
+ int id PK
76
+ string session_id
77
+ int project_id FK
78
+ datetime start_time
79
+ datetime end_time
80
+ }
81
+
82
+ Trace ||--o{ Span : contains
83
+ Trace ||--o{ ExperimentRun : has
84
+ Trace ||--o{ TraceAnnotation : has
85
+ Trace ||--o{ ExperimentRunAnnotation : has
86
+ Trace {
87
+ int id PK
88
+ int project_rowid FK
89
+ string trace_id
90
+ int project_session_rowid FK
91
+ datetime start_time
92
+ datetime end_time
93
+ }
94
+
95
+ Span ||--o{ DocumentAnnotation : has
96
+ Span ||--o{ DatasetExample : has
97
+ Span ||--o{ SpanAnnotation : has
98
+ Span {
99
+ int id PK
100
+ int trace_rowid FK
101
+ string span_id
102
+ string parent_id
103
+ string name
104
+ string span_kind
105
+ datetime start_time
106
+ datetime end_time
107
+ json attributes
108
+ json events
109
+ string status_code
110
+ string status_message
111
+ int cumulative_error_count
112
+ int cumulative_llm_token_count_prompt
113
+ int cumulative_llm_token_count_completion
114
+ int llm_token_count_prompt
115
+ int llm_token_count_completion
116
+ }
117
+
118
+ DocumentAnnotation {
119
+ int id PK
120
+ int span_rowid FK
121
+ int document_position
122
+ string name
123
+ string label
124
+ float score
125
+ string explanation
126
+ json metadata
127
+ string annotator_kind
128
+ datetime created_at
129
+ datetime updated_at
130
+ }
131
+
132
+ SpanAnnotation {
133
+ int id PK
134
+ int span_rowid FK
135
+ string name
136
+ string label
137
+ float score
138
+ string explanation
139
+ json metadata
140
+ string annotator_kind
141
+ datetime created_at
142
+ datetime updated_at
143
+ }
144
+
145
+ TraceAnnotation {
146
+ int id PK
147
+ int trace_rowid FK
148
+ string name
149
+ string label
150
+ float score
151
+ string explanation
152
+ json metadata
153
+ string annotator_kind
154
+ datetime created_at
155
+ datetime updated_at
156
+ }
157
+
158
+ Dataset ||--o{ DatasetVersion : has
159
+ Dataset ||--o{ DatasetExample : contains
160
+ Dataset {
161
+ int id PK
162
+ string name
163
+ string description
164
+ json metadata
165
+ datetime created_at
166
+ datetime updated_at
167
+ }
168
+
169
+ DatasetVersion ||--o{ DatasetExampleRevision : has
170
+ DatasetVersion {
171
+ int id PK
172
+ int dataset_id FK
173
+ string description
174
+ json metadata
175
+ datetime created_at
176
+ }
177
+
178
+ DatasetExample ||--o{ DatasetExampleRevision : has
179
+ DatasetExample {
180
+ int id PK
181
+ int dataset_id FK
182
+ int span_rowid FK
183
+ datetime created_at
184
+ }
185
+
186
+ DatasetExampleRevision {
187
+ int id PK
188
+ int dataset_example_id FK
189
+ int dataset_version_id FK
190
+ json input
191
+ json output
192
+ json metadata
193
+ string revision_kind
194
+ datetime created_at
195
+ }
196
+
197
+ Experiment ||--o{ ExperimentRun : has
198
+ Experiment {
199
+ int id PK
200
+ int dataset_id FK
201
+ int dataset_version_id FK
202
+ string name
203
+ string description
204
+ int repetitions
205
+ json metadata
206
+ string project_name
207
+ datetime created_at
208
+ datetime updated_at
209
+ }
210
+
211
+ ExperimentRun ||--o{ ExperimentRunAnnotation : has
212
+ ExperimentRun {
213
+ int id PK
214
+ int experiment_id FK
215
+ int dataset_example_id FK
216
+ int repetition_number
217
+ string trace_id
218
+ json output
219
+ datetime start_time
220
+ datetime end_time
221
+ int prompt_token_count
222
+ int completion_token_count
223
+ string error
224
+ }
225
+
226
+ ExperimentRunAnnotation {
227
+ int id PK
228
+ int experiment_run_id FK
229
+ string name
230
+ string annotator_kind
231
+ string label
232
+ float score
233
+ string explanation
234
+ string trace_id
235
+ string error
236
+ json metadata
237
+ datetime start_time
238
+ datetime end_time
239
+ }
240
+
241
+ User ||--o{ ApiKey : has
242
+ User ||--o{ AccessToken : has
243
+ User ||--o{ RefreshToken : has
244
+ User ||--o{ PasswordResetToken : has
245
+ User ||--o{ PromptVersion : has
246
+ User ||--o{ PromptVersionTag : has
247
+ User {
248
+ int id PK
249
+ int user_role_id FK
250
+ string username
251
+ string email
252
+ string profile_picture_url
253
+ bytes password_hash
254
+ bytes password_salt
255
+ boolean reset_password
256
+ string oauth2_client_id
257
+ string oauth2_user_id
258
+ datetime created_at
259
+ datetime updated_at
260
+ }
261
+
262
+ UserRole ||--o{ User : has
263
+ UserRole {
264
+ int id PK
265
+ string name
266
+ }
267
+
268
+ ApiKey {
269
+ int id PK
270
+ int user_id FK
271
+ string name
272
+ string description
273
+ datetime created_at
274
+ datetime expires_at
275
+ }
276
+
277
+ AccessToken {
278
+ int id PK
279
+ int user_id FK
280
+ datetime created_at
281
+ datetime expires_at
282
+ int refresh_token_id FK
283
+ }
284
+
285
+ RefreshToken {
286
+ int id PK
287
+ int user_id FK
288
+ datetime created_at
289
+ datetime expires_at
290
+ }
291
+
292
+ PasswordResetToken {
293
+ int id PK
294
+ int user_id FK
295
+ datetime created_at
296
+ datetime expires_at
297
+ }
298
+
299
+ Prompt ||--o{ PromptVersion : has
300
+ Prompt ||--o{ PromptPromptLabel : has
301
+ Prompt ||--o{ PromptVersionTag : has
302
+ Prompt ||--o{ Prompt : has
303
+ Prompt {
304
+ int id PK
305
+ int source_prompt_id FK
306
+ string name
307
+ string description
308
+ json metadata
309
+ datetime created_at
310
+ datetime updated_at
311
+ }
312
+
313
+ PromptVersion ||--o{ PromptVersionTag : has
314
+ PromptVersion {
315
+ int id PK
316
+ int prompt_id FK
317
+ string description
318
+ int user_id FK
319
+ string template_type
320
+ string template_format
321
+ json template
322
+ json invocation_parameters
323
+ json tools
324
+ json response_format
325
+ string model_provider
326
+ string model_name
327
+ json metadata
328
+ datetime created_at
329
+ }
330
+
331
+ PromptLabel ||--o{ PromptPromptLabel : has
332
+ PromptLabel {
333
+ int id PK
334
+ string name
335
+ string description
336
+ string color
337
+ }
338
+
339
+ PromptPromptLabel {
340
+ int id PK
341
+ int prompt_label_id FK
342
+ int prompt_id FK
343
+ }
344
+
345
+ PromptVersionTag {
346
+ int id PK
347
+ string name
348
+ string description
349
+ int prompt_id FK
350
+ int prompt_version_id FK
351
+ int user_id FK
352
+ }
353
+ ```
@@ -427,11 +427,8 @@ class Query:
427
427
  @strawberry.field
428
428
  async def functionality(self, info: Info[Context, None]) -> "Functionality":
429
429
  has_model_inferences = not info.context.model.is_empty
430
- async with info.context.db() as session:
431
- has_traces = (await session.scalar(select(models.Trace).limit(1))) is not None
432
430
  return Functionality(
433
431
  model_inferences=has_model_inferences,
434
- tracing=has_traces,
435
432
  )
436
433
 
437
434
  @strawberry.field
@@ -10,6 +10,3 @@ class Functionality:
10
10
  model_inferences: bool = strawberry.field(
11
11
  description="Model inferences are available for analysis"
12
12
  )
13
- tracing: bool = strawberry.field(
14
- description="Generative tracing records are available for analysis"
15
- )