arize-phoenix 11.36.0__tar.gz → 11.38.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 (461) hide show
  1. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/PKG-INFO +1 -1
  2. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/helpers/playground_clients.py +39 -3
  3. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/helpers/playground_spans.py +2 -1
  4. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/input_types/ChatCompletionInput.py +2 -0
  5. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/input_types/GenerativeModelInput.py +3 -0
  6. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/input_types/SpanSort.py +1 -1
  7. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/mutations/chat_mutations.py +16 -6
  8. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/subscriptions.py +20 -5
  9. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/ChatCompletionSubscriptionPayload.py +1 -0
  10. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/Project.py +9 -5
  11. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/pagination.py +11 -2
  12. arize_phoenix-11.38.0/src/phoenix/server/static/.vite/manifest.json +93 -0
  13. arize_phoenix-11.36.0/src/phoenix/server/static/assets/components-DVEWtEt2.js → arize_phoenix-11.38.0/src/phoenix/server/static/assets/components-BQPHTBfv.js +418 -345
  14. arize_phoenix-11.36.0/src/phoenix/server/static/assets/index-D2_lN2VR.js → arize_phoenix-11.38.0/src/phoenix/server/static/assets/index-BL5BMgJU.js +12 -2
  15. arize_phoenix-11.36.0/src/phoenix/server/static/assets/pages-CJs8SCmq.js → arize_phoenix-11.38.0/src/phoenix/server/static/assets/pages-C0Y17J0T.js +506 -490
  16. arize_phoenix-11.36.0/src/phoenix/server/static/assets/vendor-DHb1kz-d.js → arize_phoenix-11.38.0/src/phoenix/server/static/assets/vendor-BdjZxMii.js +158 -158
  17. arize_phoenix-11.36.0/src/phoenix/server/static/assets/vendor-arizeai-BWffpt59.js → arize_phoenix-11.38.0/src/phoenix/server/static/assets/vendor-arizeai-CHYlS8jV.js +1 -1
  18. arize_phoenix-11.36.0/src/phoenix/server/static/assets/vendor-codemirror-BI6d4ZER.js → arize_phoenix-11.38.0/src/phoenix/server/static/assets/vendor-codemirror-Di6t4HnH.js +3 -3
  19. arize_phoenix-11.36.0/src/phoenix/server/static/assets/vendor-recharts-lWHIE765.js → arize_phoenix-11.38.0/src/phoenix/server/static/assets/vendor-recharts-C9wCDYj3.js +1 -1
  20. arize_phoenix-11.36.0/src/phoenix/server/static/assets/vendor-shiki-DbTRJD9G.js → arize_phoenix-11.38.0/src/phoenix/server/static/assets/vendor-shiki-MNnmOotP.js +1 -1
  21. arize_phoenix-11.38.0/src/phoenix/version.py +1 -0
  22. arize_phoenix-11.36.0/src/phoenix/server/static/.vite/manifest.json +0 -93
  23. arize_phoenix-11.36.0/src/phoenix/version.py +0 -1
  24. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/.gitignore +0 -0
  25. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/IP_NOTICE +0 -0
  26. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/LICENSE +0 -0
  27. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/README.md +0 -0
  28. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/pyproject.toml +0 -0
  29. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/__init__.py +0 -0
  30. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/auth.py +0 -0
  31. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/config.py +0 -0
  32. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/core/__init__.py +0 -0
  33. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/core/embedding_dimension.py +0 -0
  34. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/core/model.py +0 -0
  35. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/core/model_schema.py +0 -0
  36. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/core/model_schema_adapter.py +0 -0
  37. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/datetime_utils.py +0 -0
  38. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/db/README.md +0 -0
  39. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/db/__init__.py +0 -0
  40. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/db/alembic.ini +0 -0
  41. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/db/bulk_inserter.py +0 -0
  42. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/db/constants.py +0 -0
  43. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/db/engines.py +0 -0
  44. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/db/enums.py +0 -0
  45. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/db/facilitator.py +0 -0
  46. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/db/helpers.py +0 -0
  47. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/db/insertion/__init__.py +0 -0
  48. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/db/insertion/constants.py +0 -0
  49. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/db/insertion/dataset.py +0 -0
  50. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/db/insertion/document_annotation.py +0 -0
  51. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/db/insertion/evaluation.py +0 -0
  52. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/db/insertion/helpers.py +0 -0
  53. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/db/insertion/span.py +0 -0
  54. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/db/insertion/span_annotation.py +0 -0
  55. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/db/insertion/trace_annotation.py +0 -0
  56. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/db/insertion/types.py +0 -0
  57. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/db/migrate.py +0 -0
  58. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/db/migrations/__init__.py +0 -0
  59. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/db/migrations/data_migration_scripts/__init__.py +0 -0
  60. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/db/migrations/data_migration_scripts/populate_project_sessions.py +0 -0
  61. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/db/migrations/env.py +0 -0
  62. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/db/migrations/script.py.mako +0 -0
  63. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/db/migrations/versions/10460e46d750_datasets.py +0 -0
  64. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/db/migrations/versions/2f9d1a65945f_annotation_config_migration.py +0 -0
  65. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/db/migrations/versions/3be8647b87d8_add_token_columns_to_spans_table.py +0 -0
  66. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/db/migrations/versions/4ded9e43755f_create_project_sessions_table.py +0 -0
  67. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/db/migrations/versions/6a88424799fe_update_users_with_auth_method.py +0 -0
  68. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/db/migrations/versions/8a3764fe7f1a_change_jsonb_to_json_for_prompts.py +0 -0
  69. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/db/migrations/versions/a20694b15f82_cost.py +0 -0
  70. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/db/migrations/versions/bb8139330879_create_project_trace_retention_policies_table.py +0 -0
  71. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/db/migrations/versions/bc8fea3c2bc8_add_prompt_tables.py +0 -0
  72. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/db/migrations/versions/cd164e83824f_users_and_tokens.py +0 -0
  73. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/db/migrations/versions/cf03bd6bae1d_init.py +0 -0
  74. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/db/models.py +0 -0
  75. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/db/pg_config.py +0 -0
  76. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/db/types/__init__.py +0 -0
  77. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/db/types/annotation_configs.py +0 -0
  78. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/db/types/db_models.py +0 -0
  79. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/db/types/identifier.py +0 -0
  80. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/db/types/model_provider.py +0 -0
  81. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/db/types/token_price_customization.py +0 -0
  82. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/db/types/trace_retention.py +0 -0
  83. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/exceptions.py +0 -0
  84. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/experiments/__init__.py +0 -0
  85. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/experiments/evaluators/__init__.py +0 -0
  86. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/experiments/evaluators/base.py +0 -0
  87. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/experiments/evaluators/code_evaluators.py +0 -0
  88. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/experiments/evaluators/llm_evaluators.py +0 -0
  89. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/experiments/evaluators/utils.py +0 -0
  90. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/experiments/functions.py +0 -0
  91. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/experiments/tracing.py +0 -0
  92. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/experiments/types.py +0 -0
  93. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/experiments/utils.py +0 -0
  94. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/inferences/__init__.py +0 -0
  95. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/inferences/errors.py +0 -0
  96. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/inferences/fixtures.py +0 -0
  97. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/inferences/inferences.py +0 -0
  98. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/inferences/schema.py +0 -0
  99. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/inferences/validation.py +0 -0
  100. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/logging/__init__.py +0 -0
  101. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/logging/_config.py +0 -0
  102. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/logging/_filter.py +0 -0
  103. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/logging/_formatter.py +0 -0
  104. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/metrics/README.md +0 -0
  105. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/metrics/__init__.py +0 -0
  106. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/metrics/binning.py +0 -0
  107. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/metrics/metrics.py +0 -0
  108. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/metrics/mixins.py +0 -0
  109. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/metrics/retrieval_metrics.py +0 -0
  110. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/metrics/timeseries.py +0 -0
  111. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/metrics/wrappers.py +0 -0
  112. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/pointcloud/__init__.py +0 -0
  113. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/pointcloud/clustering.py +0 -0
  114. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/pointcloud/pointcloud.py +0 -0
  115. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/pointcloud/projectors.py +0 -0
  116. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/pointcloud/umap_parameters.py +0 -0
  117. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/py.typed +0 -0
  118. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/__init__.py +0 -0
  119. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/README.md +0 -0
  120. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/__init__.py +0 -0
  121. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/auth.py +0 -0
  122. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/context.py +0 -0
  123. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/dataloaders/__init__.py +0 -0
  124. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/dataloaders/annotation_configs_by_project.py +0 -0
  125. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/dataloaders/annotation_summaries.py +0 -0
  126. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/dataloaders/average_experiment_repeated_run_group_latency.py +0 -0
  127. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/dataloaders/average_experiment_run_latency.py +0 -0
  128. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/dataloaders/cache/__init__.py +0 -0
  129. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/dataloaders/cache/two_tier_cache.py +0 -0
  130. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/dataloaders/dataset_example_revisions.py +0 -0
  131. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/dataloaders/dataset_example_spans.py +0 -0
  132. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/dataloaders/dataset_examples_and_versions_by_experiment_run.py +0 -0
  133. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/dataloaders/document_evaluation_summaries.py +0 -0
  134. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/dataloaders/document_evaluations.py +0 -0
  135. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/dataloaders/document_retrieval_metrics.py +0 -0
  136. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/dataloaders/experiment_annotation_summaries.py +0 -0
  137. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/dataloaders/experiment_error_rates.py +0 -0
  138. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/dataloaders/experiment_repeated_run_group_annotation_summaries.py +0 -0
  139. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/dataloaders/experiment_repeated_run_groups.py +0 -0
  140. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/dataloaders/experiment_repetition_counts.py +0 -0
  141. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/dataloaders/experiment_run_annotations.py +0 -0
  142. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/dataloaders/experiment_run_counts.py +0 -0
  143. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/dataloaders/experiment_sequence_number.py +0 -0
  144. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/dataloaders/last_used_times_by_generative_model_id.py +0 -0
  145. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/dataloaders/latency_ms_quantile.py +0 -0
  146. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/dataloaders/min_start_or_max_end_times.py +0 -0
  147. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/dataloaders/num_child_spans.py +0 -0
  148. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/dataloaders/num_spans_per_trace.py +0 -0
  149. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/dataloaders/project_by_name.py +0 -0
  150. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/dataloaders/project_ids_by_trace_retention_policy_id.py +0 -0
  151. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/dataloaders/prompt_version_sequence_number.py +0 -0
  152. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/dataloaders/record_counts.py +0 -0
  153. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/dataloaders/session_io.py +0 -0
  154. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/dataloaders/session_num_traces.py +0 -0
  155. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/dataloaders/session_num_traces_with_error.py +0 -0
  156. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/dataloaders/session_token_usages.py +0 -0
  157. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/dataloaders/session_trace_latency_ms_quantile.py +0 -0
  158. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/dataloaders/span_annotations.py +0 -0
  159. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/dataloaders/span_by_id.py +0 -0
  160. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/dataloaders/span_cost_by_span.py +0 -0
  161. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/dataloaders/span_cost_detail_summary_entries_by_generative_model.py +0 -0
  162. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/dataloaders/span_cost_detail_summary_entries_by_project_session.py +0 -0
  163. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/dataloaders/span_cost_detail_summary_entries_by_span.py +0 -0
  164. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/dataloaders/span_cost_detail_summary_entries_by_trace.py +0 -0
  165. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/dataloaders/span_cost_details_by_span_cost.py +0 -0
  166. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_experiment.py +0 -0
  167. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_experiment_repeated_run_group.py +0 -0
  168. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_experiment_run.py +0 -0
  169. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_generative_model.py +0 -0
  170. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_project.py +0 -0
  171. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_project_session.py +0 -0
  172. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_trace.py +0 -0
  173. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/dataloaders/span_costs.py +0 -0
  174. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/dataloaders/span_dataset_examples.py +0 -0
  175. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/dataloaders/span_descendants.py +0 -0
  176. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/dataloaders/span_projects.py +0 -0
  177. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/dataloaders/table_fields.py +0 -0
  178. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/dataloaders/token_counts.py +0 -0
  179. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/dataloaders/trace_by_trace_ids.py +0 -0
  180. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/dataloaders/trace_retention_policy_id_by_project_id.py +0 -0
  181. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/dataloaders/trace_root_spans.py +0 -0
  182. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/dataloaders/types.py +0 -0
  183. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/dataloaders/user_roles.py +0 -0
  184. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/dataloaders/users.py +0 -0
  185. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/exceptions.py +0 -0
  186. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/helpers/__init__.py +0 -0
  187. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/helpers/annotations.py +0 -0
  188. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/helpers/dataset_helpers.py +0 -0
  189. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/helpers/experiment_run_filters.py +0 -0
  190. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/helpers/playground_registry.py +0 -0
  191. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/helpers/prompts/__init__.py +0 -0
  192. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/helpers/prompts/conversions/__init__.py +0 -0
  193. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/helpers/prompts/conversions/anthropic.py +0 -0
  194. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/helpers/prompts/conversions/aws.py +0 -0
  195. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/helpers/prompts/conversions/openai.py +0 -0
  196. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/helpers/prompts/models.py +0 -0
  197. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/input_types/AddExamplesToDatasetInput.py +0 -0
  198. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/input_types/AddSpansToDatasetInput.py +0 -0
  199. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/input_types/ChatCompletionMessageInput.py +0 -0
  200. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/input_types/ClearProjectInput.py +0 -0
  201. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/input_types/ClusterInput.py +0 -0
  202. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/input_types/Coordinates.py +0 -0
  203. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/input_types/CreateDatasetInput.py +0 -0
  204. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/input_types/CreateProjectInput.py +0 -0
  205. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/input_types/CreateSpanAnnotationInput.py +0 -0
  206. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/input_types/CreateTraceAnnotationInput.py +0 -0
  207. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/input_types/DataQualityMetricInput.py +0 -0
  208. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/input_types/DatasetExampleInput.py +0 -0
  209. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/input_types/DatasetFilter.py +0 -0
  210. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/input_types/DatasetSort.py +0 -0
  211. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/input_types/DatasetVersionSort.py +0 -0
  212. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/input_types/DeleteAnnotationsInput.py +0 -0
  213. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/input_types/DeleteDatasetExamplesInput.py +0 -0
  214. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/input_types/DeleteDatasetInput.py +0 -0
  215. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/input_types/DeleteExperimentsInput.py +0 -0
  216. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/input_types/DimensionFilter.py +0 -0
  217. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/input_types/DimensionInput.py +0 -0
  218. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/input_types/GenerativeCredentialInput.py +0 -0
  219. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/input_types/Granularity.py +0 -0
  220. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/input_types/InvocationParameters.py +0 -0
  221. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/input_types/PatchAnnotationInput.py +0 -0
  222. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/input_types/PatchDatasetExamplesInput.py +0 -0
  223. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/input_types/PatchDatasetInput.py +0 -0
  224. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/input_types/PerformanceMetricInput.py +0 -0
  225. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/input_types/ProjectFilter.py +0 -0
  226. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/input_types/ProjectSessionSort.py +0 -0
  227. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/input_types/ProjectSort.py +0 -0
  228. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/input_types/PromptFilter.py +0 -0
  229. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/input_types/PromptTemplateOptions.py +0 -0
  230. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/input_types/PromptVersionInput.py +0 -0
  231. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/input_types/SpanAnnotationFilter.py +0 -0
  232. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/input_types/SpanAnnotationSort.py +0 -0
  233. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/input_types/TimeBinConfig.py +0 -0
  234. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/input_types/TimeRange.py +0 -0
  235. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/input_types/TraceAnnotationSort.py +0 -0
  236. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/input_types/UserRoleInput.py +0 -0
  237. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/input_types/__init__.py +0 -0
  238. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/interceptor.py +0 -0
  239. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/mutations/__init__.py +0 -0
  240. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/mutations/annotation_config_mutations.py +0 -0
  241. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/mutations/api_key_mutations.py +0 -0
  242. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/mutations/dataset_mutations.py +0 -0
  243. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/mutations/experiment_mutations.py +0 -0
  244. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/mutations/export_events_mutations.py +0 -0
  245. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/mutations/model_mutations.py +0 -0
  246. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/mutations/project_mutations.py +0 -0
  247. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/mutations/project_trace_retention_policy_mutations.py +0 -0
  248. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/mutations/prompt_label_mutations.py +0 -0
  249. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/mutations/prompt_mutations.py +0 -0
  250. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/mutations/prompt_version_tag_mutations.py +0 -0
  251. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/mutations/span_annotations_mutations.py +0 -0
  252. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/mutations/trace_annotations_mutations.py +0 -0
  253. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/mutations/trace_mutations.py +0 -0
  254. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/mutations/user_mutations.py +0 -0
  255. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/openapi/__init__.py +0 -0
  256. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/openapi/main.py +0 -0
  257. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/openapi/schema.py +0 -0
  258. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/queries.py +0 -0
  259. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/routers/__init__.py +0 -0
  260. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/routers/auth.py +0 -0
  261. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/routers/embeddings.py +0 -0
  262. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/routers/oauth2.py +0 -0
  263. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/routers/utils.py +0 -0
  264. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/routers/v1/__init__.py +0 -0
  265. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/routers/v1/annotation_configs.py +0 -0
  266. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/routers/v1/annotations.py +0 -0
  267. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/routers/v1/datasets.py +0 -0
  268. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/routers/v1/documents.py +0 -0
  269. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/routers/v1/evaluations.py +0 -0
  270. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/routers/v1/experiment_evaluations.py +0 -0
  271. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/routers/v1/experiment_runs.py +0 -0
  272. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/routers/v1/experiments.py +0 -0
  273. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/routers/v1/models.py +0 -0
  274. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/routers/v1/projects.py +0 -0
  275. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/routers/v1/prompts.py +0 -0
  276. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/routers/v1/spans.py +0 -0
  277. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/routers/v1/traces.py +0 -0
  278. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/routers/v1/users.py +0 -0
  279. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/routers/v1/utils.py +0 -0
  280. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/schema.py +0 -0
  281. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/Annotation.py +0 -0
  282. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/AnnotationConfig.py +0 -0
  283. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/AnnotationSource.py +0 -0
  284. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/AnnotationSummary.py +0 -0
  285. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/AnnotatorKind.py +0 -0
  286. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/ApiKey.py +0 -0
  287. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/AuthMethod.py +0 -0
  288. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/ChatCompletionMessageRole.py +0 -0
  289. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/Cluster.py +0 -0
  290. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/CostBreakdown.py +0 -0
  291. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/CreateDatasetPayload.py +0 -0
  292. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/CronExpression.py +0 -0
  293. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/DataQualityMetric.py +0 -0
  294. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/Dataset.py +0 -0
  295. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/DatasetExample.py +0 -0
  296. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/DatasetExampleRevision.py +0 -0
  297. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/DatasetExperimentAnnotationSummary.py +0 -0
  298. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/DatasetValues.py +0 -0
  299. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/DatasetVersion.py +0 -0
  300. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/Dimension.py +0 -0
  301. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/DimensionDataType.py +0 -0
  302. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/DimensionShape.py +0 -0
  303. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/DimensionType.py +0 -0
  304. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/DimensionWithValue.py +0 -0
  305. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/DocumentAnnotation.py +0 -0
  306. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/DocumentEvaluationSummary.py +0 -0
  307. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/DocumentRetrievalMetrics.py +0 -0
  308. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/EmbeddingDimension.py +0 -0
  309. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/EmbeddingMetadata.py +0 -0
  310. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/EvaluationSummary.py +0 -0
  311. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/Event.py +0 -0
  312. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/EventMetadata.py +0 -0
  313. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/ExampleRevisionInterface.py +0 -0
  314. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/Experiment.py +0 -0
  315. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/ExperimentAnnotationSummary.py +0 -0
  316. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/ExperimentComparison.py +0 -0
  317. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/ExperimentRepeatedRunGroup.py +0 -0
  318. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/ExperimentRepeatedRunGroupAnnotationSummary.py +0 -0
  319. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/ExperimentRun.py +0 -0
  320. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/ExperimentRunAnnotation.py +0 -0
  321. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/ExportedFile.py +0 -0
  322. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/Functionality.py +0 -0
  323. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/GenerativeModel.py +0 -0
  324. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/GenerativeProvider.py +0 -0
  325. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/Identifier.py +0 -0
  326. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/InferenceModel.py +0 -0
  327. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/Inferences.py +0 -0
  328. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/InferencesRole.py +0 -0
  329. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/LabelFraction.py +0 -0
  330. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/MimeType.py +0 -0
  331. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/ModelInterface.py +0 -0
  332. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/NumericRange.py +0 -0
  333. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/PerformanceMetric.py +0 -0
  334. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/PlaygroundModel.py +0 -0
  335. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/ProjectSession.py +0 -0
  336. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/ProjectTraceRetentionPolicy.py +0 -0
  337. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/Prompt.py +0 -0
  338. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/PromptLabel.py +0 -0
  339. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/PromptResponse.py +0 -0
  340. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/PromptVersion.py +0 -0
  341. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/PromptVersionTag.py +0 -0
  342. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/PromptVersionTemplate.py +0 -0
  343. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/ResponseFormat.py +0 -0
  344. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/Retrieval.py +0 -0
  345. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/ScalarDriftMetricEnum.py +0 -0
  346. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/Segments.py +0 -0
  347. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/ServerStatus.py +0 -0
  348. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/SortDir.py +0 -0
  349. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/Span.py +0 -0
  350. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/SpanAnnotation.py +0 -0
  351. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/SpanCostDetailSummaryEntry.py +0 -0
  352. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/SpanCostSummary.py +0 -0
  353. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/SpanIOValue.py +0 -0
  354. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/SystemApiKey.py +0 -0
  355. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/TimeSeries.py +0 -0
  356. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/TokenCountPromptDetails.py +0 -0
  357. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/TokenPrice.py +0 -0
  358. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/TokenUsage.py +0 -0
  359. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/ToolDefinition.py +0 -0
  360. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/Trace.py +0 -0
  361. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/TraceAnnotation.py +0 -0
  362. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/UMAPPoints.py +0 -0
  363. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/User.py +0 -0
  364. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/UserApiKey.py +0 -0
  365. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/UserRole.py +0 -0
  366. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/ValidationResult.py +0 -0
  367. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/VectorDriftMetricEnum.py +0 -0
  368. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/__init__.py +0 -0
  369. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/types/node.py +0 -0
  370. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/api/utils.py +0 -0
  371. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/app.py +0 -0
  372. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/authorization.py +0 -0
  373. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/bearer_auth.py +0 -0
  374. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/cost_tracking/__init__.py +0 -0
  375. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/cost_tracking/cost_details_calculator.py +0 -0
  376. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/cost_tracking/cost_model_lookup.py +0 -0
  377. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/cost_tracking/helpers.py +0 -0
  378. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/cost_tracking/model_cost_manifest.json +0 -0
  379. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/cost_tracking/regex_specificity.py +0 -0
  380. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/cost_tracking/token_cost_calculator.py +0 -0
  381. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/daemons/__init__.py +0 -0
  382. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/daemons/db_disk_usage_monitor.py +0 -0
  383. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/daemons/generative_model_store.py +0 -0
  384. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/daemons/span_cost_calculator.py +0 -0
  385. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/dml_event.py +0 -0
  386. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/dml_event_handler.py +0 -0
  387. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/email/__init__.py +0 -0
  388. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/email/sender.py +0 -0
  389. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/email/templates/__init__.py +0 -0
  390. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/email/templates/db_disk_usage_notification.html +0 -0
  391. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/email/templates/password_reset.html +0 -0
  392. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/email/templates/welcome.html +0 -0
  393. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/email/types.py +0 -0
  394. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/experiments/__init__.py +0 -0
  395. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/experiments/utils.py +0 -0
  396. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/grpc_server.py +0 -0
  397. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/jwt_store.py +0 -0
  398. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/main.py +0 -0
  399. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/middleware/__init__.py +0 -0
  400. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/middleware/gzip.py +0 -0
  401. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/oauth2.py +0 -0
  402. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/openapi/__init__.py +0 -0
  403. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/prometheus.py +0 -0
  404. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/rate_limiters.py +0 -0
  405. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/retention.py +0 -0
  406. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/session_filters.py +0 -0
  407. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/static/apple-touch-icon-114x114.png +0 -0
  408. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/static/apple-touch-icon-120x120.png +0 -0
  409. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/static/apple-touch-icon-144x144.png +0 -0
  410. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/static/apple-touch-icon-152x152.png +0 -0
  411. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/static/apple-touch-icon-180x180.png +0 -0
  412. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/static/apple-touch-icon-72x72.png +0 -0
  413. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/static/apple-touch-icon-76x76.png +0 -0
  414. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/static/apple-touch-icon.png +0 -0
  415. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/static/assets/vendor-BGzfc4EU.css +0 -0
  416. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/static/assets/vendor-three-BLWp5bic.js +0 -0
  417. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/static/favicon.ico +0 -0
  418. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/static/modernizr.js +0 -0
  419. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/telemetry.py +0 -0
  420. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/templates/__init__.py +0 -0
  421. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/templates/index.html +0 -0
  422. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/thread_server.py +0 -0
  423. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/server/types.py +0 -0
  424. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/services.py +0 -0
  425. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/session/__init__.py +0 -0
  426. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/session/client.py +0 -0
  427. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/session/data_extractor.py +0 -0
  428. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/session/evaluation.py +0 -0
  429. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/session/session.py +0 -0
  430. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/settings.py +0 -0
  431. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/trace/__init__.py +0 -0
  432. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/trace/attributes.py +0 -0
  433. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/trace/dsl/README.md +0 -0
  434. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/trace/dsl/__init__.py +0 -0
  435. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/trace/dsl/filter.py +0 -0
  436. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/trace/dsl/helpers.py +0 -0
  437. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/trace/dsl/query.py +0 -0
  438. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/trace/errors.py +0 -0
  439. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/trace/evaluation_conventions.py +0 -0
  440. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/trace/exporter.py +0 -0
  441. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/trace/fixtures.py +0 -0
  442. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/trace/otel.py +0 -0
  443. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/trace/projects.py +0 -0
  444. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/trace/schemas.py +0 -0
  445. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/trace/span_evaluations.py +0 -0
  446. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/trace/span_json_decoder.py +0 -0
  447. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/trace/span_json_encoder.py +0 -0
  448. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/trace/trace_dataset.py +0 -0
  449. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/trace/utils.py +0 -0
  450. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/trace/v1/__init__.py +0 -0
  451. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/trace/v1/evaluation_pb2.py +0 -0
  452. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/trace/v1/evaluation_pb2.pyi +0 -0
  453. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/utilities/__init__.py +0 -0
  454. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/utilities/client.py +0 -0
  455. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/utilities/error_handling.py +0 -0
  456. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/utilities/json.py +0 -0
  457. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/utilities/logging.py +0 -0
  458. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/utilities/project.py +0 -0
  459. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/utilities/re.py +0 -0
  460. {arize_phoenix-11.36.0 → arize_phoenix-11.38.0}/src/phoenix/utilities/span_store.py +0 -0
  461. {arize_phoenix-11.36.0 → arize_phoenix-11.38.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.36.0
3
+ Version: 11.38.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
@@ -57,6 +57,7 @@ from phoenix.server.api.types.GenerativeProvider import GenerativeProviderKey
57
57
  if TYPE_CHECKING:
58
58
  import httpx
59
59
  from anthropic.types import MessageParam, TextBlockParam, ToolResultBlockParam
60
+ from botocore.awsrequest import AWSPreparedRequest # type: ignore[import-untyped]
60
61
  from google.generativeai.types import ContentType
61
62
  from openai import AsyncAzureOpenAI, AsyncOpenAI
62
63
  from openai.types import CompletionUsage
@@ -546,6 +547,7 @@ class DeepSeekStreamingClient(OpenAIBaseStreamingClient):
546
547
  client = AsyncOpenAI(
547
548
  api_key=api_key,
548
549
  base_url=base_url or "https://api.deepseek.com",
550
+ default_headers=model.custom_headers or None,
549
551
  )
550
552
  super().__init__(client=client, model=model, credentials=credentials)
551
553
  # DeepSeek uses OpenAI-compatible API but we'll track it as a separate provider
@@ -587,6 +589,7 @@ class XAIStreamingClient(OpenAIBaseStreamingClient):
587
589
  client = AsyncOpenAI(
588
590
  api_key=api_key,
589
591
  base_url=base_url or "https://api.x.ai/v1",
592
+ default_headers=model.custom_headers or None,
590
593
  )
591
594
  super().__init__(client=client, model=model, credentials=credentials)
592
595
  # xAI uses OpenAI-compatible API but we'll track it as a separate provider
@@ -624,7 +627,11 @@ class OllamaStreamingClient(OpenAIBaseStreamingClient):
624
627
  if not base_url:
625
628
  raise BadRequest("An Ollama base URL is required for Ollama models")
626
629
  api_key = "ollama"
627
- client = AsyncOpenAI(api_key=api_key, base_url=base_url)
630
+ client = AsyncOpenAI(
631
+ api_key=api_key,
632
+ base_url=base_url,
633
+ default_headers=model.custom_headers or None,
634
+ )
628
635
  super().__init__(client=client, model=model, credentials=credentials)
629
636
  # Ollama uses OpenAI-compatible API but we'll track it as a separate provider
630
637
  # Adding a custom "ollama" provider value to make it distinguishable in traces
@@ -679,6 +686,7 @@ class BedrockStreamingClient(PlaygroundStreamingClient):
679
686
  super().__init__(model=model, credentials=credentials)
680
687
  self.region = model.region or "us-east-1"
681
688
  self.api = "converse"
689
+ self.custom_headers = model.custom_headers or {}
682
690
  self.aws_access_key_id = _get_credential_value(credentials, "AWS_ACCESS_KEY_ID") or getenv(
683
691
  "AWS_ACCESS_KEY_ID"
684
692
  )
@@ -697,9 +705,24 @@ class BedrockStreamingClient(PlaygroundStreamingClient):
697
705
  aws_session_token=self.aws_session_token,
698
706
  )
