arize-phoenix 4.14.1__tar.gz → 4.15.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 (300) hide show
  1. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/PKG-INFO +4 -3
  2. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/pyproject.toml +15 -7
  3. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/db/bulk_inserter.py +2 -3
  4. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/db/engines.py +2 -1
  5. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/experiments/functions.py +3 -2
  6. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/context.py +7 -9
  7. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/dataloaders/__init__.py +2 -0
  8. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/dataloaders/average_experiment_run_latency.py +3 -3
  9. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/dataloaders/dataset_example_revisions.py +2 -4
  10. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/dataloaders/dataset_example_spans.py +2 -4
  11. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/dataloaders/document_evaluation_summaries.py +2 -4
  12. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/dataloaders/document_evaluations.py +2 -4
  13. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/dataloaders/document_retrieval_metrics.py +2 -4
  14. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/dataloaders/evaluation_summaries.py +2 -4
  15. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/dataloaders/experiment_annotation_summaries.py +2 -4
  16. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/dataloaders/experiment_error_rates.py +2 -4
  17. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/dataloaders/experiment_run_counts.py +2 -4
  18. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/dataloaders/experiment_sequence_number.py +2 -4
  19. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/dataloaders/latency_ms_quantile.py +2 -3
  20. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/dataloaders/min_start_or_max_end_times.py +2 -4
  21. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/dataloaders/project_by_name.py +3 -3
  22. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/dataloaders/record_counts.py +2 -4
  23. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/dataloaders/span_annotations.py +2 -4
  24. arize_phoenix-4.15.0/src/phoenix/server/api/dataloaders/span_dataset_examples.py +36 -0
  25. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/dataloaders/span_descendants.py +2 -4
  26. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/dataloaders/span_evaluations.py +2 -4
  27. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/dataloaders/span_projects.py +3 -3
  28. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/dataloaders/token_counts.py +2 -4
  29. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/dataloaders/trace_evaluations.py +2 -4
  30. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/dataloaders/trace_row_ids.py +2 -4
  31. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/mutations/span_annotations_mutations.py +8 -3
  32. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/mutations/trace_annotations_mutations.py +8 -3
  33. arize_phoenix-4.15.0/src/phoenix/server/api/openapi/main.py +22 -0
  34. arize_phoenix-4.15.0/src/phoenix/server/api/openapi/schema.py +16 -0
  35. arize_phoenix-4.15.0/src/phoenix/server/api/routers/v1/__init__.py +42 -0
  36. arize_phoenix-4.15.0/src/phoenix/server/api/routers/v1/datasets.py +1029 -0
  37. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/routers/v1/evaluations.py +75 -70
  38. arize_phoenix-4.15.0/src/phoenix/server/api/routers/v1/experiment_evaluations.py +113 -0
  39. arize_phoenix-4.15.0/src/phoenix/server/api/routers/v1/experiment_runs.py +160 -0
  40. arize_phoenix-4.15.0/src/phoenix/server/api/routers/v1/experiments.py +252 -0
  41. arize_phoenix-4.15.0/src/phoenix/server/api/routers/v1/pydantic_compat.py +78 -0
  42. arize_phoenix-4.15.0/src/phoenix/server/api/routers/v1/spans.py +246 -0
  43. arize_phoenix-4.15.0/src/phoenix/server/api/routers/v1/traces.py +215 -0
  44. arize_phoenix-4.15.0/src/phoenix/server/api/routers/v1/utils.py +95 -0
  45. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/types/Span.py +5 -0
  46. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/utils.py +4 -4
  47. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/app.py +170 -192
  48. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/grpc_server.py +2 -2
  49. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/main.py +5 -9
  50. arize_phoenix-4.15.0/src/phoenix/server/static/.vite/manifest.json +78 -0
  51. arize_phoenix-4.14.1/src/phoenix/server/static/assets/components-DeS0YEmv.js → arize_phoenix-4.15.0/src/phoenix/server/static/assets/components-kGgeFkHp.js +150 -110
  52. arize_phoenix-4.14.1/src/phoenix/server/static/assets/index-CQgXRwU0.js → arize_phoenix-4.15.0/src/phoenix/server/static/assets/index-BctFO6S7.js +2 -2
  53. arize_phoenix-4.14.1/src/phoenix/server/static/assets/pages-hdjlFZhO.js → arize_phoenix-4.15.0/src/phoenix/server/static/assets/pages-DabDCmVd.js +372 -272
  54. arize_phoenix-4.14.1/src/phoenix/server/static/assets/vendor-DPvSDRn3.js → arize_phoenix-4.15.0/src/phoenix/server/static/assets/vendor-CP0b0YG0.js +2 -2
  55. arize_phoenix-4.14.1/src/phoenix/server/static/assets/vendor-arizeai-CkvPT67c.js → arize_phoenix-4.15.0/src/phoenix/server/static/assets/vendor-arizeai-B5Hti8OB.js +27 -27
  56. arize_phoenix-4.15.0/src/phoenix/server/static/assets/vendor-codemirror-DtdPDzrv.js +15 -0
  57. arize_phoenix-4.14.1/src/phoenix/server/static/assets/vendor-recharts-5jlNaZuF.js → arize_phoenix-4.15.0/src/phoenix/server/static/assets/vendor-recharts-A0DA1O99.js +1 -1
  58. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/thread_server.py +2 -2
  59. arize_phoenix-4.15.0/src/phoenix/server/types.py +18 -0
  60. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/session/client.py +5 -3
  61. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/session/session.py +2 -2
  62. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/trace/fixtures.py +17 -23
  63. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/trace/utils.py +23 -0
  64. arize_phoenix-4.15.0/src/phoenix/utilities/client.py +116 -0
  65. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/utilities/project.py +1 -1
  66. arize_phoenix-4.15.0/src/phoenix/version.py +1 -0
  67. arize_phoenix-4.14.1/src/phoenix/server/api/openapi/main.py +0 -6
  68. arize_phoenix-4.14.1/src/phoenix/server/api/openapi/schema.py +0 -16
  69. arize_phoenix-4.14.1/src/phoenix/server/api/routers/v1/__init__.py +0 -89
  70. arize_phoenix-4.14.1/src/phoenix/server/api/routers/v1/dataset_examples.py +0 -178
  71. arize_phoenix-4.14.1/src/phoenix/server/api/routers/v1/datasets.py +0 -1023
  72. arize_phoenix-4.14.1/src/phoenix/server/api/routers/v1/experiment_evaluations.py +0 -136
  73. arize_phoenix-4.14.1/src/phoenix/server/api/routers/v1/experiment_runs.py +0 -217
  74. arize_phoenix-4.14.1/src/phoenix/server/api/routers/v1/experiments.py +0 -301
  75. arize_phoenix-4.14.1/src/phoenix/server/api/routers/v1/spans.py +0 -275
  76. arize_phoenix-4.14.1/src/phoenix/server/api/routers/v1/traces.py +0 -228
  77. arize_phoenix-4.14.1/src/phoenix/server/openapi/docs.py +0 -221
  78. arize_phoenix-4.14.1/src/phoenix/server/static/.vite/manifest.json +0 -78
  79. arize_phoenix-4.14.1/src/phoenix/server/static/assets/vendor-codemirror-Cqwpwlua.js +0 -12
  80. arize_phoenix-4.14.1/src/phoenix/version.py +0 -1
  81. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/.gitignore +0 -0
  82. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/IP_NOTICE +0 -0
  83. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/LICENSE +0 -0
  84. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/README.md +0 -0
  85. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/examples/manually-instrumented-chatbot/chat-service/chat/__init__.py +0 -0
  86. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/examples/manually-instrumented-chatbot/chat-service/chat/app.py +0 -0
  87. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/examples/manually-instrumented-chatbot/chat-service/chat/types.py +0 -0
  88. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/examples/manually-instrumented-chatbot/frontend/Dockerfile +0 -0
  89. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/examples/manually-instrumented-chatbot/frontend/Makefile +0 -0
  90. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/examples/manually-instrumented-chatbot/frontend/__init__.py +0 -0
  91. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/examples/manually-instrumented-chatbot/frontend/pyproject.toml +0 -0
  92. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/examples/manually-instrumented-chatbot/frontend/requirements.txt +0 -0
  93. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/examples/manually-instrumented-chatbot/frontend/schema.json +0 -0
  94. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/__init__.py +0 -0
  95. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/config.py +0 -0
  96. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/core/__init__.py +0 -0
  97. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/core/embedding_dimension.py +0 -0
  98. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/core/model.py +0 -0
  99. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/core/model_schema.py +0 -0
  100. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/core/model_schema_adapter.py +0 -0
  101. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/datetime_utils.py +0 -0
  102. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/db/README.md +0 -0
  103. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/db/__init__.py +0 -0
  104. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/db/alembic.ini +0 -0
  105. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/db/helpers.py +0 -0
  106. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/db/insertion/__init__.py +0 -0
  107. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/db/insertion/dataset.py +0 -0
  108. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/db/insertion/evaluation.py +0 -0
  109. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/db/insertion/helpers.py +0 -0
  110. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/db/insertion/span.py +0 -0
  111. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/db/migrate.py +0 -0
  112. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/db/migrations/__init__.py +0 -0
  113. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/db/migrations/env.py +0 -0
  114. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/db/migrations/script.py.mako +0 -0
  115. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/db/migrations/types.py +0 -0
  116. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/db/migrations/versions/10460e46d750_datasets.py +0 -0
  117. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/db/migrations/versions/cf03bd6bae1d_init.py +0 -0
  118. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/db/models.py +0 -0
  119. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/exceptions.py +0 -0
  120. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/experiments/__init__.py +0 -0
  121. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/experiments/evaluators/__init__.py +0 -0
  122. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/experiments/evaluators/base.py +0 -0
  123. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/experiments/evaluators/code_evaluators.py +0 -0
  124. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/experiments/evaluators/llm_evaluators.py +0 -0
  125. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/experiments/evaluators/utils.py +0 -0
  126. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/experiments/tracing.py +0 -0
  127. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/experiments/types.py +0 -0
  128. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/experiments/utils.py +0 -0
  129. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/inferences/__init__.py +0 -0
  130. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/inferences/errors.py +0 -0
  131. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/inferences/fixtures.py +0 -0
  132. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/inferences/inferences.py +0 -0
  133. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/inferences/schema.py +0 -0
  134. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/inferences/validation.py +0 -0
  135. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/metrics/README.md +0 -0
  136. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/metrics/__init__.py +0 -0
  137. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/metrics/binning.py +0 -0
  138. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/metrics/metrics.py +0 -0
  139. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/metrics/mixins.py +0 -0
  140. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/metrics/retrieval_metrics.py +0 -0
  141. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/metrics/timeseries.py +0 -0
  142. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/metrics/wrappers.py +0 -0
  143. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/pointcloud/__init__.py +0 -0
  144. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/pointcloud/clustering.py +0 -0
  145. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/pointcloud/pointcloud.py +0 -0
  146. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/pointcloud/projectors.py +0 -0
  147. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/pointcloud/umap_parameters.py +0 -0
  148. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/py.typed +0 -0
  149. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/__init__.py +0 -0
  150. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/__init__.py +0 -0
  151. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/dataloaders/cache/__init__.py +0 -0
  152. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/dataloaders/cache/two_tier_cache.py +0 -0
  153. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/helpers/__init__.py +0 -0
  154. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/helpers/dataset_helpers.py +0 -0
  155. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/input_types/AddExamplesToDatasetInput.py +0 -0
  156. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/input_types/AddSpansToDatasetInput.py +0 -0
  157. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/input_types/ClearProjectInput.py +0 -0
  158. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/input_types/ClusterInput.py +0 -0
  159. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/input_types/Coordinates.py +0 -0
  160. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/input_types/CreateDatasetInput.py +0 -0
  161. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/input_types/CreateSpanAnnotationInput.py +0 -0
  162. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/input_types/CreateTraceAnnotationInput.py +0 -0
  163. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/input_types/DataQualityMetricInput.py +0 -0
  164. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/input_types/DatasetExampleInput.py +0 -0
  165. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/input_types/DatasetSort.py +0 -0
  166. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/input_types/DatasetVersionSort.py +0 -0
  167. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/input_types/DeleteAnnotationsInput.py +0 -0
  168. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/input_types/DeleteDatasetExamplesInput.py +0 -0
  169. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/input_types/DeleteDatasetInput.py +0 -0
  170. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/input_types/DeleteExperimentsInput.py +0 -0
  171. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/input_types/DimensionFilter.py +0 -0
  172. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/input_types/DimensionInput.py +0 -0
  173. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/input_types/Granularity.py +0 -0
  174. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/input_types/PatchAnnotationInput.py +0 -0
  175. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/input_types/PatchDatasetExamplesInput.py +0 -0
  176. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/input_types/PatchDatasetInput.py +0 -0
  177. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/input_types/PerformanceMetricInput.py +0 -0
  178. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/input_types/SpanSort.py +0 -0
  179. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/input_types/TimeRange.py +0 -0
  180. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/input_types/__init__.py +0 -0
  181. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/interceptor.py +0 -0
  182. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/mutations/__init__.py +0 -0
  183. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/mutations/auth.py +0 -0
  184. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/mutations/dataset_mutations.py +0 -0
  185. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/mutations/experiment_mutations.py +0 -0
  186. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/mutations/export_events_mutations.py +0 -0
  187. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/mutations/project_mutations.py +0 -0
  188. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/openapi/__init__.py +0 -0
  189. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/queries.py +0 -0
  190. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/routers/__init__.py +0 -0
  191. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/routers/utils.py +0 -0
  192. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/schema.py +0 -0
  193. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/types/Annotation.py +0 -0
  194. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/types/AnnotatorKind.py +0 -0
  195. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/types/Cluster.py +0 -0
  196. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/types/CreateDatasetPayload.py +0 -0
  197. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/types/DataQualityMetric.py +0 -0
  198. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/types/Dataset.py +0 -0
  199. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/types/DatasetExample.py +0 -0
  200. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/types/DatasetExampleRevision.py +0 -0
  201. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/types/DatasetValues.py +0 -0
  202. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/types/DatasetVersion.py +0 -0
  203. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/types/Dimension.py +0 -0
  204. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/types/DimensionDataType.py +0 -0
  205. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/types/DimensionShape.py +0 -0
  206. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/types/DimensionType.py +0 -0
  207. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/types/DimensionWithValue.py +0 -0
  208. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/types/DocumentEvaluationSummary.py +0 -0
  209. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/types/DocumentRetrievalMetrics.py +0 -0
  210. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/types/EmbeddingDimension.py +0 -0
  211. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/types/EmbeddingMetadata.py +0 -0
  212. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/types/Evaluation.py +0 -0
  213. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/types/EvaluationSummary.py +0 -0
  214. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/types/Event.py +0 -0
  215. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/types/EventMetadata.py +0 -0
  216. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/types/ExampleRevisionInterface.py +0 -0
  217. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/types/Experiment.py +0 -0
  218. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/types/ExperimentAnnotationSummary.py +0 -0
  219. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/types/ExperimentComparison.py +0 -0
  220. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/types/ExperimentRun.py +0 -0
  221. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/types/ExperimentRunAnnotation.py +0 -0
  222. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/types/ExportedFile.py +0 -0
  223. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/types/Functionality.py +0 -0
  224. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/types/Inferences.py +0 -0
  225. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/types/InferencesRole.py +0 -0
  226. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/types/MimeType.py +0 -0
  227. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/types/Model.py +0 -0
  228. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/types/NumericRange.py +0 -0
  229. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/types/PerformanceMetric.py +0 -0
  230. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/types/Project.py +0 -0
  231. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/types/PromptResponse.py +0 -0
  232. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/types/Retrieval.py +0 -0
  233. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/types/ScalarDriftMetricEnum.py +0 -0
  234. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/types/Segments.py +0 -0
  235. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/types/SortDir.py +0 -0
  236. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/types/SpanAnnotation.py +0 -0
  237. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/types/TimeSeries.py +0 -0
  238. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/types/Trace.py +0 -0
  239. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/types/TraceAnnotation.py +0 -0
  240. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/types/UMAPPoints.py +0 -0
  241. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/types/ValidationResult.py +0 -0
  242. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/types/VectorDriftMetricEnum.py +0 -0
  243. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/types/__init__.py +0 -0
  244. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/types/node.py +0 -0
  245. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/api/types/pagination.py +0 -0
  246. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/openapi/__init__.py +0 -0
  247. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/prometheus.py +0 -0
  248. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/static/apple-touch-icon-114x114.png +0 -0
  249. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/static/apple-touch-icon-120x120.png +0 -0
  250. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/static/apple-touch-icon-144x144.png +0 -0
  251. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/static/apple-touch-icon-152x152.png +0 -0
  252. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/static/apple-touch-icon-180x180.png +0 -0
  253. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/static/apple-touch-icon-72x72.png +0 -0
  254. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/static/apple-touch-icon-76x76.png +0 -0
  255. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/static/apple-touch-icon.png +0 -0
  256. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/static/assets/vendor-DxkFTwjz.css +0 -0
  257. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/static/assets/vendor-three-DwGkEfCM.js +0 -0
  258. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/static/favicon.ico +0 -0
  259. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/static/modernizr.js +0 -0
  260. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/telemetry.py +0 -0
  261. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/templates/__init__.py +0 -0
  262. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/server/templates/index.html +0 -0
  263. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/services.py +0 -0
  264. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/session/__init__.py +0 -0
  265. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/session/data_extractor.py +0 -0
  266. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/session/evaluation.py +0 -0
  267. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/settings.py +0 -0
  268. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/trace/__init__.py +0 -0
  269. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/trace/attributes.py +0 -0
  270. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/trace/dsl/README.md +0 -0
  271. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/trace/dsl/__init__.py +0 -0
  272. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/trace/dsl/filter.py +0 -0
  273. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/trace/dsl/helpers.py +0 -0
  274. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/trace/dsl/query.py +0 -0
  275. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/trace/errors.py +0 -0
  276. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/trace/evaluation_conventions.py +0 -0
  277. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/trace/exporter.py +0 -0
  278. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/trace/langchain/__init__.py +0 -0
  279. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/trace/langchain/instrumentor.py +0 -0
  280. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/trace/llama_index/__init__.py +0 -0
  281. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/trace/llama_index/callback.py +0 -0
  282. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/trace/openai/__init__.py +0 -0
  283. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/trace/openai/instrumentor.py +0 -0
  284. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/trace/otel.py +0 -0
  285. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/trace/projects.py +0 -0
  286. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/trace/schemas.py +0 -0
  287. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/trace/span_evaluations.py +0 -0
  288. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/trace/span_json_decoder.py +0 -0
  289. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/trace/span_json_encoder.py +0 -0
  290. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/trace/trace_dataset.py +0 -0
  291. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/trace/v1/__init__.py +0 -0
  292. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/trace/v1/evaluation_pb2.py +0 -0
  293. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/trace/v1/evaluation_pb2.pyi +0 -0
  294. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/utilities/__init__.py +0 -0
  295. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/utilities/deprecation.py +0 -0
  296. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/utilities/error_handling.py +0 -0
  297. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/utilities/json.py +0 -0
  298. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/utilities/logging.py +0 -0
  299. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/utilities/re.py +0 -0
  300. {arize_phoenix-4.14.1 → arize_phoenix-4.15.0}/src/phoenix/utilities/span_store.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: arize-phoenix
