arize-phoenix 4.10.2rc0__tar.gz → 4.10.2rc2__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 (297) hide show
  1. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/PKG-INFO +4 -3
  2. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/pyproject.toml +15 -8
  3. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/context.py +3 -7
  4. arize_phoenix-4.10.2rc2/src/phoenix/server/api/openapi/main.py +22 -0
  5. arize_phoenix-4.10.2rc2/src/phoenix/server/api/openapi/schema.py +16 -0
  6. arize_phoenix-4.10.2rc2/src/phoenix/server/api/routers/v1/__init__.py +42 -0
  7. arize_phoenix-4.10.2rc2/src/phoenix/server/api/routers/v1/dataset_examples.py +157 -0
  8. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/routers/v1/datasets.py +389 -507
  9. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/routers/v1/evaluations.py +73 -66
  10. arize_phoenix-4.10.2rc2/src/phoenix/server/api/routers/v1/experiment_evaluations.py +112 -0
  11. arize_phoenix-4.10.2rc2/src/phoenix/server/api/routers/v1/experiment_runs.py +159 -0
  12. arize_phoenix-4.10.2rc2/src/phoenix/server/api/routers/v1/experiments.py +251 -0
  13. arize_phoenix-4.10.2rc2/src/phoenix/server/api/routers/v1/spans.py +245 -0
  14. arize_phoenix-4.10.2rc2/src/phoenix/server/api/routers/v1/traces.py +214 -0
  15. arize_phoenix-4.10.2rc2/src/phoenix/server/api/routers/v1/utils.py +94 -0
  16. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/types/Span.py +0 -1
  17. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/app.py +148 -192
  18. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/main.py +0 -3
  19. arize_phoenix-4.10.2rc2/src/phoenix/server/static/index.css +6 -0
  20. arize_phoenix-4.10.2rc2/src/phoenix/server/static/index.js +8547 -0
  21. arize_phoenix-4.10.2rc2/src/phoenix/server/templates/index.html +48 -0
  22. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/thread_server.py +2 -2
  23. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/trace/schemas.py +0 -1
  24. arize_phoenix-4.10.2rc2/src/phoenix/version.py +1 -0
  25. arize_phoenix-4.10.2rc0/src/phoenix/server/api/openapi/main.py +0 -6
  26. arize_phoenix-4.10.2rc0/src/phoenix/server/api/openapi/schema.py +0 -16
  27. arize_phoenix-4.10.2rc0/src/phoenix/server/api/routers/v1/__init__.py +0 -89
  28. arize_phoenix-4.10.2rc0/src/phoenix/server/api/routers/v1/dataset_examples.py +0 -178
  29. arize_phoenix-4.10.2rc0/src/phoenix/server/api/routers/v1/experiment_evaluations.py +0 -136
  30. arize_phoenix-4.10.2rc0/src/phoenix/server/api/routers/v1/experiment_runs.py +0 -217
  31. arize_phoenix-4.10.2rc0/src/phoenix/server/api/routers/v1/experiments.py +0 -301
  32. arize_phoenix-4.10.2rc0/src/phoenix/server/api/routers/v1/spans.py +0 -275
  33. arize_phoenix-4.10.2rc0/src/phoenix/server/api/routers/v1/traces.py +0 -228
  34. arize_phoenix-4.10.2rc0/src/phoenix/server/openapi/docs.py +0 -221
  35. arize_phoenix-4.10.2rc0/src/phoenix/server/static/.vite/manifest.json +0 -78
  36. arize_phoenix-4.10.2rc0/src/phoenix/server/static/assets/components-C8sm_r1F.js +0 -1142
  37. arize_phoenix-4.10.2rc0/src/phoenix/server/static/assets/index-BEKPzgQs.js +0 -100
  38. arize_phoenix-4.10.2rc0/src/phoenix/server/static/assets/pages-bN7juCjh.js +0 -2885
  39. arize_phoenix-4.10.2rc0/src/phoenix/server/static/assets/vendor-CUDAPm8e.js +0 -641
  40. arize_phoenix-4.10.2rc0/src/phoenix/server/static/assets/vendor-DxkFTwjz.css +0 -1
  41. arize_phoenix-4.10.2rc0/src/phoenix/server/static/assets/vendor-arizeai-Do2HOmcL.js +0 -662
  42. arize_phoenix-4.10.2rc0/src/phoenix/server/static/assets/vendor-codemirror-CrdxOlMs.js +0 -12
  43. arize_phoenix-4.10.2rc0/src/phoenix/server/static/assets/vendor-recharts-PKRvByVe.js +0 -59
  44. arize_phoenix-4.10.2rc0/src/phoenix/server/static/assets/vendor-three-DwGkEfCM.js +0 -2998
  45. arize_phoenix-4.10.2rc0/src/phoenix/server/templates/index.html +0 -99
  46. arize_phoenix-4.10.2rc0/src/phoenix/version.py +0 -1
  47. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/.gitignore +0 -0
  48. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/IP_NOTICE +0 -0
  49. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/LICENSE +0 -0
  50. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/README.md +0 -0
  51. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/examples/manually-instrumented-chatbot/chat-service/chat/__init__.py +0 -0
  52. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/examples/manually-instrumented-chatbot/chat-service/chat/app.py +0 -0
  53. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/examples/manually-instrumented-chatbot/chat-service/chat/types.py +0 -0
  54. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/examples/manually-instrumented-chatbot/frontend/Dockerfile +0 -0
  55. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/examples/manually-instrumented-chatbot/frontend/Makefile +0 -0
  56. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/examples/manually-instrumented-chatbot/frontend/__init__.py +0 -0
  57. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/examples/manually-instrumented-chatbot/frontend/pyproject.toml +0 -0
  58. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/examples/manually-instrumented-chatbot/frontend/requirements.txt +0 -0
  59. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/examples/manually-instrumented-chatbot/frontend/schema.json +0 -0
  60. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/__init__.py +0 -0
  61. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/config.py +0 -0
  62. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/core/__init__.py +0 -0
  63. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/core/embedding_dimension.py +0 -0
  64. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/core/model.py +0 -0
  65. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/core/model_schema.py +0 -0
  66. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/core/model_schema_adapter.py +0 -0
  67. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/datetime_utils.py +0 -0
  68. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/db/README.md +0 -0
  69. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/db/__init__.py +0 -0
  70. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/db/alembic.ini +0 -0
  71. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/db/bulk_inserter.py +0 -0
  72. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/db/engines.py +0 -0
  73. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/db/helpers.py +0 -0
  74. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/db/insertion/__init__.py +0 -0
  75. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/db/insertion/dataset.py +0 -0
  76. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/db/insertion/evaluation.py +0 -0
  77. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/db/insertion/helpers.py +0 -0
  78. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/db/insertion/span.py +0 -0
  79. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/db/migrate.py +0 -0
  80. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/db/migrations/__init__.py +0 -0
  81. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/db/migrations/env.py +0 -0
  82. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/db/migrations/script.py.mako +0 -0
  83. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/db/migrations/types.py +0 -0
  84. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/db/migrations/versions/10460e46d750_datasets.py +0 -0
  85. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/db/migrations/versions/cf03bd6bae1d_init.py +0 -0
  86. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/db/models.py +0 -0
  87. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/exceptions.py +0 -0
  88. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/experiments/__init__.py +0 -0
  89. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/experiments/evaluators/__init__.py +0 -0
  90. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/experiments/evaluators/base.py +0 -0
  91. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/experiments/evaluators/code_evaluators.py +0 -0
  92. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/experiments/evaluators/llm_evaluators.py +0 -0
  93. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/experiments/evaluators/utils.py +0 -0
  94. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/experiments/functions.py +0 -0
  95. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/experiments/tracing.py +0 -0
  96. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/experiments/types.py +0 -0
  97. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/experiments/utils.py +0 -0
  98. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/inferences/__init__.py +0 -0
  99. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/inferences/errors.py +0 -0
  100. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/inferences/fixtures.py +0 -0
  101. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/inferences/inferences.py +0 -0
  102. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/inferences/schema.py +0 -0
  103. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/inferences/validation.py +0 -0
  104. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/metrics/README.md +0 -0
  105. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/metrics/__init__.py +0 -0
  106. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/metrics/binning.py +0 -0
  107. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/metrics/metrics.py +0 -0
  108. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/metrics/mixins.py +0 -0
  109. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/metrics/retrieval_metrics.py +0 -0
  110. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/metrics/timeseries.py +0 -0
  111. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/metrics/wrappers.py +0 -0
  112. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/pointcloud/__init__.py +0 -0
  113. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/pointcloud/clustering.py +0 -0
  114. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/pointcloud/pointcloud.py +0 -0
  115. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/pointcloud/projectors.py +0 -0
  116. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/pointcloud/umap_parameters.py +0 -0
  117. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/py.typed +0 -0
  118. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/__init__.py +0 -0
  119. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/__init__.py +0 -0
  120. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/dataloaders/__init__.py +0 -0
  121. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/dataloaders/average_experiment_run_latency.py +0 -0
  122. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/dataloaders/cache/__init__.py +0 -0
  123. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/dataloaders/cache/two_tier_cache.py +0 -0
  124. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/dataloaders/dataset_example_revisions.py +0 -0
  125. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/dataloaders/dataset_example_spans.py +0 -0
  126. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/dataloaders/document_evaluation_summaries.py +0 -0
  127. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/dataloaders/document_evaluations.py +0 -0
  128. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/dataloaders/document_retrieval_metrics.py +0 -0
  129. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/dataloaders/evaluation_summaries.py +0 -0
  130. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/dataloaders/experiment_annotation_summaries.py +0 -0
  131. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/dataloaders/experiment_error_rates.py +0 -0
  132. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/dataloaders/experiment_run_counts.py +0 -0
  133. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/dataloaders/experiment_sequence_number.py +0 -0
  134. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/dataloaders/latency_ms_quantile.py +0 -0
  135. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/dataloaders/min_start_or_max_end_times.py +0 -0
  136. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/dataloaders/project_by_name.py +0 -0
  137. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/dataloaders/record_counts.py +0 -0
  138. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/dataloaders/span_annotations.py +0 -0
  139. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/dataloaders/span_descendants.py +0 -0
  140. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/dataloaders/span_evaluations.py +0 -0
  141. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/dataloaders/span_projects.py +0 -0
  142. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/dataloaders/token_counts.py +0 -0
  143. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/dataloaders/trace_evaluations.py +0 -0
  144. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/dataloaders/trace_row_ids.py +0 -0
  145. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/helpers/__init__.py +0 -0
  146. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/helpers/dataset_helpers.py +0 -0
  147. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/input_types/AddExamplesToDatasetInput.py +0 -0
  148. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/input_types/AddSpansToDatasetInput.py +0 -0
  149. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/input_types/ClearProjectInput.py +0 -0
  150. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/input_types/ClusterInput.py +0 -0
  151. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/input_types/Coordinates.py +0 -0
  152. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/input_types/CreateDatasetInput.py +0 -0
  153. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/input_types/CreateSpanAnnotationsInput.py +0 -0
  154. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/input_types/CreateTraceAnnotationsInput.py +0 -0
  155. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/input_types/DataQualityMetricInput.py +0 -0
  156. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/input_types/DatasetExampleInput.py +0 -0
  157. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/input_types/DatasetSort.py +0 -0
  158. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/input_types/DatasetVersionSort.py +0 -0
  159. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/input_types/DeleteAnnotationsInput.py +0 -0
  160. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/input_types/DeleteDatasetExamplesInput.py +0 -0
  161. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/input_types/DeleteDatasetInput.py +0 -0
  162. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/input_types/DeleteExperimentsInput.py +0 -0
  163. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/input_types/DimensionFilter.py +0 -0
  164. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/input_types/DimensionInput.py +0 -0
  165. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/input_types/Granularity.py +0 -0
  166. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/input_types/PatchAnnotationsInput.py +0 -0
  167. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/input_types/PatchDatasetExamplesInput.py +0 -0
  168. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/input_types/PatchDatasetInput.py +0 -0
  169. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/input_types/PerformanceMetricInput.py +0 -0
  170. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/input_types/SpanSort.py +0 -0
  171. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/input_types/TimeRange.py +0 -0
  172. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/input_types/__init__.py +0 -0
  173. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/interceptor.py +0 -0
  174. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/mutations/__init__.py +0 -0
  175. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/mutations/auth.py +0 -0
  176. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/mutations/dataset_mutations.py +0 -0
  177. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/mutations/experiment_mutations.py +0 -0
  178. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/mutations/export_events_mutations.py +0 -0
  179. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/mutations/project_mutations.py +0 -0
  180. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/mutations/span_annotations_mutations.py +0 -0
  181. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/mutations/trace_annotations_mutations.py +0 -0
  182. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/openapi/__init__.py +0 -0
  183. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/queries.py +0 -0
  184. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/routers/__init__.py +0 -0
  185. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/routers/utils.py +0 -0
  186. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/schema.py +0 -0
  187. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/types/Annotation.py +0 -0
  188. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/types/AnnotatorKind.py +0 -0
  189. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/types/Cluster.py +0 -0
  190. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/types/CreateDatasetPayload.py +0 -0
  191. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/types/DataQualityMetric.py +0 -0
  192. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/types/Dataset.py +0 -0
  193. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/types/DatasetExample.py +0 -0
  194. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/types/DatasetExampleRevision.py +0 -0
  195. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/types/DatasetValues.py +0 -0
  196. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/types/DatasetVersion.py +0 -0
  197. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/types/Dimension.py +0 -0
  198. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/types/DimensionDataType.py +0 -0
  199. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/types/DimensionShape.py +0 -0
  200. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/types/DimensionType.py +0 -0
  201. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/types/DimensionWithValue.py +0 -0
  202. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/types/DocumentEvaluationSummary.py +0 -0
  203. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/types/DocumentRetrievalMetrics.py +0 -0
  204. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/types/EmbeddingDimension.py +0 -0
  205. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/types/EmbeddingMetadata.py +0 -0
  206. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/types/Evaluation.py +0 -0
  207. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/types/EvaluationSummary.py +0 -0
  208. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/types/Event.py +0 -0
  209. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/types/EventMetadata.py +0 -0
  210. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/types/ExampleRevisionInterface.py +0 -0
  211. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/types/Experiment.py +0 -0
  212. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/types/ExperimentAnnotationSummary.py +0 -0
  213. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/types/ExperimentComparison.py +0 -0
  214. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/types/ExperimentRun.py +0 -0
  215. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/types/ExperimentRunAnnotation.py +0 -0
  216. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/types/ExportedFile.py +0 -0
  217. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/types/Functionality.py +0 -0
  218. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/types/Inferences.py +0 -0
  219. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/types/InferencesRole.py +0 -0
  220. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/types/MimeType.py +0 -0
  221. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/types/Model.py +0 -0
  222. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/types/NumericRange.py +0 -0
  223. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/types/PerformanceMetric.py +0 -0
  224. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/types/Project.py +0 -0
  225. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/types/PromptResponse.py +0 -0
  226. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/types/Retrieval.py +0 -0
  227. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/types/ScalarDriftMetricEnum.py +0 -0
  228. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/types/Segments.py +0 -0
  229. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/types/SortDir.py +0 -0
  230. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/types/SpanAnnotation.py +0 -0
  231. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/types/TimeSeries.py +0 -0
  232. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/types/Trace.py +0 -0
  233. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/types/TraceAnnotation.py +0 -0
  234. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/types/UMAPPoints.py +0 -0
  235. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/types/ValidationResult.py +0 -0
  236. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/types/VectorDriftMetricEnum.py +0 -0
  237. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/types/__init__.py +0 -0
  238. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/types/node.py +0 -0
  239. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/types/pagination.py +0 -0
  240. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/api/utils.py +0 -0
  241. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/grpc_server.py +0 -0
  242. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/openapi/__init__.py +0 -0
  243. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/prometheus.py +0 -0
  244. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/static/apple-touch-icon-114x114.png +0 -0
  245. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/static/apple-touch-icon-120x120.png +0 -0
  246. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/static/apple-touch-icon-144x144.png +0 -0
  247. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/static/apple-touch-icon-152x152.png +0 -0
  248. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/static/apple-touch-icon-180x180.png +0 -0
  249. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/static/apple-touch-icon-72x72.png +0 -0
  250. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/static/apple-touch-icon-76x76.png +0 -0
  251. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/static/apple-touch-icon.png +0 -0
  252. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/static/favicon.ico +0 -0
  253. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/static/modernizr.js +0 -0
  254. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/telemetry.py +0 -0
  255. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/server/templates/__init__.py +0 -0
  256. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/services.py +0 -0
  257. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/session/__init__.py +0 -0
  258. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/session/client.py +0 -0
  259. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/session/data_extractor.py +0 -0
  260. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/session/evaluation.py +0 -0
  261. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/session/session.py +0 -0
  262. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/settings.py +0 -0
  263. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/trace/__init__.py +0 -0
  264. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/trace/attributes.py +0 -0
  265. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/trace/dsl/README.md +0 -0
  266. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/trace/dsl/__init__.py +0 -0
  267. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/trace/dsl/filter.py +0 -0
  268. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/trace/dsl/helpers.py +0 -0
  269. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/trace/dsl/query.py +0 -0
  270. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/trace/errors.py +0 -0
  271. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/trace/evaluation_conventions.py +0 -0
  272. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/trace/exporter.py +0 -0
  273. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/trace/fixtures.py +0 -0
  274. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/trace/langchain/__init__.py +0 -0
  275. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/trace/langchain/instrumentor.py +0 -0
  276. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/trace/llama_index/__init__.py +0 -0
  277. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/trace/llama_index/callback.py +0 -0
  278. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/trace/openai/__init__.py +0 -0
  279. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/trace/openai/instrumentor.py +0 -0
  280. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/trace/otel.py +0 -0
  281. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/trace/projects.py +0 -0
  282. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/trace/span_evaluations.py +0 -0
  283. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/trace/span_json_decoder.py +0 -0
  284. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/trace/span_json_encoder.py +0 -0
  285. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/trace/trace_dataset.py +0 -0
  286. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/trace/utils.py +0 -0
  287. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/trace/v1/__init__.py +0 -0
  288. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/trace/v1/evaluation_pb2.py +0 -0
  289. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/trace/v1/evaluation_pb2.pyi +0 -0
  290. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/utilities/__init__.py +0 -0
  291. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/utilities/deprecation.py +0 -0
  292. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/utilities/error_handling.py +0 -0
  293. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/utilities/json.py +0 -0
  294. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/utilities/logging.py +0 -0
  295. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/utilities/project.py +0 -0
  296. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/src/phoenix/utilities/re.py +0 -0
  297. {arize_phoenix-4.10.2rc0 → arize_phoenix-4.10.2rc2}/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.10.2rc0