699
707
 
708
+ # Add custom headers support via boto3 event system
709
+ if self.custom_headers:
710
+ self._setup_custom_headers(self.client, self.custom_headers)
711
+
700
712
  self._attributes[LLM_PROVIDER] = "aws"
701
713
  self._attributes[LLM_SYSTEM] = "aws"
702
714
 
715
+ @staticmethod
716
+ def _setup_custom_headers(client: Any, custom_headers: Mapping[str, str]) -> None:
717
+ """Setup custom headers using boto3's event system."""
718
+ if not custom_headers:
719
+ return
720
+
721
+ def add_custom_headers(request: "AWSPreparedRequest", **kwargs: Any) -> None:
722
+ request.headers.update(custom_headers)
723
+
724
+ client.meta.events.register("before-send.*", add_custom_headers)
725
+
703
726
  @classmethod
704
727
  def dependencies(cls) -> list[Dependency]:
705
728
  return [Dependency(name="boto3")]
@@ -756,6 +779,9 @@ class BedrockStreamingClient(PlaygroundStreamingClient):
756
779
  aws_secret_access_key=self.aws_secret_access_key,
757
780
  aws_session_token=self.aws_session_token,
758
781
  )
782
+ # Re-setup custom headers for the new client
783
+ if self.custom_headers:
784
+ self._setup_custom_headers(self.client, self.custom_headers)
759
785
  if self.api == "invoke":