3
- Version: 4.14.1
3
+ Version: 4.15.0
4
4
  Summary: AI Observability and Evaluation
5
5
  Project-URL: Documentation, https://docs.arize.com/phoenix/
6
6
  Project-URL: Issues, https://github.com/Arize-ai/phoenix/issues
@@ -22,6 +22,7 @@ Requires-Dist: aiosqlite
22
22
  Requires-Dist: alembic<2,>=1.3.0
23
23
  Requires-Dist: arize-phoenix-evals>=0.13.1
24
24
  Requires-Dist: cachetools
25
+ Requires-Dist: fastapi
25
26
  Requires-Dist: grpcio
26
27
  Requires-Dist: hdbscan>=0.8.33
27
28
  Requires-Dist: httpx
@@ -40,8 +41,8 @@ Requires-Dist: pandas>=1.0
40
41
  Requires-Dist: protobuf<6.0,>=3.20
41
42
  Requires-Dist: psutil
42
43
  Requires-Dist: pyarrow
44
+ Requires-Dist: pydantic!=2.0.*,<3,>=1.0
43
45
  Requires-Dist: python-multipart
44
- Requires-Dist: pyyaml
45
46
  Requires-Dist: scikit-learn
46
47
  Requires-Dist: scipy
47
48
  Requires-Dist: sqlalchemy[asyncio]<3,>=2.0.4