3
+ Version: 4.10.2rc2
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<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,<3",
63
64
  ]
64
65
  dynamic = ["version"]
65
66
 
@@ -109,7 +110,7 @@ container = [
109
110
  "opentelemetry-proto>=1.12.0",
110
111
  "opentelemetry-exporter-otlp",
111
112
  "opentelemetry-semantic-conventions",
112
- "opentelemetry-instrumentation-starlette",
113
+ "opentelemetry-instrumentation-fastapi",
113
114
  "opentelemetry-instrumentation-sqlalchemy",
114
115
  "opentelemetry-instrumentation-grpc",
115
116
  "py-grpc-prometheus",
@@ -159,8 +160,10 @@ dependencies = [
159
160
  "protobuf==3.20", # version minimum (for tests)
160
161
  "responses",
161
162
  "tiktoken",
162
- "typing-extensions==4.5.0; python_version<'3.12'",
163
- "typing-extensions==4.6.0; python_version>='3.12'",
163
+ "typing-extensions==4.5.0; python_version=='3.8'",
164
+ "typing-extensions==4.6.0; python_version=='3.9'",
165
+ "pydantic==1.9.0; python_version<='3.9'", # minimum version of pydantic compatible with openai
166
+ "pydantic==2.8.2; python_version=='3.12'",
164
167
  "httpx", # For OpenAI testing
165
168
  "respx", # For OpenAI testing
166
169
  "nest-asyncio", # for executor testing
@@ -187,12 +190,15 @@ dependencies = [
187
190
  "opentelemetry-proto>=1.12.0",
188
191
  "opentelemetry-exporter-otlp",
189
192
  "opentelemetry-semantic-conventions",
190
- "opentelemetry-instrumentation-starlette",
193
+ "opentelemetry-instrumentation-fastapi",
191
194
  "opentelemetry-instrumentation-sqlalchemy",
192
195
  "opentelemetry-instrumentation-grpc",
193
196
  "py-grpc-prometheus",
194
197
  "strawberry-graphql[opentelemetry]==0.235.0", # need to pin version because we're monkey-patching
195
198
  "requests", # this is needed to type-check third-party packages
199
+ "pydantic==1.10.17; python_version=='3.8'", # lower minor versions of pydantic break strawberry mypy plugin
200
+ "pydantic==1.10.17; python_version=='3.9'", # lower minor versions of pydantic break strawberry mypy plugin
201
+ "pydantic==2.8.2; python_version=='3.12'",
196
202
  ]
197
203
 
198
204
  [[tool.hatch.envs.type.matrix]]
@@ -287,7 +293,6 @@ testpypi = [
287
293
  "twine upload --verbose --repository testpypi dist/*",
288
294
  ]
289
295
  pypi = [
290
- "check-wheel-contents dist/",
291
296
  "twine upload --verbose dist/*",
292
297
  ]
293
298
 
@@ -307,11 +312,12 @@ build = 'strawberry export-schema phoenix.server.api.schema:schema > app/schema.
307
312
 
308
313
  [tool.hatch.envs.openapi]
309
314
  dependencies = [
310
- "pyyaml",
315
+ "pydantic==2.8.2",
316
+ "fastapi==0.111.0",
311
317
  ]
312
318
 
313
319
  [tool.hatch.envs.openapi.scripts]
314
- build = 'python -m phoenix.server.api.openapi.main > schemas/openapi.yaml'
320
+ build = "python -m phoenix.server.api.openapi.main > schemas/openapi.json"
315
321
 
316
322
  [tool.hatch.envs.proto]
317
323
  detached = true
@@ -376,6 +382,7 @@ module = [
376
382
  "sqlean",
377
383
  "grpc.*",
378
384
  "py_grpc_prometheus.*",
385
+ "orjson", # suppress fastapi internal type errors
379
386
  ]
380
387
  ignore_missing_imports = true
381
388
 
@@ -1,12 +1,10 @@
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 AsyncContextManager, Callable, Optional
5
5
 
6
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
7
+ from strawberry.fastapi import BaseContext
10
8
  from typing_extensions import TypeAlias
11
9
 
12
10
  from phoenix.core.model_schema import Model
@@ -67,9 +65,7 @@ ProjectRowId: TypeAlias = int
67
65
 
68
66
 
69
67
  @dataclass
70
- class Context:
71
- request: Union[Request, WebSocket]
72
- response: Optional[Response]
68
+ class Context(BaseContext):
73
69
  db: Callable[[], AsyncContextManager[AsyncSession]]
74
70
  data_loaders: DataLoaders
75
71
  cache_for_dataloaders: Optional[CacheForDataLoaders]
@@ -0,0 +1,22 @@
1
+ import json
2
+ from argparse import ArgumentParser
3
+ from typing import Optional, Tuple
4
+
5
+ from .schema import get_openapi_schema
6
+
7
+ if __name__ == "__main__":
8
+ parser = ArgumentParser()
9
+ parser.add_argument(
10
+ "--compress",
11
+ action="store_true",
12
+ help="Whether to output a compressed version of the OpenAPI schema",
13
+ )
14
+ args = parser.parse_args()
15
+
16
+ indent: Optional[int] = None
17
+ separator: Optional[Tuple[str, str]] = None
18
+ if args.compress:
19
+ separator = (",", ":")
20
+ else:
21
+ indent = 2
22
+ print(json.dumps(get_openapi_schema(), indent=indent, separators=separator))
@@ -0,0 +1,16 @@
1
+ from typing import Any, Dict
2
+
3
+ from fastapi.openapi.utils import get_openapi
4
+
5
+ from phoenix.server.api.routers.v1 import REST_API_VERSION
6
+ from phoenix.server.api.routers.v1 import router as v1_router
7
+
8
+
9
+ def get_openapi_schema() -> Dict[str, Any]:
10
+ return get_openapi(
11
+ title="Arize-Phoenix REST API",
12
+ version=REST_API_VERSION,
13
+ openapi_version="3.1.0",
14
+ description="Schema for Arize-Phoenix REST API",
15
+ routes=v1_router.routes,
16
+ )
@@ -0,0 +1,42 @@
1
+ from fastapi import APIRouter, Depends, HTTPException, Request
2
+ from starlette.status import HTTP_403_FORBIDDEN
3
+
4
+ from .datasets import router as datasets_router
5
+ from .evaluations import router as evaluations_router
6
+ from .experiment_evaluations import router as experiment_evaluations_router
7
+ from .experiment_runs import router as experiment_runs_router
8
+ from .experiments import router as experiments_router
9
+ from .spans import router as spans_router
10
+ from .traces import router as traces_router
11
+ from .utils import add_errors_to_responses
12
+
13
+ REST_API_VERSION = "1.0"
14
+
15
+
16
+ async def prevent_access_in_read_only_mode(request: Request) -> None:
17
+ """
18
+ Prevents access to the REST API in read-only mode.
19
+ """
20
+ if request.app.state.read_only:
21
+ raise HTTPException(
22
+ detail="The Phoenix REST API is disabled in read-only mode.",
23
+ status_code=HTTP_403_FORBIDDEN,
24
+ )
25
+
26
+
27
+ router = APIRouter(
28
+ prefix="/v1",
29
+ dependencies=[Depends(prevent_access_in_read_only_mode)],
30
+ responses=add_errors_to_responses(
31
+ [
32
+ HTTP_403_FORBIDDEN # adds a 403 response to each route in the generated OpenAPI schema
33
+ ]
34
+ ),
35
+ )
36
+ router.include_router(datasets_router)
37
+ router.include_router(experiments_router)
38
+ router.include_router(experiment_runs_router)
39
+ router.include_router(experiment_evaluations_router)
40
+ router.include_router(traces_router)
41
+ router.include_router(spans_router)
42
+ router.include_router(evaluations_router)
@@ -0,0 +1,157 @@
1
+ from datetime import datetime
2
+ from typing import Any, Dict, List, Optional
3
+
4
+ from fastapi import APIRouter, HTTPException, Path, Query
5
+ from pydantic import BaseModel
6
+ from sqlalchemy import and_, func, select
7
+ from starlette.requests import Request
8
+ from starlette.status import HTTP_404_NOT_FOUND
9
+ from strawberry.relay import GlobalID
10
+
11
+ from phoenix.db.models import (
12
+ Dataset as ORMDataset,
13
+ )
14
+ from phoenix.db.models import (
15
+ DatasetExample as ORMDatasetExample,
16
+ )
17
+ from phoenix.db.models import (
18
+ DatasetExampleRevision as ORMDatasetExampleRevision,
19
+ )
20
+ from phoenix.db.models import (
21
+ DatasetVersion as ORMDatasetVersion,
22
+ )
23
+
24
+ from .utils import ResponseBody, add_errors_to_responses
25
+
26
+ router = APIRouter(tags=["datasets"])
27
+
28
+
29
+ class DatasetExample(BaseModel):
30
+ id: str
31
+ input: Dict[str, Any]
32
+ output: Dict[str, Any]
33
+ metadata: Dict[str, Any]
34
+ updated_at: datetime
35
+
36
+
37
+ class ListDatasetExamplesData(BaseModel):
38
+ dataset_id: str
39
+ version_id: str
40
+ examples: List[DatasetExample]
41
+
42
+
43
+ class ListDatasetExamplesResponseBody(ResponseBody[ListDatasetExamplesData]):
44
+ pass
45
+
46
+
47
+ @router.get(
48
+ "/datasets/{id}/examples",
49
+ operation_id="getDatasetExamples",
50
+ summary="Get examples from a dataset",
51
+ responses=add_errors_to_responses([HTTP_404_NOT_FOUND]),
52
+ )
53
+ async def get_dataset_examples(
54
+ request: Request,
55
+ id: str = Path(description="The ID of the dataset"),
56
+ version_id: Optional[str] = Query(
57
+ default=None,
58
+ description=(
59
+ "The ID of the dataset version " "(if omitted, returns data from the latest version)"
60
+ ),
61
+ ),
62
+ ) -> ListDatasetExamplesResponseBody:
63
+ dataset_gid = GlobalID.from_id(id)
64
+ version_gid = GlobalID.from_id(version_id) if version_id else None
65
+
66
+ if (dataset_type := dataset_gid.type_name) != "Dataset":
67
+ raise HTTPException(
68
+ detail=f"ID {dataset_gid} refers to a {dataset_type}", status_code=HTTP_404_NOT_FOUND
69
+ )
70
+
71
+ if version_gid and (version_type := version_gid.type_name) != "DatasetVersion":
72
+ raise HTTPException(
73
+ detail=f"ID {version_gid} refers to a {version_type}", status_code=HTTP_404_NOT_FOUND
74
+ )
75
+
76
+ async with request.app.state.db() as session:
77
+ if (
78
+ resolved_dataset_id := await session.scalar(
79
+ select(ORMDataset.id).where(ORMDataset.id == int(dataset_gid.node_id))
80
+ )
81
+ ) is None:
82
+ raise HTTPException(
83
+ detail=f"No dataset with id {dataset_gid} can be found.",
84
+ status_code=HTTP_404_NOT_FOUND,
85
+ )
86
+
87
+ # Subquery to find the maximum created_at for each dataset_example_id
88
+ # timestamp tiebreaks are resolved by the largest id
89
+ partial_subquery = select(
90
+ func.max(ORMDatasetExampleRevision.id).label("max_id"),
91
+ ).group_by(ORMDatasetExampleRevision.dataset_example_id)
92
+
93
+ if version_gid:
94
+ if (
95
+ resolved_version_id := await session.scalar(
96
+ select(ORMDatasetVersion.id).where(
97
+ and_(
98
+ ORMDatasetVersion.dataset_id == resolved_dataset_id,
99
+ ORMDatasetVersion.id == int(version_gid.node_id),
100
+ )
101
+ )
102
+ )
103
+ ) is None:
104
+ raise HTTPException(
105
+ detail=f"No dataset version with id {version_id} can be found.",
106
+ status_code=HTTP_404_NOT_FOUND,
107
+ )
108
+ # if a version_id is provided, filter the subquery to only include revisions from that
109
+ partial_subquery = partial_subquery.filter(
110
+ ORMDatasetExampleRevision.dataset_version_id <= resolved_version_id
111
+ )
112
+ else:
113
+ if (
114
+ resolved_version_id := await session.scalar(
115
+ select(func.max(ORMDatasetVersion.id)).where(
116
+ ORMDatasetVersion.dataset_id == resolved_dataset_id
117
+ )
118
+ )
119
+ ) is None:
120
+ raise HTTPException(
121
+ detail="Dataset has no versions.",
122
+ status_code=HTTP_404_NOT_FOUND,
123
+ )
124
+
125
+ subquery = partial_subquery.subquery()
126
+ # Query for the most recent example revisions that are not deleted
127
+ query = (
128
+ select(ORMDatasetExample, ORMDatasetExampleRevision)
129
+ .join(
130
+ ORMDatasetExampleRevision,
131
+ ORMDatasetExample.id == ORMDatasetExampleRevision.dataset_example_id,
132
+ )
133
+ .join(
134
+ subquery,
135
+ (subquery.c.max_id == ORMDatasetExampleRevision.id),
136
+ )
137
+ .filter(ORMDatasetExample.dataset_id == resolved_dataset_id)
138
+ .filter(ORMDatasetExampleRevision.revision_kind != "DELETE")
139
+ .order_by(ORMDatasetExample.id.asc())
140
+ )
141
+ examples = [
142
+ DatasetExample(
143
+ id=str(GlobalID("DatasetExample", str(example.id))),
144
+ input=revision.input,
145
+ output=revision.output,
146
+ metadata=revision.metadata_,
147
+ updated_at=revision.created_at,
148
+ )
149
+ async for example, revision in await session.stream(query)
150
+ ]
151
+ return ListDatasetExamplesResponseBody(
152
+ data=ListDatasetExamplesData(
153
+ dataset_id=str(GlobalID("Dataset", str(resolved_dataset_id))),
154
+ version_id=str(GlobalID("DatasetVersion", str(resolved_version_id))),
155
+ examples=examples,
156
+ )
157
+ )