760
786
  async for chunk in self._handle_invoke_api(messages, tools, invocation_parameters):
761
787
  yield chunk
@@ -1140,7 +1166,12 @@ class OpenAIStreamingClient(OpenAIBaseStreamingClient):
1140
1166
  raise BadRequest("An API key is required for OpenAI models")
1141
1167
  api_key = "sk-fake-api-key"
1142
1168
 
1143
- client = AsyncOpenAI(api_key=api_key, base_url=base_url, timeout=30)
1169
+ client = AsyncOpenAI(
1170
+ api_key=api_key,
1171
+ base_url=base_url,
1172
+ default_headers=model.custom_headers or None,
1173
+ timeout=30,
1174
+ )
1144
1175
  super().__init__(client=client, model=model, credentials=credentials)
1145
1176
  self._attributes[LLM_PROVIDER] = OpenInferenceLLMProviderValues.OPENAI.value
1146
1177
  self._attributes[LLM_SYSTEM] = OpenInferenceLLMSystemValues.OPENAI.value
@@ -1295,6 +1326,7 @@ class AzureOpenAIStreamingClient(OpenAIBaseStreamingClient):
1295
1326
  api_key=api_key,
1296
1327
  azure_endpoint=endpoint,
1297
1328
  api_version=api_version,
1329
+ default_headers=model.custom_headers or None,
1298
1330
  )
