arize-phoenix 4.10.2rc2__tar.gz → 4.11.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 (286) hide show
  1. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/PKG-INFO +3 -4
  2. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/pyproject.toml +9 -16
  3. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/context.py +7 -3
  4. arize_phoenix-4.11.0/src/phoenix/server/api/openapi/main.py +6 -0
  5. arize_phoenix-4.11.0/src/phoenix/server/api/openapi/schema.py +16 -0
  6. arize_phoenix-4.11.0/src/phoenix/server/api/routers/v1/__init__.py +89 -0
  7. arize_phoenix-4.11.0/src/phoenix/server/api/routers/v1/dataset_examples.py +178 -0
  8. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/routers/v1/datasets.py +507 -389
  9. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/routers/v1/evaluations.py +66 -73
  10. arize_phoenix-4.11.0/src/phoenix/server/api/routers/v1/experiment_evaluations.py +136 -0
  11. arize_phoenix-4.11.0/src/phoenix/server/api/routers/v1/experiment_runs.py +217 -0
  12. arize_phoenix-4.11.0/src/phoenix/server/api/routers/v1/experiments.py +301 -0
  13. arize_phoenix-4.11.0/src/phoenix/server/api/routers/v1/spans.py +275 -0
  14. arize_phoenix-4.11.0/src/phoenix/server/api/routers/v1/traces.py +228 -0
  15. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/types/Span.py +1 -0
  16. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/app.py +176 -148
  17. arize_phoenix-4.11.0/src/phoenix/server/openapi/docs.py +221 -0
  18. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/static/index.js +574 -573
  19. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/thread_server.py +2 -2
  20. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/trace/attributes.py +2 -1
  21. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/trace/schemas.py +1 -0
  22. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/trace/span_json_decoder.py +1 -1
  23. arize_phoenix-4.11.0/src/phoenix/version.py +1 -0
  24. arize_phoenix-4.10.2rc2/src/phoenix/server/api/openapi/main.py +0 -22
  25. arize_phoenix-4.10.2rc2/src/phoenix/server/api/openapi/schema.py +0 -16
  26. arize_phoenix-4.10.2rc2/src/phoenix/server/api/routers/v1/__init__.py +0 -42
  27. arize_phoenix-4.10.2rc2/src/phoenix/server/api/routers/v1/dataset_examples.py +0 -157
  28. arize_phoenix-4.10.2rc2/src/phoenix/server/api/routers/v1/experiment_evaluations.py +0 -112
  29. arize_phoenix-4.10.2rc2/src/phoenix/server/api/routers/v1/experiment_runs.py +0 -159
  30. arize_phoenix-4.10.2rc2/src/phoenix/server/api/routers/v1/experiments.py +0 -251
  31. arize_phoenix-4.10.2rc2/src/phoenix/server/api/routers/v1/spans.py +0 -245
  32. arize_phoenix-4.10.2rc2/src/phoenix/server/api/routers/v1/traces.py +0 -214
  33. arize_phoenix-4.10.2rc2/src/phoenix/server/api/routers/v1/utils.py +0 -94
  34. arize_phoenix-4.10.2rc2/src/phoenix/version.py +0 -1
  35. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/.gitignore +0 -0
  36. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/IP_NOTICE +0 -0
  37. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/LICENSE +0 -0
  38. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/README.md +0 -0
  39. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/examples/manually-instrumented-chatbot/chat-service/chat/__init__.py +0 -0
  40. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/examples/manually-instrumented-chatbot/chat-service/chat/app.py +0 -0
  41. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/examples/manually-instrumented-chatbot/chat-service/chat/types.py +0 -0
  42. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/examples/manually-instrumented-chatbot/frontend/Dockerfile +0 -0
  43. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/examples/manually-instrumented-chatbot/frontend/Makefile +0 -0
  44. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/examples/manually-instrumented-chatbot/frontend/__init__.py +0 -0
  45. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/examples/manually-instrumented-chatbot/frontend/pyproject.toml +0 -0
  46. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/examples/manually-instrumented-chatbot/frontend/requirements.txt +0 -0
  47. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/examples/manually-instrumented-chatbot/frontend/schema.json +0 -0
  48. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/__init__.py +0 -0
  49. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/config.py +0 -0
  50. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/core/__init__.py +0 -0
  51. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/core/embedding_dimension.py +0 -0
  52. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/core/model.py +0 -0
  53. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/core/model_schema.py +0 -0
  54. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/core/model_schema_adapter.py +0 -0
  55. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/datetime_utils.py +0 -0
  56. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/db/README.md +0 -0
  57. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/db/__init__.py +0 -0
  58. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/db/alembic.ini +0 -0
  59. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/db/bulk_inserter.py +0 -0
  60. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/db/engines.py +0 -0
  61. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/db/helpers.py +0 -0
  62. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/db/insertion/__init__.py +0 -0
  63. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/db/insertion/dataset.py +0 -0
  64. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/db/insertion/evaluation.py +0 -0
  65. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/db/insertion/helpers.py +0 -0
  66. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/db/insertion/span.py +0 -0
  67. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/db/migrate.py +0 -0
  68. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/db/migrations/__init__.py +0 -0
  69. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/db/migrations/env.py +0 -0
  70. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/db/migrations/script.py.mako +0 -0
  71. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/db/migrations/types.py +0 -0
  72. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/db/migrations/versions/10460e46d750_datasets.py +0 -0
  73. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/db/migrations/versions/cf03bd6bae1d_init.py +0 -0
  74. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/db/models.py +0 -0
  75. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/exceptions.py +0 -0
  76. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/experiments/__init__.py +0 -0
  77. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/experiments/evaluators/__init__.py +0 -0
  78. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/experiments/evaluators/base.py +0 -0
  79. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/experiments/evaluators/code_evaluators.py +0 -0
  80. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/experiments/evaluators/llm_evaluators.py +0 -0
  81. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/experiments/evaluators/utils.py +0 -0
  82. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/experiments/functions.py +0 -0
  83. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/experiments/tracing.py +0 -0
  84. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/experiments/types.py +0 -0
  85. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/experiments/utils.py +0 -0
  86. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/inferences/__init__.py +0 -0
  87. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/inferences/errors.py +0 -0
  88. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/inferences/fixtures.py +0 -0
  89. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/inferences/inferences.py +0 -0
  90. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/inferences/schema.py +0 -0
  91. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/inferences/validation.py +0 -0
  92. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/metrics/README.md +0 -0
  93. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/metrics/__init__.py +0 -0
  94. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/metrics/binning.py +0 -0
  95. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/metrics/metrics.py +0 -0
  96. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/metrics/mixins.py +0 -0
  97. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/metrics/retrieval_metrics.py +0 -0
  98. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/metrics/timeseries.py +0 -0
  99. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/metrics/wrappers.py +0 -0
  100. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/pointcloud/__init__.py +0 -0
  101. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/pointcloud/clustering.py +0 -0
  102. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/pointcloud/pointcloud.py +0 -0
  103. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/pointcloud/projectors.py +0 -0
  104. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/pointcloud/umap_parameters.py +0 -0
  105. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/py.typed +0 -0
  106. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/__init__.py +0 -0
  107. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/__init__.py +0 -0
  108. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/dataloaders/__init__.py +0 -0
  109. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/dataloaders/average_experiment_run_latency.py +0 -0
  110. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/dataloaders/cache/__init__.py +0 -0
  111. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/dataloaders/cache/two_tier_cache.py +0 -0
  112. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/dataloaders/dataset_example_revisions.py +0 -0
  113. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/dataloaders/dataset_example_spans.py +0 -0
  114. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/dataloaders/document_evaluation_summaries.py +0 -0
  115. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/dataloaders/document_evaluations.py +0 -0
  116. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/dataloaders/document_retrieval_metrics.py +0 -0
  117. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/dataloaders/evaluation_summaries.py +0 -0
  118. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/dataloaders/experiment_annotation_summaries.py +0 -0
  119. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/dataloaders/experiment_error_rates.py +0 -0
  120. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/dataloaders/experiment_run_counts.py +0 -0
  121. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/dataloaders/experiment_sequence_number.py +0 -0
  122. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/dataloaders/latency_ms_quantile.py +0 -0
  123. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/dataloaders/min_start_or_max_end_times.py +0 -0
  124. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/dataloaders/project_by_name.py +0 -0
  125. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/dataloaders/record_counts.py +0 -0
  126. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/dataloaders/span_annotations.py +0 -0
  127. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/dataloaders/span_descendants.py +0 -0
  128. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/dataloaders/span_evaluations.py +0 -0
  129. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/dataloaders/span_projects.py +0 -0
  130. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/dataloaders/token_counts.py +0 -0
  131. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/dataloaders/trace_evaluations.py +0 -0
  132. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/dataloaders/trace_row_ids.py +0 -0
  133. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/helpers/__init__.py +0 -0
  134. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/helpers/dataset_helpers.py +0 -0
  135. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/input_types/AddExamplesToDatasetInput.py +0 -0
  136. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/input_types/AddSpansToDatasetInput.py +0 -0
  137. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/input_types/ClearProjectInput.py +0 -0
  138. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/input_types/ClusterInput.py +0 -0
  139. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/input_types/Coordinates.py +0 -0
  140. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/input_types/CreateDatasetInput.py +0 -0
  141. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/input_types/CreateSpanAnnotationsInput.py +0 -0
  142. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/input_types/CreateTraceAnnotationsInput.py +0 -0
  143. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/input_types/DataQualityMetricInput.py +0 -0
  144. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/input_types/DatasetExampleInput.py +0 -0
  145. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/input_types/DatasetSort.py +0 -0
  146. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/input_types/DatasetVersionSort.py +0 -0
  147. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/input_types/DeleteAnnotationsInput.py +0 -0
  148. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/input_types/DeleteDatasetExamplesInput.py +0 -0
  149. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/input_types/DeleteDatasetInput.py +0 -0
  150. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/input_types/DeleteExperimentsInput.py +0 -0
  151. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/input_types/DimensionFilter.py +0 -0
  152. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/input_types/DimensionInput.py +0 -0
  153. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/input_types/Granularity.py +0 -0
  154. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/input_types/PatchAnnotationsInput.py +0 -0
  155. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/input_types/PatchDatasetExamplesInput.py +0 -0
  156. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/input_types/PatchDatasetInput.py +0 -0
  157. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/input_types/PerformanceMetricInput.py +0 -0
  158. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/input_types/SpanSort.py +0 -0
  159. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/input_types/TimeRange.py +0 -0
  160. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/input_types/__init__.py +0 -0
  161. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/interceptor.py +0 -0
  162. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/mutations/__init__.py +0 -0
  163. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/mutations/auth.py +0 -0
  164. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/mutations/dataset_mutations.py +0 -0
  165. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/mutations/experiment_mutations.py +0 -0
  166. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/mutations/export_events_mutations.py +0 -0
  167. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/mutations/project_mutations.py +0 -0
  168. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/mutations/span_annotations_mutations.py +0 -0
  169. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/mutations/trace_annotations_mutations.py +0 -0
  170. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/openapi/__init__.py +0 -0
  171. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/queries.py +0 -0
  172. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/routers/__init__.py +0 -0
  173. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/routers/utils.py +0 -0
  174. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/schema.py +0 -0
  175. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/types/Annotation.py +0 -0
  176. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/types/AnnotatorKind.py +0 -0
  177. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/types/Cluster.py +0 -0
  178. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/types/CreateDatasetPayload.py +0 -0
  179. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/types/DataQualityMetric.py +0 -0
  180. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/types/Dataset.py +0 -0
  181. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/types/DatasetExample.py +0 -0
  182. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/types/DatasetExampleRevision.py +0 -0
  183. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/types/DatasetValues.py +0 -0
  184. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/types/DatasetVersion.py +0 -0
  185. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/types/Dimension.py +0 -0
  186. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/types/DimensionDataType.py +0 -0
  187. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/types/DimensionShape.py +0 -0
  188. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/types/DimensionType.py +0 -0
  189. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/types/DimensionWithValue.py +0 -0
  190. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/types/DocumentEvaluationSummary.py +0 -0
  191. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/types/DocumentRetrievalMetrics.py +0 -0
  192. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/types/EmbeddingDimension.py +0 -0
  193. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/types/EmbeddingMetadata.py +0 -0
  194. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/types/Evaluation.py +0 -0
  195. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/types/EvaluationSummary.py +0 -0
  196. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/types/Event.py +0 -0
  197. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/types/EventMetadata.py +0 -0
  198. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/types/ExampleRevisionInterface.py +0 -0
  199. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/types/Experiment.py +0 -0
  200. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/types/ExperimentAnnotationSummary.py +0 -0
  201. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/types/ExperimentComparison.py +0 -0
  202. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/types/ExperimentRun.py +0 -0
  203. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/types/ExperimentRunAnnotation.py +0 -0
  204. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/types/ExportedFile.py +0 -0
  205. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/types/Functionality.py +0 -0
  206. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/types/Inferences.py +0 -0
  207. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/types/InferencesRole.py +0 -0
  208. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/types/MimeType.py +0 -0
  209. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/types/Model.py +0 -0
  210. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/types/NumericRange.py +0 -0
  211. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/types/PerformanceMetric.py +0 -0
  212. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/types/Project.py +0 -0
  213. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/types/PromptResponse.py +0 -0
  214. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/types/Retrieval.py +0 -0
  215. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/types/ScalarDriftMetricEnum.py +0 -0
  216. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/types/Segments.py +0 -0
  217. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/types/SortDir.py +0 -0
  218. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/types/SpanAnnotation.py +0 -0
  219. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/types/TimeSeries.py +0 -0
  220. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/types/Trace.py +0 -0
  221. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/types/TraceAnnotation.py +0 -0
  222. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/types/UMAPPoints.py +0 -0
  223. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/types/ValidationResult.py +0 -0
  224. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/types/VectorDriftMetricEnum.py +0 -0
  225. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/types/__init__.py +0 -0
  226. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/types/node.py +0 -0
  227. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/types/pagination.py +0 -0
  228. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/api/utils.py +0 -0
  229. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/grpc_server.py +0 -0
  230. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/main.py +0 -0
  231. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/openapi/__init__.py +0 -0
  232. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/prometheus.py +0 -0
  233. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/static/apple-touch-icon-114x114.png +0 -0
  234. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/static/apple-touch-icon-120x120.png +0 -0
  235. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/static/apple-touch-icon-144x144.png +0 -0
  236. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/static/apple-touch-icon-152x152.png +0 -0
  237. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/static/apple-touch-icon-180x180.png +0 -0
  238. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/static/apple-touch-icon-72x72.png +0 -0
  239. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/static/apple-touch-icon-76x76.png +0 -0
  240. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/static/apple-touch-icon.png +0 -0
  241. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/static/favicon.ico +0 -0
  242. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/static/index.css +0 -0
  243. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/static/modernizr.js +0 -0
  244. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/telemetry.py +0 -0
  245. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/templates/__init__.py +0 -0
  246. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/server/templates/index.html +0 -0
  247. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/services.py +0 -0
  248. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/session/__init__.py +0 -0
  249. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/session/client.py +0 -0
  250. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/session/data_extractor.py +0 -0
  251. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/session/evaluation.py +0 -0
  252. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/session/session.py +0 -0
  253. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/settings.py +0 -0
  254. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/trace/__init__.py +0 -0
  255. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/trace/dsl/README.md +0 -0
  256. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/trace/dsl/__init__.py +0 -0
  257. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/trace/dsl/filter.py +0 -0
  258. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/trace/dsl/helpers.py +0 -0
  259. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/trace/dsl/query.py +0 -0
  260. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/trace/errors.py +0 -0
  261. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/trace/evaluation_conventions.py +0 -0
  262. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/trace/exporter.py +0 -0
  263. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/trace/fixtures.py +0 -0
  264. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/trace/langchain/__init__.py +0 -0
  265. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/trace/langchain/instrumentor.py +0 -0
  266. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/trace/llama_index/__init__.py +0 -0
  267. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/trace/llama_index/callback.py +0 -0
  268. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/trace/openai/__init__.py +0 -0
  269. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/trace/openai/instrumentor.py +0 -0
  270. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/trace/otel.py +0 -0
  271. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/trace/projects.py +0 -0
  272. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/trace/span_evaluations.py +0 -0
  273. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/trace/span_json_encoder.py +0 -0
  274. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/trace/trace_dataset.py +0 -0
  275. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/trace/utils.py +0 -0
  276. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/trace/v1/__init__.py +0 -0
  277. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/trace/v1/evaluation_pb2.py +0 -0
  278. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/trace/v1/evaluation_pb2.pyi +0 -0
  279. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/utilities/__init__.py +0 -0
  280. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/utilities/deprecation.py +0 -0
  281. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/utilities/error_handling.py +0 -0
  282. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/utilities/json.py +0 -0
  283. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/utilities/logging.py +0 -0
  284. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/utilities/project.py +0 -0
  285. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.0}/src/phoenix/utilities/re.py +0 -0
  286. {arize_phoenix-4.10.2rc2 → arize_phoenix-4.11.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.10.2rc2
3
+ Version: 4.11.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,7 +22,6 @@ 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
26
25
  Requires-Dist: grpcio
27
26
  Requires-Dist: hdbscan>=0.8.33
28
27
  Requires-Dist: httpx
@@ -41,8 +40,8 @@ Requires-Dist: pandas>=1.0
41
40
  Requires-Dist: protobuf<6.0,>=3.20
42
41
  Requires-Dist: psutil
43
42
  Requires-Dist: pyarrow
44
- Requires-Dist: pydantic<3,>=1.0
45
43
  Requires-Dist: python-multipart
44
+ Requires-Dist: pyyaml
46
45
  Requires-Dist: scikit-learn
47
46
  Requires-Dist: scipy
48
47
  Requires-Dist: sqlalchemy[asyncio]<3,>=2.0.4
@@ -57,9 +56,9 @@ Requires-Dist: uvicorn
57
56
  Requires-Dist: wrapt
58
57
  Provides-Extra: container
59
58
  Requires-Dist: opentelemetry-exporter-otlp; extra == 'container'
60
- Requires-Dist: opentelemetry-instrumentation-fastapi; extra == 'container'
61
59
  Requires-Dist: opentelemetry-instrumentation-grpc; extra == 'container'
62
60
  Requires-Dist: opentelemetry-instrumentation-sqlalchemy; extra == 'container'
61
+ Requires-Dist: opentelemetry-instrumentation-starlette; extra == 'container'
63
62
  Requires-Dist: opentelemetry-proto>=1.12.0; extra == 'container'
64
63
  Requires-Dist: opentelemetry-sdk; extra == 'container'
65
64
  Requires-Dist: opentelemetry-semantic-conventions; extra == 'container'
@@ -59,8 +59,7 @@ dependencies = [
59
59
  "cachetools",
60
60
  "python-multipart", # see https://www.starlette.io/#dependencies
61
61
  "arize-phoenix-evals>=0.13.1",
62
- "fastapi",
63
- "pydantic>=1.0,<3",
62
+ "pyyaml", # for OpenAPI
64
63
  ]
65
64
  dynamic = ["version"]
66
65
 
@@ -110,7 +109,7 @@ container = [
110
109
  "opentelemetry-proto>=1.12.0",
111
110
  "opentelemetry-exporter-otlp",
112
111
  "opentelemetry-semantic-conventions",
113
- "opentelemetry-instrumentation-fastapi",
112
+ "opentelemetry-instrumentation-starlette",
114
113
  "opentelemetry-instrumentation-sqlalchemy",
115
114
  "opentelemetry-instrumentation-grpc",
116
115
  "py-grpc-prometheus",
@@ -160,10 +159,8 @@ dependencies = [
160
159
  "protobuf==3.20", # version minimum (for tests)
161
160
  "responses",
162
161
  "tiktoken",
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'",
162
+ "typing-extensions==4.5.0; python_version<'3.12'",
163
+ "typing-extensions==4.6.0; python_version>='3.12'",
167
164
  "httpx", # For OpenAI testing
168
165
  "respx", # For OpenAI testing
169
166
  "nest-asyncio", # for executor testing
@@ -190,15 +187,12 @@ dependencies = [
190
187
  "opentelemetry-proto>=1.12.0",
191
188
  "opentelemetry-exporter-otlp",
192
189
  "opentelemetry-semantic-conventions",
193
- "opentelemetry-instrumentation-fastapi",
190
+ "opentelemetry-instrumentation-starlette",
194
191
  "opentelemetry-instrumentation-sqlalchemy",
195
192
  "opentelemetry-instrumentation-grpc",
196
193
  "py-grpc-prometheus",
197
194
  "strawberry-graphql[opentelemetry]==0.235.0", # need to pin version because we're monkey-patching
198
195
  "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'",
202
196
  ]
203
197
 
204
198
  [[tool.hatch.envs.type.matrix]]
@@ -293,6 +287,7 @@ testpypi = [
293
287
  "twine upload --verbose --repository testpypi dist/*",
294
288
  ]
295
289
  pypi = [
290
+ "check-wheel-contents dist/",
296
291
  "twine upload --verbose dist/*",
297
292
  ]
298
293
 
@@ -312,12 +307,11 @@ build = 'strawberry export-schema phoenix.server.api.schema:schema > app/schema.
312
307
 
313
308
  [tool.hatch.envs.openapi]
314
309
  dependencies = [
315
- "pydantic==2.8.2",
316
- "fastapi==0.111.0",
310
+ "pyyaml",
317
311
  ]
318
312
 
319
313
  [tool.hatch.envs.openapi.scripts]
320
- build = "python -m phoenix.server.api.openapi.main > schemas/openapi.json"
314
+ build = 'python -m phoenix.server.api.openapi.main > schemas/openapi.yaml'
321
315
 
322
316
  [tool.hatch.envs.proto]
323
317
  detached = true
@@ -382,7 +376,6 @@ module = [
382
376
  "sqlean",
383
377
  "grpc.*",
384
378
  "py_grpc_prometheus.*",
385
- "orjson", # suppress fastapi internal type errors
386
379
  ]
387
380
  ignore_missing_imports = true
388
381
 
@@ -412,4 +405,4 @@ select = ["E", "F", "W", "I", "NPY201"]
412
405
  force-single-line = false
413
406
 
414
407
  [tool.ruff.format]
415
- line-ending = "lf"
408
+ line-ending = "lf"
@@ -1,10 +1,12 @@
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
4
+ from typing import AsyncContextManager, Callable, Optional, Union
5
5
 
6
6
  from sqlalchemy.ext.asyncio import AsyncSession
7
- from strawberry.fastapi import BaseContext
7
+ from starlette.requests import Request
8
+ from starlette.responses import Response
9
+ from starlette.websockets import WebSocket
8
10
  from typing_extensions import TypeAlias
9
11
 
10
12
  from phoenix.core.model_schema import Model
@@ -65,7 +67,9 @@ ProjectRowId: TypeAlias = int
65
67
 
66
68
 
67
69
  @dataclass
68
- class Context(BaseContext):
70
+ class Context:
71
+ request: Union[Request, WebSocket]
72
+ response: Optional[Response]
69
73
  db: Callable[[], AsyncContextManager[AsyncSession]]
70
74
  data_loaders: DataLoaders
71
75
  cache_for_dataloaders: Optional[CacheForDataLoaders]
@@ -0,0 +1,6 @@
1
+ from .schema import get_openapi_schema
2
+
3
+ if __name__ == "__main__":
4
+ import yaml # type: ignore
5
+
6
+ print(yaml.dump(get_openapi_schema(), indent=2))
@@ -0,0 +1,16 @@
1
+ from typing import Any
2
+
3
+ from starlette.schemas import SchemaGenerator
4
+
5
+ from phoenix.server.api.routers.v1 import V1_ROUTES
6
+
7
+ OPENAPI_SCHEMA_GENERATOR = SchemaGenerator(
8
+ {"openapi": "3.0.0", "info": {"title": "Arize-Phoenix API", "version": "1.0"}}
9
+ )
10
+
11
+
12
+ def get_openapi_schema() -> Any:
13
+ """
14
+ Exports an OpenAPI schema for the Phoenix REST API as a JSON object.
15
+ """
16
+ return OPENAPI_SCHEMA_GENERATOR.get_schema(V1_ROUTES) # type: ignore
@@ -0,0 +1,89 @@
1
+ from typing import Any, Awaitable, Callable, Mapping, Tuple
2
+
3
+ import wrapt
4
+ from starlette import routing
5
+ from starlette.requests import Request
6
+ from starlette.responses import Response
7
+ from starlette.status import HTTP_403_FORBIDDEN
8
+
9
+ from . import (
10
+ datasets,
11
+ evaluations,
12
+ experiment_evaluations,
13
+ experiment_runs,
14
+ experiments,
15
+ spans,
16
+ traces,
17
+ )
18
+ from .dataset_examples import list_dataset_examples
19
+
20
+
21
+ @wrapt.decorator # type: ignore
22
+ async def forbid_if_readonly(
23
+ wrapped: Callable[[Request], Awaitable[Response]],
24
+ _: Any,
25
+ args: Tuple[Request],
26
+ kwargs: Mapping[str, Any],
27
+ ) -> Response:
28
+ request, *_ = args
29
+ if request.app.state.read_only:
30
+ return Response(status_code=HTTP_403_FORBIDDEN)
31
+ return await wrapped(*args, **kwargs)
32
+
33
+
34
+ class Route(routing.Route):
35
+ def __init__(self, path: str, endpoint: Callable[..., Any], **kwargs: Any) -> None:
36
+ super().__init__(path, forbid_if_readonly(endpoint), **kwargs)
37
+
38
+
39
+ V1_ROUTES = [
40
+ Route("/v1/evaluations", evaluations.post_evaluations, methods=["POST"]),
41
+ Route("/v1/evaluations", evaluations.get_evaluations, methods=["GET"]),
42
+ Route("/v1/traces", traces.post_traces, methods=["POST"]),
43
+ Route("/v1/trace_annotations", traces.annotate_traces, methods=["POST"]),
44
+ Route("/v1/spans", spans.query_spans_handler, methods=["POST"]),
45
+ Route("/v1/spans", spans.get_spans_handler, methods=["GET"]),
46
+ Route("/v1/span_annotations", spans.annotate_spans, methods=["POST"]),
47
+ Route("/v1/datasets/upload", datasets.post_datasets_upload, methods=["POST"]),
48
+ Route("/v1/datasets", datasets.list_datasets, methods=["GET"]),
49
+ Route("/v1/datasets/{id:str}", datasets.delete_dataset_by_id, methods=["DELETE"]),
50
+ Route("/v1/datasets/{id:str}", datasets.get_dataset_by_id, methods=["GET"]),
51
+ Route("/v1/datasets/{id:str}/csv", datasets.get_dataset_csv, methods=["GET"]),
52
+ Route(
53
+ "/v1/datasets/{id:str}/jsonl/openai_ft",
54
+ datasets.get_dataset_jsonl_openai_ft,
55
+ methods=["GET"],
56
+ ),
57
+ Route(
58
+ "/v1/datasets/{id:str}/jsonl/openai_evals",
59
+ datasets.get_dataset_jsonl_openai_evals,
60
+ methods=["GET"],
61
+ ),
62
+ Route("/v1/datasets/{id:str}/examples", list_dataset_examples, methods=["GET"]),
63
+ Route("/v1/datasets/{id:str}/versions", datasets.get_dataset_versions, methods=["GET"]),
64
+ Route(
65
+ "/v1/datasets/{dataset_id:str}/experiments",
66
+ experiments.create_experiment,
67
+ methods=["POST"],
68
+ ),
69
+ Route(
70
+ "/v1/experiments/{experiment_id:str}",
71
+ experiments.read_experiment,
72
+ methods=["GET"],
73
+ ),
74
+ Route(
75
+ "/v1/experiments/{experiment_id:str}/runs",
76
+ experiment_runs.create_experiment_run,
77
+ methods=["POST"],
78
+ ),
79
+ Route(
80
+ "/v1/experiments/{experiment_id:str}/runs",
81
+ experiment_runs.list_experiment_runs,
82
+ methods=["GET"],
83
+ ),
84
+ Route(
85
+ "/v1/experiment_evaluations",
86
+ experiment_evaluations.upsert_experiment_evaluation,
87
+ methods=["POST"],
88
+ ),
89
+ ]
@@ -0,0 +1,178 @@
1
+ from sqlalchemy import and_, func, select
2
+ from starlette.requests import Request
3
+ from starlette.responses import JSONResponse, Response
4
+ from starlette.status import HTTP_404_NOT_FOUND
5
+ from strawberry.relay import GlobalID
6
+
7
+ from phoenix.db.models import Dataset, DatasetExample, DatasetExampleRevision, DatasetVersion
8
+
9
+
10
+ async def list_dataset_examples(request: Request) -> Response:
11
+ """
12
+ summary: Get dataset examples by dataset ID
13
+ operationId: getDatasetExamples
14
+ tags:
15
+ - datasets
16
+ parameters:
17
+ - in: path
18
+ name: id
19
+ required: true
20
+ schema:
21
+ type: string
22
+ description: Dataset ID
23
+ - in: query
24
+ name: version_id
25
+ schema:
26
+ type: string
27
+ description: Dataset version ID. If omitted, returns the latest version.
28
+ responses:
29
+ 200:
30
+ description: Success
31
+ content:
32
+ application/json:
33
+ schema:
34
+ type: object
35
+ properties:
36
+ data:
37
+ type: object
38
+ properties:
39
+ dataset_id:
40
+ type: string
41
+ description: ID of the dataset
42
+ version_id:
43
+ type: string
44
+ description: ID of the version
45
+ examples:
46
+ type: array
47
+ items:
48
+ type: object
49
+ properties:
50
+ id:
51
+ type: string
52
+ description: ID of the dataset example
53
+ input:
54
+ type: object
55
+ description: Input data of the example
56
+ output:
57
+ type: object
58
+ description: Output data of the example
59
+ metadata:
60
+ type: object
61
+ description: Metadata of the example
62
+ updated_at:
63
+ type: string
64
+ format: date-time
65
+ description: ISO formatted timestamp of when the example was updated
66
+ required:
67
+ - id
68
+ - input
69
+ - output
70
+ - metadata
71
+ - updated_at
72
+ required:
73
+ - dataset_id
74
+ - version_id
75
+ - examples
76
+ 403:
77
+ description: Forbidden
78
+ 404:
79
+ description: Dataset does not exist.
80
+ """
81
+ dataset_id = GlobalID.from_id(request.path_params["id"])
82
+ raw_version_id = request.query_params.get("version_id")
83
+ version_id = GlobalID.from_id(raw_version_id) if raw_version_id else None
84
+
85
+ if (dataset_type := dataset_id.type_name) != "Dataset":
86
+ return Response(
87
+ content=f"ID {dataset_id} refers to a {dataset_type}", status_code=HTTP_404_NOT_FOUND
88
+ )
89
+
90
+ if version_id and (version_type := version_id.type_name) != "DatasetVersion":
91
+ return Response(
92
+ content=f"ID {version_id} refers to a {version_type}", status_code=HTTP_404_NOT_FOUND
93
+ )
94
+
95
+ async with request.app.state.db() as session:
96
+ if (
97
+ resolved_dataset_id := await session.scalar(
98
+ select(Dataset.id).where(Dataset.id == int(dataset_id.node_id))
99
+ )
100
+ ) is None:
101
+ return Response(
102
+ content=f"No dataset with id {dataset_id} can be found.",
103
+ status_code=HTTP_404_NOT_FOUND,
104
+ )
105
+
106
+ # Subquery to find the maximum created_at for each dataset_example_id
107
+ # timestamp tiebreaks are resolved by the largest id
108
+ partial_subquery = select(
109
+ func.max(DatasetExampleRevision.id).label("max_id"),
110
+ ).group_by(DatasetExampleRevision.dataset_example_id)
111
+
112
+ if version_id:
113
+ if (
114
+ resolved_version_id := await session.scalar(
115
+ select(DatasetVersion.id).where(
116
+ and_(
117
+ DatasetVersion.dataset_id == resolved_dataset_id,
118
+ DatasetVersion.id == int(version_id.node_id),
119
+ )
120
+ )
121
+ )
122
+ ) is None:
123
+ return Response(
124
+ content=f"No dataset version with id {version_id} can be found.",
125
+ status_code=HTTP_404_NOT_FOUND,
126
+ )
127
+ # if a version_id is provided, filter the subquery to only include revisions from that
128
+ partial_subquery = partial_subquery.filter(
129
+ DatasetExampleRevision.dataset_version_id <= resolved_version_id
130
+ )
131
+ else:
132
+ if (
133
+ resolved_version_id := await session.scalar(
134
+ select(func.max(DatasetVersion.id)).where(
135
+ DatasetVersion.dataset_id == resolved_dataset_id
136
+ )
137
+ )
138
+ ) is None:
139
+ return Response(
140
+ content="Dataset has no versions.",
141
+ status_code=HTTP_404_NOT_FOUND,
142
+ )
143
+
144
+ subquery = partial_subquery.subquery()
145
+ # Query for the most recent example revisions that are not deleted
146
+ query = (
147
+ select(DatasetExample, DatasetExampleRevision)
148
+ .join(
149
+ DatasetExampleRevision,
150
+ DatasetExample.id == DatasetExampleRevision.dataset_example_id,
151
+ )
152
+ .join(
153
+ subquery,
154
+ (subquery.c.max_id == DatasetExampleRevision.id),
155
+ )
156
+ .filter(DatasetExample.dataset_id == resolved_dataset_id)
157
+ .filter(DatasetExampleRevision.revision_kind != "DELETE")
158
+ .order_by(DatasetExample.id.asc())
159
+ )
160
+ examples = [
161
+ {
162
+ "id": str(GlobalID("DatasetExample", str(example.id))),
163
+ "input": revision.input,
164
+ "output": revision.output,
165
+ "metadata": revision.metadata_,
166
+ "updated_at": revision.created_at.isoformat(),
167
+ }
168
+ async for example, revision in await session.stream(query)
169
+ ]
170
+ return JSONResponse(
171
+ {
172
+ "data": {
173
+ "dataset_id": str(GlobalID("Dataset", str(resolved_dataset_id))),
174
+ "version_id": str(GlobalID("DatasetVersion", str(resolved_version_id))),
175
+ "examples": examples,
176
+ }
177
+ }
178
+ )