arize-phoenix 11.2.2__tar.gz → 11.4.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 (444) hide show
  1. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/PKG-INFO +4 -1
  2. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/README.md +1 -0
  3. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/pyproject.toml +2 -0
  4. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/config.py +14 -1
  5. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/db/facilitator.py +16 -24
  6. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/context.py +2 -0
  7. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/dataloaders/__init__.py +2 -0
  8. arize_phoenix-11.4.0/src/phoenix/server/api/dataloaders/annotation_configs_by_project.py +31 -0
  9. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/routers/v1/experiment_evaluations.py +3 -2
  10. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/Project.py +3 -12
  11. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/User.py +10 -0
  12. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/app.py +7 -0
  13. arize_phoenix-11.4.0/src/phoenix/server/cost_tracking/model_cost_manifest.json +2343 -0
  14. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/main.py +3 -0
  15. arize_phoenix-11.4.0/src/phoenix/server/static/.vite/manifest.json +87 -0
  16. arize_phoenix-11.2.2/src/phoenix/server/static/assets/components-CyFfAs46.js → arize_phoenix-11.4.0/src/phoenix/server/static/assets/components-CVcMbu2U.js +234 -233
  17. arize_phoenix-11.2.2/src/phoenix/server/static/assets/index-DCWmskPs.js → arize_phoenix-11.4.0/src/phoenix/server/static/assets/index-Dz7I-Hpn.js +2 -2
  18. arize_phoenix-11.2.2/src/phoenix/server/static/assets/pages-BzaS10EN.js → arize_phoenix-11.4.0/src/phoenix/server/static/assets/pages-QK2o2V7x.js +440 -428
  19. arize_phoenix-11.2.2/src/phoenix/server/static/assets/vendor-arizeai-CLX44PFA.js → arize_phoenix-11.4.0/src/phoenix/server/static/assets/vendor-arizeai-BwMsgSAG.js +2 -2
  20. arize_phoenix-11.2.2/src/phoenix/server/static/assets/vendor-codemirror-Du3XyJnB.js → arize_phoenix-11.4.0/src/phoenix/server/static/assets/vendor-codemirror-BwSDEu2g.js +1 -1
  21. arize_phoenix-11.2.2/src/phoenix/server/static/assets/vendor-DqQvHbPa.js → arize_phoenix-11.4.0/src/phoenix/server/static/assets/vendor-pg5m6BWE.js +1 -1
  22. arize_phoenix-11.2.2/src/phoenix/server/static/assets/vendor-recharts-B2PJDrnX.js → arize_phoenix-11.4.0/src/phoenix/server/static/assets/vendor-recharts-SW3HwAtG.js +1 -1
  23. arize_phoenix-11.2.2/src/phoenix/server/static/assets/vendor-shiki-CNbrFjf9.js → arize_phoenix-11.4.0/src/phoenix/server/static/assets/vendor-shiki-BsdYoDvs.js +1 -1
  24. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/templates/index.html +1 -0
  25. arize_phoenix-11.4.0/src/phoenix/version.py +1 -0
  26. arize_phoenix-11.2.2/src/phoenix/server/cost_tracking/model_cost_manifest.json +0 -587
  27. arize_phoenix-11.2.2/src/phoenix/server/static/.vite/manifest.json +0 -87
  28. arize_phoenix-11.2.2/src/phoenix/version.py +0 -1
  29. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/.gitignore +0 -0
  30. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/IP_NOTICE +0 -0
  31. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/LICENSE +0 -0
  32. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/__init__.py +0 -0
  33. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/auth.py +0 -0
  34. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/core/__init__.py +0 -0
  35. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/core/embedding_dimension.py +0 -0
  36. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/core/model.py +0 -0
  37. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/core/model_schema.py +0 -0
  38. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/core/model_schema_adapter.py +0 -0
  39. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/datetime_utils.py +0 -0
  40. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/db/README.md +0 -0
  41. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/db/__init__.py +0 -0
  42. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/db/alembic.ini +0 -0
  43. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/db/bulk_inserter.py +0 -0
  44. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/db/constants.py +0 -0
  45. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/db/engines.py +0 -0
  46. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/db/enums.py +0 -0
  47. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/db/helpers.py +0 -0
  48. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/db/insertion/__init__.py +0 -0
  49. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/db/insertion/constants.py +0 -0
  50. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/db/insertion/dataset.py +0 -0
  51. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/db/insertion/document_annotation.py +0 -0
  52. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/db/insertion/evaluation.py +0 -0
  53. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/db/insertion/helpers.py +0 -0
  54. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/db/insertion/span.py +0 -0
  55. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/db/insertion/span_annotation.py +0 -0
  56. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/db/insertion/trace_annotation.py +0 -0
  57. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/db/insertion/types.py +0 -0
  58. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/db/migrate.py +0 -0
  59. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/db/migrations/__init__.py +0 -0
  60. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/db/migrations/data_migration_scripts/__init__.py +0 -0
  61. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/db/migrations/data_migration_scripts/populate_project_sessions.py +0 -0
  62. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/db/migrations/env.py +0 -0
  63. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/db/migrations/script.py.mako +0 -0
  64. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/db/migrations/versions/10460e46d750_datasets.py +0 -0
  65. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/db/migrations/versions/2f9d1a65945f_annotation_config_migration.py +0 -0
  66. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/db/migrations/versions/3be8647b87d8_add_token_columns_to_spans_table.py +0 -0
  67. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/db/migrations/versions/4ded9e43755f_create_project_sessions_table.py +0 -0
  68. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/db/migrations/versions/6a88424799fe_update_users_with_auth_method.py +0 -0
  69. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/db/migrations/versions/8a3764fe7f1a_change_jsonb_to_json_for_prompts.py +0 -0
  70. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/db/migrations/versions/a20694b15f82_cost.py +0 -0
  71. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/db/migrations/versions/bb8139330879_create_project_trace_retention_policies_table.py +0 -0
  72. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/db/migrations/versions/bc8fea3c2bc8_add_prompt_tables.py +0 -0
  73. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/db/migrations/versions/cd164e83824f_users_and_tokens.py +0 -0
  74. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/db/migrations/versions/cf03bd6bae1d_init.py +0 -0
  75. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/db/models.py +0 -0
  76. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/db/pg_config.py +0 -0
  77. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/db/types/__init__.py +0 -0
  78. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/db/types/annotation_configs.py +0 -0
  79. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/db/types/db_models.py +0 -0
  80. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/db/types/identifier.py +0 -0
  81. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/db/types/model_provider.py +0 -0
  82. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/db/types/token_price_customization.py +0 -0
  83. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/db/types/trace_retention.py +0 -0
  84. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/exceptions.py +0 -0
  85. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/experiments/__init__.py +0 -0
  86. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/experiments/evaluators/__init__.py +0 -0
  87. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/experiments/evaluators/base.py +0 -0
  88. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/experiments/evaluators/code_evaluators.py +0 -0
  89. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/experiments/evaluators/llm_evaluators.py +0 -0
  90. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/experiments/evaluators/utils.py +0 -0
  91. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/experiments/functions.py +0 -0
  92. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/experiments/tracing.py +0 -0
  93. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/experiments/types.py +0 -0
  94. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/experiments/utils.py +0 -0
  95. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/inferences/__init__.py +0 -0
  96. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/inferences/errors.py +0 -0
  97. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/inferences/fixtures.py +0 -0
  98. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/inferences/inferences.py +0 -0
  99. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/inferences/schema.py +0 -0
  100. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/inferences/validation.py +0 -0
  101. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/logging/__init__.py +0 -0
  102. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/logging/_config.py +0 -0
  103. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/logging/_filter.py +0 -0
  104. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/logging/_formatter.py +0 -0
  105. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/metrics/README.md +0 -0
  106. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/metrics/__init__.py +0 -0
  107. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/metrics/binning.py +0 -0
  108. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/metrics/metrics.py +0 -0
  109. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/metrics/mixins.py +0 -0
  110. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/metrics/retrieval_metrics.py +0 -0
  111. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/metrics/timeseries.py +0 -0
  112. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/metrics/wrappers.py +0 -0
  113. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/pointcloud/__init__.py +0 -0
  114. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/pointcloud/clustering.py +0 -0
  115. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/pointcloud/pointcloud.py +0 -0
  116. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/pointcloud/projectors.py +0 -0
  117. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/pointcloud/umap_parameters.py +0 -0
  118. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/py.typed +0 -0
  119. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/__init__.py +0 -0
  120. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/README.md +0 -0
  121. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/__init__.py +0 -0
  122. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/auth.py +0 -0
  123. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/dataloaders/annotation_summaries.py +0 -0
  124. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/dataloaders/average_experiment_run_latency.py +0 -0
  125. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/dataloaders/cache/__init__.py +0 -0
  126. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/dataloaders/cache/two_tier_cache.py +0 -0
  127. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/dataloaders/dataset_example_revisions.py +0 -0
  128. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/dataloaders/dataset_example_spans.py +0 -0
  129. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/dataloaders/document_evaluation_summaries.py +0 -0
  130. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/dataloaders/document_evaluations.py +0 -0
  131. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/dataloaders/document_retrieval_metrics.py +0 -0
  132. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/dataloaders/experiment_annotation_summaries.py +0 -0
  133. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/dataloaders/experiment_error_rates.py +0 -0
  134. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/dataloaders/experiment_run_annotations.py +0 -0
  135. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/dataloaders/experiment_run_counts.py +0 -0
  136. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/dataloaders/experiment_sequence_number.py +0 -0
  137. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/dataloaders/last_used_times_by_generative_model_id.py +0 -0
  138. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/dataloaders/latency_ms_quantile.py +0 -0
  139. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/dataloaders/min_start_or_max_end_times.py +0 -0
  140. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/dataloaders/num_child_spans.py +0 -0
  141. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/dataloaders/num_spans_per_trace.py +0 -0
  142. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/dataloaders/project_by_name.py +0 -0
  143. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/dataloaders/project_ids_by_trace_retention_policy_id.py +0 -0
  144. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/dataloaders/prompt_version_sequence_number.py +0 -0
  145. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/dataloaders/record_counts.py +0 -0
  146. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/dataloaders/session_io.py +0 -0
  147. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/dataloaders/session_num_traces.py +0 -0
  148. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/dataloaders/session_num_traces_with_error.py +0 -0
  149. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/dataloaders/session_token_usages.py +0 -0
  150. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/dataloaders/session_trace_latency_ms_quantile.py +0 -0
  151. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/dataloaders/span_annotations.py +0 -0
  152. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/dataloaders/span_by_id.py +0 -0
  153. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/dataloaders/span_cost_by_span.py +0 -0
  154. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/dataloaders/span_cost_detail_summary_entries_by_generative_model.py +0 -0
  155. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/dataloaders/span_cost_detail_summary_entries_by_project_session.py +0 -0
  156. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/dataloaders/span_cost_detail_summary_entries_by_span.py +0 -0
  157. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/dataloaders/span_cost_detail_summary_entries_by_trace.py +0 -0
  158. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/dataloaders/span_cost_details_by_span_cost.py +0 -0
  159. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_experiment.py +0 -0
  160. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_experiment_run.py +0 -0
  161. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_generative_model.py +0 -0
  162. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_project.py +0 -0
  163. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_project_session.py +0 -0
  164. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/dataloaders/span_cost_summary_by_trace.py +0 -0
  165. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/dataloaders/span_costs.py +0 -0
  166. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/dataloaders/span_dataset_examples.py +0 -0
  167. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/dataloaders/span_descendants.py +0 -0
  168. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/dataloaders/span_projects.py +0 -0
  169. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/dataloaders/table_fields.py +0 -0
  170. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/dataloaders/token_counts.py +0 -0
  171. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/dataloaders/trace_by_trace_ids.py +0 -0
  172. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/dataloaders/trace_retention_policy_id_by_project_id.py +0 -0
  173. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/dataloaders/trace_root_spans.py +0 -0
  174. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/dataloaders/types.py +0 -0
  175. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/dataloaders/user_roles.py +0 -0
  176. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/dataloaders/users.py +0 -0
  177. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/exceptions.py +0 -0
  178. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/helpers/__init__.py +0 -0
  179. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/helpers/annotations.py +0 -0
  180. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/helpers/dataset_helpers.py +0 -0
  181. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/helpers/experiment_run_filters.py +0 -0
  182. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/helpers/playground_clients.py +0 -0
  183. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/helpers/playground_registry.py +0 -0
  184. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/helpers/playground_spans.py +0 -0
  185. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/helpers/prompts/__init__.py +0 -0
  186. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/helpers/prompts/conversions/__init__.py +0 -0
  187. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/helpers/prompts/conversions/anthropic.py +0 -0
  188. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/helpers/prompts/conversions/aws.py +0 -0
  189. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/helpers/prompts/conversions/openai.py +0 -0
  190. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/helpers/prompts/models.py +0 -0
  191. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/input_types/AddExamplesToDatasetInput.py +0 -0
  192. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/input_types/AddSpansToDatasetInput.py +0 -0
  193. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/input_types/ChatCompletionInput.py +0 -0
  194. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/input_types/ChatCompletionMessageInput.py +0 -0
  195. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/input_types/ClearProjectInput.py +0 -0
  196. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/input_types/ClusterInput.py +0 -0
  197. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/input_types/Coordinates.py +0 -0
  198. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/input_types/CreateDatasetInput.py +0 -0
  199. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/input_types/CreateSpanAnnotationInput.py +0 -0
  200. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/input_types/CreateTraceAnnotationInput.py +0 -0
  201. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/input_types/DataQualityMetricInput.py +0 -0
  202. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/input_types/DatasetExampleInput.py +0 -0
  203. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/input_types/DatasetFilter.py +0 -0
  204. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/input_types/DatasetSort.py +0 -0
  205. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/input_types/DatasetVersionSort.py +0 -0
  206. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/input_types/DeleteAnnotationsInput.py +0 -0
  207. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/input_types/DeleteDatasetExamplesInput.py +0 -0
  208. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/input_types/DeleteDatasetInput.py +0 -0
  209. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/input_types/DeleteExperimentsInput.py +0 -0
  210. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/input_types/DimensionFilter.py +0 -0
  211. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/input_types/DimensionInput.py +0 -0
  212. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/input_types/GenerativeCredentialInput.py +0 -0
  213. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/input_types/GenerativeModelInput.py +0 -0
  214. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/input_types/Granularity.py +0 -0
  215. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/input_types/InvocationParameters.py +0 -0
  216. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/input_types/PatchAnnotationInput.py +0 -0
  217. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/input_types/PatchDatasetExamplesInput.py +0 -0
  218. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/input_types/PatchDatasetInput.py +0 -0
  219. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/input_types/PerformanceMetricInput.py +0 -0
  220. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/input_types/ProjectFilter.py +0 -0
  221. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/input_types/ProjectSessionSort.py +0 -0
  222. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/input_types/ProjectSort.py +0 -0
  223. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/input_types/PromptTemplateOptions.py +0 -0
  224. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/input_types/PromptVersionInput.py +0 -0
  225. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/input_types/SpanAnnotationFilter.py +0 -0
  226. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/input_types/SpanAnnotationSort.py +0 -0
  227. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/input_types/SpanSort.py +0 -0
  228. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/input_types/TimeRange.py +0 -0
  229. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/input_types/TraceAnnotationSort.py +0 -0
  230. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/input_types/UserRoleInput.py +0 -0
  231. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/input_types/__init__.py +0 -0
  232. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/interceptor.py +0 -0
  233. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/mutations/__init__.py +0 -0
  234. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/mutations/annotation_config_mutations.py +0 -0
  235. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/mutations/api_key_mutations.py +0 -0
  236. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/mutations/chat_mutations.py +0 -0
  237. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/mutations/dataset_mutations.py +0 -0
  238. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/mutations/experiment_mutations.py +0 -0
  239. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/mutations/export_events_mutations.py +0 -0
  240. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/mutations/model_mutations.py +0 -0
  241. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/mutations/project_mutations.py +0 -0
  242. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/mutations/project_trace_retention_policy_mutations.py +0 -0
  243. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/mutations/prompt_label_mutations.py +0 -0
  244. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/mutations/prompt_mutations.py +0 -0
  245. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/mutations/prompt_version_tag_mutations.py +0 -0
  246. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/mutations/span_annotations_mutations.py +0 -0
  247. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/mutations/trace_annotations_mutations.py +0 -0
  248. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/mutations/trace_mutations.py +0 -0
  249. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/mutations/user_mutations.py +0 -0
  250. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/openapi/__init__.py +0 -0
  251. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/openapi/main.py +0 -0
  252. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/openapi/schema.py +0 -0
  253. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/queries.py +0 -0
  254. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/routers/__init__.py +0 -0
  255. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/routers/auth.py +0 -0
  256. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/routers/embeddings.py +0 -0
  257. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/routers/oauth2.py +0 -0
  258. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/routers/utils.py +0 -0
  259. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/routers/v1/__init__.py +0 -0
  260. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/routers/v1/annotation_configs.py +0 -0
  261. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/routers/v1/annotations.py +0 -0
  262. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/routers/v1/datasets.py +0 -0
  263. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/routers/v1/evaluations.py +0 -0
  264. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/routers/v1/experiment_runs.py +0 -0
  265. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/routers/v1/experiments.py +0 -0
  266. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/routers/v1/models.py +0 -0
  267. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/routers/v1/projects.py +0 -0
  268. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/routers/v1/prompts.py +0 -0
  269. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/routers/v1/spans.py +0 -0
  270. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/routers/v1/traces.py +0 -0
  271. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/routers/v1/users.py +0 -0
  272. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/routers/v1/utils.py +0 -0
  273. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/schema.py +0 -0
  274. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/subscriptions.py +0 -0
  275. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/Annotation.py +0 -0
  276. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/AnnotationConfig.py +0 -0
  277. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/AnnotationSource.py +0 -0
  278. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/AnnotationSummary.py +0 -0
  279. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/AnnotatorKind.py +0 -0
  280. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/ApiKey.py +0 -0
  281. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/AuthMethod.py +0 -0
  282. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/ChatCompletionMessageRole.py +0 -0
  283. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/ChatCompletionSubscriptionPayload.py +0 -0
  284. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/Cluster.py +0 -0
  285. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/CostBreakdown.py +0 -0
  286. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/CreateDatasetPayload.py +0 -0
  287. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/CronExpression.py +0 -0
  288. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/DataQualityMetric.py +0 -0
  289. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/Dataset.py +0 -0
  290. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/DatasetExample.py +0 -0
  291. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/DatasetExampleRevision.py +0 -0
  292. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/DatasetValues.py +0 -0
  293. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/DatasetVersion.py +0 -0
  294. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/Dimension.py +0 -0
  295. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/DimensionDataType.py +0 -0
  296. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/DimensionShape.py +0 -0
  297. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/DimensionType.py +0 -0
  298. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/DimensionWithValue.py +0 -0
  299. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/DocumentEvaluationSummary.py +0 -0
  300. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/DocumentRetrievalMetrics.py +0 -0
  301. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/EmbeddingDimension.py +0 -0
  302. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/EmbeddingMetadata.py +0 -0
  303. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/Evaluation.py +0 -0
  304. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/EvaluationSummary.py +0 -0
  305. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/Event.py +0 -0
  306. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/EventMetadata.py +0 -0
  307. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/ExampleRevisionInterface.py +0 -0
  308. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/Experiment.py +0 -0
  309. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/ExperimentAnnotationSummary.py +0 -0
  310. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/ExperimentComparison.py +0 -0
  311. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/ExperimentRun.py +0 -0
  312. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/ExperimentRunAnnotation.py +0 -0
  313. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/ExportedFile.py +0 -0
  314. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/Functionality.py +0 -0
  315. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/GenerativeModel.py +0 -0
  316. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/GenerativeProvider.py +0 -0
  317. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/Identifier.py +0 -0
  318. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/InferenceModel.py +0 -0
  319. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/Inferences.py +0 -0
  320. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/InferencesRole.py +0 -0
  321. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/LabelFraction.py +0 -0
  322. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/MimeType.py +0 -0
  323. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/ModelInterface.py +0 -0
  324. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/NumericRange.py +0 -0
  325. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/PerformanceMetric.py +0 -0
  326. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/PlaygroundModel.py +0 -0
  327. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/ProjectSession.py +0 -0
  328. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/ProjectTraceRetentionPolicy.py +0 -0
  329. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/Prompt.py +0 -0
  330. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/PromptLabel.py +0 -0
  331. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/PromptResponse.py +0 -0
  332. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/PromptVersion.py +0 -0
  333. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/PromptVersionTag.py +0 -0
  334. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/PromptVersionTemplate.py +0 -0
  335. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/ResponseFormat.py +0 -0
  336. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/Retrieval.py +0 -0
  337. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/ScalarDriftMetricEnum.py +0 -0
  338. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/Segments.py +0 -0
  339. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/SortDir.py +0 -0
  340. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/Span.py +0 -0
  341. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/SpanAnnotation.py +0 -0
  342. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/SpanCostDetailSummaryEntry.py +0 -0
  343. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/SpanCostSummary.py +0 -0
  344. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/SpanIOValue.py +0 -0
  345. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/SystemApiKey.py +0 -0
  346. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/TimeSeries.py +0 -0
  347. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/TokenCountPromptDetails.py +0 -0
  348. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/TokenPrice.py +0 -0
  349. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/TokenUsage.py +0 -0
  350. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/ToolDefinition.py +0 -0
  351. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/Trace.py +0 -0
  352. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/TraceAnnotation.py +0 -0
  353. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/UMAPPoints.py +0 -0
  354. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/UserApiKey.py +0 -0
  355. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/UserRole.py +0 -0
  356. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/ValidationResult.py +0 -0
  357. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/VectorDriftMetricEnum.py +0 -0
  358. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/__init__.py +0 -0
  359. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/node.py +0 -0
  360. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/types/pagination.py +0 -0
  361. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/api/utils.py +0 -0
  362. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/authorization.py +0 -0
  363. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/bearer_auth.py +0 -0
  364. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/cost_tracking/__init__.py +0 -0
  365. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/cost_tracking/cost_details_calculator.py +0 -0
  366. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/cost_tracking/cost_model_lookup.py +0 -0
  367. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/cost_tracking/helpers.py +0 -0
  368. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/cost_tracking/regex_specificity.py +0 -0
  369. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/cost_tracking/token_cost_calculator.py +0 -0
  370. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/daemons/__init__.py +0 -0
  371. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/daemons/generative_model_store.py +0 -0
  372. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/daemons/span_cost_calculator.py +0 -0
  373. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/dml_event.py +0 -0
  374. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/dml_event_handler.py +0 -0
  375. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/email/__init__.py +0 -0
  376. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/email/sender.py +0 -0
  377. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/email/templates/__init__.py +0 -0
  378. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/email/templates/password_reset.html +0 -0
  379. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/email/templates/welcome.html +0 -0
  380. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/email/types.py +0 -0
  381. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/grpc_server.py +0 -0
  382. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/jwt_store.py +0 -0
  383. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/middleware/__init__.py +0 -0
  384. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/middleware/gzip.py +0 -0
  385. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/oauth2.py +0 -0
  386. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/openapi/__init__.py +0 -0
  387. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/prometheus.py +0 -0
  388. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/rate_limiters.py +0 -0
  389. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/retention.py +0 -0
  390. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/static/apple-touch-icon-114x114.png +0 -0
  391. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/static/apple-touch-icon-120x120.png +0 -0
  392. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/static/apple-touch-icon-144x144.png +0 -0
  393. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/static/apple-touch-icon-152x152.png +0 -0
  394. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/static/apple-touch-icon-180x180.png +0 -0
  395. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/static/apple-touch-icon-72x72.png +0 -0
  396. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/static/apple-touch-icon-76x76.png +0 -0
  397. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/static/apple-touch-icon.png +0 -0
  398. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/static/assets/vendor-WIZid84E.css +0 -0
  399. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/static/assets/vendor-three-C5WAXd5r.js +0 -0
  400. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/static/favicon.ico +0 -0
  401. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/static/modernizr.js +0 -0
  402. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/telemetry.py +0 -0
  403. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/templates/__init__.py +0 -0
  404. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/thread_server.py +0 -0
  405. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/server/types.py +0 -0
  406. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/services.py +0 -0
  407. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/session/__init__.py +0 -0
  408. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/session/client.py +0 -0
  409. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/session/data_extractor.py +0 -0
  410. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/session/evaluation.py +0 -0
  411. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/session/session.py +0 -0
  412. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/settings.py +0 -0
  413. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/trace/__init__.py +0 -0
  414. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/trace/attributes.py +0 -0
  415. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/trace/dsl/README.md +0 -0
  416. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/trace/dsl/__init__.py +0 -0
  417. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/trace/dsl/filter.py +0 -0
  418. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/trace/dsl/helpers.py +0 -0
  419. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/trace/dsl/query.py +0 -0
  420. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/trace/errors.py +0 -0
  421. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/trace/evaluation_conventions.py +0 -0
  422. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/trace/exporter.py +0 -0
  423. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/trace/fixtures.py +0 -0
  424. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/trace/otel.py +0 -0
  425. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/trace/projects.py +0 -0
  426. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/trace/schemas.py +0 -0
  427. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/trace/span_evaluations.py +0 -0
  428. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/trace/span_json_decoder.py +0 -0
  429. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/trace/span_json_encoder.py +0 -0
  430. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/trace/trace_dataset.py +0 -0
  431. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/trace/utils.py +0 -0
  432. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/trace/v1/__init__.py +0 -0
  433. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/trace/v1/evaluation_pb2.py +0 -0
  434. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/trace/v1/evaluation_pb2.pyi +0 -0
  435. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/utilities/__init__.py +0 -0
  436. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/utilities/client.py +0 -0
  437. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/utilities/deprecation.py +0 -0
  438. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/utilities/error_handling.py +0 -0
  439. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/utilities/json.py +0 -0
  440. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/utilities/logging.py +0 -0
  441. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/utilities/project.py +0 -0
  442. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/utilities/re.py +0 -0
  443. {arize_phoenix-11.2.2 → arize_phoenix-11.4.0}/src/phoenix/utilities/span_store.py +0 -0
  444. {arize_phoenix-11.2.2 → arize_phoenix-11.4.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.2.2
3
+ Version: 11.4.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
@@ -43,6 +43,7 @@ Requires-Dist: protobuf<6.0,>=4.25.8
43
43
  Requires-Dist: psutil
44
44
  Requires-Dist: pyarrow
45
45
  Requires-Dist: pydantic>=2.1.0
46
+ Requires-Dist: python-dateutil
46
47
  Requires-Dist: python-multipart
47
48
  Requires-Dist: scikit-learn
48
49
  Requires-Dist: scipy
@@ -108,6 +109,7 @@ Requires-Dist: tabulate; extra == 'dev'
108
109
  Requires-Dist: tox-uv==1.11.3; extra == 'dev'
109
110
  Requires-Dist: tox==4.18.1; extra == 'dev'
110
111
  Requires-Dist: types-jsonschema; extra == 'dev'
112
+ Requires-Dist: types-python-dateutil; extra == 'dev'
111
113
  Requires-Dist: types-tabulate; extra == 'dev'
112
114
  Requires-Dist: uv==0.7.12; extra == 'dev'
113
115
  Requires-Dist: uvloop; (platform_system != 'Windows') and extra == 'dev'
@@ -165,6 +167,7 @@ Description-Content-Type: text/markdown
165
167
  <a target="_blank" href="https://github.com/Arize-ai/phoenix/tree/main/js/packages/phoenix-mcp">
166
168
  <img src="https://badge.mcpx.dev?status=on" title="MCP Enabled"/>
167
169
  </a>
170
+ <a href="https://cursor.com/install-mcp?name=phoenix&config=eyJjb21tYW5kIjoibnB4IC15IEBhcml6ZWFpL3Bob2VuaXgtbWNwQGxhdGVzdCAtLWJhc2VVcmwgaHR0cDovL2xvY2FsaG9zdDo2MDA2IC0tYXBpS2V5IHlvdXItYXBpLWtleSJ9"><img src="https://cursor.com/deeplink/mcp-install-dark.svg" alt="Add Arize Phoenix MCP server to Cursor" height=20 /></a>
168
171
  </p>
169
172
 
170
173
  Phoenix is an open-source AI observability platform designed for experimentation, evaluation, and troubleshooting. It provides:
@@ -34,6 +34,7 @@
34
34
  <a target="_blank" href="https://github.com/Arize-ai/phoenix/tree/main/js/packages/phoenix-mcp">
35
35
  <img src="https://badge.mcpx.dev?status=on" title="MCP Enabled"/>
36
36
  </a>
37
+ <a href="https://cursor.com/install-mcp?name=phoenix&config=eyJjb21tYW5kIjoibnB4IC15IEBhcml6ZWFpL3Bob2VuaXgtbWNwQGxhdGVzdCAtLWJhc2VVcmwgaHR0cDovL2xvY2FsaG9zdDo2MDA2IC0tYXBpS2V5IHlvdXItYXBpLWtleSJ9"><img src="https://cursor.com/deeplink/mcp-install-dark.svg" alt="Add Arize Phoenix MCP server to Cursor" height=20 /></a>
37
38
  </p>
38
39
 
39
40
  Phoenix is an open-source AI observability platform designed for experimentation, evaluation, and troubleshooting. It provides:
@@ -59,6 +59,7 @@ dependencies = [
59
59
  "authlib",
60
60
  "arize-phoenix-client",
61
61
  "email-validator",
62
+ "python-dateutil",
62
63
  ]
63
64
  dynamic = ["version"]
64
65
 
@@ -103,6 +104,7 @@ dev = [
103
104
  "uvloop; platform_system != 'Windows'",
104
105
  "grpc-interceptor[testing]",
105
106
  "types-jsonschema",
107
+ "types-python-dateutil",
106
108
  ]
107
109
  embeddings = [
108
110
  "fast-hdbscan>=0.2.0",
@@ -223,6 +223,12 @@ Examples:
223
223
  - With a sub-path: "https://example.com/phoenix"
224
224
  - Without a sub-path: "https://phoenix.example.com"
225
225
  """
226
+ ENV_PHOENIX_MANAGEMENT_URL = "PHOENIX_MANAGEMENT_URL"
227
+ """
228
+ The URL to use for redirecting to a management interface that may be hosting Phoenix. If set, and
229
+ the current user is within PHOENIX_ADMINS, a link will be added to the navigation menu to return to
230
+ this URL.
231
+ """
226
232
 
227
233
 
228
234
  # SMTP settings
@@ -818,7 +824,7 @@ def get_env_csrf_trusted_origins() -> list[str]:
818
824
 
819
825
  def get_env_admins() -> dict[str, str]:
820
826
  """
821
- Parse the PHOENIX_ADMINS environment variable to extract the comma separated pairs of
827
+ Parse the PHOENIX_ADMINS environment variable to extract the semicolon separated pairs of
822
828
  username and email. The last equal sign (=) in each pair is used to separate the username from
823
829
  the email.
824
830
 
@@ -1540,6 +1546,13 @@ def get_env_fullstory_org() -> Optional[str]:
1540
1546
  return getenv(ENV_PHOENIX_FULLSTORY_ORG)
1541
1547
 
1542
1548
 
1549
+ def get_env_management_url() -> Optional[str]:
1550
+ """
1551
+ Gets the value of the PHOENIX_MANAGEMENT_URL environment variable.
1552
+ """
1553
+ return getenv(ENV_PHOENIX_MANAGEMENT_URL)
1554
+
1555
+
1543
1556
  def verify_server_environment_variables() -> None:
1544
1557
  """Verify that the environment variables are set correctly. Raises an error otherwise."""
1545
1558
  get_env_root_url()
@@ -406,17 +406,6 @@ async def _ensure_model_costs(db: DbSessionFactory) -> None:
406
406
  with open(_COST_MODEL_MANIFEST) as f:
407
407
  manifest = json.load(f)
408
408
 
409
- # Define all supported token types with their prompt/non-prompt classification
410
- # This determines how tokens are categorized for billing purposes
411
- token_types: list[_TokenTypeKey] = [
412
- _TokenTypeKey("input", True), # Standard input tokens
413
- _TokenTypeKey("cache_write", True), # Tokens written to cache
414
- _TokenTypeKey("cache_read", True), # Tokens read from cache
415
- _TokenTypeKey("output", False), # Generated output tokens
416
- _TokenTypeKey("audio", True), # Audio input tokens
417
- _TokenTypeKey("audio", False), # Audio output tokens
418
- ]
419
-
420
409
  async with db() as session:
421
410
  # Fetch all existing built-in models with their token prices eagerly loaded
422
411
  # Using .unique() to deduplicate models when multiple token prices are joined
@@ -435,9 +424,8 @@ async def _ensure_model_costs(db: DbSessionFactory) -> None:
435
424
  seen_names: set[str] = set()
436
425
  seen_patterns: set[tuple[re.Pattern[str], str]] = set()
437
426
 
438
- # Process each model in the manifest
439
- for model_data in manifest:
440
- name = str(model_data.get("model") or "").strip()
427
+ for model_data in manifest["models"]:
428
+ name = str(model_data.get("name") or "").strip()
441
429
  if not name:
442
430
  logger.warning("Skipping model with empty name in manifest")
443
431
  continue
@@ -445,7 +433,7 @@ async def _ensure_model_costs(db: DbSessionFactory) -> None:
445
433
  logger.warning(f"Skipping model '{name}' with duplicate name in manifest")
446
434
  continue
447
435
  seen_names.add(name)
448
- regex = str(model_data.get("regex") or "").strip()
436
+ regex = str(model_data.get("name_pattern") or "").strip()
449
437
  try:
450
438
  pattern = re.compile(regex)
451
439
  except re.error as e:
@@ -460,7 +448,7 @@ async def _ensure_model_costs(db: DbSessionFactory) -> None:
460
448
  seen_patterns.add((pattern, provider))
461
449
  # Remove model from built_in_models dict (for cleanup tracking)
462
450
  # or create new model if not found
463
- model = built_in_models.pop(model_data["model"], None)
451
+ model = built_in_models.pop(model_data["name"], None)
464
452
  if model is None:
465
453
  # Create new built-in model from manifest data
466
454
  model = models.GenerativeModel(
@@ -477,24 +465,27 @@ async def _ensure_model_costs(db: DbSessionFactory) -> None:
477
465
 
478
466
  # Create lookup table for existing token prices by (token_type, is_prompt)
479
467
  # Using pop() during iteration allows us to track which prices are no longer needed
480
- token_prices = {
468
+ existing_token_prices = {
481
469
  _TokenTypeKey(token_price.token_type, token_price.is_prompt): token_price
482
470
  for token_price in model.token_prices
483
471
  }
484
472
 
485
473
  # Synchronize token prices for all supported token types
486
- for token_type, is_prompt in token_types:
474
+ for manifest_token_price in model_data["token_prices"]:
487
475
  # Skip if this token type has no rate in the manifest
488
- if not (base_rate := model_data.get(token_type)):
476
+ if not (base_rate := manifest_token_price.get("base_rate")):
489
477
  continue
490
478
 
491
- key = _TokenTypeKey(token_type, is_prompt)
479
+ key = _TokenTypeKey(
480
+ manifest_token_price["token_type"],
481
+ manifest_token_price["is_prompt"],
482
+ )
492
483
  # Remove from tracking dict and get existing price (if any)
493
- if not (token_price := token_prices.pop(key, None)):
484
+ if not (token_price := existing_token_prices.pop(key, None)):
494
485
  # Create new token price if it doesn't exist
495
486
  token_price = models.TokenPrice(
496
- token_type=token_type,
497
- is_prompt=is_prompt,
487
+ token_type=manifest_token_price["token_type"],
488
+ is_prompt=manifest_token_price["is_prompt"],
498
489
  base_rate=base_rate,
499
490
  )
500
491
  model.token_prices.append(token_price)
@@ -504,7 +495,7 @@ async def _ensure_model_costs(db: DbSessionFactory) -> None:
504
495
 
505
496
  # Remove any token prices that are no longer in the manifest
506
497
  # These are prices that weren't popped from the token_prices dict above
507
- for token_price in token_prices.values():
498
+ for token_price in existing_token_prices.values():
508
499
  model.token_prices.remove(token_price)
509
500
 
510
501
  # Clean up built-in models that are no longer in the manifest
@@ -519,4 +510,5 @@ async def _ensure_model_costs(db: DbSessionFactory) -> None:
519
510
  sa.update(models.GenerativeModel)
520
511
  .values(deleted_at=sa.func.now())
521
512
  .where(models.GenerativeModel.id.in_([m.id for m in remaining_models]))
513
+ .where(~sa.exists().where(models.GenerativeModel.id == models.SpanCost.model_id))
522
514
  )
@@ -15,6 +15,7 @@ from phoenix.auth import (
15
15
  from phoenix.core.model_schema import Model
16
16
  from phoenix.db import models
17
17
  from phoenix.server.api.dataloaders import (
18
+ AnnotationConfigsByProjectDataLoader,
18
19
  AnnotationSummaryDataLoader,
19
20
  AverageExperimentRunLatencyDataLoader,
20
21
  CacheForDataLoaders,
@@ -82,6 +83,7 @@ from phoenix.server.types import (
82
83
 
83
84
  @dataclass
84
85
  class DataLoaders:
86
+ annotation_configs_by_project: AnnotationConfigsByProjectDataLoader
85
87
  annotation_summaries: AnnotationSummaryDataLoader
86
88
  average_experiment_run_latency: AverageExperimentRunLatencyDataLoader
87
89
  dataset_example_revisions: DatasetExampleRevisionsDataLoader
@@ -4,6 +4,7 @@ from phoenix.server.api.dataloaders.span_cost_detail_summary_entries_by_project_
4
4
  SpanCostDetailSummaryEntriesByProjectSessionDataLoader,
5
5
  )
6
6
 
7
+ from .annotation_configs_by_project import AnnotationConfigsByProjectDataLoader
7
8
  from .annotation_summaries import AnnotationSummaryCache, AnnotationSummaryDataLoader
8
9
  from .average_experiment_run_latency import AverageExperimentRunLatencyDataLoader
9
10
  from .dataset_example_revisions import DatasetExampleRevisionsDataLoader
@@ -61,6 +62,7 @@ from .user_roles import UserRolesDataLoader
61
62
  from .users import UsersDataLoader
62
63
 
63
64
  __all__ = [
65
+ "AnnotationConfigsByProjectDataLoader",
64
66
  "AnnotationSummaryDataLoader",
65
67
  "AverageExperimentRunLatencyDataLoader",
66
68
  "CacheForDataLoaders",
@@ -0,0 +1,31 @@
1
+ from collections import defaultdict
2
+
3
+ from sqlalchemy import select
4
+ from strawberry.dataloader import DataLoader
5
+ from typing_extensions import TypeAlias
6
+
7
+ from phoenix.db import models
8
+ from phoenix.server.types import DbSessionFactory
9
+
10
+ ProjectId: TypeAlias = int
11
+ Key: TypeAlias = ProjectId
12
+ Result: TypeAlias = tuple[models.AnnotationConfig, ...]
13
+
14
+
15
+ class AnnotationConfigsByProjectDataLoader(DataLoader[Key, Result]):
16
+ def __init__(self, db: DbSessionFactory) -> None:
17
+ super().__init__(load_fn=self._load_fn)
18
+ self._db = db
19
+
20
+ async def _load_fn(self, keys: list[Key]) -> list[Result]:
21
+ stmt = (
22
+ select(models.ProjectAnnotationConfig.project_id, models.AnnotationConfig)
23
+ .join_from(models.ProjectAnnotationConfig, models.AnnotationConfig)
24
+ .where(models.ProjectAnnotationConfig.project_id.in_(keys))
25
+ )
26
+ results: defaultdict[Key, list[models.AnnotationConfig]] = defaultdict(list)
27
+ async with self._db() as session:
28
+ data = await session.stream(stmt)
29
+ async for id_, config in data:
30
+ results[id_].append(config)
31
+ return [tuple(results[k]) for k in keys]
@@ -1,6 +1,7 @@
1
1
  from datetime import datetime
2
2
  from typing import Any, Literal, Optional
3
3
 
4
+ from dateutil.parser import isoparse
4
5
  from fastapi import APIRouter, HTTPException
5
6
  from pydantic import Field
6
7
  from starlette.requests import Request
@@ -95,8 +96,8 @@ async def upsert_experiment_evaluation(
95
96
  explanation=explanation,
96
97
  error=error,
97
98
  metadata_=metadata, # `metadata_` must match database
98
- start_time=datetime.fromisoformat(start_time),
99
- end_time=datetime.fromisoformat(end_time),
99
+ start_time=isoparse(start_time),
100
+ end_time=isoparse(end_time),
100
101
  trace_id=payload.get("trace_id"),
101
102
  )
102
103
  dialect = SupportedSQLDialect(session.bind.dialect.name)
@@ -655,18 +655,9 @@ class Project(Node):
655
655
  last=last,
656
656
  before=before if isinstance(before, CursorString) else None,
657
657
  )
658
- async with info.context.db() as session:
659
- annotation_configs = await session.stream_scalars(
660
- select(models.AnnotationConfig)
661
- .join(
662
- models.ProjectAnnotationConfig,
663
- models.AnnotationConfig.id
664
- == models.ProjectAnnotationConfig.annotation_config_id,
665
- )
666
- .where(models.ProjectAnnotationConfig.project_id == self.project_rowid)
667
- .order_by(models.AnnotationConfig.name)
668
- )
669
- data = [to_gql_annotation_config(config) async for config in annotation_configs]
658
+ loader = info.context.data_loaders.annotation_configs_by_project
659
+ configs = await loader.load(self.project_rowid)
660
+ data = [to_gql_annotation_config(config) for config in configs]
670
661
  return connection_from_list(data=data, args=args)
671
662
 
672
663
  @strawberry.field
@@ -7,6 +7,7 @@ from strawberry import Private
7
7
  from strawberry.relay import Node, NodeID
8
8
  from strawberry.types import Info
9
9
 
10
+ from phoenix.config import get_env_admins
10
11
  from phoenix.db import models
11
12
  from phoenix.server.api.context import Context
12
13
  from phoenix.server.api.exceptions import NotFound
@@ -42,6 +43,15 @@ class User(Node):
42
43
  )
43
44
  return [to_gql_api_key(api_key) for api_key in api_keys]
44
45
 
46
+ @strawberry.field
47
+ async def is_management_user(self) -> bool:
48
+ initial_admins = get_env_admins()
49
+ # this field is only visible to initial admins as they are the ones likely to have access to
50
+ # a management interface / the phoenix environment.
51
+ if self.email in initial_admins or self.email == "admin@localhost":
52
+ return True
53
+ return False
54
+
45
55
 
46
56
  def to_gql_user(user: models.User, api_keys: Optional[list[models.ApiKey]] = None) -> User:
47
57
  """
@@ -72,6 +72,7 @@ from phoenix.exceptions import PhoenixMigrationError
72
72
  from phoenix.pointcloud.umap_parameters import UMAPParameters
73
73
  from phoenix.server.api.context import Context, DataLoaders
74
74
  from phoenix.server.api.dataloaders import (
75
+ AnnotationConfigsByProjectDataLoader,
75
76
  AnnotationSummaryDataLoader,
76
77
  AverageExperimentRunLatencyDataLoader,
77
78
  CacheForDataLoaders,
@@ -231,6 +232,8 @@ class AppConfig(NamedTuple):
231
232
  auto_login_idp_name: Optional[str] = None
232
233
  fullstory_org: Optional[str] = None
233
234
  """ FullStory organization ID for web analytics tracking """
235
+ management_url: Optional[str] = None
236
+ """ URL for a phoenix management interface, only visible to management users """
234
237
 
235
238
 
236
239
  class Static(StaticFiles):
@@ -297,6 +300,7 @@ class Static(StaticFiles):
297
300
  "basic_auth_disabled": self._app_config.basic_auth_disabled,
298
301
  "auto_login_idp_name": self._app_config.auto_login_idp_name,
299
302
  "fullstory_org": self._app_config.fullstory_org,
303
+ "management_url": self._app_config.management_url,
300
304
  },
301
305
  )
302
306
  except Exception as e:
@@ -642,6 +646,7 @@ def create_graphql_router(
642
646
  last_updated_at=last_updated_at,
643
647
  event_queue=event_queue,
644
648
  data_loaders=DataLoaders(
649
+ annotation_configs_by_project=AnnotationConfigsByProjectDataLoader(db),
645
650
  average_experiment_run_latency=AverageExperimentRunLatencyDataLoader(db),
646
651
  dataset_example_revisions=DatasetExampleRevisionsDataLoader(db),
647
652
  dataset_example_spans=DatasetExampleSpansDataLoader(db),
@@ -847,6 +852,7 @@ def create_app(
847
852
  basic_auth_disabled: bool = False,
848
853
  bulk_inserter_factory: Optional[Callable[..., BulkInserter]] = None,
849
854
  allowed_origins: Optional[list[str]] = None,
855
+ management_url: Optional[str] = None,
850
856
  ) -> FastAPI:
851
857
  verify_server_environment_variables()
852
858
  if model.embedding_dimensions:
@@ -1026,6 +1032,7 @@ def create_app(
1026
1032
  basic_auth_disabled=basic_auth_disabled,
1027
1033
  auto_login_idp_name=auto_login_idp_name,
1028
1034
  fullstory_org=Settings.fullstory_org,
1035
+ management_url=management_url,
1029
1036
  ),
1030
1037
  ),
1031
1038
  name="static",