1299
1331
  else:
1300
1332
  try:
@@ -1312,6 +1344,7 @@ class AzureOpenAIStreamingClient(OpenAIBaseStreamingClient):
1312
1344
  ),
1313
1345
  azure_endpoint=endpoint,
1314
1346
  api_version=api_version,
1347
+ default_headers=model.custom_headers or None,
1315
1348
  )
1316
1349
  super().__init__(client=client, model=model, credentials=credentials)
1317
1350
  self._attributes[LLM_PROVIDER] = OpenInferenceLLMProviderValues.AZURE.value
@@ -1459,7 +1492,10 @@ class AnthropicStreamingClient(PlaygroundStreamingClient):
1459
1492
  if not api_key:
1460
1493
  raise BadRequest("An API key is required for Anthropic models")
1461
1494
 
1462
- self.client = anthropic.AsyncAnthropic(api_key=api_key)
1495
+ self.client = anthropic.AsyncAnthropic(
1496
+ api_key=api_key,
1497
+ default_headers=model.custom_headers or None,
1498
+ )
1463
1499
  self.model_name = model.name
1464
1500
  self.rate_limiter = PlaygroundRateLimiter(model.provider_key, anthropic.RateLimitError)
1465
1501
  self.client._client = _HttpxClient(self.client._client, self._attributes)
