arize-phoenix 11.29.0__tar.gz → 11.31.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 (454) hide show
  1. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/PKG-INFO +17 -17
  2. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/README.md +16 -16
  3. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/types/trace_retention.py +1 -1
  4. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/average_experiment_run_latency.py +1 -4
  5. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/document_evaluations.py +6 -9
  6. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/routers/v1/__init__.py +2 -0
  7. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/routers/v1/annotations.py +128 -5
  8. arize_phoenix-11.31.0/src/phoenix/server/api/routers/v1/documents.py +143 -0
  9. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/routers/v1/spans.py +7 -51
  10. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/routers/v1/traces.py +24 -58
  11. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/Dataset.py +8 -66
  12. arize_phoenix-11.31.0/src/phoenix/server/api/types/DatasetExperimentAnnotationSummary.py +10 -0
  13. arize_phoenix-11.31.0/src/phoenix/server/api/types/DocumentAnnotation.py +92 -0
  14. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/Experiment.py +2 -2
  15. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/Span.py +9 -3
  16. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/TraceAnnotation.py +8 -5
  17. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/cost_tracking/model_cost_manifest.json +91 -0
  18. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/static/.vite/manifest.json +9 -9
  19. arize_phoenix-11.29.0/src/phoenix/server/static/assets/components-dCdVienD.js → arize_phoenix-11.31.0/src/phoenix/server/static/assets/components-BjW5gAwL.js +1 -1
  20. arize_phoenix-11.29.0/src/phoenix/server/static/assets/index-Bp44T8N2.js → arize_phoenix-11.31.0/src/phoenix/server/static/assets/index-3OI8VV_W.js +1 -1
  21. arize_phoenix-11.29.0/src/phoenix/server/static/assets/pages-CA4bKhm9.js → arize_phoenix-11.31.0/src/phoenix/server/static/assets/pages-CQfUODtD.js +312 -307
  22. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/trace/projects.py +6 -0
  23. arize_phoenix-11.31.0/src/phoenix/version.py +1 -0
  24. arize_phoenix-11.29.0/src/phoenix/server/api/types/Evaluation.py +0 -39
  25. arize_phoenix-11.29.0/src/phoenix/version.py +0 -1
  26. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/.gitignore +0 -0
  27. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/IP_NOTICE +0 -0
  28. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/LICENSE +0 -0
  29. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/pyproject.toml +0 -0
  30. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/__init__.py +0 -0
  31. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/auth.py +0 -0
  32. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/config.py +0 -0
  33. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/core/__init__.py +0 -0
  34. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/core/embedding_dimension.py +0 -0
  35. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/core/model.py +0 -0
  36. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/core/model_schema.py +0 -0
  37. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/core/model_schema_adapter.py +0 -0
  38. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/datetime_utils.py +0 -0
  39. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/README.md +0 -0
  40. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/__init__.py +0 -0
  41. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/alembic.ini +0 -0
  42. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/bulk_inserter.py +0 -0
  43. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/constants.py +0 -0
  44. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/engines.py +0 -0
  45. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/enums.py +0 -0
  46. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/facilitator.py +0 -0
  47. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/helpers.py +0 -0
  48. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/insertion/__init__.py +0 -0
  49. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/insertion/constants.py +0 -0
  50. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/insertion/dataset.py +0 -0
  51. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/insertion/document_annotation.py +0 -0
  52. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/insertion/evaluation.py +0 -0
  53. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/insertion/helpers.py +0 -0
  54. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/insertion/span.py +0 -0
  55. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/insertion/span_annotation.py +0 -0
  56. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/insertion/trace_annotation.py +0 -0
  57. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/insertion/types.py +0 -0
  58. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/migrate.py +0 -0
  59. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/migrations/__init__.py +0 -0
  60. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/migrations/data_migration_scripts/__init__.py +0 -0
  61. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/migrations/data_migration_scripts/populate_project_sessions.py +0 -0
  62. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/migrations/env.py +0 -0
  63. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/migrations/script.py.mako +0 -0
  64. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/migrations/versions/10460e46d750_datasets.py +0 -0
  65. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/migrations/versions/2f9d1a65945f_annotation_config_migration.py +0 -0
  66. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/migrations/versions/3be8647b87d8_add_token_columns_to_spans_table.py +0 -0
  67. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/migrations/versions/4ded9e43755f_create_project_sessions_table.py +0 -0
  68. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/migrations/versions/6a88424799fe_update_users_with_auth_method.py +0 -0
  69. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/migrations/versions/8a3764fe7f1a_change_jsonb_to_json_for_prompts.py +0 -0
  70. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/migrations/versions/a20694b15f82_cost.py +0 -0
  71. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/migrations/versions/bb8139330879_create_project_trace_retention_policies_table.py +0 -0
  72. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/migrations/versions/bc8fea3c2bc8_add_prompt_tables.py +0 -0
  73. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/migrations/versions/cd164e83824f_users_and_tokens.py +0 -0
  74. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/migrations/versions/cf03bd6bae1d_init.py +0 -0
  75. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/models.py +0 -0
  76. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/pg_config.py +0 -0
  77. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/types/__init__.py +0 -0
  78. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/types/annotation_configs.py +0 -0
  79. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/types/db_models.py +0 -0
  80. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/types/identifier.py +0 -0
  81. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/types/model_provider.py +0 -0
  82. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/db/types/token_price_customization.py +0 -0
  83. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/exceptions.py +0 -0
  84. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/experiments/__init__.py +0 -0
  85. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/experiments/evaluators/__init__.py +0 -0
  86. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/experiments/evaluators/base.py +0 -0
  87. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/experiments/evaluators/code_evaluators.py +0 -0
  88. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/experiments/evaluators/llm_evaluators.py +0 -0
  89. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/experiments/evaluators/utils.py +0 -0
  90. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/experiments/functions.py +0 -0
  91. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/experiments/tracing.py +0 -0
  92. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/experiments/types.py +0 -0
  93. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/experiments/utils.py +0 -0
  94. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/inferences/__init__.py +0 -0
  95. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/inferences/errors.py +0 -0
  96. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/inferences/fixtures.py +0 -0
  97. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/inferences/inferences.py +0 -0
  98. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/inferences/schema.py +0 -0
  99. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/inferences/validation.py +0 -0
  100. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/logging/__init__.py +0 -0
  101. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/logging/_config.py +0 -0
  102. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/logging/_filter.py +0 -0
  103. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/logging/_formatter.py +0 -0
  104. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/metrics/README.md +0 -0
  105. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/metrics/__init__.py +0 -0
  106. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/metrics/binning.py +0 -0
  107. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/metrics/metrics.py +0 -0
  108. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/metrics/mixins.py +0 -0
  109. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/metrics/retrieval_metrics.py +0 -0
  110. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/metrics/timeseries.py +0 -0
  111. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/metrics/wrappers.py +0 -0
  112. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/pointcloud/__init__.py +0 -0
  113. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/pointcloud/clustering.py +0 -0
  114. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/pointcloud/pointcloud.py +0 -0
  115. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/pointcloud/projectors.py +0 -0
  116. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/pointcloud/umap_parameters.py +0 -0
  117. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/py.typed +0 -0
  118. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/__init__.py +0 -0
  119. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/README.md +0 -0
  120. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/__init__.py +0 -0
  121. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/auth.py +0 -0
  122. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/context.py +0 -0
  123. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/__init__.py +0 -0
  124. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/annotation_configs_by_project.py +0 -0
  125. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/annotation_summaries.py +0 -0
  126. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/cache/__init__.py +0 -0
  127. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/cache/two_tier_cache.py +0 -0
  128. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/dataset_example_revisions.py +0 -0
  129. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/dataset_example_spans.py +0 -0
  130. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/document_evaluation_summaries.py +0 -0
  131. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/document_retrieval_metrics.py +0 -0
  132. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/experiment_annotation_summaries.py +1 -1
  133. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/experiment_error_rates.py +0 -0
  134. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/experiment_run_annotations.py +0 -0
  135. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/experiment_run_counts.py +0 -0
  136. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/experiment_sequence_number.py +0 -0
  137. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/last_used_times_by_generative_model_id.py +0 -0
  138. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/latency_ms_quantile.py +0 -0
  139. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/min_start_or_max_end_times.py +0 -0
  140. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/num_child_spans.py +0 -0
  141. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/num_spans_per_trace.py +0 -0
  142. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/project_by_name.py +0 -0
  143. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/project_ids_by_trace_retention_policy_id.py +0 -0
  144. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/prompt_version_sequence_number.py +0 -0
  145. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/record_counts.py +0 -0
  146. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/session_io.py +0 -0
  147. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/session_num_traces.py +0 -0
  148. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/session_num_traces_with_error.py +0 -0
  149. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/session_token_usages.py +0 -0
  150. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/session_trace_latency_ms_quantile.py +0 -0
  151. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/span_annotations.py +0 -0
  152. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/span_by_id.py +0 -0
  153. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/span_cost_by_span.py +0 -0
  154. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/span_cost_detail_summary_entries_by_generative_model.py +0 -0
  155. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/span_cost_detail_summary_entries_by_project_session.py +0 -0
  156. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/span_cost_detail_summary_entries_by_span.py +0 -0
  157. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/span_cost_detail_summary_entries_by_trace.py +0 -0
  158. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/span_cost_details_by_span_cost.py +0 -0
  159. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_experiment.py +0 -0
  160. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_experiment_run.py +0 -0
  161. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_generative_model.py +0 -0
  162. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_project.py +0 -0
  163. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_project_session.py +0 -0
  164. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_trace.py +0 -0
  165. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/span_costs.py +0 -0
  166. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/span_dataset_examples.py +0 -0
  167. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/span_descendants.py +0 -0
  168. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/span_projects.py +0 -0
  169. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/table_fields.py +0 -0
  170. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/token_counts.py +0 -0
  171. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/trace_by_trace_ids.py +0 -0
  172. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/trace_retention_policy_id_by_project_id.py +0 -0
  173. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/trace_root_spans.py +0 -0
  174. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/types.py +0 -0
  175. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/user_roles.py +0 -0
  176. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/dataloaders/users.py +0 -0
  177. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/exceptions.py +0 -0
  178. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/helpers/__init__.py +0 -0
  179. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/helpers/annotations.py +0 -0
  180. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/helpers/dataset_helpers.py +0 -0
  181. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/helpers/experiment_run_filters.py +0 -0
  182. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/helpers/playground_clients.py +0 -0
  183. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/helpers/playground_registry.py +0 -0
  184. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/helpers/playground_spans.py +0 -0
  185. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/helpers/prompts/__init__.py +0 -0
  186. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/helpers/prompts/conversions/__init__.py +0 -0
  187. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/helpers/prompts/conversions/anthropic.py +0 -0
  188. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/helpers/prompts/conversions/aws.py +0 -0
  189. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/helpers/prompts/conversions/openai.py +0 -0
  190. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/helpers/prompts/models.py +0 -0
  191. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/AddExamplesToDatasetInput.py +0 -0
  192. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/AddSpansToDatasetInput.py +0 -0
  193. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/ChatCompletionInput.py +0 -0
  194. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/ChatCompletionMessageInput.py +0 -0
  195. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/ClearProjectInput.py +0 -0
  196. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/ClusterInput.py +0 -0
  197. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/Coordinates.py +0 -0
  198. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/CreateDatasetInput.py +0 -0
  199. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/CreateProjectInput.py +0 -0
  200. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/CreateSpanAnnotationInput.py +0 -0
  201. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/CreateTraceAnnotationInput.py +0 -0
  202. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/DataQualityMetricInput.py +0 -0
  203. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/DatasetExampleInput.py +0 -0
  204. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/DatasetFilter.py +0 -0
  205. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/DatasetSort.py +0 -0
  206. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/DatasetVersionSort.py +0 -0
  207. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/DeleteAnnotationsInput.py +0 -0
  208. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/DeleteDatasetExamplesInput.py +0 -0
  209. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/DeleteDatasetInput.py +0 -0
  210. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/DeleteExperimentsInput.py +0 -0
  211. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/DimensionFilter.py +0 -0
  212. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/DimensionInput.py +0 -0
  213. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/GenerativeCredentialInput.py +0 -0
  214. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/GenerativeModelInput.py +0 -0
  215. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/Granularity.py +0 -0
  216. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/InvocationParameters.py +0 -0
  217. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/PatchAnnotationInput.py +0 -0
  218. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/PatchDatasetExamplesInput.py +0 -0
  219. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/PatchDatasetInput.py +0 -0
  220. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/PerformanceMetricInput.py +0 -0
  221. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/ProjectFilter.py +0 -0
  222. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/ProjectSessionSort.py +0 -0
  223. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/ProjectSort.py +0 -0
  224. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/PromptFilter.py +0 -0
  225. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/PromptTemplateOptions.py +0 -0
  226. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/PromptVersionInput.py +0 -0
  227. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/SpanAnnotationFilter.py +0 -0
  228. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/SpanAnnotationSort.py +0 -0
  229. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/SpanSort.py +0 -0
  230. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/TimeBinConfig.py +0 -0
  231. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/TimeRange.py +0 -0
  232. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/TraceAnnotationSort.py +0 -0
  233. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/UserRoleInput.py +0 -0
  234. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/input_types/__init__.py +0 -0
  235. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/interceptor.py +0 -0
  236. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/mutations/__init__.py +0 -0
  237. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/mutations/annotation_config_mutations.py +0 -0
  238. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/mutations/api_key_mutations.py +0 -0
  239. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/mutations/chat_mutations.py +0 -0
  240. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/mutations/dataset_mutations.py +0 -0
  241. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/mutations/experiment_mutations.py +0 -0
  242. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/mutations/export_events_mutations.py +0 -0
  243. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/mutations/model_mutations.py +0 -0
  244. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/mutations/project_mutations.py +0 -0
  245. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/mutations/project_trace_retention_policy_mutations.py +0 -0
  246. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/mutations/prompt_label_mutations.py +0 -0
  247. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/mutations/prompt_mutations.py +0 -0
  248. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/mutations/prompt_version_tag_mutations.py +0 -0
  249. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/mutations/span_annotations_mutations.py +0 -0
  250. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/mutations/trace_annotations_mutations.py +0 -0
  251. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/mutations/trace_mutations.py +0 -0
  252. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/mutations/user_mutations.py +0 -0
  253. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/openapi/__init__.py +0 -0
  254. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/openapi/main.py +0 -0
  255. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/openapi/schema.py +0 -0
  256. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/queries.py +0 -0
  257. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/routers/__init__.py +0 -0
  258. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/routers/auth.py +0 -0
  259. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/routers/embeddings.py +0 -0
  260. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/routers/oauth2.py +0 -0
  261. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/routers/utils.py +0 -0
  262. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/routers/v1/annotation_configs.py +0 -0
  263. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/routers/v1/datasets.py +0 -0
  264. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/routers/v1/evaluations.py +0 -0
  265. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/routers/v1/experiment_evaluations.py +0 -0
  266. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/routers/v1/experiment_runs.py +0 -0
  267. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/routers/v1/experiments.py +0 -0
  268. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/routers/v1/models.py +0 -0
  269. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/routers/v1/projects.py +0 -0
  270. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/routers/v1/prompts.py +0 -0
  271. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/routers/v1/users.py +0 -0
  272. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/routers/v1/utils.py +0 -0
  273. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/schema.py +0 -0
  274. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/subscriptions.py +0 -0
  275. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/Annotation.py +0 -0
  276. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/AnnotationConfig.py +0 -0
  277. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/AnnotationSource.py +0 -0
  278. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/AnnotationSummary.py +0 -0
  279. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/AnnotatorKind.py +0 -0
  280. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/ApiKey.py +0 -0
  281. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/AuthMethod.py +0 -0
  282. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/ChatCompletionMessageRole.py +0 -0
  283. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/ChatCompletionSubscriptionPayload.py +0 -0
  284. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/Cluster.py +0 -0
  285. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/CostBreakdown.py +0 -0
  286. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/CreateDatasetPayload.py +0 -0
  287. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/CronExpression.py +0 -0
  288. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/DataQualityMetric.py +0 -0
  289. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/DatasetExample.py +0 -0
  290. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/DatasetExampleRevision.py +0 -0
  291. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/DatasetValues.py +0 -0
  292. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/DatasetVersion.py +0 -0
  293. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/Dimension.py +0 -0
  294. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/DimensionDataType.py +0 -0
  295. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/DimensionShape.py +0 -0
  296. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/DimensionType.py +0 -0
  297. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/DimensionWithValue.py +0 -0
  298. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/DocumentEvaluationSummary.py +0 -0
  299. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/DocumentRetrievalMetrics.py +0 -0
  300. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/EmbeddingDimension.py +0 -0
  301. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/EmbeddingMetadata.py +0 -0
  302. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/EvaluationSummary.py +0 -0
  303. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/Event.py +0 -0
  304. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/EventMetadata.py +0 -0
  305. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/ExampleRevisionInterface.py +0 -0
  306. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/ExperimentAnnotationSummary.py +0 -0
  307. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/ExperimentComparison.py +0 -0
  308. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/ExperimentRun.py +0 -0
  309. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/ExperimentRunAnnotation.py +0 -0
  310. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/ExportedFile.py +0 -0
  311. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/Functionality.py +0 -0
  312. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/GenerativeModel.py +0 -0
  313. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/GenerativeProvider.py +0 -0
  314. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/Identifier.py +0 -0
  315. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/InferenceModel.py +0 -0
  316. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/Inferences.py +0 -0
  317. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/InferencesRole.py +0 -0
  318. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/LabelFraction.py +0 -0
  319. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/MimeType.py +0 -0
  320. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/ModelInterface.py +0 -0
  321. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/NumericRange.py +0 -0
  322. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/PerformanceMetric.py +0 -0
  323. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/PlaygroundModel.py +0 -0
  324. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/Project.py +0 -0
  325. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/ProjectSession.py +0 -0
  326. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/ProjectTraceRetentionPolicy.py +0 -0
  327. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/Prompt.py +0 -0
  328. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/PromptLabel.py +0 -0
  329. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/PromptResponse.py +0 -0
  330. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/PromptVersion.py +0 -0
  331. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/PromptVersionTag.py +0 -0
  332. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/PromptVersionTemplate.py +0 -0
  333. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/ResponseFormat.py +0 -0
  334. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/Retrieval.py +0 -0
  335. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/ScalarDriftMetricEnum.py +0 -0
  336. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/Segments.py +0 -0
  337. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/ServerStatus.py +0 -0
  338. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/SortDir.py +0 -0
  339. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/SpanAnnotation.py +0 -0
  340. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/SpanCostDetailSummaryEntry.py +0 -0
  341. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/SpanCostSummary.py +0 -0
  342. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/SpanIOValue.py +0 -0
  343. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/SystemApiKey.py +0 -0
  344. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/TimeSeries.py +0 -0
  345. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/TokenCountPromptDetails.py +0 -0
  346. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/TokenPrice.py +0 -0
  347. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/TokenUsage.py +0 -0
  348. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/ToolDefinition.py +0 -0
  349. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/Trace.py +0 -0
  350. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/UMAPPoints.py +0 -0
  351. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/User.py +0 -0
  352. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/UserApiKey.py +0 -0
  353. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/UserRole.py +0 -0
  354. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/ValidationResult.py +0 -0
  355. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/VectorDriftMetricEnum.py +0 -0
  356. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/__init__.py +0 -0
  357. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/node.py +0 -0
  358. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/types/pagination.py +0 -0
  359. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/api/utils.py +0 -0
  360. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/app.py +0 -0
  361. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/authorization.py +0 -0
  362. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/bearer_auth.py +0 -0
  363. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/cost_tracking/__init__.py +0 -0
  364. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/cost_tracking/cost_details_calculator.py +0 -0
  365. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/cost_tracking/cost_model_lookup.py +0 -0
  366. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/cost_tracking/helpers.py +0 -0
  367. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/cost_tracking/regex_specificity.py +0 -0
  368. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/cost_tracking/token_cost_calculator.py +0 -0
  369. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/daemons/__init__.py +0 -0
  370. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/daemons/db_disk_usage_monitor.py +0 -0
  371. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/daemons/generative_model_store.py +0 -0
  372. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/daemons/span_cost_calculator.py +0 -0
  373. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/dml_event.py +0 -0
  374. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/dml_event_handler.py +0 -0
  375. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/email/__init__.py +0 -0
  376. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/email/sender.py +0 -0
  377. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/email/templates/__init__.py +0 -0
  378. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/email/templates/db_disk_usage_notification.html +0 -0
  379. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/email/templates/password_reset.html +0 -0
  380. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/email/templates/welcome.html +0 -0
  381. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/email/types.py +0 -0
  382. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/experiments/__init__.py +0 -0
  383. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/experiments/utils.py +0 -0
  384. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/grpc_server.py +0 -0
  385. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/jwt_store.py +0 -0
  386. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/main.py +0 -0
  387. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/middleware/__init__.py +0 -0
  388. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/middleware/gzip.py +0 -0
  389. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/oauth2.py +0 -0
  390. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/openapi/__init__.py +0 -0
  391. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/prometheus.py +0 -0
  392. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/rate_limiters.py +0 -0
  393. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/retention.py +0 -0
  394. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/session_filters.py +0 -0
  395. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/static/apple-touch-icon-114x114.png +0 -0
  396. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/static/apple-touch-icon-120x120.png +0 -0
  397. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/static/apple-touch-icon-144x144.png +0 -0
  398. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/static/apple-touch-icon-152x152.png +0 -0
  399. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/static/apple-touch-icon-180x180.png +0 -0
  400. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/static/apple-touch-icon-72x72.png +0 -0
  401. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/static/apple-touch-icon-76x76.png +0 -0
  402. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/static/apple-touch-icon.png +0 -0
  403. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/static/assets/vendor-CqDb5u4o.css +0 -0
  404. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/static/assets/vendor-RdRDaQiR.js +0 -0
  405. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/static/assets/vendor-arizeai-DsYDNOqt.js +0 -0
  406. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/static/assets/vendor-codemirror-BzJDUbEx.js +0 -0
  407. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/static/assets/vendor-recharts-BTHn5Y2R.js +0 -0
  408. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/static/assets/vendor-shiki-BAcocHFl.js +0 -0
  409. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/static/assets/vendor-three-BLWp5bic.js +0 -0
  410. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/static/favicon.ico +0 -0
  411. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/static/modernizr.js +0 -0
  412. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/telemetry.py +0 -0
  413. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/templates/__init__.py +0 -0
  414. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/templates/index.html +0 -0
  415. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/thread_server.py +0 -0
  416. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/server/types.py +0 -0
  417. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/services.py +0 -0
  418. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/session/__init__.py +0 -0
  419. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/session/client.py +0 -0
  420. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/session/data_extractor.py +0 -0
  421. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/session/evaluation.py +0 -0
  422. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/session/session.py +0 -0
  423. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/settings.py +0 -0
  424. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/trace/__init__.py +0 -0
  425. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/trace/attributes.py +0 -0
  426. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/trace/dsl/README.md +0 -0
  427. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/trace/dsl/__init__.py +0 -0
  428. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/trace/dsl/filter.py +0 -0
  429. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/trace/dsl/helpers.py +0 -0
  430. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/trace/dsl/query.py +0 -0
  431. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/trace/errors.py +0 -0
  432. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/trace/evaluation_conventions.py +0 -0
  433. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/trace/exporter.py +0 -0
  434. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/trace/fixtures.py +0 -0
  435. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/trace/otel.py +0 -0
  436. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/trace/schemas.py +0 -0
  437. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/trace/span_evaluations.py +0 -0
  438. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/trace/span_json_decoder.py +0 -0
  439. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/trace/span_json_encoder.py +0 -0
  440. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/trace/trace_dataset.py +0 -0
  441. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/trace/utils.py +0 -0
  442. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/trace/v1/__init__.py +0 -0
  443. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/trace/v1/evaluation_pb2.py +0 -0
  444. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/trace/v1/evaluation_pb2.pyi +0 -0
  445. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/utilities/__init__.py +0 -0
  446. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/utilities/client.py +0 -0
  447. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/utilities/deprecation.py +0 -0
  448. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/utilities/error_handling.py +0 -0
  449. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/utilities/json.py +0 -0
  450. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/utilities/logging.py +0 -0
  451. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/utilities/project.py +0 -0
  452. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/utilities/re.py +0 -0
  453. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/utilities/span_store.py +0 -0
  454. {arize_phoenix-11.29.0 → arize_phoenix-11.31.0}/src/phoenix/utilities/template_formatters.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: arize-phoenix
