arize-phoenix 5.5.2__tar.gz → 5.7.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 (339) hide show
  1. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/PKG-INFO +4 -7
  2. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/README.md +1 -1
  3. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/pyproject.toml +5 -8
  4. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/config.py +50 -8
  5. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/core/model.py +3 -3
  6. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/core/model_schema.py +41 -50
  7. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/core/model_schema_adapter.py +17 -16
  8. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/datetime_utils.py +2 -2
  9. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/db/bulk_inserter.py +10 -20
  10. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/db/engines.py +2 -1
  11. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/db/enums.py +2 -2
  12. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/db/helpers.py +8 -7
  13. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/db/insertion/dataset.py +9 -19
  14. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/db/insertion/document_annotation.py +14 -13
  15. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/db/insertion/helpers.py +6 -16
  16. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/db/insertion/span_annotation.py +14 -13
  17. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/db/insertion/trace_annotation.py +14 -13
  18. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/db/insertion/types.py +19 -30
  19. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/db/migrations/versions/3be8647b87d8_add_token_columns_to_spans_table.py +8 -8
  20. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/db/models.py +28 -28
  21. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/experiments/evaluators/base.py +2 -1
  22. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/experiments/evaluators/code_evaluators.py +4 -5
  23. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/experiments/evaluators/llm_evaluators.py +157 -4
  24. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/experiments/evaluators/utils.py +3 -2
  25. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/experiments/functions.py +10 -21
  26. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/experiments/tracing.py +2 -1
  27. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/experiments/types.py +20 -29
  28. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/experiments/utils.py +2 -1
  29. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/inferences/errors.py +6 -5
  30. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/inferences/fixtures.py +6 -5
  31. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/inferences/inferences.py +37 -37
  32. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/inferences/schema.py +11 -10
  33. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/inferences/validation.py +13 -14
  34. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/logging/_formatter.py +3 -3
  35. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/metrics/__init__.py +5 -4
  36. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/metrics/binning.py +2 -1
  37. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/metrics/metrics.py +2 -1
  38. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/metrics/mixins.py +7 -6
  39. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/metrics/retrieval_metrics.py +2 -1
  40. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/metrics/timeseries.py +5 -4
  41. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/metrics/wrappers.py +2 -2
  42. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/pointcloud/clustering.py +3 -4
  43. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/pointcloud/pointcloud.py +7 -5
  44. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/pointcloud/umap_parameters.py +2 -1
  45. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/dataloaders/annotation_summaries.py +12 -19
  46. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/dataloaders/average_experiment_run_latency.py +2 -2
  47. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/dataloaders/cache/two_tier_cache.py +3 -2
  48. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/dataloaders/dataset_example_revisions.py +3 -8
  49. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/dataloaders/dataset_example_spans.py +2 -5
  50. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/dataloaders/document_evaluation_summaries.py +12 -18
  51. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/dataloaders/document_evaluations.py +3 -7
  52. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/dataloaders/document_retrieval_metrics.py +6 -13
  53. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/dataloaders/experiment_annotation_summaries.py +4 -8
  54. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/dataloaders/experiment_error_rates.py +2 -5
  55. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/dataloaders/experiment_run_annotations.py +3 -7
  56. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/dataloaders/experiment_run_counts.py +1 -5
  57. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/dataloaders/experiment_sequence_number.py +2 -5
  58. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/dataloaders/latency_ms_quantile.py +21 -30
  59. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/dataloaders/min_start_or_max_end_times.py +7 -13
  60. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/dataloaders/project_by_name.py +3 -3
  61. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/dataloaders/record_counts.py +11 -18
  62. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/dataloaders/span_annotations.py +3 -7
  63. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/dataloaders/span_dataset_examples.py +3 -8
  64. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/dataloaders/span_descendants.py +3 -7
  65. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/dataloaders/span_projects.py +2 -2
  66. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/dataloaders/token_counts.py +12 -19
  67. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/dataloaders/trace_row_ids.py +3 -7
  68. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/dataloaders/user_roles.py +3 -3
  69. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/dataloaders/users.py +3 -3
  70. arize_phoenix-5.7.0/src/phoenix/server/api/helpers/__init__.py +12 -0
  71. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/helpers/dataset_helpers.py +10 -9
  72. arize_phoenix-5.7.0/src/phoenix/server/api/helpers/playground_clients.py +671 -0
  73. arize_phoenix-5.7.0/src/phoenix/server/api/helpers/playground_registry.py +70 -0
  74. arize_phoenix-5.7.0/src/phoenix/server/api/helpers/playground_spans.py +325 -0
  75. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/input_types/AddExamplesToDatasetInput.py +2 -2
  76. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/input_types/AddSpansToDatasetInput.py +2 -2
  77. arize_phoenix-5.7.0/src/phoenix/server/api/input_types/ChatCompletionInput.py +38 -0
  78. arize_phoenix-5.7.0/src/phoenix/server/api/input_types/ChatCompletionMessageInput.py +24 -0
  79. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/input_types/ClusterInput.py +2 -2
  80. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/input_types/DeleteAnnotationsInput.py +1 -3
  81. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/input_types/DeleteDatasetExamplesInput.py +2 -2
  82. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/input_types/DeleteExperimentsInput.py +1 -3
  83. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/input_types/DimensionFilter.py +4 -4
  84. arize_phoenix-5.7.0/src/phoenix/server/api/input_types/GenerativeModelInput.py +17 -0
  85. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/input_types/Granularity.py +1 -1
  86. arize_phoenix-5.7.0/src/phoenix/server/api/input_types/InvocationParameters.py +163 -0
  87. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/input_types/PatchDatasetExamplesInput.py +2 -2
  88. arize_phoenix-5.7.0/src/phoenix/server/api/input_types/TemplateOptions.py +10 -0
  89. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/mutations/__init__.py +4 -0
  90. arize_phoenix-5.7.0/src/phoenix/server/api/mutations/chat_mutations.py +374 -0
  91. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/mutations/dataset_mutations.py +4 -4
  92. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/mutations/experiment_mutations.py +1 -2
  93. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/mutations/export_events_mutations.py +7 -7
  94. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/mutations/span_annotations_mutations.py +4 -4
  95. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/mutations/trace_annotations_mutations.py +4 -4
  96. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/mutations/user_mutations.py +4 -4
  97. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/openapi/schema.py +2 -2
  98. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/queries.py +61 -72
  99. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/routers/oauth2.py +4 -4
  100. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/routers/v1/datasets.py +22 -36
  101. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/routers/v1/evaluations.py +6 -5
  102. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/routers/v1/experiment_evaluations.py +2 -2
  103. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/routers/v1/experiment_runs.py +2 -2
  104. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/routers/v1/experiments.py +4 -4
  105. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/routers/v1/spans.py +13 -12
  106. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/routers/v1/traces.py +5 -5
  107. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/routers/v1/utils.py +5 -5
  108. arize_phoenix-5.7.0/src/phoenix/server/api/schema.py +49 -0
  109. arize_phoenix-5.7.0/src/phoenix/server/api/subscriptions.py +441 -0
  110. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/AnnotationSummary.py +3 -3
  111. arize_phoenix-5.7.0/src/phoenix/server/api/types/ChatCompletionSubscriptionPayload.py +44 -0
  112. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/Cluster.py +8 -7
  113. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/Dataset.py +5 -4
  114. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/Dimension.py +3 -3
  115. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/DocumentEvaluationSummary.py +8 -7
  116. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/EmbeddingDimension.py +6 -5
  117. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/EvaluationSummary.py +3 -3
  118. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/Event.py +7 -7
  119. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/Experiment.py +3 -3
  120. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/ExperimentComparison.py +2 -4
  121. arize_phoenix-5.7.0/src/phoenix/server/api/types/GenerativeProvider.py +40 -0
  122. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/Inferences.py +9 -8
  123. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/InferencesRole.py +2 -2
  124. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/Model.py +2 -2
  125. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/Project.py +11 -18
  126. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/Segments.py +3 -3
  127. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/Span.py +45 -7
  128. arize_phoenix-5.7.0/src/phoenix/server/api/types/TemplateLanguage.py +9 -0
  129. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/TimeSeries.py +8 -7
  130. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/Trace.py +2 -2
  131. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/UMAPPoints.py +6 -6
  132. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/User.py +3 -3
  133. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/node.py +1 -3
  134. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/pagination.py +4 -4
  135. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/utils.py +2 -4
  136. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/app.py +76 -37
  137. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/bearer_auth.py +4 -10
  138. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/dml_event.py +3 -3
  139. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/dml_event_handler.py +10 -24
  140. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/grpc_server.py +3 -2
  141. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/jwt_store.py +22 -21
  142. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/main.py +17 -4
  143. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/oauth2.py +3 -2
  144. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/rate_limiters.py +5 -8
  145. arize_phoenix-5.7.0/src/phoenix/server/static/.vite/manifest.json +78 -0
  146. arize_phoenix-5.7.0/src/phoenix/server/static/assets/components-Csu8UKOs.js +1612 -0
  147. arize_phoenix-5.5.2/src/phoenix/server/static/assets/index-DCzakdJq.js → arize_phoenix-5.7.0/src/phoenix/server/static/assets/index-Bk5C9EA7.js +2 -2
  148. arize_phoenix-5.5.2/src/phoenix/server/static/assets/pages-CAL1FDMt.js → arize_phoenix-5.7.0/src/phoenix/server/static/assets/pages-UeWaKXNs.js +337 -442
  149. arize_phoenix-5.5.2/src/phoenix/server/static/assets/vendor-6IcPAw_j.js → arize_phoenix-5.7.0/src/phoenix/server/static/assets/vendor-CtqfhlbC.js +6 -6
  150. arize_phoenix-5.5.2/src/phoenix/server/static/assets/vendor-arizeai-DRZuoyuF.js → arize_phoenix-5.7.0/src/phoenix/server/static/assets/vendor-arizeai-C_3SBz56.js +2 -2
  151. arize_phoenix-5.5.2/src/phoenix/server/static/assets/vendor-codemirror-DVE2_WBr.js → arize_phoenix-5.7.0/src/phoenix/server/static/assets/vendor-codemirror-wfdk9cjp.js +1 -1
  152. arize_phoenix-5.5.2/src/phoenix/server/static/assets/vendor-recharts-DwrexFA4.js → arize_phoenix-5.7.0/src/phoenix/server/static/assets/vendor-recharts-BiVnSv90.js +1 -1
  153. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/templates/index.html +1 -0
  154. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/thread_server.py +1 -1
  155. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/types.py +17 -29
  156. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/services.py +8 -3
  157. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/session/client.py +12 -24
  158. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/session/data_extractor.py +3 -3
  159. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/session/evaluation.py +1 -2
  160. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/session/session.py +26 -21
  161. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/trace/attributes.py +16 -28
  162. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/trace/dsl/filter.py +17 -21
  163. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/trace/dsl/helpers.py +3 -3
  164. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/trace/dsl/query.py +13 -22
  165. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/trace/fixtures.py +11 -17
  166. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/trace/otel.py +5 -15
  167. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/trace/projects.py +3 -2
  168. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/trace/schemas.py +2 -2
  169. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/trace/span_evaluations.py +9 -8
  170. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/trace/span_json_decoder.py +3 -3
  171. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/trace/span_json_encoder.py +2 -2
  172. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/trace/trace_dataset.py +6 -5
  173. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/trace/utils.py +6 -6
  174. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/utilities/deprecation.py +3 -2
  175. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/utilities/error_handling.py +3 -2
  176. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/utilities/json.py +2 -1
  177. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/utilities/logging.py +2 -2
  178. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/utilities/project.py +1 -1
  179. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/utilities/re.py +3 -4
  180. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/utilities/template_formatters.py +16 -5
  181. arize_phoenix-5.7.0/src/phoenix/version.py +1 -0
  182. arize_phoenix-5.5.2/src/phoenix/server/api/helpers/__init__.py +0 -11
  183. arize_phoenix-5.5.2/src/phoenix/server/api/input_types/ChatCompletionMessageInput.py +0 -12
  184. arize_phoenix-5.5.2/src/phoenix/server/api/input_types/InvocationParameters.py +0 -20
  185. arize_phoenix-5.5.2/src/phoenix/server/api/schema.py +0 -17
  186. arize_phoenix-5.5.2/src/phoenix/server/api/subscriptions.py +0 -588
  187. arize_phoenix-5.5.2/src/phoenix/server/api/types/GenerativeProvider.py +0 -16
  188. arize_phoenix-5.5.2/src/phoenix/server/static/.vite/manifest.json +0 -78
  189. arize_phoenix-5.5.2/src/phoenix/server/static/assets/components-hX0LgYz3.js +0 -1428
  190. arize_phoenix-5.5.2/src/phoenix/version.py +0 -1
  191. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/.gitignore +0 -0
  192. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/IP_NOTICE +0 -0
  193. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/LICENSE +0 -0
  194. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/__init__.py +0 -0
  195. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/auth.py +0 -0
  196. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/core/__init__.py +0 -0
  197. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/core/embedding_dimension.py +0 -0
  198. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/db/README.md +0 -0
  199. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/db/__init__.py +0 -0
  200. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/db/alembic.ini +0 -0
  201. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/db/facilitator.py +0 -0
  202. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/db/insertion/__init__.py +0 -0
  203. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/db/insertion/constants.py +0 -0
  204. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/db/insertion/evaluation.py +0 -0
  205. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/db/insertion/span.py +0 -0
  206. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/db/migrate.py +0 -0
  207. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/db/migrations/__init__.py +0 -0
  208. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/db/migrations/env.py +0 -0
  209. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/db/migrations/script.py.mako +0 -0
  210. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/db/migrations/versions/10460e46d750_datasets.py +0 -0
  211. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/db/migrations/versions/cd164e83824f_users_and_tokens.py +0 -0
  212. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/db/migrations/versions/cf03bd6bae1d_init.py +0 -0
  213. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/exceptions.py +0 -0
  214. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/experiments/__init__.py +0 -0
  215. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/experiments/evaluators/__init__.py +0 -0
  216. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/inferences/__init__.py +0 -0
  217. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/logging/__init__.py +0 -0
  218. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/logging/_config.py +0 -0
  219. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/logging/_filter.py +0 -0
  220. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/metrics/README.md +0 -0
  221. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/pointcloud/__init__.py +0 -0
  222. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/pointcloud/projectors.py +0 -0
  223. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/py.typed +0 -0
  224. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/__init__.py +0 -0
  225. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/README.md +0 -0
  226. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/__init__.py +0 -0
  227. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/auth.py +0 -0
  228. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/context.py +0 -0
  229. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/dataloaders/__init__.py +0 -0
  230. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/dataloaders/cache/__init__.py +0 -0
  231. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/exceptions.py +0 -0
  232. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/input_types/ClearProjectInput.py +0 -0
  233. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/input_types/Coordinates.py +0 -0
  234. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/input_types/CreateDatasetInput.py +0 -0
  235. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/input_types/CreateSpanAnnotationInput.py +0 -0
  236. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/input_types/CreateTraceAnnotationInput.py +0 -0
  237. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/input_types/DataQualityMetricInput.py +0 -0
  238. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/input_types/DatasetExampleInput.py +0 -0
  239. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/input_types/DatasetSort.py +0 -0
  240. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/input_types/DatasetVersionSort.py +0 -0
  241. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/input_types/DeleteDatasetInput.py +0 -0
  242. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/input_types/DimensionInput.py +0 -0
  243. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/input_types/PatchAnnotationInput.py +0 -0
  244. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/input_types/PatchDatasetInput.py +0 -0
  245. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/input_types/PerformanceMetricInput.py +0 -0
  246. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/input_types/SpanAnnotationSort.py +0 -0
  247. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/input_types/SpanSort.py +0 -0
  248. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/input_types/TimeRange.py +0 -0
  249. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/input_types/TraceAnnotationSort.py +0 -0
  250. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/input_types/UserRoleInput.py +0 -0
  251. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/input_types/__init__.py +0 -0
  252. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/interceptor.py +0 -0
  253. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/mutations/api_key_mutations.py +0 -0
  254. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/mutations/project_mutations.py +0 -0
  255. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/openapi/__init__.py +0 -0
  256. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/openapi/main.py +0 -0
  257. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/routers/__init__.py +0 -0
  258. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/routers/auth.py +0 -0
  259. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/routers/embeddings.py +0 -0
  260. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/routers/utils.py +0 -0
  261. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/routers/v1/__init__.py +0 -0
  262. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/routers/v1/pydantic_compat.py +0 -0
  263. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/Annotation.py +0 -0
  264. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/AnnotatorKind.py +0 -0
  265. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/ApiKey.py +0 -0
  266. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/AuthMethod.py +0 -0
  267. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/ChatCompletionMessageRole.py +0 -0
  268. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/CreateDatasetPayload.py +0 -0
  269. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/DataQualityMetric.py +0 -0
  270. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/DatasetExample.py +0 -0
  271. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/DatasetExampleRevision.py +0 -0
  272. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/DatasetValues.py +0 -0
  273. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/DatasetVersion.py +0 -0
  274. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/DimensionDataType.py +0 -0
  275. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/DimensionShape.py +0 -0
  276. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/DimensionType.py +0 -0
  277. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/DimensionWithValue.py +0 -0
  278. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/DocumentRetrievalMetrics.py +0 -0
  279. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/EmbeddingMetadata.py +0 -0
  280. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/Evaluation.py +0 -0
  281. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/EventMetadata.py +0 -0
  282. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/ExampleRevisionInterface.py +0 -0
  283. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/ExperimentAnnotationSummary.py +0 -0
  284. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/ExperimentRun.py +0 -0
  285. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/ExperimentRunAnnotation.py +0 -0
  286. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/ExportedFile.py +0 -0
  287. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/Functionality.py +0 -0
  288. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/GenerativeModel.py +0 -0
  289. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/LabelFraction.py +0 -0
  290. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/MimeType.py +0 -0
  291. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/NumericRange.py +0 -0
  292. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/PerformanceMetric.py +0 -0
  293. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/PromptResponse.py +0 -0
  294. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/Retrieval.py +0 -0
  295. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/ScalarDriftMetricEnum.py +0 -0
  296. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/SortDir.py +0 -0
  297. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/SpanAnnotation.py +0 -0
  298. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/SystemApiKey.py +0 -0
  299. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/TraceAnnotation.py +0 -0
  300. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/UserApiKey.py +0 -0
  301. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/UserRole.py +0 -0
  302. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/ValidationResult.py +0 -0
  303. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/VectorDriftMetricEnum.py +0 -0
  304. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/__init__.py +0 -0
  305. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/email/__init__.py +0 -0
  306. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/email/sender.py +0 -0
  307. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/email/templates/__init__.py +0 -0
  308. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/email/templates/password_reset.html +0 -0
  309. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/email/types.py +0 -0
  310. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/openapi/__init__.py +0 -0
  311. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/prometheus.py +0 -0
  312. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/static/apple-touch-icon-114x114.png +0 -0
  313. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/static/apple-touch-icon-120x120.png +0 -0
  314. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/static/apple-touch-icon-144x144.png +0 -0
  315. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/static/apple-touch-icon-152x152.png +0 -0
  316. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/static/apple-touch-icon-180x180.png +0 -0
  317. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/static/apple-touch-icon-72x72.png +0 -0
  318. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/static/apple-touch-icon-76x76.png +0 -0
  319. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/static/apple-touch-icon.png +0 -0
  320. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/static/assets/vendor-DxkFTwjz.css +0 -0
  321. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/static/assets/vendor-three-DwGkEfCM.js +0 -0
  322. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/static/favicon.ico +0 -0
  323. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/static/modernizr.js +0 -0
  324. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/telemetry.py +0 -0
  325. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/templates/__init__.py +0 -0
  326. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/session/__init__.py +0 -0
  327. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/settings.py +0 -0
  328. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/trace/__init__.py +0 -0
  329. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/trace/dsl/README.md +0 -0
  330. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/trace/dsl/__init__.py +0 -0
  331. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/trace/errors.py +0 -0
  332. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/trace/evaluation_conventions.py +0 -0
  333. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/trace/exporter.py +0 -0
  334. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/trace/v1/__init__.py +0 -0
  335. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/trace/v1/evaluation_pb2.py +0 -0
  336. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/trace/v1/evaluation_pb2.pyi +0 -0
  337. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/utilities/__init__.py +0 -0
  338. {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/utilities/client.py +0 -0
  339. {arize_phoenix-5.5.2 → arize_phoenix-5.7.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: 5.5.2
3
+ Version: 5.7.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
@@ -23,16 +23,14 @@ Requires-Dist: arize-phoenix-evals>=0.13.1
23
23
  Requires-Dist: arize-phoenix-otel>=0.5.1
24
24
  Requires-Dist: authlib
25
25
  Requires-Dist: cachetools
26
- Requires-Dist: fast-hdbscan>=0.2.0
27
26
  Requires-Dist: fastapi
28
27
  Requires-Dist: grpc-interceptor
29
28
  Requires-Dist: grpcio
30
29
  Requires-Dist: httpx
31
30
  Requires-Dist: jinja2
32
- Requires-Dist: numba>=0.60.0
33
31
  Requires-Dist: numpy!=2.0.0
34
32
  Requires-Dist: openinference-instrumentation>=0.1.12
35
- Requires-Dist: openinference-semantic-conventions>=0.1.9
33
+ Requires-Dist: openinference-semantic-conventions>=0.1.12
36
34
  Requires-Dist: opentelemetry-exporter-otlp
37
35
  Requires-Dist: opentelemetry-proto>=1.12.0
38
36
  Requires-Dist: opentelemetry-sdk
@@ -51,7 +49,6 @@ Requires-Dist: starlette
51
49
  Requires-Dist: strawberry-graphql==0.243.1
52
50
  Requires-Dist: tqdm
53
51
  Requires-Dist: typing-extensions>=4.6
54
- Requires-Dist: umap-learn
55
52
  Requires-Dist: uvicorn
56
53
  Requires-Dist: websockets
57
54
  Requires-Dist: wrapt
@@ -86,7 +83,7 @@ Requires-Dist: jupyter; extra == 'dev'
86
83
  Requires-Dist: langchain>=0.0.334; extra == 'dev'
87
84
  Requires-Dist: litellm>=1.0.3; extra == 'dev'
88
85
  Requires-Dist: llama-index>=0.10.3; extra == 'dev'
89
- Requires-Dist: mypy==1.11.2; extra == 'dev'
86
+ Requires-Dist: mypy==1.12.1; extra == 'dev'
90
87
  Requires-Dist: nbqa; extra == 'dev'
91
88
  Requires-Dist: pandas-stubs==2.2.2.240603; extra == 'dev'
92
89
  Requires-Dist: pandas>=1.0; extra == 'dev'
@@ -193,7 +190,7 @@ Phoenix container images are available via [Docker Hub](https://hub.docker.com/r
193
190
  | [Data Export](https://docs.arize.com/phoenix/tracing/how-to-tracing/extract-data-from-spans) | ✅ |
194
191
  | REST API | ✅ |
195
192
  | GraphQL API | ✅ |
196
- | Data Retention | Costomizable |
193
+ | Data Retention | Customizable |
197
194
  | Authentication | ✅ |
198
195
  | Social Login | ✅ |
199
196
  | RBAC | ✅ |
@@ -66,7 +66,7 @@ Phoenix container images are available via [Docker Hub](https://hub.docker.com/r
66
66
  | [Data Export](https://docs.arize.com/phoenix/tracing/how-to-tracing/extract-data-from-spans) | ✅ |
67
67
  | REST API | ✅ |
68
68
  | GraphQL API | ✅ |
69
- | Data Retention | Costomizable |
69
+ | Data Retention | Customizable |
70
70
  | Authentication | ✅ |
71
71
  | Social Login | ✅ |
72
72
  | RBAC | ✅ |
@@ -25,9 +25,6 @@ dependencies = [
25
25
  "numpy!=2.0.0", # https://github.com/lmcinnes/umap/issues/1138
26
26
  "pandas>=1.0",
27
27
  "jinja2",
28
- "umap-learn",
29
- "fast-hdbscan>=0.2.0",
30
- "numba>=0.60.0", # https://github.com/astral-sh/uv/issues/6281
31
28
  "starlette",
32
29
  "uvicorn",
33
30
  "psutil",
@@ -45,7 +42,7 @@ dependencies = [
45
42
  "opentelemetry-proto>=1.12.0", # needed to avoid this issue: https://github.com/Arize-ai/phoenix/issues/2695
46
43
  "opentelemetry-exporter-otlp",
47
44
  "opentelemetry-semantic-conventions",
48
- "openinference-semantic-conventions>=0.1.9",
45
+ "openinference-semantic-conventions>=0.1.12",
49
46
  "openinference-instrumentation>=0.1.12",
50
47
  "sqlalchemy[asyncio]>=2.0.4, <3",
51
48
  "alembic>=1.3.0, <2",
@@ -77,7 +74,7 @@ dev = [
77
74
  "jupyter",
78
75
  "nbqa",
79
76
  "ruff==0.6.9",
80
- "mypy==1.11.2",
77
+ "mypy==1.12.1",
81
78
  "pandas>=1.0",
82
79
  "tabulate", # used by DataFrame.to_markdown()
83
80
  "types-tabulate",
@@ -215,7 +212,7 @@ dependencies = [
215
212
  dependencies = [
216
213
  "grpcio",
217
214
  "litellm>=1.0.3",
218
- "mypy==1.11.2",
215
+ "mypy==1.12.1",
219
216
  "openai>=1.0.0",
220
217
  "opentelemetry-exporter-otlp",
221
218
  "opentelemetry-instrumentation-fastapi",
@@ -396,14 +393,14 @@ module = [
396
393
  "orjson", # suppress fastapi internal type errors
397
394
  "pypistats",
398
395
  "authlib.*",
396
+ "google.*",
397
+ "mistralai.*",
399
398
  ]
400
399
  ignore_missing_imports = true
401
400
 
402
401
  [tool.ruff]
403
402
  exclude = [
404
403
  "api_reference",
405
- "packages",
406
- "src/phoenix/evals/",
407
404
  "dist/",
408
405
  ".git",
409
406
  "__pycache__",
@@ -6,7 +6,7 @@ from dataclasses import dataclass
6
6
  from datetime import timedelta
7
7
  from enum import Enum
8
8
  from pathlib import Path
9
- from typing import Dict, List, Optional, Tuple, overload
9
+ from typing import Optional, overload
10
10
  from urllib.parse import urlparse
11
11
 
12
12
  from phoenix.utilities.logging import log_a_list
@@ -80,6 +80,10 @@ ENV_LOG_MIGRATIONS = "PHOENIX_LOG_MIGRATIONS"
80
80
  """
81
81
  Whether or not to log migrations. Defaults to true.
82
82
  """
83
+ ENV_PHOENIX_ENABLE_WEBSOCKETS = "PHOENIX_ENABLE_WEBSOCKETS"
84
+ """
85
+ Whether or not to enable websockets. Defaults to None.
86
+ """
83
87
 
84
88
  # Phoenix server OpenTelemetry instrumentation environment variables
85
89
  ENV_PHOENIX_SERVER_INSTRUMENTATION_OTLP_TRACE_COLLECTOR_HTTP_ENDPOINT = (
@@ -142,6 +146,10 @@ ENV_PHOENIX_SMTP_VALIDATE_CERTS = "PHOENIX_SMTP_VALIDATE_CERTS"
142
146
  Whether to validate SMTP server certificates. Defaults to true.
143
147
  """
144
148
 
149
+ # FastAPI and GQL extension settings
150
+ ENV_PHOENIX_FASTAPI_MIDDLEWARE_PATHS = "PHOENIX_FASTAPI_MIDDLEWARE_PATHS"
151
+ ENV_PHOENIX_GQL_EXTENSION_PATHS = "PHOENIX_GQL_EXTENSION_PATHS"
152
+
145
153
 
146
154
  def server_instrumentation_is_enabled() -> bool:
147
155
  return bool(
@@ -273,7 +281,7 @@ def get_env_phoenix_api_key() -> Optional[str]:
273
281
  return os.environ.get(ENV_PHOENIX_API_KEY)
274
282
 
275
283
 
276
- def get_env_auth_settings() -> Tuple[bool, Optional[str]]:
284
+ def get_env_auth_settings() -> tuple[bool, Optional[str]]:
277
285
  """
278
286
  Gets auth settings and performs validation.
279
287
  """
@@ -329,8 +337,8 @@ def get_env_refresh_token_expiry() -> timedelta:
329
337
  return timedelta(minutes=minutes)
330
338
 
331
339
 
332
- def get_env_csrf_trusted_origins() -> List[str]:
333
- origins: List[str] = []
340
+ def get_env_csrf_trusted_origins() -> list[str]:
341
+ origins: list[str] = []
334
342
  if not (csrf_trusted_origins := os.getenv(ENV_PHOENIX_CSRF_TRUSTED_ORIGINS)):
335
343
  return origins
336
344
  for origin in csrf_trusted_origins.split(","):
@@ -371,6 +379,10 @@ def get_env_smtp_validate_certs() -> bool:
371
379
  return _bool_val(ENV_PHOENIX_SMTP_VALIDATE_CERTS, True)
372
380
 
373
381
 
382
+ def get_env_enable_websockets() -> Optional[bool]:
383
+ return _bool_val(ENV_PHOENIX_ENABLE_WEBSOCKETS)
384
+
385
+
374
386
  @dataclass(frozen=True)
375
387
  class OAuth2ClientConfig:
376
388
  idp_name: str
@@ -428,7 +440,7 @@ class OAuth2ClientConfig:
428
440
  )
429
441
 
430
442
 
431
- def get_env_oauth2_settings() -> List[OAuth2ClientConfig]:
443
+ def get_env_oauth2_settings() -> list[OAuth2ClientConfig]:
432
444
  """
433
445
  Get OAuth2 settings from environment variables.
434
446
  """
@@ -494,7 +506,7 @@ def ensure_working_dir() -> None:
494
506
  ensure_working_dir()
495
507
 
496
508
 
497
- def get_exported_files(directory: Path) -> List[Path]:
509
+ def get_exported_files(directory: Path) -> list[Path]:
498
510
  """
499
511
  Yields the list of paths of exported files.
500
512
 
@@ -505,7 +517,7 @@ def get_exported_files(directory: Path) -> List[Path]:
505
517
 
506
518
  Returns
507
519
  -------
508
- list: List[Path]
520
+ list: list[Path]
509
521
  List of paths of the exported files.
510
522
  """
511
523
  return list(directory.glob("*.parquet"))
@@ -584,7 +596,7 @@ def get_env_enable_prometheus() -> bool:
584
596
  )
585
597
 
586
598
 
587
- def get_env_client_headers() -> Optional[Dict[str, str]]:
599
+ def get_env_client_headers() -> Optional[dict[str, str]]:
588
600
  if headers_str := os.getenv(ENV_PHOENIX_CLIENT_HEADERS):
589
601
  return parse_env_headers(headers_str)
590
602
  return None
@@ -643,6 +655,36 @@ def get_env_db_logging_level() -> int:
643
655
  )
644
656
 
645
657
 
658
+ def get_env_fastapi_middleware_paths() -> list[tuple[str, str]]:
659
+ env_value = os.getenv("PHOENIX_FASTAPI_MIDDLEWARE_PATHS", "")
660
+ paths = []
661
+ for entry in env_value.split(","):
662
+ entry = entry.strip()
663
+ if entry:
664
+ if ":" not in entry:
665
+ raise ValueError(
666
+ f"Invalid middleware entry '{entry}'. Expected format 'file_path:ClassName'."
667
+ )
668
+ file_path, object_name = entry.split(":", 1)
669
+ paths.append((file_path.strip(), object_name.strip()))
670
+ return paths
671
+
672
+
673
+ def get_env_gql_extension_paths() -> list[tuple[str, str]]:
674
+ env_value = os.getenv("PHOENIX_GQL_EXTENSION_PATHS", "")
675
+ paths = []
676
+ for entry in env_value.split(","):
677
+ entry = entry.strip()
678
+ if entry:
679
+ if ":" not in entry:
680
+ raise ValueError(
681
+ f"Invalid extension entry '{entry}'. Expected format 'file_path:ClassName'."
682
+ )
683
+ file_path, object_name = entry.split(":", 1)
684
+ paths.append((file_path.strip(), object_name.strip()))
685
+ return paths
686
+
687
+
646
688
  def _get_logging_level(env_var: str, default_level: int) -> int:
647
689
  logging_level = os.getenv(env_var)
648
690
  if not logging_level:
@@ -1,4 +1,4 @@
1
- from typing import List, Optional, Union
1
+ from typing import Optional, Union
2
2
 
3
3
  from phoenix.inferences.inferences import Inferences
4
4
  from phoenix.inferences.schema import EmbeddingColumnNames, EmbeddingFeatures
@@ -8,8 +8,8 @@ from .embedding_dimension import EmbeddingDimension
8
8
 
9
9
  def _get_embedding_dimensions(
10
10
  primary_inferences: Inferences, reference_inferences: Optional[Inferences]
11
- ) -> List[EmbeddingDimension]:
12
- embedding_dimensions: List[EmbeddingDimension] = []
11
+ ) -> list[EmbeddingDimension]:
12
+ embedding_dimensions: list[EmbeddingDimension] = []
13
13
  embedding_features: EmbeddingFeatures = {}
14
14
 
15
15
  primary_embedding_features: Optional[EmbeddingFeatures] = (
@@ -4,6 +4,7 @@ import re
4
4
  import threading
5
5
  from abc import ABC, abstractmethod
6
6
  from collections import defaultdict
7
+ from collections.abc import Callable, Hashable, Iterable, Iterator, Mapping, Sequence
7
8
  from contextlib import contextmanager
8
9
  from dataclasses import dataclass, field, fields, replace
9
10
  from datetime import datetime, timedelta, timezone
@@ -14,19 +15,9 @@ from random import random
14
15
  from typing import (
15
16
  Any,
16
17
  BinaryIO,
17
- Callable,
18
- Dict,
19
18
  Generic,
20
- Hashable,
21
- Iterable,
22
- Iterator,
23
- List,
24
- Mapping,
25
19
  NamedTuple,
26
20
  Optional,
27
- Sequence,
28
- Tuple,
29
- Type,
30
21
  TypeVar,
31
22
  Union,
32
23
  cast,
@@ -265,7 +256,7 @@ class _Cache(Generic[_Key, _Value]):
265
256
  2
266
257
  """
267
258
 
268
- _cache: Dict[_Key, _Value] = field(
259
+ _cache: dict[_Key, _Value] = field(
269
260
  init=False,
270
261
  default_factory=dict,
271
262
  )
@@ -275,7 +266,7 @@ class _Cache(Generic[_Key, _Value]):
275
266
  )
276
267
 
277
268
  @contextmanager
278
- def __call__(self) -> Iterator[Dict[_Key, _Value]]:
269
+ def __call__(self) -> Iterator[dict[_Key, _Value]]:
279
270
  with self._lock:
280
271
  yield self._cache
281
272
 
@@ -405,14 +396,14 @@ class Dimension(Column, ABC):
405
396
  @dataclass(frozen=True)
406
397
  class ScalarDimension(Dimension):
407
398
  @property
408
- def min_max(self) -> Tuple[Any, Any]:
399
+ def min_max(self) -> tuple[Any, Any]:
409
400
  if self._model is None:
410
401
  return np.nan, np.nan
411
402
  model = cast(Model, self._model)
412
403
  return model.dimension_min_max_from_all_df(self.name)
413
404
 
414
405
  @property
415
- def categories(self) -> Tuple[str, ...]:
406
+ def categories(self) -> tuple[str, ...]:
416
407
  if self._model is None or self.data_type is CONTINUOUS:
417
408
  return ()
418
409
  model = cast(Model, self._model)
@@ -502,7 +493,7 @@ class RetrievalEmbeddingDimension(EmbeddingDimension):
502
493
  Name: TypeAlias = str
503
494
  ColumnKey: TypeAlias = Union[Name, Column, SingularDimensionalRole]
504
495
  MultiDimensionKey: TypeAlias = Union[MultiDimensionalRole, Sequence[DimensionRole]]
505
- RowNumbering: TypeAlias = Union[int, List[int]]
496
+ RowNumbering: TypeAlias = Union[int, list[int]]
506
497
 
507
498
 
508
499
  def _is_column_key(key: Any) -> TypeGuard[ColumnKey]:
@@ -525,7 +516,7 @@ def _is_multi_dimension_key(
525
516
 
526
517
  def _is_dimension_type_filter(
527
518
  key: Any,
528
- ) -> TypeGuard[Tuple[MultiDimensionKey, Union[Type[ScalarDimension], Type[EmbeddingDimension]]]]:
519
+ ) -> TypeGuard[tuple[MultiDimensionKey, Union[type[ScalarDimension], type[EmbeddingDimension]]]]:
529
520
  return (
530
521
  isinstance(key, tuple)
531
522
  and len(key) == 2
@@ -534,7 +525,7 @@ def _is_dimension_type_filter(
534
525
  )
535
526
 
536
527
 
537
- def _is_named_df(obj: Any) -> TypeGuard[Tuple[Name, pd.DataFrame]]:
528
+ def _is_named_df(obj: Any) -> TypeGuard[tuple[Name, pd.DataFrame]]:
538
529
  return (
539
530
  isinstance(obj, tuple)
540
531
  and len(obj) == 2
@@ -664,7 +655,7 @@ class Events(ModelData):
664
655
  def __getitem__(self, key: ColumnKey) -> "pd.Series[Any]": ...
665
656
 
666
657
  @overload
667
- def __getitem__(self, key: List[RowId]) -> "Events": ...
658
+ def __getitem__(self, key: list[RowId]) -> "Events": ...
668
659
 
669
660
  def __getitem__(self, key: Any) -> Any:
670
661
  if isinstance(key, list):
@@ -722,7 +713,7 @@ class Inferences(Events):
722
713
  def __getitem__(self, key: ColumnKey) -> "pd.Series[Any]": ...
723
714
 
724
715
  @overload
725
- def __getitem__(self, key: List[RowId]) -> Events: ...
716
+ def __getitem__(self, key: list[RowId]) -> Events: ...
726
717
 
727
718
  def __getitem__(self, key: Any) -> Any:
728
719
  if isinstance(key, list):
@@ -746,19 +737,19 @@ class Model:
746
737
  a column of NaNs.
747
738
  """
748
739
 
749
- _inference_sets: Dict[InferencesRole, Inferences]
750
- _dimensions: Dict[Name, Dimension]
751
- _dim_names_by_role: Dict[DimensionRole, List[Name]]
752
- _original_columns_by_role: Dict[InferencesRole, "pd.Index[Any]"]
740
+ _inference_sets: dict[InferencesRole, Inferences]
741
+ _dimensions: dict[Name, Dimension]
742
+ _dim_names_by_role: dict[DimensionRole, list[Name]]
743
+ _original_columns_by_role: dict[InferencesRole, "pd.Index[Any]"]
753
744
  _default_timestamps_factory: _ConstantValueSeriesFactory
754
745
  _nan_series_factory: _ConstantValueSeriesFactory
755
- _dimension_categories_from_all_inferences: _Cache[Name, Tuple[str, ...]]
756
- _dimension_min_max_from_all_inferences: _Cache[Name, Tuple[float, float]]
746
+ _dimension_categories_from_all_inferences: _Cache[Name, tuple[str, ...]]
747
+ _dimension_min_max_from_all_inferences: _Cache[Name, tuple[float, float]]
757
748
 
758
749
  def __init__(
759
750
  self,
760
751
  dimensions: Iterable[Dimension],
761
- dataframes: Iterable[Union[pd.DataFrame, Tuple[Name, pd.DataFrame]]],
752
+ dataframes: Iterable[Union[pd.DataFrame, tuple[Name, pd.DataFrame]]],
762
753
  /,
763
754
  treat_omitted_columns_as_features: bool = True,
764
755
  timestamps_already_normalized: bool = False,
@@ -775,11 +766,11 @@ class Model:
775
766
  object.__setattr__(
776
767
  self,
777
768
  "_dimension_min_max_from_all_inferences",
778
- _Cache[Name, Tuple[float, float]](),
769
+ _Cache[Name, tuple[float, float]](),
779
770
  )
780
771
 
781
772
  df_names, dfs = cast(
782
- Tuple[Iterable[Name], Iterable[pd.DataFrame]],
773
+ tuple[Iterable[Name], Iterable[pd.DataFrame]],
783
774
  zip(*_coerce_tuple(dataframes)),
784
775
  )
785
776
  str_col_dfs = _coerce_str_column_names(dfs)
@@ -956,7 +947,7 @@ class Model:
956
947
  )
957
948
 
958
949
  @cached_property
959
- def scalar_dimensions(self) -> Tuple[ScalarDimension, ...]:
950
+ def scalar_dimensions(self) -> tuple[ScalarDimension, ...]:
960
951
  """Put these in a cached sequence because currently their positions
961
952
  in this list also determine their node IDs in graphql.
962
953
  """
@@ -969,7 +960,7 @@ class Model:
969
960
  )
970
961
 
971
962
  @cached_property
972
- def embedding_dimensions(self) -> Tuple[EmbeddingDimension, ...]:
963
+ def embedding_dimensions(self) -> tuple[EmbeddingDimension, ...]:
973
964
  """Put these in a cached sequence because currently their positions
974
965
  in this list also determine their node IDs in graphql.
975
966
  """
@@ -982,10 +973,10 @@ class Model:
982
973
  def dimension_categories_from_all_inferences(
983
974
  self,
984
975
  dimension_name: Name,
985
- ) -> Tuple[str, ...]:
976
+ ) -> tuple[str, ...]:
986
977
  dim = self[dimension_name]
987
978
  if dim.data_type is CONTINUOUS:
988
- return cast(Tuple[str, ...], ())
979
+ return cast(tuple[str, ...], ())
989
980
  with self._dimension_categories_from_all_inferences() as cache:
990
981
  try:
991
982
  return cache[dimension_name]
@@ -1003,7 +994,7 @@ class Model:
1003
994
  def dimension_min_max_from_all_df(
1004
995
  self,
1005
996
  dimension_name: Name,
1006
- ) -> Tuple[float, float]:
997
+ ) -> tuple[float, float]:
1007
998
  dim = self[dimension_name]
1008
999
  if dim.data_type is not CONTINUOUS:
1009
1000
  return (np.nan, np.nan)
@@ -1021,7 +1012,7 @@ class Model:
1021
1012
  return ans
1022
1013
 
1023
1014
  @overload
1024
- def __getitem__(self, key: Type[Inferences]) -> Iterator[Inferences]: ...
1015
+ def __getitem__(self, key: type[Inferences]) -> Iterator[Inferences]: ...
1025
1016
 
1026
1017
  @overload
1027
1018
  def __getitem__(self, key: InferencesRole) -> Inferences: ...
@@ -1033,20 +1024,20 @@ class Model:
1033
1024
  def __getitem__(self, key: MultiDimensionKey) -> Iterator[Dimension]: ...
1034
1025
 
1035
1026
  @overload
1036
- def __getitem__(self, key: Type[ScalarDimension]) -> Iterator[ScalarDimension]: ...
1027
+ def __getitem__(self, key: type[ScalarDimension]) -> Iterator[ScalarDimension]: ...
1037
1028
 
1038
1029
  @overload
1039
- def __getitem__(self, key: Type[EmbeddingDimension]) -> Iterator[EmbeddingDimension]: ...
1030
+ def __getitem__(self, key: type[EmbeddingDimension]) -> Iterator[EmbeddingDimension]: ...
1040
1031
 
1041
1032
  @overload
1042
- def __getitem__(self, key: Type[Dimension]) -> Iterator[Dimension]: ...
1033
+ def __getitem__(self, key: type[Dimension]) -> Iterator[Dimension]: ...
1043
1034
 
1044
1035
  @overload
1045
1036
  def __getitem__(
1046
1037
  self,
1047
- key: Tuple[
1038
+ key: tuple[
1048
1039
  MultiDimensionKey,
1049
- Union[Type[ScalarDimension], Type[EmbeddingDimension]],
1040
+ Union[type[ScalarDimension], type[EmbeddingDimension]],
1050
1041
  ],
1051
1042
  ) -> Iterator[Dimension]: ...
1052
1043
 
@@ -1094,9 +1085,9 @@ class Model:
1094
1085
 
1095
1086
  def _get_multi_dims_by_type(
1096
1087
  self,
1097
- key: Tuple[
1088
+ key: tuple[
1098
1089
  MultiDimensionKey,
1099
- Union[Type[ScalarDimension], Type[EmbeddingDimension]],
1090
+ Union[type[ScalarDimension], type[EmbeddingDimension]],
1100
1091
  ],
1101
1092
  ) -> Iterator[Dimension]:
1102
1093
  return filter(lambda dim: type(dim) is key[1], self[key[0]])
@@ -1105,7 +1096,7 @@ class Model:
1105
1096
  def _new_dimension(
1106
1097
  self,
1107
1098
  obj: DimensionRole,
1108
- cls: Type[Dimension] = ScalarDimension,
1099
+ cls: type[Dimension] = ScalarDimension,
1109
1100
  **kwargs: Any,
1110
1101
  ) -> Dimension: ...
1111
1102
 
@@ -1113,7 +1104,7 @@ class Model:
1113
1104
  def _new_dimension(
1114
1105
  self,
1115
1106
  obj: Name,
1116
- cls: Type[Dimension] = ScalarDimension,
1107
+ cls: type[Dimension] = ScalarDimension,
1117
1108
  **kwargs: Any,
1118
1109
  ) -> Dimension: ...
1119
1110
 
@@ -1125,7 +1116,7 @@ class Model:
1125
1116
  ) -> Dimension: ...
1126
1117
 
1127
1118
  def _new_dimension(
1128
- self, obj: Any, cls: Type[Dimension] = ScalarDimension, **kwargs: Any
1119
+ self, obj: Any, cls: type[Dimension] = ScalarDimension, **kwargs: Any
1129
1120
  ) -> Dimension:
1130
1121
  """Creates a new Dimension or copies an existing one, setting the
1131
1122
  model weak reference to the `self` Model instance, and sharing the
@@ -1175,13 +1166,13 @@ class Schema(SchemaSpec):
1175
1166
  prediction_score: Optional[str] = None
1176
1167
  actual_label: Optional[str] = None
1177
1168
  actual_score: Optional[str] = None
1178
- prompt: Optional[RetrievalEmbedding] = None
1169
+ prompt: Optional[Embedding] = None
1179
1170
  response: Optional[Union[str, Embedding]] = None
1180
1171
  features: Iterable[Union[str, CompositeDimensionSpec]] = field(default_factory=list)
1181
1172
  tags: Iterable[Union[str, CompositeDimensionSpec]] = field(default_factory=list)
1182
1173
 
1183
1174
  # internal attribute not exposed to users
1184
- _dimensions: List[Dimension] = field(
1175
+ _dimensions: list[Dimension] = field(
1185
1176
  init=False, repr=False, hash=False, compare=False, default_factory=list
1186
1177
  )
1187
1178
 
@@ -1248,7 +1239,7 @@ class Schema(SchemaSpec):
1248
1239
 
1249
1240
  def __call__(
1250
1241
  self,
1251
- *dataframes: Union[pd.DataFrame, Tuple[Name, pd.DataFrame]],
1242
+ *dataframes: Union[pd.DataFrame, tuple[Name, pd.DataFrame]],
1252
1243
  **kwargs: Any,
1253
1244
  ) -> Model:
1254
1245
  """Dimensions are the "baton" that Schema hands over to Model."""
@@ -1302,7 +1293,7 @@ def _get_omitted_column_names(
1302
1293
 
1303
1294
  def _group_names_by_dim_role(
1304
1295
  dimensions: Iterable[Dimension],
1305
- ) -> Iterator[Tuple[DimensionRole, List[str]]]:
1296
+ ) -> Iterator[tuple[DimensionRole, list[str]]]:
1306
1297
  return (
1307
1298
  (role, [dim.name for dim in dims])
1308
1299
  for role, dims in groupby(
@@ -1356,8 +1347,8 @@ def _coerce_str(obj: Optional[str]) -> str:
1356
1347
 
1357
1348
 
1358
1349
  def _coerce_tuple(
1359
- dataframes: Iterable[Union[pd.DataFrame, Tuple[Name, pd.DataFrame]]],
1360
- ) -> Iterator[Tuple[Name, pd.DataFrame]]:
1350
+ dataframes: Iterable[Union[pd.DataFrame, tuple[Name, pd.DataFrame]]],
1351
+ ) -> Iterator[tuple[Name, pd.DataFrame]]:
1361
1352
  for dataframe in dataframes:
1362
1353
  if isinstance(dataframe, pd.DataFrame):
1363
1354
  yield (_rand_str(), dataframe)
@@ -1,6 +1,7 @@
1
+ from collections.abc import Iterable, Sized
1
2
  from itertools import chain
2
3
  from operator import itemgetter
3
- from typing import Dict, Iterable, List, Optional, Sized, Tuple, Union
4
+ from typing import Optional, Union
4
5
 
5
6
  import pandas as pd
6
7
  from pandas.api.types import is_object_dtype
@@ -24,18 +25,18 @@ def create_model_from_inferences(*inference_sets: Optional[Inferences]) -> Model
24
25
  # have the same length between inferences.
25
26
  _ = _get_embedding_dimensions(inference_sets[0], inference_sets[1])
26
27
 
27
- named_dataframes: List[Tuple[InferencesName, pd.DataFrame]] = []
28
- prediction_ids: List[ColumnName] = []
29
- timestamps: List[ColumnName] = []
30
- prediction_labels: List[ColumnName] = []
31
- prediction_scores: List[ColumnName] = []
32
- actual_labels: List[ColumnName] = []
33
- actual_scores: List[ColumnName] = []
34
- features: List[ColumnName] = []
35
- tags: List[ColumnName] = []
36
- embeddings: Dict[DisplayName, EmbeddingColumnNames] = {}
37
- prompts: List[EmbeddingColumnNames] = []
38
- responses: List[Union[str, EmbeddingColumnNames]] = []
28
+ named_dataframes: list[tuple[InferencesName, pd.DataFrame]] = []
29
+ prediction_ids: list[ColumnName] = []
30
+ timestamps: list[ColumnName] = []
31
+ prediction_labels: list[ColumnName] = []
32
+ prediction_scores: list[ColumnName] = []
33
+ actual_labels: list[ColumnName] = []
34
+ actual_scores: list[ColumnName] = []
35
+ features: list[ColumnName] = []
36
+ tags: list[ColumnName] = []
37
+ embeddings: dict[DisplayName, EmbeddingColumnNames] = {}
38
+ prompts: list[EmbeddingColumnNames] = []
39
+ responses: list[Union[str, EmbeddingColumnNames]] = []
39
40
 
40
41
  for inferences in filter(_is_inferences, inference_sets):
41
42
  df = inferences.dataframe
@@ -184,14 +185,14 @@ def _translate_prompt_embedding(
184
185
  def _split_vectors_vs_scalars(
185
186
  names: Iterable[str],
186
187
  *dataframes: pd.DataFrame,
187
- ) -> Tuple[List[str], List[Embedding]]:
188
+ ) -> tuple[list[str], list[Embedding]]:
188
189
  """A best-effort attempt at separating vector columns from scalar columns
189
190
  by examining the first non-null item of the column from each dataframe. If
190
191
  any item is `Iterable` and `Sized`, but not `str`, then the column is
191
192
  returned as `Embedding`, else it's returned as scalar.
192
193
  """
193
- scalars: List[str] = []
194
- vectors: List[Embedding] = []
194
+ scalars: list[str] = []
195
+ vectors: list[Embedding] = []
195
196
  # convert to sets for a speedier lookup
196
197
  column_names = [set(df.columns) for df in dataframes]
197
198
  for name in names:
@@ -1,5 +1,5 @@
1
1
  from datetime import datetime, timedelta, timezone, tzinfo
2
- from typing import Any, Optional, Tuple, cast
2
+ from typing import Any, Optional, cast
3
3
 
4
4
  import pandas as pd
5
5
  import pytz
@@ -96,7 +96,7 @@ MINUTE_DATETIME_FORMAT = "%Y-%m-%dT%H:%M:00%z"
96
96
  def right_open_time_range(
97
97
  min_time: Optional[datetime],
98
98
  max_time: Optional[datetime],
99
- ) -> Tuple[Optional[datetime], Optional[datetime]]:
99
+ ) -> tuple[Optional[datetime], Optional[datetime]]:
100
100
  """
101
101
  First adds one minute to `max_time`, because time intervals are right
102
102
  open and one minute is the smallest interval allowed, then rounds down