@@ -222,6 +222,7 @@ def get_db_experiment_run(
222
222
  *,
223
223
  experiment_id: int,
224
224
  example_id: int,
225
+ repetition_number: int,
225
226
  ) -> models.ExperimentRun:
226
227
  return models.ExperimentRun(
227
228
  experiment_id=experiment_id,
@@ -230,7 +231,7 @@ def get_db_experiment_run(
230
231
  output=models.ExperimentRunOutput(
231
232
  task_output=get_dataset_example_output(db_span),
232
233
  ),
233
- repetition_number=1,
234
+ repetition_number=repetition_number,
234
235
  start_time=db_span.start_time,
235
236
  end_time=db_span.end_time,
236
237
  error=db_span.status_message or None,
@@ -26,6 +26,7 @@ class ChatCompletionInput:
26
26
  credentials: Optional[list[GenerativeCredentialInput]] = UNSET
27
27
  template: Optional[PromptTemplateOptions] = UNSET
28
28
  prompt_name: Optional[Identifier] = None
29
+ repetitions: int
29
30
 
30
31
 
31
32
  @strawberry.input
@@ -36,6 +37,7 @@ class ChatCompletionOverDatasetInput:
36
37
  tools: Optional[list[JSON]] = UNSET
37
38
  credentials: Optional[list[GenerativeCredentialInput]] = UNSET
38
39
  template_format: PromptTemplateFormat = PromptTemplateFormat.MUSTACHE
40
+ repetitions: int
39
41
  dataset_id: GlobalID
40
42
  dataset_version_id: Optional[GlobalID] = None
41
43
  experiment_name: Optional[str] = None
@@ -2,6 +2,7 @@ from typing import Optional
2
2
 
3
3
  import strawberry
4
4
  from strawberry import UNSET
5
+ from strawberry.scalars import JSON
5
6
 
6
7
  from phoenix.server.api.types.GenerativeProvider import GenerativeProviderKey
7
8
 
@@ -19,3 +20,5 @@ class GenerativeModelInput:
19
20
  """ The API version to use for the model. """
20
21
  region: Optional[str] = UNSET
21
22
  """ The region to use for the model. """
23
+ custom_headers: Optional[JSON] = UNSET
24
+ """ Custom headers to use for the model. """
@@ -199,7 +199,7 @@ class SpanSort:
199
199
  models.SpanAnnotation.span_rowid == models.Span.id,
200
200
  models.SpanAnnotation.name == eval_name,
201
201
  ),
202
- ).order_by(expr)
202
+ ).order_by(nulls_last(expr))
203
203
  return SpanSortConfig(
204
204
  stmt=stmt,
205
205
  orm_expression=eval_result_key.attr.orm_expression,
@@ -112,6 +112,7 @@ class ChatCompletionMutationError:
112
112
  @strawberry.type
113
113
  class ChatCompletionOverDatasetMutationExamplePayload:
114
114
  dataset_example_id: GlobalID
115
+ repetition_number: int
115
116
  experiment_run_id: GlobalID
116
117
  result: Union[ChatCompletionMutationPayload, ChatCompletionMutationError]
117
118
 
@@ -207,7 +208,12 @@ class ChatCompletionMutationMixin:
207
208
  results: list[Union[ChatCompletionMutationPayload, BaseException]] = []
208
209
  batch_size = 3
209
210
  start_time = datetime.now(timezone.utc)
210
- for batch in _get_batches(revisions, batch_size):
211
+ unbatched_items = [
212
+ (revision, repetition_number)
213
+ for revision in revisions
214
+ for repetition_number in range(1, input.repetitions + 1)
215
+ ]
216
+ for batch in _get_batches(unbatched_items, batch_size):
211
217
  batch_results = await asyncio.gather(
212
218
  *(
213
219
  cls._chat_completion(
@@ -224,10 +230,11 @@ class ChatCompletionMutationMixin:
224
230
  variables=revision.input,
225
231
  ),
226
232
  prompt_name=input.prompt_name,
233
+ repetitions=repetition_number,
227
234
  ),
228
235
  project_name=project_name,
229
236
  )
230
- for revision in batch
237
+ for revision, repetition_number in batch
231
238
  ),
