arize-phoenix 4.16.1__tar.gz → 4.18.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 (299) hide show
  1. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/PKG-INFO +5 -5
  2. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/pyproject.toml +4 -4
  3. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/context.py +2 -0
  4. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/dataloaders/__init__.py +8 -0
  5. arize_phoenix-4.18.0/src/phoenix/server/api/dataloaders/annotation_summaries.py +146 -0
  6. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/mutations/span_annotations_mutations.py +1 -0
  7. arize_phoenix-4.18.0/src/phoenix/server/api/types/AnnotationSummary.py +55 -0
  8. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/types/EvaluationSummary.py +1 -6
  9. arize_phoenix-4.18.0/src/phoenix/server/api/types/LabelFraction.py +7 -0
  10. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/types/Project.py +24 -0
  11. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/app.py +7 -0
  12. arize_phoenix-4.18.0/src/phoenix/server/static/.vite/manifest.json +78 -0
  13. arize_phoenix-4.16.1/src/phoenix/server/static/assets/components-Ci5kMOk5.js → arize_phoenix-4.18.0/src/phoenix/server/static/assets/components-B2sHrnz0.js +153 -122
  14. arize_phoenix-4.18.0/src/phoenix/server/static/assets/index-BIFmgnip.js +100 -0
  15. arize_phoenix-4.16.1/src/phoenix/server/static/assets/pages-BrevprVW.js → arize_phoenix-4.18.0/src/phoenix/server/static/assets/pages-BTHjBGHq.js +260 -220
  16. arize_phoenix-4.16.1/src/phoenix/server/static/assets/vendor-CP0b0YG0.js → arize_phoenix-4.18.0/src/phoenix/server/static/assets/vendor-BMWfu6zp.js +1 -1
  17. arize_phoenix-4.16.1/src/phoenix/server/static/assets/vendor-arizeai-DTbiPGp6.js → arize_phoenix-4.18.0/src/phoenix/server/static/assets/vendor-arizeai-CkyzG9Wl.js +2 -2
  18. arize_phoenix-4.16.1/src/phoenix/server/static/assets/vendor-codemirror-DtdPDzrv.js → arize_phoenix-4.18.0/src/phoenix/server/static/assets/vendor-codemirror-DO3VqEcD.js +1 -1
  19. arize_phoenix-4.16.1/src/phoenix/server/static/assets/vendor-recharts-A0DA1O99.js → arize_phoenix-4.18.0/src/phoenix/server/static/assets/vendor-recharts-BGN0SxgJ.js +1 -1
  20. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/session/session.py +11 -8
  21. arize_phoenix-4.18.0/src/phoenix/version.py +1 -0
  22. arize_phoenix-4.16.1/src/phoenix/server/static/.vite/manifest.json +0 -78
  23. arize_phoenix-4.16.1/src/phoenix/server/static/assets/index-BQG5WVX7.js +0 -100
  24. arize_phoenix-4.16.1/src/phoenix/version.py +0 -1
  25. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/.gitignore +0 -0
  26. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/IP_NOTICE +0 -0
  27. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/LICENSE +0 -0
  28. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/README.md +0 -0
  29. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/examples/manually-instrumented-chatbot/chat-service/chat/__init__.py +0 -0
  30. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/examples/manually-instrumented-chatbot/chat-service/chat/app.py +0 -0
  31. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/examples/manually-instrumented-chatbot/chat-service/chat/types.py +0 -0
  32. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/examples/manually-instrumented-chatbot/frontend/Dockerfile +0 -0
  33. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/examples/manually-instrumented-chatbot/frontend/Makefile +0 -0
  34. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/examples/manually-instrumented-chatbot/frontend/__init__.py +0 -0
  35. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/examples/manually-instrumented-chatbot/frontend/pyproject.toml +0 -0
  36. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/examples/manually-instrumented-chatbot/frontend/requirements.txt +0 -0
  37. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/examples/manually-instrumented-chatbot/frontend/schema.json +0 -0
  38. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/__init__.py +0 -0
  39. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/config.py +0 -0
  40. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/core/__init__.py +0 -0
  41. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/core/embedding_dimension.py +0 -0
  42. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/core/model.py +0 -0
  43. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/core/model_schema.py +0 -0
  44. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/core/model_schema_adapter.py +0 -0
  45. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/datetime_utils.py +0 -0
  46. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/db/README.md +0 -0
  47. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/db/__init__.py +0 -0
  48. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/db/alembic.ini +0 -0
  49. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/db/bulk_inserter.py +0 -0
  50. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/db/engines.py +0 -0
  51. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/db/helpers.py +0 -0
  52. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/db/insertion/__init__.py +0 -0
  53. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/db/insertion/constants.py +0 -0
  54. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/db/insertion/dataset.py +0 -0
  55. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/db/insertion/document_annotation.py +0 -0
  56. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/db/insertion/evaluation.py +0 -0
  57. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/db/insertion/helpers.py +0 -0
  58. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/db/insertion/span.py +0 -0
  59. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/db/insertion/span_annotation.py +0 -0
  60. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/db/insertion/trace_annotation.py +0 -0
  61. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/db/insertion/types.py +0 -0
  62. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/db/migrate.py +0 -0
  63. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/db/migrations/__init__.py +0 -0
  64. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/db/migrations/env.py +0 -0
  65. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/db/migrations/script.py.mako +0 -0
  66. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/db/migrations/types.py +0 -0
  67. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/db/migrations/versions/10460e46d750_datasets.py +0 -0
  68. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/db/migrations/versions/cf03bd6bae1d_init.py +0 -0
  69. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/db/models.py +0 -0
  70. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/exceptions.py +0 -0
  71. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/experiments/__init__.py +0 -0
  72. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/experiments/evaluators/__init__.py +0 -0
  73. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/experiments/evaluators/base.py +0 -0
  74. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/experiments/evaluators/code_evaluators.py +0 -0
  75. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/experiments/evaluators/llm_evaluators.py +0 -0
  76. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/experiments/evaluators/utils.py +0 -0
  77. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/experiments/functions.py +0 -0
  78. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/experiments/tracing.py +0 -0
  79. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/experiments/types.py +0 -0
  80. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/experiments/utils.py +0 -0
  81. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/inferences/__init__.py +0 -0
  82. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/inferences/errors.py +0 -0
  83. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/inferences/fixtures.py +0 -0
  84. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/inferences/inferences.py +0 -0
  85. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/inferences/schema.py +0 -0
  86. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/inferences/validation.py +0 -0
  87. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/metrics/README.md +0 -0
  88. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/metrics/__init__.py +0 -0
  89. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/metrics/binning.py +0 -0
  90. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/metrics/metrics.py +0 -0
  91. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/metrics/mixins.py +0 -0
  92. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/metrics/retrieval_metrics.py +0 -0
  93. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/metrics/timeseries.py +0 -0
  94. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/metrics/wrappers.py +0 -0
  95. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/pointcloud/__init__.py +0 -0
  96. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/pointcloud/clustering.py +0 -0
  97. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/pointcloud/pointcloud.py +0 -0
  98. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/pointcloud/projectors.py +0 -0
  99. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/pointcloud/umap_parameters.py +0 -0
  100. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/py.typed +0 -0
  101. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/__init__.py +0 -0
  102. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/__init__.py +0 -0
  103. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/dataloaders/average_experiment_run_latency.py +0 -0
  104. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/dataloaders/cache/__init__.py +0 -0
  105. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/dataloaders/cache/two_tier_cache.py +0 -0
  106. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/dataloaders/dataset_example_revisions.py +0 -0
  107. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/dataloaders/dataset_example_spans.py +0 -0
  108. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/dataloaders/document_evaluation_summaries.py +0 -0
  109. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/dataloaders/document_evaluations.py +0 -0
  110. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/dataloaders/document_retrieval_metrics.py +0 -0
  111. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/dataloaders/evaluation_summaries.py +0 -0
  112. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/dataloaders/experiment_annotation_summaries.py +0 -0
  113. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/dataloaders/experiment_error_rates.py +0 -0
  114. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/dataloaders/experiment_run_counts.py +0 -0
  115. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/dataloaders/experiment_sequence_number.py +0 -0
  116. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/dataloaders/latency_ms_quantile.py +0 -0
  117. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/dataloaders/min_start_or_max_end_times.py +0 -0
  118. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/dataloaders/project_by_name.py +0 -0
  119. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/dataloaders/record_counts.py +0 -0
  120. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/dataloaders/span_annotations.py +0 -0
  121. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/dataloaders/span_dataset_examples.py +0 -0
  122. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/dataloaders/span_descendants.py +0 -0
  123. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/dataloaders/span_evaluations.py +0 -0
  124. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/dataloaders/span_projects.py +0 -0
  125. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/dataloaders/token_counts.py +0 -0
  126. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/dataloaders/trace_evaluations.py +0 -0
  127. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/dataloaders/trace_row_ids.py +0 -0
  128. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/helpers/__init__.py +0 -0
  129. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/helpers/dataset_helpers.py +0 -0
  130. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/input_types/AddExamplesToDatasetInput.py +0 -0
  131. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/input_types/AddSpansToDatasetInput.py +0 -0
  132. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/input_types/ClearProjectInput.py +0 -0
  133. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/input_types/ClusterInput.py +0 -0
  134. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/input_types/Coordinates.py +0 -0
  135. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/input_types/CreateDatasetInput.py +0 -0
  136. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/input_types/CreateSpanAnnotationInput.py +0 -0
  137. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/input_types/CreateTraceAnnotationInput.py +0 -0
  138. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/input_types/DataQualityMetricInput.py +0 -0
  139. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/input_types/DatasetExampleInput.py +0 -0
  140. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/input_types/DatasetSort.py +0 -0
  141. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/input_types/DatasetVersionSort.py +0 -0
  142. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/input_types/DeleteAnnotationsInput.py +0 -0
  143. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/input_types/DeleteDatasetExamplesInput.py +0 -0
  144. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/input_types/DeleteDatasetInput.py +0 -0
  145. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/input_types/DeleteExperimentsInput.py +0 -0
  146. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/input_types/DimensionFilter.py +0 -0
  147. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/input_types/DimensionInput.py +0 -0
  148. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/input_types/Granularity.py +0 -0
  149. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/input_types/PatchAnnotationInput.py +0 -0
  150. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/input_types/PatchDatasetExamplesInput.py +0 -0
  151. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/input_types/PatchDatasetInput.py +0 -0
  152. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/input_types/PerformanceMetricInput.py +0 -0
  153. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/input_types/SpanAnnotationSort.py +0 -0
  154. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/input_types/SpanSort.py +0 -0
  155. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/input_types/TimeRange.py +0 -0
  156. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/input_types/TraceAnnotationSort.py +0 -0
  157. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/input_types/__init__.py +0 -0
  158. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/interceptor.py +0 -0
  159. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/mutations/__init__.py +0 -0
  160. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/mutations/auth.py +0 -0
  161. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/mutations/dataset_mutations.py +0 -0
  162. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/mutations/experiment_mutations.py +0 -0
  163. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/mutations/export_events_mutations.py +0 -0
  164. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/mutations/project_mutations.py +0 -0
  165. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/mutations/trace_annotations_mutations.py +0 -0
  166. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/openapi/__init__.py +0 -0
  167. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/openapi/main.py +0 -0
  168. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/openapi/schema.py +0 -0
  169. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/queries.py +0 -0
  170. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/routers/__init__.py +0 -0
  171. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/routers/utils.py +0 -0
  172. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/routers/v1/__init__.py +0 -0
  173. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/routers/v1/datasets.py +0 -0
  174. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/routers/v1/evaluations.py +0 -0
  175. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/routers/v1/experiment_evaluations.py +0 -0
  176. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/routers/v1/experiment_runs.py +0 -0
  177. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/routers/v1/experiments.py +0 -0
  178. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/routers/v1/pydantic_compat.py +0 -0
  179. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/routers/v1/spans.py +0 -0
  180. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/routers/v1/traces.py +0 -0
  181. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/routers/v1/utils.py +0 -0
  182. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/schema.py +0 -0
  183. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/types/Annotation.py +0 -0
  184. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/types/AnnotatorKind.py +0 -0
  185. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/types/Cluster.py +0 -0
  186. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/types/CreateDatasetPayload.py +0 -0
  187. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/types/DataQualityMetric.py +0 -0
  188. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/types/Dataset.py +0 -0
  189. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/types/DatasetExample.py +0 -0
  190. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/types/DatasetExampleRevision.py +0 -0
  191. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/types/DatasetValues.py +0 -0
  192. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/types/DatasetVersion.py +0 -0
  193. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/types/Dimension.py +0 -0
  194. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/types/DimensionDataType.py +0 -0
  195. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/types/DimensionShape.py +0 -0
  196. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/types/DimensionType.py +0 -0
  197. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/types/DimensionWithValue.py +0 -0
  198. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/types/DocumentEvaluationSummary.py +0 -0
  199. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/types/DocumentRetrievalMetrics.py +0 -0
  200. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/types/EmbeddingDimension.py +0 -0
  201. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/types/EmbeddingMetadata.py +0 -0
  202. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/types/Evaluation.py +0 -0
  203. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/types/Event.py +0 -0
  204. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/types/EventMetadata.py +0 -0
  205. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/types/ExampleRevisionInterface.py +0 -0
  206. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/types/Experiment.py +0 -0
  207. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/types/ExperimentAnnotationSummary.py +0 -0
  208. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/types/ExperimentComparison.py +0 -0
  209. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/types/ExperimentRun.py +0 -0
  210. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/types/ExperimentRunAnnotation.py +0 -0
  211. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/types/ExportedFile.py +0 -0
  212. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/types/Functionality.py +0 -0
  213. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/types/Inferences.py +0 -0
  214. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/types/InferencesRole.py +0 -0
  215. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/types/MimeType.py +0 -0
  216. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/types/Model.py +0 -0
  217. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/types/NumericRange.py +0 -0
  218. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/types/PerformanceMetric.py +0 -0
  219. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/types/PromptResponse.py +0 -0
  220. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/types/Retrieval.py +0 -0
  221. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/types/ScalarDriftMetricEnum.py +0 -0
  222. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/types/Segments.py +0 -0
  223. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/types/SortDir.py +0 -0
  224. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/types/Span.py +0 -0
  225. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/types/SpanAnnotation.py +0 -0
  226. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/types/TimeSeries.py +0 -0
  227. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/types/Trace.py +0 -0
  228. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/types/TraceAnnotation.py +0 -0
  229. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/types/UMAPPoints.py +0 -0
  230. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/types/ValidationResult.py +0 -0
  231. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/types/VectorDriftMetricEnum.py +0 -0
  232. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/types/__init__.py +0 -0
  233. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/types/node.py +0 -0
  234. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/types/pagination.py +0 -0
  235. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/api/utils.py +0 -0
  236. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/grpc_server.py +0 -0
  237. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/main.py +0 -0
  238. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/openapi/__init__.py +0 -0
  239. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/prometheus.py +0 -0
  240. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/static/apple-touch-icon-114x114.png +0 -0
  241. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/static/apple-touch-icon-120x120.png +0 -0
  242. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/static/apple-touch-icon-144x144.png +0 -0
  243. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/static/apple-touch-icon-152x152.png +0 -0
  244. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/static/apple-touch-icon-180x180.png +0 -0
  245. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/static/apple-touch-icon-72x72.png +0 -0
  246. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/static/apple-touch-icon-76x76.png +0 -0
  247. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/static/apple-touch-icon.png +0 -0
  248. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/static/assets/vendor-DxkFTwjz.css +0 -0
  249. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/static/assets/vendor-three-DwGkEfCM.js +0 -0
  250. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/static/favicon.ico +0 -0
  251. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/static/modernizr.js +0 -0
  252. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/telemetry.py +0 -0
  253. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/templates/__init__.py +0 -0
  254. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/templates/index.html +0 -0
  255. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/thread_server.py +0 -0
  256. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/server/types.py +0 -0
  257. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/services.py +0 -0
  258. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/session/__init__.py +0 -0
  259. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/session/client.py +0 -0
  260. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/session/data_extractor.py +0 -0
  261. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/session/evaluation.py +0 -0
  262. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/settings.py +0 -0
  263. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/trace/__init__.py +0 -0
  264. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/trace/attributes.py +0 -0
  265. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/trace/dsl/README.md +0 -0
  266. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/trace/dsl/__init__.py +0 -0
  267. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/trace/dsl/filter.py +0 -0
  268. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/trace/dsl/helpers.py +0 -0
  269. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/trace/dsl/query.py +0 -0
  270. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/trace/errors.py +0 -0
  271. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/trace/evaluation_conventions.py +0 -0
  272. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/trace/exporter.py +0 -0
  273. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/trace/fixtures.py +0 -0
  274. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/trace/langchain/__init__.py +0 -0
  275. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/trace/langchain/instrumentor.py +0 -0
  276. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/trace/llama_index/__init__.py +0 -0
  277. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/trace/llama_index/callback.py +0 -0
  278. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/trace/openai/__init__.py +0 -0
  279. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/trace/openai/instrumentor.py +0 -0
  280. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/trace/otel.py +0 -0
  281. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/trace/projects.py +0 -0
  282. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/trace/schemas.py +0 -0
  283. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/trace/span_evaluations.py +0 -0
  284. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/trace/span_json_decoder.py +0 -0
  285. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/trace/span_json_encoder.py +0 -0
  286. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/trace/trace_dataset.py +0 -0
  287. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/trace/utils.py +0 -0
  288. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/trace/v1/__init__.py +0 -0
  289. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/trace/v1/evaluation_pb2.py +0 -0
  290. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/trace/v1/evaluation_pb2.pyi +0 -0
  291. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/utilities/__init__.py +0 -0
  292. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/utilities/client.py +0 -0
  293. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/utilities/deprecation.py +0 -0
  294. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/utilities/error_handling.py +0 -0
  295. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/utilities/json.py +0 -0
  296. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/utilities/logging.py +0 -0
  297. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/utilities/project.py +0 -0
  298. {arize_phoenix-4.16.1 → arize_phoenix-4.18.0}/src/phoenix/utilities/re.py +0 -0
  299. {arize_phoenix-4.16.1 → arize_phoenix-4.18.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.16.1
3
+ Version: 4.18.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
@@ -28,10 +28,10 @@ Requires-Dist: hdbscan>=0.8.33
28
28
  Requires-Dist: httpx
29
29
  Requires-Dist: jinja2
30
30
  Requires-Dist: numpy<2
31
- Requires-Dist: openinference-instrumentation
32
- Requires-Dist: openinference-instrumentation-langchain>=0.1.12
33
- Requires-Dist: openinference-instrumentation-llama-index>=1.2.0
34
- Requires-Dist: openinference-instrumentation-openai>=0.1.4
31
+ Requires-Dist: openinference-instrumentation-langchain>=0.1.26
32
+ Requires-Dist: openinference-instrumentation-llama-index>=2.2.1
33
+ Requires-Dist: openinference-instrumentation-openai>=0.1.11
34
+ Requires-Dist: openinference-instrumentation>=0.1.12
35
35
  Requires-Dist: openinference-semantic-conventions>=0.1.9
36
36
  Requires-Dist: opentelemetry-exporter-otlp
37
37
  Requires-Dist: opentelemetry-proto>=1.12.0
@@ -47,10 +47,10 @@ dependencies = [
47
47
  "opentelemetry-exporter-otlp",
48
48
  "opentelemetry-semantic-conventions",
49
49
  "openinference-semantic-conventions>=0.1.9",
50
- "openinference-instrumentation",
51
- "openinference-instrumentation-langchain>=0.1.12",
52
- "openinference-instrumentation-llama-index>=1.2.0",
53
- "openinference-instrumentation-openai>=0.1.4",
50
+ "openinference-instrumentation>=0.1.12",
51
+ "openinference-instrumentation-langchain>=0.1.26",
52
+ "openinference-instrumentation-llama-index>=2.2.1",
53
+ "openinference-instrumentation-openai>=0.1.11",
54
54
  "sqlalchemy[asyncio]>=2.0.4, <3",
55
55
  "alembic>=1.3.0, <2",
56
56
  "aiosqlite",
@@ -8,6 +8,7 @@ from typing_extensions import TypeAlias
8
8
 
9
9
  from phoenix.core.model_schema import Model
10
10
  from phoenix.server.api.dataloaders import (
11
+ AnnotationSummaryDataLoader,
11
12
  AverageExperimentRunLatencyDataLoader,
12
13
  CacheForDataLoaders,
13
14
  DatasetExampleRevisionsDataLoader,
@@ -44,6 +45,7 @@ class DataLoaders:
44
45
  document_evaluation_summaries: DocumentEvaluationSummaryDataLoader
45
46
  document_evaluations: DocumentEvaluationsDataLoader
46
47
  document_retrieval_metrics: DocumentRetrievalMetricsDataLoader
48
+ annotation_summaries: AnnotationSummaryDataLoader
47
49
  evaluation_summaries: EvaluationSummaryDataLoader
48
50
  experiment_annotation_summaries: ExperimentAnnotationSummaryDataLoader
49
51
  experiment_error_rates: ExperimentErrorRatesDataLoader
@@ -8,6 +8,7 @@ from phoenix.db.insertion.evaluation import (
8
8
  )
9
9
  from phoenix.db.insertion.span import ClearProjectSpansEvent, SpanInsertionEvent
10
10
 
11
+ from .annotation_summaries import AnnotationSummaryCache, AnnotationSummaryDataLoader
11
12
  from .average_experiment_run_latency import AverageExperimentRunLatencyDataLoader
12
13
  from .dataset_example_revisions import DatasetExampleRevisionsDataLoader
13
14
  from .dataset_example_spans import DatasetExampleSpansDataLoader
@@ -43,6 +44,7 @@ __all__ = [
43
44
  "DocumentEvaluationSummaryDataLoader",
44
45
  "DocumentEvaluationsDataLoader",
45
46
  "DocumentRetrievalMetricsDataLoader",
47
+ "AnnotationSummaryDataLoader",
46
48
  "EvaluationSummaryDataLoader",
47
49
  "ExperimentAnnotationSummaryDataLoader",
48
50
  "ExperimentErrorRatesDataLoader",
@@ -68,6 +70,9 @@ class CacheForDataLoaders:
68
70
  document_evaluation_summary: DocumentEvaluationSummaryCache = field(
69
71
  default_factory=DocumentEvaluationSummaryCache,
70
72
  )
73
+ annotation_summary: AnnotationSummaryCache = field(
74
+ default_factory=AnnotationSummaryCache,
75
+ )
71
76
  evaluation_summary: EvaluationSummaryCache = field(
72
77
  default_factory=EvaluationSummaryCache,
73
78
  )
@@ -92,6 +97,7 @@ class CacheForDataLoaders:
92
97
 
93
98
  def _clear_spans(self, project_rowid: int) -> None:
94
99
  self._update_spans(project_rowid)
100
+ self.annotation_summary.invalidate_project(project_rowid)
95
101
  self.evaluation_summary.invalidate_project(project_rowid)
96
102
  self.document_evaluation_summary.invalidate_project(project_rowid)
97
103
 
@@ -113,9 +119,11 @@ class CacheForDataLoaders:
113
119
  @invalidate.register
114
120
  def _(self, event: SpanEvaluationInsertionEvent) -> None:
115
121
  project_rowid, evaluation_name = event
122
+ self.annotation_summary.invalidate((project_rowid, evaluation_name, "span"))
116
123
  self.evaluation_summary.invalidate((project_rowid, evaluation_name, "span"))
117
124
 
118
125
  @invalidate.register
119
126
  def _(self, event: TraceEvaluationInsertionEvent) -> None:
120
127
  project_rowid, evaluation_name = event
128
+ self.annotation_summary.invalidate((project_rowid, evaluation_name, "trace"))
121
129
  self.evaluation_summary.invalidate((project_rowid, evaluation_name, "trace"))
@@ -0,0 +1,146 @@
1
+ from collections import defaultdict
2
+ from datetime import datetime
3
+ from typing import (
4
+ Any,
5
+ DefaultDict,
6
+ List,
7
+ Literal,
8
+ Optional,
9
+ Tuple,
10
+ )
11
+
12
+ import pandas as pd
13
+ from aioitertools.itertools import groupby
14
+ from cachetools import LFUCache, TTLCache
15
+ from sqlalchemy import Select, func, or_, select
16
+ from strawberry.dataloader import AbstractCache, DataLoader
17
+ from typing_extensions import TypeAlias, assert_never
18
+
19
+ from phoenix.db import models
20
+ from phoenix.server.api.dataloaders.cache import TwoTierCache
21
+ from phoenix.server.api.input_types.TimeRange import TimeRange
22
+ from phoenix.server.api.types.AnnotationSummary import AnnotationSummary
23
+ from phoenix.server.types import DbSessionFactory
24
+ from phoenix.trace.dsl import SpanFilter
25
+
26
+ Kind: TypeAlias = Literal["span", "trace"]
27
+ ProjectRowId: TypeAlias = int
28
+ TimeInterval: TypeAlias = Tuple[Optional[datetime], Optional[datetime]]
29
+ FilterCondition: TypeAlias = Optional[str]
30
+ EvalName: TypeAlias = str
31
+
32
+ Segment: TypeAlias = Tuple[Kind, ProjectRowId, TimeInterval, FilterCondition]
33
+ Param: TypeAlias = EvalName
34
+
35
+ Key: TypeAlias = Tuple[Kind, ProjectRowId, Optional[TimeRange], FilterCondition, EvalName]
36
+ Result: TypeAlias = Optional[AnnotationSummary]
37
+ ResultPosition: TypeAlias = int
38
+ DEFAULT_VALUE: Result = None
39
+
40
+
41
+ def _cache_key_fn(key: Key) -> Tuple[Segment, Param]:
42
+ kind, project_rowid, time_range, filter_condition, eval_name = key
43
+ interval = (
44
+ (time_range.start, time_range.end) if isinstance(time_range, TimeRange) else (None, None)
45
+ )
46
+ return (kind, project_rowid, interval, filter_condition), eval_name
47
+
48
+
49
+ _Section: TypeAlias = Tuple[ProjectRowId, EvalName, Kind]
50
+ _SubKey: TypeAlias = Tuple[TimeInterval, FilterCondition]
51
+
52
+
53
+ class AnnotationSummaryCache(
54
+ TwoTierCache[Key, Result, _Section, _SubKey],
55
+ ):
56
+ def __init__(self) -> None:
57
+ super().__init__(
58
+ # TTL=3600 (1-hour) because time intervals are always moving forward, but
59
+ # interval endpoints are rounded down to the hour by the UI, so anything
60
+ # older than an hour most likely won't be a cache-hit anyway.
61
+ main_cache=TTLCache(maxsize=64 * 32 * 2, ttl=3600),
62
+ sub_cache_factory=lambda: LFUCache(maxsize=2 * 2),
63
+ )
64
+
65
+ def invalidate_project(self, project_rowid: ProjectRowId) -> None:
66
+ for section in self._cache.keys():
67
+ if section[0] == project_rowid:
68
+ del self._cache[section]
69
+
70
+ def _cache_key(self, key: Key) -> Tuple[_Section, _SubKey]:
71
+ (kind, project_rowid, interval, filter_condition), eval_name = _cache_key_fn(key)
72
+ return (project_rowid, eval_name, kind), (interval, filter_condition)
73
+
74
+
75
+ class AnnotationSummaryDataLoader(DataLoader[Key, Result]):
76
+ def __init__(
77
+ self,
78
+ db: DbSessionFactory,
79
+ cache_map: Optional[AbstractCache[Key, Result]] = None,
80
+ ) -> None:
81
+ super().__init__(
82
+ load_fn=self._load_fn,
83
+ cache_key_fn=_cache_key_fn,
84
+ cache_map=cache_map,
85
+ )
86
+ self._db = db
87
+
88
+ async def _load_fn(self, keys: List[Key]) -> List[Result]:
89
+ results: List[Result] = [DEFAULT_VALUE] * len(keys)
90
+ arguments: DefaultDict[
91
+ Segment,
92
+ DefaultDict[Param, List[ResultPosition]],
93
+ ] = defaultdict(lambda: defaultdict(list))
94
+ for position, key in enumerate(keys):
95
+ segment, param = _cache_key_fn(key)
96
+ arguments[segment][param].append(position)
97
+ for segment, params in arguments.items():
98
+ stmt = _get_stmt(segment, *params.keys())
99
+ async with self._db() as session:
100
+ data = await session.stream(stmt)
101
+ async for eval_name, group in groupby(data, lambda row: row.name):
102
+ summary = AnnotationSummary(pd.DataFrame(group))
103
+ for position in params[eval_name]:
104
+ results[position] = summary
105
+ return results
106
+
107
+
108
+ def _get_stmt(
109
+ segment: Segment,
110
+ *eval_names: Param,
111
+ ) -> Select[Any]:
112
+ kind, project_rowid, (start_time, end_time), filter_condition = segment
113
+ stmt = select()
114
+ if kind == "span":
115
+ msa = models.SpanAnnotation
116
+ name_column, label_column, score_column = msa.name, msa.label, msa.score
117
+ time_column = models.Span.start_time
118
+ stmt = stmt.join(models.Span).join_from(models.Span, models.Trace)
119
+ if filter_condition:
120
+ sf = SpanFilter(filter_condition)
121
+ stmt = sf(stmt)
122
+ elif kind == "trace":
123
+ mta = models.TraceAnnotation
124
+ name_column, label_column, score_column = mta.name, mta.label, mta.score
125
+ time_column = models.Trace.start_time
126
+ stmt = stmt.join(models.Trace)
127
+ else:
128
+ assert_never(kind)
129
+ stmt = stmt.add_columns(
130
+ name_column,
131
+ label_column,
132
+ func.count().label("record_count"),
133
+ func.count(label_column).label("label_count"),
134
+ func.count(score_column).label("score_count"),
135
+ func.sum(score_column).label("score_sum"),
136
+ )
137
+ stmt = stmt.group_by(name_column, label_column)
138
+ stmt = stmt.order_by(name_column, label_column)
139
+ stmt = stmt.where(models.Trace.project_rowid == project_rowid)
140
+ stmt = stmt.where(or_(score_column.is_not(None), label_column.is_not(None)))
141
+ stmt = stmt.where(name_column.in_(eval_names))
142
+ if start_time:
143
+ stmt = stmt.where(start_time <= time_column)
144
+ if end_time:
145
+ stmt = stmt.where(time_column < end_time)
146
+ return stmt
@@ -73,6 +73,7 @@ class SpanAnnotationMutationMixin:
73
73
  models.SpanAnnotation.annotator_kind,
74
74
  annotation.annotator_kind.value
75
75
  if annotation.annotator_kind is not None
76
+ and annotation.annotator_kind is not UNSET
76
77
  else None,
77
78
  False,
78
79
  ),
@@ -0,0 +1,55 @@
1
+ from typing import List, Optional, Union, cast
2
+
3
+ import pandas as pd
4
+ import strawberry
5
+ from strawberry import Private
6
+
7
+ from phoenix.db import models
8
+ from phoenix.server.api.types.LabelFraction import LabelFraction
9
+
10
+ AnnotationType = Union[models.SpanAnnotation, models.TraceAnnotation]
11
+
12
+
13
+ @strawberry.type
14
+ class AnnotationSummary:
15
+ df: Private[pd.DataFrame]
16
+
17
+ def __init__(self, dataframe: pd.DataFrame) -> None:
18
+ self.df = dataframe
19
+
20
+ @strawberry.field
21
+ def count(self) -> int:
22
+ return cast(int, self.df.record_count.sum())
23
+
24
+ @strawberry.field
25
+ def labels(self) -> List[str]:
26
+ return self.df.label.dropna().tolist()
27
+
28
+ @strawberry.field
29
+ def label_fractions(self) -> List[LabelFraction]:
30
+ if not (n := self.df.label_count.sum()):
31
+ return []
32
+ return [
33
+ LabelFraction(
34
+ label=cast(str, row.label),
35
+ fraction=row.label_count / n,
36
+ )
37
+ for row in self.df.loc[
38
+ self.df.label.notna(),
39
+ ["label", "label_count"],
40
+ ].itertuples()
41
+ ]
42
+
43
+ @strawberry.field
44
+ def mean_score(self) -> Optional[float]:
45
+ if not (n := self.df.score_count.sum()):
46
+ return None
47
+ return cast(float, self.df.score_sum.sum() / n)
48
+
49
+ @strawberry.field
50
+ def score_count(self) -> int:
51
+ return cast(int, self.df.score_count.sum())
52
+
53
+ @strawberry.field
54
+ def label_count(self) -> int:
55
+ return cast(int, self.df.label_count.sum())
@@ -5,16 +5,11 @@ import strawberry
5
5
  from strawberry import Private
6
6
 
7
7
  from phoenix.db import models
8
+ from phoenix.server.api.types.LabelFraction import LabelFraction
8
9
 
9
10
  AnnotationType = Union[models.SpanAnnotation, models.TraceAnnotation]
10
11
 
11
12
 
12
- @strawberry.type
13
- class LabelFraction:
14
- label: str
15
- fraction: float
16
-
17
-
18
13
  @strawberry.type
19
14
  class EvaluationSummary:
20
15
  df: Private[pd.DataFrame]
@@ -0,0 +1,7 @@
1
+ import strawberry
2
+
3
+
4
+ @strawberry.type
5
+ class LabelFraction:
6
+ label: str
7
+ fraction: float
@@ -20,6 +20,7 @@ from phoenix.db import models
20
20
  from phoenix.server.api.context import Context
21
21
  from phoenix.server.api.input_types.SpanSort import SpanSort, SpanSortConfig
22
22
  from phoenix.server.api.input_types.TimeRange import TimeRange
23
+ from phoenix.server.api.types.AnnotationSummary import AnnotationSummary
23
24
  from phoenix.server.api.types.DocumentEvaluationSummary import DocumentEvaluationSummary
24
25
  from phoenix.server.api.types.EvaluationSummary import EvaluationSummary
25
26
  from phoenix.server.api.types.pagination import (
@@ -356,6 +357,29 @@ class Project(Node):
356
357
  ("span", self.id_attr, time_range, filter_condition, evaluation_name),
357
358
  )
358
359
 
360
+ @strawberry.field
361
+ async def trace_annotation_summary(
362
+ self,
363
+ info: Info[Context, None],
364
+ evaluation_name: str,
365
+ time_range: Optional[TimeRange] = UNSET,
366
+ ) -> Optional[AnnotationSummary]:
367
+ return await info.context.data_loaders.annotation_summaries.load(
368
+ ("trace", self.id_attr, time_range, None, evaluation_name),
369
+ )
370
+
371
+ @strawberry.field
372
+ async def span_annotation_summary(
373
+ self,
374
+ info: Info[Context, None],
375
+ evaluation_name: str,
376
+ time_range: Optional[TimeRange] = UNSET,
377
+ filter_condition: Optional[str] = UNSET,
378
+ ) -> Optional[AnnotationSummary]:
379
+ return await info.context.data_loaders.annotation_summaries.load(
380
+ ("span", self.id_attr, time_range, filter_condition, evaluation_name),
381
+ )
382
+
359
383
  @strawberry.field
360
384
  async def document_evaluation_summary(
361
385
  self,
@@ -58,6 +58,7 @@ from phoenix.exceptions import PhoenixMigrationError
58
58
  from phoenix.pointcloud.umap_parameters import UMAPParameters
59
59
  from phoenix.server.api.context import Context, DataLoaders
60
60
  from phoenix.server.api.dataloaders import (
61
+ AnnotationSummaryDataLoader,
61
62
  AverageExperimentRunLatencyDataLoader,
62
63
  CacheForDataLoaders,
63
64
  DatasetExampleRevisionsDataLoader,
@@ -286,6 +287,12 @@ def create_graphql_router(
286
287
  ),
287
288
  document_evaluations=DocumentEvaluationsDataLoader(db),
288
289
  document_retrieval_metrics=DocumentRetrievalMetricsDataLoader(db),
290
+ annotation_summaries=AnnotationSummaryDataLoader(
291
+ db,
292
+ cache_map=cache_for_dataloaders.annotation_summary
293
+ if cache_for_dataloaders
294
+ else None,
295
+ ),
289
296
  evaluation_summaries=EvaluationSummaryDataLoader(
290
297
  db,
291
298
  cache_map=cache_for_dataloaders.evaluation_summary
@@ -0,0 +1,78 @@
1
+ {
2
+ "_components-B2sHrnz0.js": {
3
+ "file": "assets/components-B2sHrnz0.js",
4
+ "name": "components",
5
+ "imports": [
6
+ "_vendor-BMWfu6zp.js",
7
+ "_vendor-arizeai-CkyzG9Wl.js",
8
+ "_pages-BTHjBGHq.js",
9
+ "_vendor-three-DwGkEfCM.js",
10
+ "_vendor-codemirror-DO3VqEcD.js"
11
+ ]
12
+ },
13
+ "_pages-BTHjBGHq.js": {
14
+ "file": "assets/pages-BTHjBGHq.js",
15
+ "name": "pages",
16
+ "imports": [
17
+ "_vendor-BMWfu6zp.js",
18
+ "_components-B2sHrnz0.js",
19
+ "_vendor-arizeai-CkyzG9Wl.js",
20
+ "_vendor-recharts-BGN0SxgJ.js",
21
+ "_vendor-codemirror-DO3VqEcD.js"
22
+ ]
23
+ },
24
+ "_vendor-!~{003}~.js": {
25
+ "file": "assets/vendor-DxkFTwjz.css",
26
+ "src": "_vendor-!~{003}~.js"
27
+ },
28
+ "_vendor-BMWfu6zp.js": {
29
+ "file": "assets/vendor-BMWfu6zp.js",
30
+ "name": "vendor",
31
+ "imports": [
32
+ "_vendor-three-DwGkEfCM.js"
33
+ ],
34
+ "css": [
35
+ "assets/vendor-DxkFTwjz.css"
36
+ ]
37
+ },
38
+ "_vendor-arizeai-CkyzG9Wl.js": {
39
+ "file": "assets/vendor-arizeai-CkyzG9Wl.js",
40
+ "name": "vendor-arizeai",
41
+ "imports": [
42
+ "_vendor-BMWfu6zp.js"
43
+ ]
44
+ },
45
+ "_vendor-codemirror-DO3VqEcD.js": {
46
+ "file": "assets/vendor-codemirror-DO3VqEcD.js",
47
+ "name": "vendor-codemirror",
48
+ "imports": [
49
+ "_vendor-BMWfu6zp.js"
50
+ ]
51
+ },
52
+ "_vendor-recharts-BGN0SxgJ.js": {
53
+ "file": "assets/vendor-recharts-BGN0SxgJ.js",
54
+ "name": "vendor-recharts",
55
+ "imports": [
56
+ "_vendor-BMWfu6zp.js"
57
+ ]
58
+ },
59
+ "_vendor-three-DwGkEfCM.js": {
60
+ "file": "assets/vendor-three-DwGkEfCM.js",
61
+ "name": "vendor-three"
62
+ },
63
+ "index.tsx": {
64
+ "file": "assets/index-BIFmgnip.js",
65
+ "name": "index",
66
+ "src": "index.tsx",
67
+ "isEntry": true,
68
+ "imports": [
69
+ "_vendor-BMWfu6zp.js",
70
+ "_vendor-arizeai-CkyzG9Wl.js",
71
+ "_components-B2sHrnz0.js",
72
+ "_pages-BTHjBGHq.js",
73
+ "_vendor-three-DwGkEfCM.js",
74
+ "_vendor-codemirror-DO3VqEcD.js",
75
+ "_vendor-recharts-BGN0SxgJ.js"
76
+ ]
77
+ }
78
+ }