@@ -56,9 +57,9 @@ Requires-Dist: uvicorn
56
57
  Requires-Dist: wrapt
57
58
  Provides-Extra: container
58
59
  Requires-Dist: opentelemetry-exporter-otlp; extra == 'container'
60
+ Requires-Dist: opentelemetry-instrumentation-fastapi; extra == 'container'
59
61
  Requires-Dist: opentelemetry-instrumentation-grpc; extra == 'container'
60
62
  Requires-Dist: opentelemetry-instrumentation-sqlalchemy; extra == 'container'
61
- Requires-Dist: opentelemetry-instrumentation-starlette; extra == 'container'
62
63
  Requires-Dist: opentelemetry-proto>=1.12.0; extra == 'container'
63
64
  Requires-Dist: opentelemetry-sdk; extra == 'container'
64
65
  Requires-Dist: opentelemetry-semantic-conventions; extra == 'container'
@@ -59,7 +59,8 @@ dependencies = [
59
59
  "cachetools",
60
60
  "python-multipart", # see https://www.starlette.io/#dependencies
61
61
  "arize-phoenix-evals>=0.13.1",
62
- "pyyaml", # for OpenAPI
62
+ "fastapi",
63
+ "pydantic>=1.0,!=2.0.*,<3,", # exclude 2.0.* since it does not support the `json_encoders` configuration setting
63
64
  ]