232
239
  return_exceptions=True,
233
240
  )
@@ -239,13 +246,13 @@ class ChatCompletionMutationMixin:
239
246
  experiment_id=GlobalID(models.Experiment.__name__, str(experiment.id)),
240
247
  )
241
248
  experiment_runs = []
242
- for revision, result in zip(revisions, results):
249
+ for (revision, repetition_number), result in zip(unbatched_items, results):
243
250
  if isinstance(result, BaseException):
244
251
  experiment_run = models.ExperimentRun(
245
252
  experiment_id=experiment.id,
246
253
  dataset_example_id=revision.dataset_example_id,
247
254
  output={},
248
- repetition_number=1,
255
+ repetition_number=repetition_number,
249
256
  start_time=start_time,
250
257
  end_time=start_time,
251
258
  error=str(result),
@@ -261,7 +268,7 @@ class ChatCompletionMutationMixin:
261
268
  ),
262
269
  prompt_token_count=db_span.cumulative_llm_token_count_prompt,
263
270
  completion_token_count=db_span.cumulative_llm_token_count_completion,
264
- repetition_number=1,
271
+ repetition_number=repetition_number,
265
272
  start_time=db_span.start_time,
266
273
  end_time=db_span.end_time,
267
274
  error=str(result.error_message) if result.error_message else None,