3
- Version: 11.29.0
3
+ Version: 11.31.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
@@ -201,14 +201,14 @@ The `arize-phoenix` package includes the entire Phoenix platfom. However if you
201
201
 
202
202
  ### Subpackages
203
203
 
204
- | Package | Language | Description |
205
- | --------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- |
206
- | [arize-phoenix-otel](https://github.com/Arize-ai/phoenix/tree/main/packages/phoenix-otel) | Python [![PyPI Version](https://img.shields.io/pypi/v/arize-phoenix-otel)](https://pypi.org/project/arize-phoenix-otel/) | Provides a lightweight wrapper around OpenTelemetry primitives with Phoenix-aware defaults |
207
- | [arize-phoenix-client](https://github.com/Arize-ai/phoenix/tree/main/packages/phoenix-client) | Python [![PyPI Version](https://img.shields.io/pypi/v/arize-phoenix-client)](https://pypi.org/project/arize-phoenix-client/) | Lightweight client for interacting with the Phoenix server via its OpenAPI REST interface |
208
- | [arize-phoenix-evals](https://github.com/Arize-ai/phoenix/tree/main/packages/phoenix-evals) | Python [![PyPI Version](https://img.shields.io/pypi/v/arize-phoenix-evals)](https://pypi.org/project/arize-phoenix-evals/) | Tooling to evaluate LLM applications including RAG relevance, answer relevance, and more |
209
- | [@arizeai/phoenix-client](https://github.com/Arize-ai/phoenix/tree/main/js/packages/phoenix-client) | JavaScript [![NPM Version](https://img.shields.io/npm/v/%40arizeai%2Fphoenix-client)](https://www.npmjs.com/package/@arizeai/phoenix-client) | Client for the Arize Phoenix API |
210
- | [@arizeai/phoenix-evals](https://github.com/Arize-ai/phoenix/tree/main/js/packages/phoenix-evals) | TypeScript [![NPM Version](https://img.shields.io/npm/v/%40arizeai%2Fphoenix-evals)](https://www.npmjs.com/package/@arizeai/phoenix-evals) | TypeScript evaluation library for LLM applications (alpha release) |
211
- | [@arizeai/phoenix-mcp](https://github.com/Arize-ai/phoenix/tree/main/js/packages/phoenix-mcp) | JavaScript [![NPM Version](https://img.shields.io/npm/v/%40arizeai%2Fphoenix-mcp)](https://www.npmjs.com/package/@arizeai/phoenix-mcp) | MCP server implementation for Arize Phoenix providing unified interface to Phoenix's capabilities |
204
+ | Package | Version & Docs | Description |
205
+ | --------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- |
206
+ | [arize-phoenix-otel](https://github.com/Arize-ai/phoenix/tree/main/packages/phoenix-otel) | [![PyPI Version](https://img.shields.io/pypi/v/arize-phoenix-otel)](https://pypi.org/project/arize-phoenix-otel/) [![Docs](https://img.shields.io/badge/docs-blue?logo=readthedocs&logoColor=white)](https://arize-phoenix.readthedocs.io/projects/otel/en/latest/index.html) | Provides a lightweight wrapper around OpenTelemetry primitives with Phoenix-aware defaults |
207
+ | [arize-phoenix-client](https://github.com/Arize-ai/phoenix/tree/main/packages/phoenix-client) | [![PyPI Version](https://img.shields.io/pypi/v/arize-phoenix-client)](https://pypi.org/project/arize-phoenix-client/) [![Docs](https://img.shields.io/badge/docs-blue?logo=readthedocs&logoColor=white)](https://arize-phoenix.readthedocs.io/projects/client/en/latest/index.html) | Lightweight client for interacting with the Phoenix server via its OpenAPI REST interface |
208
+ | [arize-phoenix-evals](https://github.com/Arize-ai/phoenix/tree/main/packages/phoenix-evals) | [![PyPI Version](https://img.shields.io/pypi/v/arize-phoenix-evals)](https://pypi.org/project/arize-phoenix-evals/) [![Docs](https://img.shields.io/badge/docs-blue?logo=readthedocs&logoColor=white)](https://arize-phoenix.readthedocs.io/projects/evals/en/latest/index.html) | Tooling to evaluate LLM applications including RAG relevance, answer relevance, and more |
209
+ | [@arizeai/phoenix-client](https://github.com/Arize-ai/phoenix/tree/main/js/packages/phoenix-client) | [![NPM Version](https://img.shields.io/npm/v/%40arizeai%2Fphoenix-client)](https://www.npmjs.com/package/@arizeai/phoenix-client) [![Docs](https://img.shields.io/badge/docs-blue?logo=typescript&logoColor=white)](https://arize-ai.github.io/phoenix/) | Client for the Arize Phoenix API |
210
+ | [@arizeai/phoenix-evals](https://github.com/Arize-ai/phoenix/tree/main/js/packages/phoenix-evals) | [![NPM Version](https://img.shields.io/npm/v/%40arizeai%2Fphoenix-evals)](https://www.npmjs.com/package/@arizeai/phoenix-evals) [![Docs](https://img.shields.io/badge/docs-blue?logo=typescript&logoColor=white)](https://arize-ai.github.io/phoenix/) | TypeScript evaluation library for LLM applications (alpha release) |
211
+ | [@arizeai/phoenix-mcp](https://github.com/Arize-ai/phoenix/tree/main/js/packages/phoenix-mcp) | [![NPM Version](https://img.shields.io/npm/v/%40arizeai%2Fphoenix-mcp)](https://www.npmjs.com/package/@arizeai/phoenix-mcp) [![Docs](https://img.shields.io/badge/docs-blue?logo=markdown&logoColor=white)](./js/packages/phoenix-mcp/README.md) | MCP server implementation for Arize Phoenix providing unified interface to Phoenix's capabilities |
212
212
 
213
213
  ## Tracing Integrations
214
214
 
@@ -256,17 +256,17 @@ Phoenix is built on top of OpenTelemetry and is vendor, language, and framework
256
256
  | Integration | Package | Version Badge |
257
257
  | --------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
258
258
  | [LangChain4j](https://github.com/Arize-ai/openinference/tree/main/java/instrumentation/openinference-instrumentation-langchain4j) | `openinference-instrumentation-langchain4j` | [![Maven Central](https://img.shields.io/maven-central/v/com.arize/openinference-instrumentation-langchain4j.svg)](https://central.sonatype.com/artifact/com.arize/openinference-instrumentation-langchain4j) |
259
- | [SpringAI](https://central.sonatype.com/artifact/com.arize/openinference-instrumentation-springAI) | `openinference-instrumentation-springAI` | [![Maven Central](https://img.shields.io/maven-central/v/com.arize/openinference-instrumentation-springAI.svg)](https://central.sonatype.com/artifact/com.arize/openinference-instrumentation-springAI) |
259
+ | [SpringAI](https://central.sonatype.com/artifact/com.arize/openinference-instrumentation-springAI) | `openinference-instrumentation-springAI` | [![Maven Central](https://img.shields.io/maven-central/v/com.arize/openinference-instrumentation-springAI.svg)](https://central.sonatype.com/artifact/com.arize/openinference-instrumentation-springAI) |
260
260
 
261
261
  ### Platforms
262
262
 
263
- | Platform | Description | Docs |
264
- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- |
265
- | [BeeAI](https://docs.beeai.dev/observability/agents-traceability) | AI agent framework with built-in observability | [Integration Guide](https://docs.beeai.dev/observability/agents-traceability) |
266
- | [Dify](https://docs.dify.ai/en/guides/monitoring/integrate-external-ops-tools/integrate-phoenix) | Open-source LLM app development platform | [Integration Guide](https://docs.dify.ai/en/guides/monitoring/integrate-external-ops-tools/integrate-phoenix) |
267
- | [Envoy AI Gateway](https://github.com/envoyproxy/ai-gateway) | AI Gateway built on Envoy Proxy for AI workloads | [Integration Guide](https://github.com/envoyproxy/ai-gateway/tree/main/cmd/aigw#opentelemetry-setup-with-phoenix) |
268
- | [LangFlow](https://arize.com/docs/phoenix/tracing/integrations-tracing/langflow) | Visual framework for building multi-agent and RAG applications | [Integration Guide](https://arize.com/docs/phoenix/tracing/integrations-tracing/langflow) |
269
- | [LiteLLM Proxy](https://docs.litellm.ai/docs/observability/phoenix_integration#using-with-litellm-proxy) | Proxy server for LLMs | [Integration Guide](https://docs.litellm.ai/docs/observability/phoenix_integration#using-with-litellm-proxy) |
263
+ | Platform | Description | Docs |
264
+ | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- |
265
+ | [BeeAI](https://docs.beeai.dev/observability/agents-traceability) | AI agent framework with built-in observability | [Integration Guide](https://docs.beeai.dev/observability/agents-traceability) |
266
+ | [Dify](https://docs.dify.ai/en/guides/monitoring/integrate-external-ops-tools/integrate-phoenix) | Open-source LLM app development platform | [Integration Guide](https://docs.dify.ai/en/guides/monitoring/integrate-external-ops-tools/integrate-phoenix) |
267
+ | [Envoy AI Gateway](https://github.com/envoyproxy/ai-gateway) | AI Gateway built on Envoy Proxy for AI workloads | [Integration Guide](https://github.com/envoyproxy/ai-gateway/tree/main/cmd/aigw#opentelemetry-setup-with-phoenix) |
268
+ | [LangFlow](https://arize.com/docs/phoenix/tracing/integrations-tracing/langflow) | Visual framework for building multi-agent and RAG applications | [Integration Guide](https://arize.com/docs/phoenix/tracing/integrations-tracing/langflow) |
269
+ | [LiteLLM Proxy](https://docs.litellm.ai/docs/observability/phoenix_integration#using-with-litellm-proxy) | Proxy server for LLMs | [Integration Guide](https://docs.litellm.ai/docs/observability/phoenix_integration#using-with-litellm-proxy) |
270
270
 
271
271
  ## Community
272
272
 
@@ -66,14 +66,14 @@ The `arize-phoenix` package includes the entire Phoenix platfom. However if you
66
66
 
67
67
  ### Subpackages
68
68
 
69
- | Package | Language | Description |
70
- | --------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- |
71
- | [arize-phoenix-otel](https://github.com/Arize-ai/phoenix/tree/main/packages/phoenix-otel) | Python [![PyPI Version](https://img.shields.io/pypi/v/arize-phoenix-otel)](https://pypi.org/project/arize-phoenix-otel/) | Provides a lightweight wrapper around OpenTelemetry primitives with Phoenix-aware defaults |
72
- | [arize-phoenix-client](https://github.com/Arize-ai/phoenix/tree/main/packages/phoenix-client) | Python [![PyPI Version](https://img.shields.io/pypi/v/arize-phoenix-client)](https://pypi.org/project/arize-phoenix-client/) | Lightweight client for interacting with the Phoenix server via its OpenAPI REST interface |
73
- | [arize-phoenix-evals](https://github.com/Arize-ai/phoenix/tree/main/packages/phoenix-evals) | Python [![PyPI Version](https://img.shields.io/pypi/v/arize-phoenix-evals)](https://pypi.org/project/arize-phoenix-evals/) | Tooling to evaluate LLM applications including RAG relevance, answer relevance, and more |
74
- | [@arizeai/phoenix-client](https://github.com/Arize-ai/phoenix/tree/main/js/packages/phoenix-client) | JavaScript [![NPM Version](https://img.shields.io/npm/v/%40arizeai%2Fphoenix-client)](https://www.npmjs.com/package/@arizeai/phoenix-client) | Client for the Arize Phoenix API |
75
- | [@arizeai/phoenix-evals](https://github.com/Arize-ai/phoenix/tree/main/js/packages/phoenix-evals) | TypeScript [![NPM Version](https://img.shields.io/npm/v/%40arizeai%2Fphoenix-evals)](https://www.npmjs.com/package/@arizeai/phoenix-evals) | TypeScript evaluation library for LLM applications (alpha release) |
76
- | [@arizeai/phoenix-mcp](https://github.com/Arize-ai/phoenix/tree/main/js/packages/phoenix-mcp) | JavaScript [![NPM Version](https://img.shields.io/npm/v/%40arizeai%2Fphoenix-mcp)](https://www.npmjs.com/package/@arizeai/phoenix-mcp) | MCP server implementation for Arize Phoenix providing unified interface to Phoenix's capabilities |
69
+ | Package | Version & Docs | Description |
70
+ | --------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- |
71
+ | [arize-phoenix-otel](https://github.com/Arize-ai/phoenix/tree/main/packages/phoenix-otel) | [![PyPI Version](https://img.shields.io/pypi/v/arize-phoenix-otel)](https://pypi.org/project/arize-phoenix-otel/) [![Docs](https://img.shields.io/badge/docs-blue?logo=readthedocs&logoColor=white)](https://arize-phoenix.readthedocs.io/projects/otel/en/latest/index.html) | Provides a lightweight wrapper around OpenTelemetry primitives with Phoenix-aware defaults |
72
+ | [arize-phoenix-client](https://github.com/Arize-ai/phoenix/tree/main/packages/phoenix-client) | [![PyPI Version](https://img.shields.io/pypi/v/arize-phoenix-client)](https://pypi.org/project/arize-phoenix-client/) [![Docs](https://img.shields.io/badge/docs-blue?logo=readthedocs&logoColor=white)](https://arize-phoenix.readthedocs.io/projects/client/en/latest/index.html) | Lightweight client for interacting with the Phoenix server via its OpenAPI REST interface |
73
+ | [arize-phoenix-evals](https://github.com/Arize-ai/phoenix/tree/main/packages/phoenix-evals) | [![PyPI Version](https://img.shields.io/pypi/v/arize-phoenix-evals)](https://pypi.org/project/arize-phoenix-evals/) [![Docs](https://img.shields.io/badge/docs-blue?logo=readthedocs&logoColor=white)](https://arize-phoenix.readthedocs.io/projects/evals/en/latest/index.html) | Tooling to evaluate LLM applications including RAG relevance, answer relevance, and more |
74
+ | [@arizeai/phoenix-client](https://github.com/Arize-ai/phoenix/tree/main/js/packages/phoenix-client) | [![NPM Version](https://img.shields.io/npm/v/%40arizeai%2Fphoenix-client)](https://www.npmjs.com/package/@arizeai/phoenix-client) [![Docs](https://img.shields.io/badge/docs-blue?logo=typescript&logoColor=white)](https://arize-ai.github.io/phoenix/) | Client for the Arize Phoenix API |
75
+ | [@arizeai/phoenix-evals](https://github.com/Arize-ai/phoenix/tree/main/js/packages/phoenix-evals) | [![NPM Version](https://img.shields.io/npm/v/%40arizeai%2Fphoenix-evals)](https://www.npmjs.com/package/@arizeai/phoenix-evals) [![Docs](https://img.shields.io/badge/docs-blue?logo=typescript&logoColor=white)](https://arize-ai.github.io/phoenix/) | TypeScript evaluation library for LLM applications (alpha release) |
76
+ | [@arizeai/phoenix-mcp](https://github.com/Arize-ai/phoenix/tree/main/js/packages/phoenix-mcp) | [![NPM Version](https://img.shields.io/npm/v/%40arizeai%2Fphoenix-mcp)](https://www.npmjs.com/package/@arizeai/phoenix-mcp) [![Docs](https://img.shields.io/badge/docs-blue?logo=markdown&logoColor=white)](./js/packages/phoenix-mcp/README.md) | MCP server implementation for Arize Phoenix providing unified interface to Phoenix's capabilities |
77
77
 
78
78
  ## Tracing Integrations
79
79
 
@@ -121,17 +121,17 @@ Phoenix is built on top of OpenTelemetry and is vendor, language, and framework
121
121
  | Integration | Package | Version Badge |
122
122
  | --------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
123
123
  | [LangChain4j](https://github.com/Arize-ai/openinference/tree/main/java/instrumentation/openinference-instrumentation-langchain4j) | `openinference-instrumentation-langchain4j` | [![Maven Central](https://img.shields.io/maven-central/v/com.arize/openinference-instrumentation-langchain4j.svg)](https://central.sonatype.com/artifact/com.arize/openinference-instrumentation-langchain4j) |
124
- | [SpringAI](https://central.sonatype.com/artifact/com.arize/openinference-instrumentation-springAI) | `openinference-instrumentation-springAI` | [![Maven Central](https://img.shields.io/maven-central/v/com.arize/openinference-instrumentation-springAI.svg)](https://central.sonatype.com/artifact/com.arize/openinference-instrumentation-springAI) |
124
+ | [SpringAI](https://central.sonatype.com/artifact/com.arize/openinference-instrumentation-springAI) | `openinference-instrumentation-springAI` | [![Maven Central](https://img.shields.io/maven-central/v/com.arize/openinference-instrumentation-springAI.svg)](https://central.sonatype.com/artifact/com.arize/openinference-instrumentation-springAI) |
125
125
 
126
126
  ### Platforms
127
127
 
128
- | Platform | Description | Docs |
129
- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- |
130
- | [BeeAI](https://docs.beeai.dev/observability/agents-traceability) | AI agent framework with built-in observability | [Integration Guide](https://docs.beeai.dev/observability/agents-traceability) |
131
- | [Dify](https://docs.dify.ai/en/guides/monitoring/integrate-external-ops-tools/integrate-phoenix) | Open-source LLM app development platform | [Integration Guide](https://docs.dify.ai/en/guides/monitoring/integrate-external-ops-tools/integrate-phoenix) |
132
- | [Envoy AI Gateway](https://github.com/envoyproxy/ai-gateway) | AI Gateway built on Envoy Proxy for AI workloads | [Integration Guide](https://github.com/envoyproxy/ai-gateway/tree/main/cmd/aigw#opentelemetry-setup-with-phoenix) |
133
- | [LangFlow](https://arize.com/docs/phoenix/tracing/integrations-tracing/langflow) | Visual framework for building multi-agent and RAG applications | [Integration Guide](https://arize.com/docs/phoenix/tracing/integrations-tracing/langflow) |
134
- | [LiteLLM Proxy](https://docs.litellm.ai/docs/observability/phoenix_integration#using-with-litellm-proxy) | Proxy server for LLMs | [Integration Guide](https://docs.litellm.ai/docs/observability/phoenix_integration#using-with-litellm-proxy) |
128
+ | Platform | Description | Docs |
129
+ | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- |
130
+ | [BeeAI](https://docs.beeai.dev/observability/agents-traceability) | AI agent framework with built-in observability | [Integration Guide](https://docs.beeai.dev/observability/agents-traceability) |
131
+ | [Dify](https://docs.dify.ai/en/guides/monitoring/integrate-external-ops-tools/integrate-phoenix) | Open-source LLM app development platform | [Integration Guide](https://docs.dify.ai/en/guides/monitoring/integrate-external-ops-tools/integrate-phoenix) |
132
+ | [Envoy AI Gateway](https://github.com/envoyproxy/ai-gateway) | AI Gateway built on Envoy Proxy for AI workloads | [Integration Guide](https://github.com/envoyproxy/ai-gateway/tree/main/cmd/aigw#opentelemetry-setup-with-phoenix) |
133
+ | [LangFlow](https://arize.com/docs/phoenix/tracing/integrations-tracing/langflow) | Visual framework for building multi-agent and RAG applications | [Integration Guide](https://arize.com/docs/phoenix/tracing/integrations-tracing/langflow) |
134
+ | [LiteLLM Proxy](https://docs.litellm.ai/docs/observability/phoenix_integration#using-with-litellm-proxy) | Proxy server for LLMs | [Integration Guide](https://docs.litellm.ai/docs/observability/phoenix_integration#using-with-litellm-proxy) |
135
135
 
136
136
  ## Community
137
137
 
@@ -199,7 +199,7 @@ class TraceRetentionCronExpression(RootModel[str]):
199
199
 
200
200
  def _parse_field(field: str, min_val: int, max_val: int) -> set[int]:
201
201
  """
202
- Parse a cron field and return the set of matching values.
202
+ Parses a cron field and returns the set of matching values.
203
203
 
204
204
  Args:
205
205
  field (str): The cron field to parse
@@ -26,10 +26,7 @@ class AverageExperimentRunLatencyDataLoader(DataLoader[Key, Result]):
26
26
  average_repetition_latency_ms = (
27
27
  select(
28
28
  models.ExperimentRun.experiment_id.label("experiment_id"),
29
- func.avg(
30
- func.extract("epoch", models.ExperimentRun.end_time)
31
- - func.extract("epoch", models.ExperimentRun.start_time)
32
- ).label("average_repetition_latency_ms"),
29
+ func.avg(models.ExperimentRun.latency_ms).label("average_repetition_latency_ms"),
33
30
  )
34
31
  .select_from(models.ExperimentRun)
35
32
  .where(models.ExperimentRun.experiment_id.in_(experiment_ids))
@@ -5,11 +5,10 @@ from strawberry.dataloader import DataLoader
5
5
  from typing_extensions import TypeAlias
6
6
 
7
7
  from phoenix.db import models
8
- from phoenix.server.api.types.Evaluation import DocumentEvaluation
9
8
  from phoenix.server.types import DbSessionFactory
10
9
 
11
10
  Key: TypeAlias = int
12
- Result: TypeAlias = list[DocumentEvaluation]
11
+ Result: TypeAlias = list[models.DocumentAnnotation]
13
12
 
14
13
 
15
14
  class DocumentEvaluationsDataLoader(DataLoader[Key, Result]):
@@ -18,14 +17,12 @@ class DocumentEvaluationsDataLoader(DataLoader[Key, Result]):
18
17
  self._db = db
19
18
 
20
19
  async def _load_fn(self, keys: list[Key]) -> list[Result]:
21
- document_evaluations_by_id: defaultdict[Key, Result] = defaultdict(list)
20
+ document_annotations_by_id: defaultdict[Key, Result] = defaultdict(list)
22
21
  mda = models.DocumentAnnotation
23
22
  async with self._db() as session:
24
- data = await session.stream_scalars(
25
- select(mda).where(mda.span_rowid.in_(keys)).where(mda.annotator_kind == "LLM")
26
- )
23
+ data = await session.stream_scalars(select(mda).where(mda.span_rowid.in_(keys)))
27
24
  async for document_evaluation in data:
28
- document_evaluations_by_id[document_evaluation.span_rowid].append(
29
- DocumentEvaluation.from_sql_document_annotation(document_evaluation)
25
+ document_annotations_by_id[document_evaluation.span_rowid].append(
26
+ document_evaluation
30
27
  )
31
- return [document_evaluations_by_id[key] for key in keys]
28
+ return [document_annotations_by_id[key] for key in keys]
@@ -7,6 +7,7 @@ from phoenix.server.bearer_auth import is_authenticated
7
7
  from .annotation_configs import router as annotation_configs_router
8
8
  from .annotations import router as annotations_router
9
9
  from .datasets import router as datasets_router
10
+ from .documents import router as documents_router
10
11
  from .evaluations import router as evaluations_router
11
12
  from .experiment_evaluations import router as experiment_evaluations_router
12
13
  from .experiment_runs import router as experiment_runs_router
@@ -70,5 +71,6 @@ def create_v1_router(authentication_enabled: bool) -> APIRouter:
70
71
  router.include_router(evaluations_router)
71
72
  router.include_router(prompts_router)
72
73
  router.include_router(projects_router)
74
+ router.include_router(documents_router)
73
75
  router.include_router(users_router)
74
76
  return router
@@ -1,32 +1,38 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import logging
4
- from datetime import datetime
5
- from typing import Literal, Optional
4
+ from datetime import datetime, timezone
5
+ from typing import Any, Literal, Optional
6
6
 
7
7
  from fastapi import APIRouter, HTTPException, Path, Query
8
+ from pydantic import Field
8
9
  from sqlalchemy import exists, select
9
10
  from starlette.requests import Request
10
11
  from starlette.status import HTTP_200_OK, HTTP_404_NOT_FOUND, HTTP_422_UNPROCESSABLE_ENTITY
11
12
  from strawberry.relay import GlobalID
12
13
 
13
14
  from phoenix.db import models
15
+ from phoenix.db.insertion.types import Precursors
16
+ from phoenix.server.api.routers.v1.models import V1RoutesBaseModel
14
17
  from phoenix.server.api.types.SpanAnnotation import SpanAnnotation as SpanAnnotationNodeType
18
+ from phoenix.server.api.types.TraceAnnotation import TraceAnnotation as TraceAnnotationNodeType
15
19
  from phoenix.server.api.types.User import User as UserNodeType
16
20
 
17
- from .spans import SpanAnnotationData, SpanAnnotationResult
18
21
  from .utils import PaginatedResponseBody, _get_project_by_identifier, add_errors_to_responses
19
22
 
20
23
  logger = logging.getLogger(__name__)
21
24
 
22
25
  SPAN_ANNOTATION_NODE_NAME = SpanAnnotationNodeType.__name__
26
+ TRACE_ANNOTATION_NODE_NAME = TraceAnnotationNodeType.__name__
27
+ MAX_TRACE_IDS = 1_000
23
28
  USER_NODE_NAME = UserNodeType.__name__
24
29
  MAX_SPAN_IDS = 1_000
30
+ MAX_SESSION_IDS = 1_000
25
31
 
26
32
  router = APIRouter(tags=["annotations"])
27
33
 
28
34
 
29
- class SpanAnnotation(SpanAnnotationData):
35
+ class Annotation(V1RoutesBaseModel):
30
36
  id: str
31
37
  created_at: datetime
32
38
  updated_at: datetime
@@ -34,10 +40,127 @@ class SpanAnnotation(SpanAnnotationData):
34
40
  user_id: Optional[str]
35
41
 
36
42
 
43
+ class AnnotationResult(V1RoutesBaseModel):
44
+ label: Optional[str] = Field(default=None, description="The label assigned by the annotation")
45
+ score: Optional[float] = Field(default=None, description="The score assigned by the annotation")
46
+ explanation: Optional[str] = Field(
47
+ default=None, description="Explanation of the annotation result"
48
+ )
49
+
50
+
51
+ class AnnotationData(V1RoutesBaseModel):
52
+ name: str = Field(description="The name of the annotation")
53
+ annotator_kind: Literal["LLM", "CODE", "HUMAN"] = Field(
54
+ description="The kind of annotator used for the annotation"
55
+ )
56
+ result: Optional[AnnotationResult] = Field(
57
+ default=None, description="The result of the annotation"
58
+ )
59
+ metadata: Optional[dict[str, Any]] = Field(
60
+ default=None, description="Metadata for the annotation"
61
+ )
62
+ identifier: str = Field(
63
+ default="",
64
+ description=(
65
+ "The identifier of the annotation. "
66
+ "If provided, the annotation will be updated if it already exists."
67
+ ),
68
+ )
69
+
70
+
71
+ class SpanAnnotationData(AnnotationData):
72
+ span_id: str = Field(description="OpenTelemetry Span ID (hex format w/o 0x prefix)")
73
+
74
+ def as_precursor(self, *, user_id: Optional[int] = None) -> Precursors.SpanAnnotation:
75
+ return Precursors.SpanAnnotation(
76
+ datetime.now(timezone.utc),
77
+ self.span_id,
78
+ models.SpanAnnotation(
79
+ name=self.name,
80
+ annotator_kind=self.annotator_kind,
81
+ score=self.result.score if self.result else None,
82
+ label=self.result.label if self.result else None,
83
+ explanation=self.result.explanation if self.result else None,
84
+ metadata_=self.metadata or {},
85
+ identifier=self.identifier,
86
+ source="API",
87
+ user_id=user_id,
88
+ ),
89
+ )
90
+
91
+
92
+ class SpanAnnotation(SpanAnnotationData, Annotation):
93
+ pass
94
+
95
+
37
96
  class SpanAnnotationsResponseBody(PaginatedResponseBody[SpanAnnotation]):
38
97
  pass
39
98
 
40
99
 
100
+ class SpanDocumentAnnotationData(AnnotationData):
101
+ span_id: str = Field(description="OpenTelemetry Span ID (hex format w/o 0x prefix)")
102
+ document_position: int = Field(
103
+ description="A 0 based index of the document. E.x. the first document during retrieval is 0"
104
+ )
105
+
106
+ # Precursor here means a value to add to a queue for processing async
107
+ def as_precursor(self, *, user_id: Optional[int] = None) -> Precursors.DocumentAnnotation:
108
+ return Precursors.DocumentAnnotation(
109
+ datetime.now(timezone.utc),
110
+ self.span_id,
111
+ self.document_position,
112
+ models.DocumentAnnotation(
113
+ name=self.name,
114
+ annotator_kind=self.annotator_kind,
115
+ document_position=self.document_position,
116
+ score=self.result.score if self.result else None,
117
+ label=self.result.label if self.result else None,
118
+ explanation=self.result.explanation if self.result else None,
119
+ metadata_=self.metadata or {},
120
+ identifier=self.identifier,
121
+ source="API",
122
+ user_id=user_id,
123
+ ),
124
+ )
125
+
126
+
127
+ class SpanDocumentAnnotation(SpanDocumentAnnotationData, Annotation):
128
+ pass
129
+
130
+
131
+ class SpanDocumentAnnotationsResponseBody(PaginatedResponseBody[SpanDocumentAnnotation]):
132
+ pass
133
+
134
+
135
+ class TraceAnnotationData(AnnotationData):
136
+ trace_id: str = Field(description="OpenTelemetry Trace ID (hex format w/o 0x prefix)")
137
+
138
+ def as_precursor(self, *, user_id: Optional[int] = None) -> Precursors.TraceAnnotation:
139
+ return Precursors.TraceAnnotation(
140
+ datetime.now(timezone.utc),
141
+ self.trace_id,
142
+ models.TraceAnnotation(
143
+ name=self.name,
144
+ annotator_kind=self.annotator_kind,
145
+ score=self.result.score if self.result else None,
146
+ label=self.result.label if self.result else None,
147
+ explanation=self.result.explanation if self.result else None,
148
+ metadata_=self.metadata or {},
149
+ identifier=self.identifier,
150
+ source="API",
151
+ user_id=user_id,
152
+ ),
153
+ )
154
+
155
+
156
+ class TraceAnnotation(TraceAnnotationData, Annotation):
157
+ pass
158
+
159
+
160
+ class TraceAnnotationsResponseBody(PaginatedResponseBody[TraceAnnotation]):
161
+ pass
162
+
163
+
41
164
  @router.get(
42
165
  "/projects/{project_identifier}/span_annotations",
43
166
  operation_id="listSpanAnnotationsBySpanIds",
@@ -164,7 +287,7 @@ async def list_span_annotations(
164
287
  id=str(GlobalID(SPAN_ANNOTATION_NODE_NAME, str(anno.id))),
165
288
  span_id=span_id,
166
289
  name=anno.name,
167
- result=SpanAnnotationResult(
290
+ result=AnnotationResult(
168
291
  label=anno.label,
169
292
  score=anno.score,
170
293
  explanation=anno.explanation,
@@ -0,0 +1,143 @@
1
+ from typing import Optional
2
+
3
+ from fastapi import APIRouter, Depends, HTTPException, Query
4
+ from pydantic import Field
5
+ from sqlalchemy import select
6
+ from starlette.requests import Request
7
+ from starlette.status import HTTP_404_NOT_FOUND
8
+ from strawberry.relay import GlobalID
9
+
10
+ from phoenix.db import models
11
+ from phoenix.db.helpers import SupportedSQLDialect
12
+ from phoenix.db.insertion.helpers import as_kv, insert_on_conflict
13
+ from phoenix.server.api.routers.v1.annotations import SpanDocumentAnnotationData
14
+ from phoenix.server.api.types.DocumentAnnotation import DocumentAnnotation
15
+ from phoenix.server.authorization import is_not_locked
16
+ from phoenix.server.bearer_auth import PhoenixUser
17
+ from phoenix.server.dml_event import DocumentAnnotationInsertEvent
18
+
19
+ from .models import V1RoutesBaseModel
20
+ from .utils import RequestBody, ResponseBody, add_errors_to_responses
21
+
22
+ # Since the document annotations are spans related, we place it under spans
23
+ router = APIRouter(tags=["spans"])
24
+
25
+
26
+ class AnnotateSpanDocumentsRequestBody(RequestBody[list[SpanDocumentAnnotationData]]):
27
+ pass
28
+
29
+
30
+ class InsertedSpanDocumentAnnotation(V1RoutesBaseModel):
31
+ id: str = Field(description="The ID of the inserted span document annotation")
32
+
33
+
34
+ class AnnotateSpanDocumentsResponseBody(ResponseBody[list[InsertedSpanDocumentAnnotation]]):
35
+ pass
36
+
37
+
38
+ @router.post(
39
+ "/document_annotations",
40
+ dependencies=[Depends(is_not_locked)],
41
+ operation_id="annotateSpanDocuments",
42
+ responses=add_errors_to_responses(
43
+ [
44
+ {
45
+ "status_code": HTTP_404_NOT_FOUND,
46
+ "description": "Span not found",
47
+ },
48
+ {
49
+ "status_code": 422,
50
+ "description": "Invalid request - non-empty identifier not supported",
51
+ },
52
+ ]
53
+ ),
54
+ response_description="Span document annotation inserted successfully",
55
+ include_in_schema=True,
56
+ )
57
+ async def annotate_span_documents(
58
+ request: Request,
59
+ request_body: AnnotateSpanDocumentsRequestBody,
60
+ sync: bool = Query(
61
+ default=False, description="If set to true, the annotations are inserted synchronously."
62
+ ),
63
+ ) -> AnnotateSpanDocumentsResponseBody:
64
+ if not request_body.data:
65
+ return AnnotateSpanDocumentsResponseBody(data=[])
66
+
67
+ # Validate that identifiers are empty or only whitespace
68
+ for annotation in request_body.data:
69
+ if annotation.identifier.strip():
70
+ raise HTTPException(
71
+ detail=f"Non-empty identifier '{annotation.identifier}' is not supported",
72
+ status_code=422, # Unprocessable Entity
73
+ )
74
+
75
+ user_id: Optional[int] = None
76
+ if request.app.state.authentication_enabled and isinstance(request.user, PhoenixUser):
77
+ user_id = int(request.user.identity)
78
+
79
+ span_document_annotations = request_body.data
80
+
81
+ precursors = [
82
+ annotation.as_precursor(user_id=user_id) for annotation in span_document_annotations
83
+ ]
84
+ if not sync:
85
+ await request.state.enqueue(*precursors)
86
+ return AnnotateSpanDocumentsResponseBody(data=[])
87
+
88
+ span_ids = {p.span_id for p in precursors}
89
+ # Account for the fact that the spans could arrive after the annotation
90
+ async with request.app.state.db() as session:
91
+ existing_spans = {
92
+ span_id: (id_, num_docs)
93
+ async for span_id, id_, num_docs in await session.stream(
94
+ select(models.Span.span_id, models.Span.id, models.Span.num_documents).filter(
95
+ models.Span.span_id.in_(span_ids)
96
+ )
97
+ )
98
+ }
99
+
100
+ missing_span_ids = span_ids - set(existing_spans.keys())
101
+ # We prefer to fail the entire operation if there are missing spans in sync mode
102
+ if missing_span_ids:
103
+ raise HTTPException(
104
+ detail=f"Spans with IDs {', '.join(missing_span_ids)} do not exist.",
105
+ status_code=HTTP_404_NOT_FOUND,
106
+ )
107
+
108
+ # Validate that document positions are within bounds
109
+ for annotation in span_document_annotations:
110
+ _, num_docs = existing_spans[annotation.span_id]
111
+ if annotation.document_position not in range(num_docs):
112
+ raise HTTPException(
113
+ detail=f"Document position {annotation.document_position} is out of bounds for "
114
+ f"span {annotation.span_id} (max: {num_docs - 1})",
115
+ status_code=422, # Unprocessable Entity
116
+ )
117
+
118
+ inserted_document_annotation_ids = []
119
+ dialect = SupportedSQLDialect(session.bind.dialect.name)
120
+ for anno in precursors:
121
+ span_rowid, _ = existing_spans[anno.span_id]
122
+ values = dict(as_kv(anno.as_insertable(span_rowid).row))
123
+ span_document_annotation_id = await session.scalar(
124
+ insert_on_conflict(
125
+ values,
126
+ dialect=dialect,
127
+ table=models.DocumentAnnotation,
128
+ unique_by=("name", "span_rowid", "identifier", "document_position"),
129
+ constraint_name="uq_document_annotations_name_span_rowid_document_pos_identifier",
130
+ ).returning(models.DocumentAnnotation.id)
131
+ )
132
+ inserted_document_annotation_ids.append(span_document_annotation_id)
133
+
134
+ # We queue an event to let the application know that annotations have changed
135
+ request.state.event_queue.put(
136
+ DocumentAnnotationInsertEvent(tuple(inserted_document_annotation_ids))
137
+ )
138
+ return AnnotateSpanDocumentsResponseBody(
139
+ data=[
140
+ InsertedSpanDocumentAnnotation(id=str(GlobalID(DocumentAnnotation.__name__, str(id_))))
141
+ for id_ in inserted_document_annotation_ids
142
+ ]
143
+ )
@@ -5,7 +5,7 @@ from collections.abc import AsyncIterator
5
5
  from datetime import datetime, timezone
6
6
  from enum import Enum
7
7
  from secrets import token_urlsafe
8
- from typing import Annotated, Any, Literal, Optional, Union
8
+ from typing import Annotated, Any, Optional, Union
9
9
 
10
10
  import pandas as pd
11
11
  import sqlalchemy as sa
@@ -27,8 +27,8 @@ from phoenix.datetime_utils import normalize_datetime
27
27
  from phoenix.db import models
28
28
  from phoenix.db.helpers import SupportedSQLDialect, get_ancestor_span_rowids
29
29
  from phoenix.db.insertion.helpers import as_kv, insert_on_conflict
30
- from phoenix.db.insertion.types import Precursors
31
30
  from phoenix.server.api.routers.utils import df_to_bytes
31
+ from phoenix.server.api.routers.v1.annotations import SpanAnnotationData
32
32
  from phoenix.server.api.types.node import from_global_id_with_expected_type
33
33
  from phoenix.server.authorization import is_not_locked
34
34
  from phoenix.server.bearer_auth import PhoenixUser
@@ -850,52 +850,6 @@ async def get_spans_handler(
850
850
  return await query_spans_handler(request, request_body, project_name)
851
851
 
852
852
 
853
- class SpanAnnotationResult(V1RoutesBaseModel):
854
- label: Optional[str] = Field(default=None, description="The label assigned by the annotation")
855
- score: Optional[float] = Field(default=None, description="The score assigned by the annotation")
856
- explanation: Optional[str] = Field(
857
- default=None, description="Explanation of the annotation result"
858
- )
859
-
860
-
861
- class SpanAnnotationData(V1RoutesBaseModel):
862
- span_id: str = Field(description="OpenTelemetry Span ID (hex format w/o 0x prefix)")
863
- name: str = Field(description="The name of the annotation")
864
- annotator_kind: Literal["LLM", "CODE", "HUMAN"] = Field(
865
- description="The kind of annotator used for the annotation"
866
- )
867
- result: Optional[SpanAnnotationResult] = Field(
868
- default=None, description="The result of the annotation"
869
- )
870
- metadata: Optional[dict[str, Any]] = Field(
871
- default=None, description="Metadata for the annotation"
872
- )
873
- identifier: str = Field(
874
- default="",
875
- description=(
876
- "The identifier of the annotation. "
877
- "If provided, the annotation will be updated if it already exists."
878
- ),
879
- )
880
-
881
- def as_precursor(self, *, user_id: Optional[int] = None) -> Precursors.SpanAnnotation:
882
- return Precursors.SpanAnnotation(
883
- datetime.now(timezone.utc),
884
- self.span_id,
885
- models.SpanAnnotation(
886
- name=self.name,
887
- annotator_kind=self.annotator_kind,
888
- score=self.result.score if self.result else None,
889
- label=self.result.label if self.result else None,
890
- explanation=self.result.explanation if self.result else None,
891
- metadata_=self.metadata or {},
892
- identifier=self.identifier,
893
- source="API",
894
- user_id=user_id,
895
- ),
896
- )
897
-
898
-
899
853
  class AnnotateSpansRequestBody(RequestBody[list[SpanAnnotationData]]):
900
854
  data: list[SpanAnnotationData]
901
855
 
@@ -949,9 +903,11 @@ async def annotate_spans(
949
903
  span_ids = {p.span_id for p in precursors}
950
904
  async with request.app.state.db() as session:
951
905
  existing_spans = {
952
- span.span_id: span.id
953
- async for span in await session.stream_scalars(
954
- select(models.Span).filter(models.Span.span_id.in_(span_ids))
906
+ span_id: id_
907
+ async for span_id, id_ in await session.stream(
908
+ select(models.Span.span_id, models.Span.id).filter(
909
+ models.Span.span_id.in_(span_ids)
910
+ )
955
911
  )
956
912
  }
957
913