64
65
  dynamic = ["version"]
65
66
 
@@ -111,7 +112,7 @@ container = [
111
112
  "opentelemetry-proto>=1.12.0",
112
113
  "opentelemetry-exporter-otlp",
113
114
  "opentelemetry-semantic-conventions",
114
- "opentelemetry-instrumentation-starlette",
115
+ "opentelemetry-instrumentation-fastapi",
115
116
  "opentelemetry-instrumentation-sqlalchemy",
116
117
  "opentelemetry-instrumentation-grpc",
117
118
  "py-grpc-prometheus",
@@ -161,8 +162,10 @@ dependencies = [
161
162
  "protobuf==3.20", # version minimum (for tests)
162
163
  "responses",
163
164
  "tiktoken",
164
- "typing-extensions==4.5.0; python_version<'3.12'",
165
- "typing-extensions==4.6.0; python_version>='3.12'",
165
+ "typing-extensions==4.5.0; python_version=='3.8'",
166
+ "typing-extensions==4.6.0; python_version=='3.9'",
167
+ "pydantic==1.9.0; python_version<='3.9'", # minimum version of pydantic compatible with openai
168
+ "pydantic==2.8.2; python_version=='3.12'",
166
169
  "httpx", # For OpenAI testing
167
170
  "respx", # For OpenAI testing
168
171
  "nest-asyncio", # for executor testing
@@ -190,12 +193,15 @@ dependencies = [
190
193
  "opentelemetry-proto>=1.12.0",
191
194
  "opentelemetry-exporter-otlp",
192
195
  "opentelemetry-semantic-conventions",
193
- "opentelemetry-instrumentation-starlette",
196
+ "opentelemetry-instrumentation-fastapi",
194
197
  "opentelemetry-instrumentation-sqlalchemy",
195
198
  "opentelemetry-instrumentation-grpc",
196
199
  "py-grpc-prometheus",
197
200
  "strawberry-graphql[opentelemetry]==0.236.0", # need to pin version because we're monkey-patching
198
201
  "requests", # this is needed to type-check third-party packages
202
+ "pydantic==1.10.17; python_version=='3.8'", # lower minor versions of pydantic break strawberry mypy plugin
203
+ "pydantic==1.10.17; python_version=='3.9'", # lower minor versions of pydantic break strawberry mypy plugin
204
+ "pydantic==2.8.2; python_version=='3.12'",
199
205
  ]
200
206
 
201
207
  [[tool.hatch.envs.type.matrix]]
@@ -310,11 +316,12 @@ build = 'strawberry export-schema phoenix.server.api.schema:schema > app/schema.
310
316
 
311
317
  [tool.hatch.envs.openapi]
312
318
  dependencies = [
313
- "pyyaml",
319
+ "pydantic==2.8.2",
320
+ "fastapi==0.111.0",
314
321
  ]
315
322
 
316
323
  [tool.hatch.envs.openapi.scripts]
317
- build = 'python -m phoenix.server.api.openapi.main > schemas/openapi.yaml'
324
+ build = "python -m phoenix.server.api.openapi.main > schemas/openapi.json"
318
325
 
319
326
  [tool.hatch.envs.proto]
320
327
  detached = true
@@ -379,6 +386,7 @@ module = [
379
386
  "sqlean",
380
387
  "grpc.*",
381
388
  "py_grpc_prometheus.*",
389
+ "orjson", # suppress fastapi internal type errors
382
390
  ]
383
391
  ignore_missing_imports = true
384
392
 
@@ -7,7 +7,6 @@ from itertools import islice
7
7
  from time import perf_counter
8
8
  from typing import (
9
9
  Any,
10
- AsyncContextManager,
11
10
  Awaitable,
12
11
  Callable,
13
12
  Iterable,
@@ -19,7 +18,6 @@ from typing import (
19
18
  )
20
19
 
21
20
  from cachetools import LRUCache
22
- from sqlalchemy.ext.asyncio import AsyncSession
23
21
  from typing_extensions import TypeAlias
24
22
 
25
23
  import phoenix.trace.v1 as pb
@@ -31,6 +29,7 @@ from phoenix.db.insertion.evaluation import (
31
29
  from phoenix.db.insertion.helpers import DataManipulation, DataManipulationEvent
32
30
  from phoenix.db.insertion.span import SpanInsertionEvent, insert_span
33
31
  from phoenix.server.api.dataloaders import CacheForDataLoaders
32
+ from phoenix.server.types import DbSessionFactory
34
33
  from phoenix.trace.schemas import Span
35
34
 
36
35
  logger = logging.getLogger(__name__)
@@ -46,7 +45,7 @@ class TransactionResult:
46
45
  class BulkInserter:
47
46
  def __init__(
48
47
  self,
49
- db: Callable[[], AsyncContextManager[AsyncSession]],
48
+ db: DbSessionFactory,
50
49
  *,
51
50
  cache_for_dataloaders: Optional[CacheForDataLoaders] = None,
52
51
  initial_batch_of_operations: Iterable[DataManipulation] = (),
@@ -8,7 +8,7 @@ from typing import Any
8
8
  import aiosqlite
9
9
  import numpy as np
10
10
  import sqlean
11
- from sqlalchemy import URL, event, make_url
11
+ from sqlalchemy import URL, StaticPool, event, make_url
12
12
  from sqlalchemy.ext.asyncio import AsyncEngine, create_async_engine
13
13
  from typing_extensions import assert_never
14
14
 
@@ -105,6 +105,7 @@ def aio_sqlite_engine(
105
105
  echo=echo,
106
106
  json_serializer=_dumps,
107
107
  async_creator=async_creator,
108
+ poolclass=StaticPool,
108
109
  )
109
110
  event.listen(engine.sync_engine, "connect", set_sqlite_pragma)
110
111
  if not migrate:
@@ -72,15 +72,16 @@ from phoenix.experiments.types import (
72
72
  )
73
73
  from phoenix.experiments.utils import get_dataset_experiments_url, get_experiment_url, get_func_name
74
74
  from phoenix.trace.attributes import flatten
75
+ from phoenix.utilities.client import VersionedAsyncClient, VersionedClient
75
76
  from phoenix.utilities.json import jsonify
76
77
 
77
78
 
78
79
  def _phoenix_clients() -> Tuple[httpx.Client, httpx.AsyncClient]:
79
80
  headers = get_env_client_headers()
80
- return httpx.Client(
81
+ return VersionedClient(
81
82
  base_url=get_base_url(),
82
83
  headers=headers,
83
- ), httpx.AsyncClient(
84
+ ), VersionedAsyncClient(
84
85
  base_url=get_base_url(),
85
86
  headers=headers,
86
87
  )
@@ -1,12 +1,9 @@
1
1
  from dataclasses import dataclass
2
2
  from datetime import datetime
3
3
  from pathlib import Path
4
- from typing import AsyncContextManager, Callable, Optional, Union
4
+ from typing import Callable, Optional
5
5
 
6
- from sqlalchemy.ext.asyncio import AsyncSession
7
- from starlette.requests import Request
8
- from starlette.responses import Response
9
- from starlette.websockets import WebSocket
6
+ from strawberry.fastapi import BaseContext
10
7
  from typing_extensions import TypeAlias
11
8
 
12
9
  from phoenix.core.model_schema import Model
@@ -28,6 +25,7 @@ from phoenix.server.api.dataloaders import (
28
25
  ProjectByNameDataLoader,
29
26
  RecordCountDataLoader,
30
27
  SpanAnnotationsDataLoader,
28
+ SpanDatasetExamplesDataLoader,
31
29
  SpanDescendantsDataLoader,
32
30
  SpanEvaluationsDataLoader,
33
31
  SpanProjectsDataLoader,
@@ -35,6 +33,7 @@ from phoenix.server.api.dataloaders import (
35
33
  TraceEvaluationsDataLoader,
36
34
  TraceRowIdsDataLoader,
37
35
  )
36
+ from phoenix.server.types import DbSessionFactory
38
37
 
39
38
 
40
39
  @dataclass
@@ -53,6 +52,7 @@ class DataLoaders:
53
52
  latency_ms_quantile: LatencyMsQuantileDataLoader
54
53
  min_start_or_max_end_times: MinStartOrMaxEndTimeDataLoader
55
54
  record_counts: RecordCountDataLoader
55
+ span_dataset_examples: SpanDatasetExamplesDataLoader
56
56
  span_descendants: SpanDescendantsDataLoader
57
57
  span_evaluations: SpanEvaluationsDataLoader
58
58
  span_projects: SpanProjectsDataLoader
@@ -67,10 +67,8 @@ ProjectRowId: TypeAlias = int
67
67
 
68
68
 
69
69
  @dataclass
70
- class Context:
71
- request: Union[Request, WebSocket]
72
- response: Optional[Response]
73
- db: Callable[[], AsyncContextManager[AsyncSession]]
70
+ class Context(BaseContext):
71
+ db: DbSessionFactory
74
72
  data_loaders: DataLoaders
75
73
  cache_for_dataloaders: Optional[CacheForDataLoaders]
76
74
  model: Model
@@ -27,6 +27,7 @@ from .min_start_or_max_end_times import MinStartOrMaxEndTimeCache, MinStartOrMax
27
27
  from .project_by_name import ProjectByNameDataLoader
28
28
  from .record_counts import RecordCountCache, RecordCountDataLoader
29
29
  from .span_annotations import SpanAnnotationsDataLoader
30
+ from .span_dataset_examples import SpanDatasetExamplesDataLoader
30
31
  from .span_descendants import SpanDescendantsDataLoader
31
32
  from .span_evaluations import SpanEvaluationsDataLoader
32
33
  from .span_projects import SpanProjectsDataLoader
@@ -50,6 +51,7 @@ __all__ = [
50
51
  "LatencyMsQuantileDataLoader",
51
52
  "MinStartOrMaxEndTimeDataLoader",
52
53
  "RecordCountDataLoader",
54
+ "SpanDatasetExamplesDataLoader",
53
55
  "SpanDescendantsDataLoader",
54
56
  "SpanEvaluationsDataLoader",
55
57
  "SpanProjectsDataLoader",
@@ -1,11 +1,11 @@
1
- from typing import AsyncContextManager, Callable, List, Optional
1
+ from typing import List, Optional
2
2
 
3
3
  from sqlalchemy import func, select
4
- from sqlalchemy.ext.asyncio import AsyncSession
5
4
  from strawberry.dataloader import DataLoader
6
5
  from typing_extensions import TypeAlias
7
6
 
8
7
  from phoenix.db import models
8
+ from phoenix.server.types import DbSessionFactory
9
9
 
10
10
  ExperimentID: TypeAlias = int
11
11
  RunLatency: TypeAlias = Optional[float]
@@ -16,7 +16,7 @@ Result: TypeAlias = RunLatency
16
16
  class AverageExperimentRunLatencyDataLoader(DataLoader[Key, Result]):
17
17
  def __init__(
18
18
  self,
19
- db: Callable[[], AsyncContextManager[AsyncSession]],
19
+ db: DbSessionFactory,
20
20
  ) -> None:
21
21
  super().__init__(load_fn=self._load_fn)
22
22
  self._db = db
@@ -1,6 +1,4 @@
1
1
  from typing import (
2
- AsyncContextManager,
3
- Callable,
4
2
  List,
5
3
  Optional,
6
4
  Tuple,
@@ -8,12 +6,12 @@ from typing import (
8
6
  )
9
7
 
10
8
  from sqlalchemy import Integer, case, func, literal, or_, select, union
11
- from sqlalchemy.ext.asyncio import AsyncSession
12
9
  from strawberry.dataloader import DataLoader
13
10
  from typing_extensions import TypeAlias
14
11
 
15
12
  from phoenix.db import models
16
13
  from phoenix.server.api.types.DatasetExampleRevision import DatasetExampleRevision
14
+ from phoenix.server.types import DbSessionFactory
17
15
 
18
16
  ExampleID: TypeAlias = int
19
17
  VersionID: TypeAlias = Optional[int]
@@ -22,7 +20,7 @@ Result: TypeAlias = DatasetExampleRevision
22
20
 
23
21
 
24
22
  class DatasetExampleRevisionsDataLoader(DataLoader[Key, Result]):
25
- def __init__(self, db: Callable[[], AsyncContextManager[AsyncSession]]) -> None:
23
+ def __init__(self, db: DbSessionFactory) -> None:
26
24
  super().__init__(load_fn=self._load_fn)
27
25
  self._db = db
28
26
 
@@ -1,17 +1,15 @@
1
1
  from typing import (
2
- AsyncContextManager,
3
- Callable,
4
2
  List,
5
3
  Optional,
6
4
  )
7
5
 
8
6
  from sqlalchemy import select
9
- from sqlalchemy.ext.asyncio import AsyncSession
10
7
  from sqlalchemy.orm import joinedload
11
8
  from strawberry.dataloader import DataLoader
12
9
  from typing_extensions import TypeAlias
13
10
 
14
11
  from phoenix.db import models
12
+ from phoenix.server.types import DbSessionFactory
15
13
 
16
14
  ExampleID: TypeAlias = int
17
15
  Key: TypeAlias = ExampleID
@@ -19,7 +17,7 @@ Result: TypeAlias = Optional[models.Span]
19
17
 
20
18
 
21
19
  class DatasetExampleSpansDataLoader(DataLoader[Key, Result]):
22
- def __init__(self, db: Callable[[], AsyncContextManager[AsyncSession]]) -> None:
20
+ def __init__(self, db: DbSessionFactory) -> None:
23
21
  super().__init__(load_fn=self._load_fn)
24
22
  self._db = db
25
23
 
@@ -2,8 +2,6 @@ from collections import defaultdict
2
2
  from datetime import datetime
3
3
  from typing import (
4
4
  Any,
5
- AsyncContextManager,
6
- Callable,
7
5
  DefaultDict,
8
6
  List,
9
7
  Optional,
@@ -14,7 +12,6 @@ import numpy as np
14
12
  from aioitertools.itertools import groupby
15
13
  from cachetools import LFUCache, TTLCache
16
14
  from sqlalchemy import Select, select
17
- from sqlalchemy.ext.asyncio import AsyncSession
18
15
  from strawberry.dataloader import AbstractCache, DataLoader
19
16
  from typing_extensions import TypeAlias
20
17
 
@@ -24,6 +21,7 @@ from phoenix.metrics.retrieval_metrics import RetrievalMetrics
24
21
  from phoenix.server.api.dataloaders.cache import TwoTierCache
25
22
  from phoenix.server.api.input_types.TimeRange import TimeRange
26
23
  from phoenix.server.api.types.DocumentEvaluationSummary import DocumentEvaluationSummary
24
+ from phoenix.server.types import DbSessionFactory
27
25
  from phoenix.trace.dsl import SpanFilter
28
26
 
29
27
  ProjectRowId: TypeAlias = int
@@ -77,7 +75,7 @@ class DocumentEvaluationSummaryCache(
77
75
  class DocumentEvaluationSummaryDataLoader(DataLoader[Key, Result]):
78
76
  def __init__(
79
77
  self,
80
- db: Callable[[], AsyncContextManager[AsyncSession]],
78
+ db: DbSessionFactory,
81
79
  cache_map: Optional[AbstractCache[Key, Result]] = None,
82
80
  ) -> None:
83
81
  super().__init__(
@@ -1,25 +1,23 @@
1
1
  from collections import defaultdict
2
2
  from typing import (
3
- AsyncContextManager,
4
- Callable,
5
3
  DefaultDict,
6
4
  List,
7
5
  )
8
6
 
9
7
  from sqlalchemy import select
10
- from sqlalchemy.ext.asyncio import AsyncSession
11
8
  from strawberry.dataloader import DataLoader
12
9
  from typing_extensions import TypeAlias
13
10
 
14
11
  from phoenix.db import models
15
12
  from phoenix.server.api.types.Evaluation import DocumentEvaluation
13
+ from phoenix.server.types import DbSessionFactory
16
14
 
17
15
  Key: TypeAlias = int
18
16
  Result: TypeAlias = List[DocumentEvaluation]
19
17
 
20
18
 
21
19
  class DocumentEvaluationsDataLoader(DataLoader[Key, Result]):
22
- def __init__(self, db: Callable[[], AsyncContextManager[AsyncSession]]) -> None:
20
+ def __init__(self, db: DbSessionFactory) -> None:
23
21
  super().__init__(load_fn=self._load_fn)
24
22
  self._db = db
25
23
 
@@ -1,7 +1,5 @@
1
1
  from collections import defaultdict
2
2
  from typing import (
3
- AsyncContextManager,
4
- Callable,
5
3
  DefaultDict,
6
4
  Dict,
7
5
  List,
@@ -13,13 +11,13 @@ from typing import (
13
11
  import numpy as np
14
12
  from aioitertools.itertools import groupby
15
13
  from sqlalchemy import select
16
- from sqlalchemy.ext.asyncio import AsyncSession
17
14
  from strawberry.dataloader import DataLoader
18
15
  from typing_extensions import TypeAlias
19
16
 
20
17
  from phoenix.db import models
21
18
  from phoenix.metrics.retrieval_metrics import RetrievalMetrics
22
19
  from phoenix.server.api.types.DocumentRetrievalMetrics import DocumentRetrievalMetrics
20
+ from phoenix.server.types import DbSessionFactory
23
21
 
24
22
  RowId: TypeAlias = int
25
23
  NumDocs: TypeAlias = int
@@ -30,7 +28,7 @@ Result: TypeAlias = List[DocumentRetrievalMetrics]
30
28
 
31
29
 
32
30
  class DocumentRetrievalMetricsDataLoader(DataLoader[Key, Result]):
33
- def __init__(self, db: Callable[[], AsyncContextManager[AsyncSession]]) -> None:
31
+ def __init__(self, db: DbSessionFactory) -> None:
34
32
  super().__init__(load_fn=self._load_fn)
35
33
  self._db = db
36
34
 
@@ -2,8 +2,6 @@ from collections import defaultdict
2
2
  from datetime import datetime
3
3
  from typing import (
4
4
  Any,
5
- AsyncContextManager,
6
- Callable,
7
5
  DefaultDict,
8
6
  List,
9
7
  Literal,
@@ -15,7 +13,6 @@ import pandas as pd
15
13
  from aioitertools.itertools import groupby
16
14
  from cachetools import LFUCache, TTLCache
17
15
  from sqlalchemy import Select, func, or_, select
18
- from sqlalchemy.ext.asyncio import AsyncSession
19
16
  from strawberry.dataloader import AbstractCache, DataLoader
20
17
  from typing_extensions import TypeAlias, assert_never
21
18
 
@@ -23,6 +20,7 @@ from phoenix.db import models
23
20
  from phoenix.server.api.dataloaders.cache import TwoTierCache
24
21
  from phoenix.server.api.input_types.TimeRange import TimeRange
25
22
  from phoenix.server.api.types.EvaluationSummary import EvaluationSummary
23
+ from phoenix.server.types import DbSessionFactory
26
24
  from phoenix.trace.dsl import SpanFilter
27
25
 
28
26
  Kind: TypeAlias = Literal["span", "trace"]
@@ -77,7 +75,7 @@ class EvaluationSummaryCache(
77
75
  class EvaluationSummaryDataLoader(DataLoader[Key, Result]):
78
76
  def __init__(
79
77
  self,
80
- db: Callable[[], AsyncContextManager[AsyncSession]],
78
+ db: DbSessionFactory,
81
79
  cache_map: Optional[AbstractCache[Key, Result]] = None,
82
80
  ) -> None:
83
81
  super().__init__(
@@ -1,19 +1,17 @@
1
1
  from collections import defaultdict
2
2
  from dataclasses import dataclass
3
3
  from typing import (
4
- AsyncContextManager,
5
- Callable,
6
4
  DefaultDict,
7
5
  List,
8
6
  Optional,
9
7
  )
10
8
 
11
9
  from sqlalchemy import func, select
12
- from sqlalchemy.ext.asyncio import AsyncSession
13
10
  from strawberry.dataloader import AbstractCache, DataLoader
14
11
  from typing_extensions import TypeAlias
15
12
 
16
13
  from phoenix.db import models
14
+ from phoenix.server.types import DbSessionFactory
17
15
 
18
16
 
19
17
  @dataclass
@@ -34,7 +32,7 @@ Result: TypeAlias = List[ExperimentAnnotationSummary]
34
32
  class ExperimentAnnotationSummaryDataLoader(DataLoader[Key, Result]):
35
33
  def __init__(
36
34
  self,
37
- db: Callable[[], AsyncContextManager[AsyncSession]],
35
+ db: DbSessionFactory,
38
36
  cache_map: Optional[AbstractCache[Key, Result]] = None,
39
37
  ) -> None:
40
38
  super().__init__(load_fn=self._load_fn)
@@ -1,16 +1,14 @@
1
1
  from typing import (
2
- AsyncContextManager,
3
- Callable,
4
2
  List,
5
3
  Optional,
6
4
  )
7
5
 
8
6
  from sqlalchemy import case, func, select
9
- from sqlalchemy.ext.asyncio import AsyncSession
10
7
  from strawberry.dataloader import DataLoader
11
8
  from typing_extensions import TypeAlias
12
9
 
13
10
  from phoenix.db import models
11
+ from phoenix.server.types import DbSessionFactory
14
12
 
15
13
  ExperimentID: TypeAlias = int
16
14
  ErrorRate: TypeAlias = float
@@ -21,7 +19,7 @@ Result: TypeAlias = Optional[ErrorRate]
21
19
  class ExperimentErrorRatesDataLoader(DataLoader[Key, Result]):
22
20
  def __init__(
23
21
  self,
24
- db: Callable[[], AsyncContextManager[AsyncSession]],
22
+ db: DbSessionFactory,
25
23
  ) -> None:
26
24
  super().__init__(load_fn=self._load_fn)
27
25
  self._db = db
@@ -1,15 +1,13 @@
1
1
  from typing import (
2
- AsyncContextManager,
3
- Callable,
4
2
  List,
5
3
  )
6
4
 
7
5
  from sqlalchemy import func, select
8
- from sqlalchemy.ext.asyncio import AsyncSession
9
6
  from strawberry.dataloader import DataLoader
10
7
  from typing_extensions import TypeAlias
11
8
 
12
9
  from phoenix.db import models
10
+ from phoenix.server.types import DbSessionFactory
13
11
 
14
12
  ExperimentID: TypeAlias = int
15
13
  RunCount: TypeAlias = int
@@ -20,7 +18,7 @@ Result: TypeAlias = RunCount
20
18
  class ExperimentRunCountsDataLoader(DataLoader[Key, Result]):
21
19
  def __init__(
22
20
  self,
23
- db: Callable[[], AsyncContextManager[AsyncSession]],
21
+ db: DbSessionFactory,
24
22
  ) -> None:
25
23
  super().__init__(load_fn=self._load_fn)
26
24
  self._db = db
@@ -1,16 +1,14 @@
1
1
  from typing import (
2
- AsyncContextManager,
3
- Callable,
4
2
  List,
5
3
  Optional,
6
4
  )
7
5
 
8
6
  from sqlalchemy import distinct, func, select
9
- from sqlalchemy.ext.asyncio import AsyncSession
10
7
  from strawberry.dataloader import DataLoader
11
8
  from typing_extensions import TypeAlias
12
9
 
13
10
  from phoenix.db import models
11
+ from phoenix.server.types import DbSessionFactory
14
12
 
15
13
  ExperimentId: TypeAlias = int
16
14
  Key: TypeAlias = ExperimentId
@@ -18,7 +16,7 @@ Result: TypeAlias = Optional[int]
18
16
 
19
17
 
20
18
  class ExperimentSequenceNumberDataLoader(DataLoader[Key, Result]):
21
- def __init__(self, db: Callable[[], AsyncContextManager[AsyncSession]]) -> None:
19
+ def __init__(self, db: DbSessionFactory) -> None:
22
20
  super().__init__(load_fn=self._load_fn)
23
21
  self._db = db
24
22
 
@@ -2,9 +2,7 @@ from collections import defaultdict
2
2
  from datetime import datetime
3
3
  from typing import (
4
4
  Any,
5
- AsyncContextManager,
6
5
  AsyncIterator,
7
- Callable,
8
6
  DefaultDict,
9
7
  List,
10
8
  Literal,
@@ -36,6 +34,7 @@ from phoenix.db import models
36
34
  from phoenix.db.helpers import SupportedSQLDialect
37
35
  from phoenix.server.api.dataloaders.cache import TwoTierCache
38
36
  from phoenix.server.api.input_types.TimeRange import TimeRange
37
+ from phoenix.server.types import DbSessionFactory
39
38
  from phoenix.trace.dsl import SpanFilter
40
39
 
41
40
  Kind: TypeAlias = Literal["span", "trace"]
@@ -88,7 +87,7 @@ class LatencyMsQuantileCache(
88
87
  class LatencyMsQuantileDataLoader(DataLoader[Key, Result]):
89
88
  def __init__(
90
89
  self,
91
- db: Callable[[], AsyncContextManager[AsyncSession]],
90
+ db: DbSessionFactory,
92
91
  cache_map: Optional[AbstractCache[Key, Result]] = None,
93
92
  ) -> None:
94
93
  super().__init__(
@@ -1,8 +1,6 @@
1
1
  from collections import defaultdict
2
2
  from datetime import datetime
3
3
  from typing import (
4
- AsyncContextManager,
5
- Callable,
6
4
  DefaultDict,
7
5
  List,
8
6
  Literal,
@@ -12,12 +10,12 @@ from typing import (
12
10
 
13
11
  from cachetools import LFUCache
14
12
  from sqlalchemy import func, select
15
- from sqlalchemy.ext.asyncio import AsyncSession
16
13
  from strawberry.dataloader import AbstractCache, DataLoader
17
14
  from typing_extensions import TypeAlias, assert_never
18
15
 
19
16
  from phoenix.db import models
20
17
  from phoenix.server.api.dataloaders.cache import TwoTierCache
18
+ from phoenix.server.types import DbSessionFactory
21
19
 
22
20
  Kind: TypeAlias = Literal["start", "end"]
23
21
  ProjectRowId: TypeAlias = int
@@ -50,7 +48,7 @@ class MinStartOrMaxEndTimeCache(
50
48
  class MinStartOrMaxEndTimeDataLoader(DataLoader[Key, Result]):
51
49
  def __init__(
52
50
  self,
53
- db: Callable[[], AsyncContextManager[AsyncSession]],
51
+ db: DbSessionFactory,
54
52
  cache_map: Optional[AbstractCache[Key, Result]] = None,
55
53
  ) -> None:
56
54
  super().__init__(
@@ -1,12 +1,12 @@
1
1
  from collections import defaultdict
2
- from typing import AsyncContextManager, Callable, DefaultDict, List, Optional
2
+ from typing import DefaultDict, List, Optional
3
3
 
4
4
  from sqlalchemy import select
5
- from sqlalchemy.ext.asyncio import AsyncSession
6
5
  from strawberry.dataloader import DataLoader
7
6
  from typing_extensions import TypeAlias
8
7
 
9
8
  from phoenix.db import models
9
+ from phoenix.server.types import DbSessionFactory
10
10
 
11
11
  ProjectName: TypeAlias = str
12
12
  Key: TypeAlias = ProjectName
@@ -14,7 +14,7 @@ Result: TypeAlias = Optional[models.Project]
14
14
 
15
15
 
16
16
  class ProjectByNameDataLoader(DataLoader[Key, Result]):
17
- def __init__(self, db: Callable[[], AsyncContextManager[AsyncSession]]) -> None:
17
+ def __init__(self, db: DbSessionFactory) -> None:
18
18
  super().__init__(load_fn=self._load_fn)
19
19
  self._db = db
20
20