@@ -272,13 +279,16 @@ class ChatCompletionMutationMixin:
272
279
  session.add_all(experiment_runs)
273
280
  await session.flush()
274
281
 
275
- for revision, experiment_run, result in zip(revisions, experiment_runs, results):
282
+ for (revision, repetition_number), experiment_run, result in zip(
283
+ unbatched_items, experiment_runs, results
284
+ ):
276
285
  dataset_example_id = GlobalID(
277
286
  models.DatasetExample.__name__, str(revision.dataset_example_id)
278
287
  )
279
288
  experiment_run_id = GlobalID(models.ExperimentRun.__name__, str(experiment_run.id))
280
289
  example_payload = ChatCompletionOverDatasetMutationExamplePayload(
281
290
  dataset_example_id=dataset_example_id,
291
+ repetition_number=repetition_number,
282
292
  experiment_run_id=experiment_run_id,
283
293
  result=result
284
294
  if isinstance(result, ChatCompletionMutationPayload)
@@ -308,7 +308,7 @@ class Subscription:
308
308
  name=input.experiment_name
309
309
  or _default_playground_experiment_name(input.prompt_name),
310
310
  description=input.experiment_description,
311
- repetitions=1,
311
+ repetitions=input.repetitions,
312
312
  metadata_=input.experiment_metadata or dict(),
313
313
  project_name=project_name,
314
314
  )
@@ -327,11 +327,13 @@ class Subscription:
327
327
  llm_client=llm_client,
328
328
  revision=revision,
329
329
  results=results,
330
+ repetition_number=repetition_number,
330
331
  experiment_id=experiment.id,
331
332
  project_id=playground_project_id,
332
333
  ),
333
334
  )
334
335
  for revision in revisions
336
+ for repetition_number in range(1, input.repetitions + 1)
335
337
  ]
336
338
  in_progress: list[
337
339
  tuple[
@@ -409,6 +411,7 @@ async def _stream_chat_completion_over_dataset_example(
409
411
  input: ChatCompletionOverDatasetInput,
410
412
  llm_client: PlaygroundStreamingClient,
411
413
  revision: models.DatasetExampleRevision,
414
+ repetition_number: int,
412
415
  results: asyncio.Queue[ChatCompletionResult],
413
416
  experiment_id: int,
414
417
  project_id: int,
@@ -435,7 +438,11 @@ async def _stream_chat_completion_over_dataset_example(
435
438
  )
436
439
  except TemplateFormatterError as error:
437
440
  format_end_time = cast(datetime, normalize_datetime(dt=local_now(), tz=timezone.utc))
438
- yield ChatCompletionSubscriptionError(message=str(error), dataset_example_id=example_id)
441
+ yield ChatCompletionSubscriptionError(
442
+ message=str(error),
443
+ dataset_example_id=example_id,
444
+ repetition_number=repetition_number,
445
+ )
439
446
  await results.put(
440
447
  (
441
448
  example_id,
@@ -445,7 +452,7 @@ async def _stream_chat_completion_over_dataset_example(
445
452
  dataset_example_id=revision.dataset_example_id,
446
453
  trace_id=None,
447
454
  output={},
448
- repetition_number=1,
455
+ repetition_number=repetition_number,
449
456
  start_time=format_start_time,
450
457
  end_time=format_end_time,
451
458
  error=str(error),
@@ -465,17 +472,24 @@ async def _stream_chat_completion_over_dataset_example(
465
472
  ):
466
473
  span.add_response_chunk(chunk)
467
474
  chunk.dataset_example_id = example_id
475
+ chunk.repetition_number = repetition_number
468
476
  yield chunk
469
477
  span.set_attributes(llm_client.attributes)
470
478
  db_trace = get_db_trace(span, project_id)
471
479
  db_span = get_db_span(span, db_trace)
472
480
  db_run = get_db_experiment_run(
473
- db_span, db_trace, experiment_id=experiment_id, example_id=revision.dataset_example_id
481
+ db_span,
482
+ db_trace,
483
+ experiment_id=experiment_id,
484
+ example_id=revision.dataset_example_id,
485
+ repetition_number=repetition_number,
474
486
  )
475
487
  await results.put((example_id, db_span, db_run))
476
488
  if span.status_message is not None:
477
489
  yield ChatCompletionSubscriptionError(
478
- message=span.status_message, dataset_example_id=example_id
490
+ message=span.status_message,
491
+ dataset_example_id=example_id,
492
+ repetition_number=repetition_number,
479
493
  )
480
494
 
481
495
 
@@ -511,6 +525,7 @@ async def _chat_completion_result_payloads(
511
525
  span=Span(span_rowid=span.id, db_span=span) if span else None,
512
526
  experiment_run=to_gql_experiment_run(run),
513
527
  dataset_example_id=example_id,
528
+ repetition_number=run.repetition_number,
514
529
  )
515
530
 
516
531
 
@@ -11,6 +11,7 @@ from .Span import Span
11
11
  @strawberry.interface
12
12
  class ChatCompletionSubscriptionPayload:
13
13
  dataset_example_id: Optional[GlobalID] = None
14
+ repetition_number: Optional[int] = None
14
15
 
15
16
 
16
17
  @strawberry.type
@@ -355,12 +355,16 @@ class Project(Node):
355
355
  if sort_config and cursor.sort_column:
356
356
  sort_column = cursor.sort_column
357
357
  compare = operator.lt if sort_config.dir is SortDir.desc else operator.gt
358
- stmt = stmt.where(
359
- compare(
360
- tuple_(sort_config.orm_expression, models.Span.id),
361
- (sort_column.value, cursor.rowid),
358
+ if sort_column.type is CursorSortColumnDataType.NULL:
359
+ stmt = stmt.where(sort_config.orm_expression.is_(None))
360
+ stmt = stmt.where(compare(models.Span.id, cursor.rowid))
361
+ else:
362
+ stmt = stmt.where(
363
+ compare(
364
+ tuple_(sort_config.orm_expression, models.Span.id),
365
+ (sort_column.value, cursor.rowid),
366
+ )
362
367
  )
363
- )
364
368
  else:
365
369
  stmt = stmt.where(models.Span.id > cursor.rowid)
366
370
  stmt = stmt.order_by(cursor_rowid_column)
@@ -9,7 +9,7 @@ from strawberry.relay.types import Connection, Edge, NodeType, PageInfo
9
9
  from typing_extensions import TypeAlias, assert_never
10
10
 
11
11
  ID: TypeAlias = int
12
- CursorSortColumnValue: TypeAlias = Union[str, int, float, datetime]
12
+ CursorSortColumnValue: TypeAlias = Union[str, int, float, datetime, None]
13
13
 
14
14
  # A type alias for the connection cursor implementation
15
15
  CursorString = str
@@ -19,6 +19,7 @@ CURSOR_PREFIX = "connection:"
19
19
 
20
20
 
21
21
  class CursorSortColumnDataType(Enum):
22
+ NULL = auto()
22
23
  STRING = auto()
23
24
  INT = auto()
24
25
  FLOAT = auto()
@@ -30,6 +31,10 @@ class CursorSortColumn:
30
31
  type: CursorSortColumnDataType
31
32
  value: CursorSortColumnValue
32
33
 
34
+ def __post_init__(self) -> None:
35
+ if self.value is None:
36
+ self.type = CursorSortColumnDataType.NULL
37
+
33
38
  def __str__(self) -> str:
34
39
  if isinstance(self.value, str):
35
40
  return self.value
@@ -37,7 +42,9 @@ class CursorSortColumn:
37
42
  return str(self.value)
38
43
  if isinstance(self.value, datetime):
39
44
  return self.value.isoformat()
40
- assert_never(self.type)
45
+ if self.value is None:
46
+ return ""
47
+ assert_never(self.value)
41
48
 
42
49
  @classmethod
43
50
  def from_string(cls, type: CursorSortColumnDataType, cursor_string: str) -> "CursorSortColumn":
@@ -50,6 +57,8 @@ class CursorSortColumn:
50
57
  value = float(cursor_string)
51
58
  elif type is CursorSortColumnDataType.DATETIME:
52
59
  value = datetime.fromisoformat(cursor_string)
60
+ elif type is CursorSortColumnDataType.NULL:
61
+ value = None
53
62
  else:
54
63
  assert_never(type)
55
64
  return cls(type=type, value=value)
@@ -0,0 +1,93 @@
1
+ {
2
+ "_components-BQPHTBfv.js": {
3
+ "file": "assets/components-BQPHTBfv.js",
4
+ "name": "components",
5
+ "imports": [
6
+ "_vendor-BdjZxMii.js",
7
+ "_vendor-arizeai-CHYlS8jV.js",
8
+ "_pages-C0Y17J0T.js",
9
+ "_vendor-codemirror-Di6t4HnH.js",
10
+ "_vendor-three-BLWp5bic.js"
11
+ ]
12
+ },
13
+ "_pages-C0Y17J0T.js": {
14
+ "file": "assets/pages-C0Y17J0T.js",
15
+ "name": "pages",
16
+ "imports": [
17
+ "_vendor-BdjZxMii.js",
18
+ "_vendor-arizeai-CHYlS8jV.js",
19
+ "_components-BQPHTBfv.js",
20
+ "_vendor-codemirror-Di6t4HnH.js",
21
+ "_vendor-recharts-C9wCDYj3.js"
22
+ ]
23
+ },
24
+ "_vendor-BGzfc4EU.css": {
25
+ "file": "assets/vendor-BGzfc4EU.css",
26
+ "src": "_vendor-BGzfc4EU.css"
27
+ },
28
+ "_vendor-BdjZxMii.js": {
29
+ "file": "assets/vendor-BdjZxMii.js",
30
+ "name": "vendor",
31
+ "imports": [
32
+ "_vendor-three-BLWp5bic.js"
33
+ ],
34
+ "css": [
35
+ "assets/vendor-BGzfc4EU.css"
36
+ ]
37
+ },
38
+ "_vendor-arizeai-CHYlS8jV.js": {
39
+ "file": "assets/vendor-arizeai-CHYlS8jV.js",
40
+ "name": "vendor-arizeai",
41
+ "imports": [
42
+ "_vendor-BdjZxMii.js"
43
+ ]
44
+ },
45
+ "_vendor-codemirror-Di6t4HnH.js": {
46
+ "file": "assets/vendor-codemirror-Di6t4HnH.js",
47
+ "name": "vendor-codemirror",
48
+ "imports": [
49
+ "_vendor-BdjZxMii.js",
50
+ "_vendor-shiki-MNnmOotP.js"
51
+ ],
52
+ "dynamicImports": [
53
+ "_vendor-shiki-MNnmOotP.js",
54
+ "_vendor-shiki-MNnmOotP.js",
55
+ "_vendor-shiki-MNnmOotP.js"
56
+ ]
57
+ },
58
+ "_vendor-recharts-C9wCDYj3.js": {
59
+ "file": "assets/vendor-recharts-C9wCDYj3.js",
60
+ "name": "vendor-recharts",
61
+ "imports": [
62
+ "_vendor-BdjZxMii.js"
63
+ ]
64
+ },
65
+ "_vendor-shiki-MNnmOotP.js": {
66
+ "file": "assets/vendor-shiki-MNnmOotP.js",
67
+ "name": "vendor-shiki",
68
+ "isDynamicEntry": true,
69
+ "imports": [
70
+ "_vendor-BdjZxMii.js"
71
+ ]
72
+ },
73
+ "_vendor-three-BLWp5bic.js": {
74
+ "file": "assets/vendor-three-BLWp5bic.js",
75
+ "name": "vendor-three"
76
+ },
77
+ "index.tsx": {
78
+ "file": "assets/index-BL5BMgJU.js",
79
+ "name": "index",
80
+ "src": "index.tsx",
81
+ "isEntry": true,
82
+ "imports": [
83
+ "_vendor-BdjZxMii.js",
84
+ "_vendor-arizeai-CHYlS8jV.js",
85
+ "_pages-C0Y17J0T.js",
86
+ "_components-BQPHTBfv.js",
87
+ "_vendor-three-BLWp5bic.js",
88
+ "_vendor-codemirror-Di6t4HnH.js",
89
+ "_vendor-shiki-MNnmOotP.js",
90
+ "_vendor-recharts-C9wCDYj3.js"
91
+ ]
92
+ }
93
+ }