arize-phoenix 5.4.0__tar.gz → 5.5.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 (322) hide show
  1. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/PKG-INFO +2 -1
  2. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/pyproject.toml +1 -0
  3. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/subscriptions.py +227 -94
  4. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/static/.vite/manifest.json +9 -9
  5. arize_phoenix-5.4.0/src/phoenix/server/static/assets/components-8zh9kCOG.js → arize_phoenix-5.5.0/src/phoenix/server/static/assets/components-DOjuTDx9.js +2 -2
  6. arize_phoenix-5.4.0/src/phoenix/server/static/assets/index-Ci93KI-L.js → arize_phoenix-5.5.0/src/phoenix/server/static/assets/index-C15MiAe0.js +1 -1
  7. arize_phoenix-5.4.0/src/phoenix/server/static/assets/pages-CFNU-U_5.js → arize_phoenix-5.5.0/src/phoenix/server/static/assets/pages-uwuWR0d3.js +173 -173
  8. arize_phoenix-5.5.0/src/phoenix/version.py +1 -0
  9. arize_phoenix-5.4.0/src/phoenix/version.py +0 -1
  10. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/.gitignore +0 -0
  11. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/IP_NOTICE +0 -0
  12. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/LICENSE +0 -0
  13. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/README.md +0 -0
  14. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/__init__.py +0 -0
  15. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/auth.py +0 -0
  16. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/config.py +0 -0
  17. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/core/__init__.py +0 -0
  18. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/core/embedding_dimension.py +0 -0
  19. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/core/model.py +0 -0
  20. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/core/model_schema.py +0 -0
  21. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/core/model_schema_adapter.py +0 -0
  22. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/datetime_utils.py +0 -0
  23. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/db/README.md +0 -0
  24. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/db/__init__.py +0 -0
  25. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/db/alembic.ini +0 -0
  26. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/db/bulk_inserter.py +0 -0
  27. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/db/engines.py +0 -0
  28. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/db/enums.py +0 -0
  29. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/db/facilitator.py +0 -0
  30. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/db/helpers.py +0 -0
  31. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/db/insertion/__init__.py +0 -0
  32. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/db/insertion/constants.py +0 -0
  33. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/db/insertion/dataset.py +0 -0
  34. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/db/insertion/document_annotation.py +0 -0
  35. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/db/insertion/evaluation.py +0 -0
  36. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/db/insertion/helpers.py +0 -0
  37. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/db/insertion/span.py +0 -0
  38. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/db/insertion/span_annotation.py +0 -0
  39. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/db/insertion/trace_annotation.py +0 -0
  40. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/db/insertion/types.py +0 -0
  41. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/db/migrate.py +0 -0
  42. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/db/migrations/__init__.py +0 -0
  43. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/db/migrations/env.py +0 -0
  44. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/db/migrations/script.py.mako +0 -0
  45. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/db/migrations/versions/10460e46d750_datasets.py +0 -0
  46. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/db/migrations/versions/3be8647b87d8_add_token_columns_to_spans_table.py +0 -0
  47. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/db/migrations/versions/cd164e83824f_users_and_tokens.py +0 -0
  48. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/db/migrations/versions/cf03bd6bae1d_init.py +0 -0
  49. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/db/models.py +0 -0
  50. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/exceptions.py +0 -0
  51. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/experiments/__init__.py +0 -0
  52. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/experiments/evaluators/__init__.py +0 -0
  53. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/experiments/evaluators/base.py +0 -0
  54. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/experiments/evaluators/code_evaluators.py +0 -0
  55. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/experiments/evaluators/llm_evaluators.py +0 -0
  56. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/experiments/evaluators/utils.py +0 -0
  57. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/experiments/functions.py +0 -0
  58. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/experiments/tracing.py +0 -0
  59. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/experiments/types.py +0 -0
  60. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/experiments/utils.py +0 -0
  61. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/inferences/__init__.py +0 -0
  62. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/inferences/errors.py +0 -0
  63. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/inferences/fixtures.py +0 -0
  64. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/inferences/inferences.py +0 -0
  65. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/inferences/schema.py +0 -0
  66. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/inferences/validation.py +0 -0
  67. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/logging/__init__.py +0 -0
  68. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/logging/_config.py +0 -0
  69. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/logging/_filter.py +0 -0
  70. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/logging/_formatter.py +0 -0
  71. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/metrics/README.md +0 -0
  72. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/metrics/__init__.py +0 -0
  73. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/metrics/binning.py +0 -0
  74. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/metrics/metrics.py +0 -0
  75. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/metrics/mixins.py +0 -0
  76. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/metrics/retrieval_metrics.py +0 -0
  77. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/metrics/timeseries.py +0 -0
  78. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/metrics/wrappers.py +0 -0
  79. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/pointcloud/__init__.py +0 -0
  80. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/pointcloud/clustering.py +0 -0
  81. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/pointcloud/pointcloud.py +0 -0
  82. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/pointcloud/projectors.py +0 -0
  83. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/pointcloud/umap_parameters.py +0 -0
  84. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/py.typed +0 -0
  85. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/__init__.py +0 -0
  86. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/README.md +0 -0
  87. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/__init__.py +0 -0
  88. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/auth.py +0 -0
  89. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/context.py +0 -0
  90. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/dataloaders/__init__.py +0 -0
  91. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/dataloaders/annotation_summaries.py +0 -0
  92. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/dataloaders/average_experiment_run_latency.py +0 -0
  93. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/dataloaders/cache/__init__.py +0 -0
  94. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/dataloaders/cache/two_tier_cache.py +0 -0
  95. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/dataloaders/dataset_example_revisions.py +0 -0
  96. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/dataloaders/dataset_example_spans.py +0 -0
  97. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/dataloaders/document_evaluation_summaries.py +0 -0
  98. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/dataloaders/document_evaluations.py +0 -0
  99. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/dataloaders/document_retrieval_metrics.py +0 -0
  100. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/dataloaders/experiment_annotation_summaries.py +0 -0
  101. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/dataloaders/experiment_error_rates.py +0 -0
  102. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/dataloaders/experiment_run_annotations.py +0 -0
  103. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/dataloaders/experiment_run_counts.py +0 -0
  104. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/dataloaders/experiment_sequence_number.py +0 -0
  105. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/dataloaders/latency_ms_quantile.py +0 -0
  106. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/dataloaders/min_start_or_max_end_times.py +0 -0
  107. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/dataloaders/project_by_name.py +0 -0
  108. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/dataloaders/record_counts.py +0 -0
  109. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/dataloaders/span_annotations.py +0 -0
  110. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/dataloaders/span_dataset_examples.py +0 -0
  111. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/dataloaders/span_descendants.py +0 -0
  112. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/dataloaders/span_projects.py +0 -0
  113. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/dataloaders/token_counts.py +0 -0
  114. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/dataloaders/trace_row_ids.py +0 -0
  115. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/dataloaders/user_roles.py +0 -0
  116. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/dataloaders/users.py +0 -0
  117. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/exceptions.py +0 -0
  118. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/helpers/__init__.py +0 -0
  119. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/helpers/dataset_helpers.py +0 -0
  120. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/input_types/AddExamplesToDatasetInput.py +0 -0
  121. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/input_types/AddSpansToDatasetInput.py +0 -0
  122. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/input_types/ChatCompletionMessageInput.py +0 -0
  123. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/input_types/ClearProjectInput.py +0 -0
  124. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/input_types/ClusterInput.py +0 -0
  125. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/input_types/Coordinates.py +0 -0
  126. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/input_types/CreateDatasetInput.py +0 -0
  127. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/input_types/CreateSpanAnnotationInput.py +0 -0
  128. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/input_types/CreateTraceAnnotationInput.py +0 -0
  129. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/input_types/DataQualityMetricInput.py +0 -0
  130. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/input_types/DatasetExampleInput.py +0 -0
  131. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/input_types/DatasetSort.py +0 -0
  132. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/input_types/DatasetVersionSort.py +0 -0
  133. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/input_types/DeleteAnnotationsInput.py +0 -0
  134. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/input_types/DeleteDatasetExamplesInput.py +0 -0
  135. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/input_types/DeleteDatasetInput.py +0 -0
  136. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/input_types/DeleteExperimentsInput.py +0 -0
  137. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/input_types/DimensionFilter.py +0 -0
  138. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/input_types/DimensionInput.py +0 -0
  139. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/input_types/Granularity.py +0 -0
  140. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/input_types/InvocationParameters.py +0 -0
  141. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/input_types/PatchAnnotationInput.py +0 -0
  142. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/input_types/PatchDatasetExamplesInput.py +0 -0
  143. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/input_types/PatchDatasetInput.py +0 -0
  144. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/input_types/PerformanceMetricInput.py +0 -0
  145. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/input_types/SpanAnnotationSort.py +0 -0
  146. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/input_types/SpanSort.py +0 -0
  147. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/input_types/TimeRange.py +0 -0
  148. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/input_types/TraceAnnotationSort.py +0 -0
  149. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/input_types/UserRoleInput.py +0 -0
  150. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/input_types/__init__.py +0 -0
  151. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/interceptor.py +0 -0
  152. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/mutations/__init__.py +0 -0
  153. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/mutations/api_key_mutations.py +0 -0
  154. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/mutations/dataset_mutations.py +0 -0
  155. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/mutations/experiment_mutations.py +0 -0
  156. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/mutations/export_events_mutations.py +0 -0
  157. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/mutations/project_mutations.py +0 -0
  158. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/mutations/span_annotations_mutations.py +0 -0
  159. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/mutations/trace_annotations_mutations.py +0 -0
  160. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/mutations/user_mutations.py +0 -0
  161. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/openapi/__init__.py +0 -0
  162. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/openapi/main.py +0 -0
  163. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/openapi/schema.py +0 -0
  164. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/queries.py +0 -0
  165. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/routers/__init__.py +0 -0
  166. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/routers/auth.py +0 -0
  167. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/routers/embeddings.py +0 -0
  168. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/routers/oauth2.py +0 -0
  169. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/routers/utils.py +0 -0
  170. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/routers/v1/__init__.py +0 -0
  171. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/routers/v1/datasets.py +0 -0
  172. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/routers/v1/evaluations.py +0 -0
  173. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/routers/v1/experiment_evaluations.py +0 -0
  174. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/routers/v1/experiment_runs.py +0 -0
  175. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/routers/v1/experiments.py +0 -0
  176. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/routers/v1/pydantic_compat.py +0 -0
  177. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/routers/v1/spans.py +0 -0
  178. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/routers/v1/traces.py +0 -0
  179. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/routers/v1/utils.py +0 -0
  180. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/schema.py +0 -0
  181. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/types/Annotation.py +0 -0
  182. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/types/AnnotationSummary.py +0 -0
  183. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/types/AnnotatorKind.py +0 -0
  184. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/types/ApiKey.py +0 -0
  185. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/types/AuthMethod.py +0 -0
  186. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/types/ChatCompletionMessageRole.py +0 -0
  187. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/types/Cluster.py +0 -0
  188. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/types/CreateDatasetPayload.py +0 -0
  189. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/types/DataQualityMetric.py +0 -0
  190. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/types/Dataset.py +0 -0
  191. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/types/DatasetExample.py +0 -0
  192. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/types/DatasetExampleRevision.py +0 -0
  193. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/types/DatasetValues.py +0 -0
  194. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/types/DatasetVersion.py +0 -0
  195. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/types/Dimension.py +0 -0
  196. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/types/DimensionDataType.py +0 -0
  197. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/types/DimensionShape.py +0 -0
  198. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/types/DimensionType.py +0 -0
  199. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/types/DimensionWithValue.py +0 -0
  200. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/types/DocumentEvaluationSummary.py +0 -0
  201. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/types/DocumentRetrievalMetrics.py +0 -0
  202. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/types/EmbeddingDimension.py +0 -0
  203. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/types/EmbeddingMetadata.py +0 -0
  204. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/types/Evaluation.py +0 -0
  205. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/types/EvaluationSummary.py +0 -0
  206. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/types/Event.py +0 -0
  207. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/types/EventMetadata.py +0 -0
  208. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/types/ExampleRevisionInterface.py +0 -0
  209. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/types/Experiment.py +0 -0
  210. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/types/ExperimentAnnotationSummary.py +0 -0
  211. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/types/ExperimentComparison.py +0 -0
  212. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/types/ExperimentRun.py +0 -0
  213. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/types/ExperimentRunAnnotation.py +0 -0
  214. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/types/ExportedFile.py +0 -0
  215. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/types/Functionality.py +0 -0
  216. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/types/GenerativeModel.py +0 -0
  217. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/types/GenerativeProvider.py +0 -0
  218. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/types/Inferences.py +0 -0
  219. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/types/InferencesRole.py +0 -0
  220. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/types/LabelFraction.py +0 -0
  221. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/types/MimeType.py +0 -0
  222. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/types/Model.py +0 -0
  223. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/types/NumericRange.py +0 -0
  224. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/types/PerformanceMetric.py +0 -0
  225. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/types/Project.py +0 -0
  226. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/types/PromptResponse.py +0 -0
  227. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/types/Retrieval.py +0 -0
  228. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/types/ScalarDriftMetricEnum.py +0 -0
  229. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/types/Segments.py +0 -0
  230. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/types/SortDir.py +0 -0
  231. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/types/Span.py +0 -0
  232. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/types/SpanAnnotation.py +0 -0
  233. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/types/SystemApiKey.py +0 -0
  234. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/types/TimeSeries.py +0 -0
  235. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/types/Trace.py +0 -0
  236. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/types/TraceAnnotation.py +0 -0
  237. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/types/UMAPPoints.py +0 -0
  238. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/types/User.py +0 -0
  239. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/types/UserApiKey.py +0 -0
  240. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/types/UserRole.py +0 -0
  241. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/types/ValidationResult.py +0 -0
  242. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/types/VectorDriftMetricEnum.py +0 -0
  243. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/types/__init__.py +0 -0
  244. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/types/node.py +0 -0
  245. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/types/pagination.py +0 -0
  246. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/api/utils.py +0 -0
  247. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/app.py +0 -0
  248. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/bearer_auth.py +0 -0
  249. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/dml_event.py +0 -0
  250. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/dml_event_handler.py +0 -0
  251. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/email/__init__.py +0 -0
  252. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/email/sender.py +0 -0
  253. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/email/templates/__init__.py +0 -0
  254. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/email/templates/password_reset.html +0 -0
  255. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/email/types.py +0 -0
  256. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/grpc_server.py +0 -0
  257. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/jwt_store.py +0 -0
  258. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/main.py +0 -0
  259. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/oauth2.py +0 -0
  260. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/openapi/__init__.py +0 -0
  261. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/prometheus.py +0 -0
  262. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/rate_limiters.py +0 -0
  263. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/static/apple-touch-icon-114x114.png +0 -0
  264. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/static/apple-touch-icon-120x120.png +0 -0
  265. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/static/apple-touch-icon-144x144.png +0 -0
  266. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/static/apple-touch-icon-152x152.png +0 -0
  267. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/static/apple-touch-icon-180x180.png +0 -0
  268. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/static/apple-touch-icon-72x72.png +0 -0
  269. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/static/apple-touch-icon-76x76.png +0 -0
  270. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/static/apple-touch-icon.png +0 -0
  271. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/static/assets/vendor-6IcPAw_j.js +0 -0
  272. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/static/assets/vendor-DxkFTwjz.css +0 -0
  273. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/static/assets/vendor-arizeai-uC2sozJ6.js +0 -0
  274. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/static/assets/vendor-codemirror-DVE2_WBr.js +0 -0
  275. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/static/assets/vendor-recharts-DwrexFA4.js +0 -0
  276. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/static/assets/vendor-three-DwGkEfCM.js +0 -0
  277. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/static/favicon.ico +0 -0
  278. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/static/modernizr.js +0 -0
  279. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/telemetry.py +0 -0
  280. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/templates/__init__.py +0 -0
  281. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/templates/index.html +0 -0
  282. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/thread_server.py +0 -0
  283. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/server/types.py +0 -0
  284. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/services.py +0 -0
  285. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/session/__init__.py +0 -0
  286. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/session/client.py +0 -0
  287. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/session/data_extractor.py +0 -0
  288. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/session/evaluation.py +0 -0
  289. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/session/session.py +0 -0
  290. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/settings.py +0 -0
  291. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/trace/__init__.py +0 -0
  292. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/trace/attributes.py +0 -0
  293. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/trace/dsl/README.md +0 -0
  294. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/trace/dsl/__init__.py +0 -0
  295. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/trace/dsl/filter.py +0 -0
  296. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/trace/dsl/helpers.py +0 -0
  297. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/trace/dsl/query.py +0 -0
  298. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/trace/errors.py +0 -0
  299. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/trace/evaluation_conventions.py +0 -0
  300. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/trace/exporter.py +0 -0
  301. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/trace/fixtures.py +0 -0
  302. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/trace/otel.py +0 -0
  303. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/trace/projects.py +0 -0
  304. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/trace/schemas.py +0 -0
  305. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/trace/span_evaluations.py +0 -0
  306. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/trace/span_json_decoder.py +0 -0
  307. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/trace/span_json_encoder.py +0 -0
  308. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/trace/trace_dataset.py +0 -0
  309. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/trace/utils.py +0 -0
  310. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/trace/v1/__init__.py +0 -0
  311. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/trace/v1/evaluation_pb2.py +0 -0
  312. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/trace/v1/evaluation_pb2.pyi +0 -0
  313. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/utilities/__init__.py +0 -0
  314. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/utilities/client.py +0 -0
  315. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/utilities/deprecation.py +0 -0
  316. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/utilities/error_handling.py +0 -0
  317. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/utilities/json.py +0 -0
  318. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/utilities/logging.py +0 -0
  319. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/utilities/project.py +0 -0
  320. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/utilities/re.py +0 -0
  321. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/utilities/span_store.py +0 -0
  322. {arize_phoenix-5.4.0 → arize_phoenix-5.5.0}/src/phoenix/utilities/template_formatters.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: arize-phoenix
3
- Version: 5.4.0
3
+ Version: 5.5.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
@@ -56,6 +56,7 @@ Requires-Dist: uvicorn
56
56
  Requires-Dist: websockets
57
57
  Requires-Dist: wrapt
58
58
  Provides-Extra: container
59
+ Requires-Dist: anthropic; extra == 'container'
59
60
  Requires-Dist: fast-hdbscan>=0.2.0; extra == 'container'
60
61
  Requires-Dist: numba>=0.60.0; extra == 'container'
61
62
  Requires-Dist: openai>=1.0.0; extra == 'container'
@@ -123,6 +123,7 @@ pg = [
123
123
  "psycopg[binary,pool]",
124
124
  ]
125
125
  container = [
126
+ "anthropic",
126
127
  "prometheus-client",
127
128
  "openai>=1.0.0",
128
129
  "opentelemetry-sdk",
@@ -1,4 +1,5 @@
1
1
  import json
2
+ from abc import ABC, abstractmethod
2
3
  from collections import defaultdict
3
4
  from dataclasses import fields
4
5
  from datetime import datetime
@@ -9,6 +10,7 @@ from typing import (
9
10
  Annotated,
10
11
  Any,
11
12
  AsyncIterator,
13
+ Callable,
12
14
  DefaultDict,
13
15
  Dict,
14
16
  Iterable,
@@ -16,6 +18,7 @@ from typing import (
16
18
  List,
17
19
  Optional,
18
20
  Tuple,
21
+ Type,
19
22
  Union,
20
23
  )
21
24
 
@@ -56,14 +59,13 @@ from phoenix.utilities.template_formatters import (
56
59
  )
57
60
 
58
61
  if TYPE_CHECKING:
62
+ from anthropic.types import MessageParam
59
63
  from openai.types import CompletionUsage
60
- from openai.types.chat import (
61
- ChatCompletionMessageParam,
62
- )
64
+ from openai.types.chat import ChatCompletionMessageParam
63
65
 
64
66
  PLAYGROUND_PROJECT_NAME = "playground"
65
67
 
66
- ToolCallIndex: TypeAlias = int
68
+ ToolCallID: TypeAlias = str
67
69
 
68
70
 
69
71
  @strawberry.enum
@@ -127,39 +129,202 @@ class ChatCompletionInput:
127
129
  api_key: Optional[str] = strawberry.field(default=None)
128
130
 
129
131
 
130
- def to_openai_chat_completion_param(
131
- role: ChatCompletionMessageRole, content: JSONScalarType
132
- ) -> "ChatCompletionMessageParam":
133
- from openai.types.chat import (
134
- ChatCompletionAssistantMessageParam,
135
- ChatCompletionSystemMessageParam,
136
- ChatCompletionUserMessageParam,
137
- )
132
+ PLAYGROUND_STREAMING_CLIENT_REGISTRY: Dict[
133
+ GenerativeProviderKey, Type["PlaygroundStreamingClient"]
134
+ ] = {}
138
135
 
139
- if role is ChatCompletionMessageRole.USER:
140
- return ChatCompletionUserMessageParam(
141
- {
142
- "content": content,
143
- "role": "user",
144
- }
145
- )
146
- if role is ChatCompletionMessageRole.SYSTEM:
147
- return ChatCompletionSystemMessageParam(
148
- {
149
- "content": content,
150
- "role": "system",
151
- }
136
+
137
+ def register_llm_client(
138
+ provider_key: GenerativeProviderKey,
139
+ ) -> Callable[[Type["PlaygroundStreamingClient"]], Type["PlaygroundStreamingClient"]]:
140
+ def decorator(cls: Type["PlaygroundStreamingClient"]) -> Type["PlaygroundStreamingClient"]:
141
+ PLAYGROUND_STREAMING_CLIENT_REGISTRY[provider_key] = cls
142
+ return cls
143
+
144
+ return decorator
145
+
146
+
147
+ class PlaygroundStreamingClient(ABC):
148
+ def __init__(self, model: GenerativeModelInput, api_key: Optional[str] = None) -> None: ...
149
+
150
+ @abstractmethod
151
+ async def chat_completion_create(
152
+ self,
153
+ messages: List[Tuple[ChatCompletionMessageRole, str]],
154
+ tools: List[JSONScalarType],
155
+ **invocation_parameters: Any,
156
+ ) -> AsyncIterator[ChatCompletionSubscriptionPayload]:
157
+ # a yield statement is needed to satisfy the type-checker
158
+ # https://mypy.readthedocs.io/en/stable/more_types.html#asynchronous-iterators
159
+ yield TextChunk(content="")
160
+
161
+ @property
162
+ @abstractmethod
163
+ def attributes(self) -> Dict[str, Any]: ...
164
+
165
+
166
+ @register_llm_client(GenerativeProviderKey.OPENAI)
167
+ class OpenAIStreamingClient(PlaygroundStreamingClient):
168
+ def __init__(self, model: GenerativeModelInput, api_key: Optional[str] = None) -> None:
169
+ from openai import AsyncOpenAI
170
+
171
+ self.client = AsyncOpenAI(api_key=api_key)
172
+ self.model_name = model.name
173
+ self._attributes: Dict[str, Any] = {}
174
+
175
+ async def chat_completion_create(
176
+ self,
177
+ messages: List[Tuple[ChatCompletionMessageRole, str]],
178
+ tools: List[JSONScalarType],
179
+ **invocation_parameters: Any,
180
+ ) -> AsyncIterator[ChatCompletionSubscriptionPayload]:
181
+ from openai import NOT_GIVEN
182
+ from openai.types.chat import ChatCompletionStreamOptionsParam
183
+
184
+ # Convert standard messages to OpenAI messages
185
+ openai_messages = [self.to_openai_chat_completion_param(*message) for message in messages]
186
+ tool_call_ids: Dict[int, str] = {}
187
+ token_usage: Optional["CompletionUsage"] = None
188
+ async for chunk in await self.client.chat.completions.create(
189
+ messages=openai_messages,
190
+ model=self.model_name,
191
+ stream=True,
192
+ stream_options=ChatCompletionStreamOptionsParam(include_usage=True),
193
+ tools=tools or NOT_GIVEN,
194
+ **invocation_parameters,
195
+ ):
196
+ if (usage := chunk.usage) is not None:
197
+ token_usage = usage
198
+ continue
199
+ choice = chunk.choices[0]
200
+ delta = choice.delta
201
+ if choice.finish_reason is None:
202
+ if isinstance(chunk_content := delta.content, str):
203
+ text_chunk = TextChunk(content=chunk_content)
204
+ yield text_chunk
205
+ if (tool_calls := delta.tool_calls) is not None:
206
+ for tool_call_index, tool_call in enumerate(tool_calls):
207
+ tool_call_id = (
208
+ tool_call.id
209
+ if tool_call.id is not None
210
+ else tool_call_ids[tool_call_index]
211
+ )
212
+ tool_call_ids[tool_call_index] = tool_call_id
213
+ if (function := tool_call.function) is not None:
214
+ tool_call_chunk = ToolCallChunk(
215
+ id=tool_call_id,
216
+ function=FunctionCallChunk(
217
+ name=function.name or "",
218
+ arguments=function.arguments or "",
219
+ ),
220
+ )
221
+ yield tool_call_chunk
222
+ if token_usage is not None:
223
+ self._attributes.update(_llm_token_counts(token_usage))
224
+
225
+ def to_openai_chat_completion_param(
226
+ self, role: ChatCompletionMessageRole, content: JSONScalarType
227
+ ) -> "ChatCompletionMessageParam":
228
+ from openai.types.chat import (
229
+ ChatCompletionAssistantMessageParam,
230
+ ChatCompletionSystemMessageParam,
231
+ ChatCompletionUserMessageParam,
152
232
  )
153
- if role is ChatCompletionMessageRole.AI:
154
- return ChatCompletionAssistantMessageParam(
155
- {
156
- "content": content,
157
- "role": "assistant",
158
- }
233
+
234
+ if role is ChatCompletionMessageRole.USER:
235
+ return ChatCompletionUserMessageParam(
236
+ {
237
+ "content": content,
238
+ "role": "user",
239
+ }
240
+ )
241
+ if role is ChatCompletionMessageRole.SYSTEM:
242
+ return ChatCompletionSystemMessageParam(
243
+ {
244
+ "content": content,
245
+ "role": "system",
246
+ }
247
+ )
248
+ if role is ChatCompletionMessageRole.AI:
249
+ return ChatCompletionAssistantMessageParam(
250
+ {
251
+ "content": content,
252
+ "role": "assistant",
253
+ }
254
+ )
255
+ if role is ChatCompletionMessageRole.TOOL:
256
+ raise NotImplementedError
257
+ assert_never(role)
258
+
259
+ @property
260
+ def attributes(self) -> Dict[str, Any]:
261
+ return self._attributes
262
+
263
+
264
+ @register_llm_client(GenerativeProviderKey.AZURE_OPENAI)
265
+ class AzureOpenAIStreamingClient(OpenAIStreamingClient):
266
+ def __init__(self, model: GenerativeModelInput, api_key: Optional[str] = None):
267
+ from openai import AsyncAzureOpenAI
268
+
269
+ if model.endpoint is None or model.api_version is None:
270
+ raise ValueError("endpoint and api_version are required for Azure OpenAI models")
271
+ self.client = AsyncAzureOpenAI(
272
+ api_key=api_key,
273
+ azure_endpoint=model.endpoint,
274
+ api_version=model.api_version,
159
275
  )
160
- if role is ChatCompletionMessageRole.TOOL:
161
- raise NotImplementedError
162
- assert_never(role)
276
+
277
+
278
+ @register_llm_client(GenerativeProviderKey.ANTHROPIC)
279
+ class AnthropicStreamingClient(PlaygroundStreamingClient):
280
+ def __init__(self, model: GenerativeModelInput, api_key: Optional[str] = None) -> None:
281
+ import anthropic
282
+
283
+ self.client = anthropic.AsyncAnthropic(api_key=api_key)
284
+ self.model_name = model.name
285
+
286
+ async def chat_completion_create(
287
+ self,
288
+ messages: List[Tuple[ChatCompletionMessageRole, str]],
289
+ tools: List[JSONScalarType],
290
+ **invocation_parameters: Any,
291
+ ) -> AsyncIterator[ChatCompletionSubscriptionPayload]:
292
+ anthropic_messages, system_prompt = self._build_anthropic_messages(messages)
293
+
294
+ anthropic_params = {
295
+ "messages": anthropic_messages,
296
+ "model": self.model_name,
297
+ "system": system_prompt,
298
+ "max_tokens": 1024,
299
+ **invocation_parameters,
300
+ }
301
+
302
+ async with self.client.messages.stream(**anthropic_params) as stream:
303
+ async for text in stream.text_stream:
304
+ yield TextChunk(content=text)
305
+
306
+ def _build_anthropic_messages(
307
+ self, messages: List[Tuple[ChatCompletionMessageRole, str]]
308
+ ) -> Tuple[List["MessageParam"], str]:
309
+ anthropic_messages: List["MessageParam"] = []
310
+ system_prompt = ""
311
+ for role, content in messages:
312
+ if role == ChatCompletionMessageRole.USER:
313
+ anthropic_messages.append({"role": "user", "content": content})
314
+ elif role == ChatCompletionMessageRole.AI:
315
+ anthropic_messages.append({"role": "assistant", "content": content})
316
+ elif role == ChatCompletionMessageRole.SYSTEM:
317
+ system_prompt += content + "\n"
318
+ elif role == ChatCompletionMessageRole.TOOL:
319
+ raise NotImplementedError
320
+ else:
321
+ assert_never(role)
322
+
323
+ return anthropic_messages, system_prompt
324
+
325
+ @property
326
+ def attributes(self) -> Dict[str, Any]:
327
+ return dict()
163
328
 
164
329
 
165
330
  @strawberry.type
@@ -168,30 +333,20 @@ class Subscription:
168
333
  async def chat_completion(
169
334
  self, info: Info[Context, None], input: ChatCompletionInput
170
335
  ) -> AsyncIterator[ChatCompletionSubscriptionPayload]:
171
- from openai import NOT_GIVEN, AsyncAzureOpenAI, AsyncOpenAI
172
- from openai.types.chat import ChatCompletionStreamOptionsParam
336
+ # Determine which LLM client to use based on provider_key
337
+ provider_key = input.model.provider_key
338
+ llm_client_class = PLAYGROUND_STREAMING_CLIENT_REGISTRY.get(provider_key)
339
+ if llm_client_class is None:
340
+ raise ValueError(f"No LLM client registered for provider '{provider_key}'")
173
341
 
174
- client: Union[AsyncAzureOpenAI, AsyncOpenAI]
342
+ llm_client = llm_client_class(model=input.model, api_key=input.api_key)
175
343
 
176
- if input.model.provider_key == GenerativeProviderKey.AZURE_OPENAI:
177
- if input.model.endpoint is None or input.model.api_version is None:
178
- raise ValueError("endpoint and api_version are required for Azure OpenAI models")
179
- client = AsyncAzureOpenAI(
180
- api_key=input.api_key,
181
- azure_endpoint=input.model.endpoint,
182
- api_version=input.model.api_version,
183
- )
184
- else:
185
- client = AsyncOpenAI(api_key=input.api_key)
186
-
187
- invocation_parameters = jsonify(input.invocation_parameters)
344
+ messages = [(message.role, message.content) for message in input.messages]
188
345
 
189
- messages: List[Tuple[ChatCompletionMessageRole, str]] = [
190
- (message.role, message.content) for message in input.messages
191
- ]
192
346
  if template_options := input.template:
193
347
  messages = list(_formatted_messages(messages, template_options))
194
- openai_messages = [to_openai_chat_completion_param(*message) for message in messages]
348
+
349
+ invocation_parameters = jsonify(input.invocation_parameters)
195
350
 
196
351
  in_memory_span_exporter = InMemorySpanExporter()
197
352
  tracer_provider = TracerProvider()
@@ -200,6 +355,7 @@ class Subscription:
200
355
  )
201
356
  tracer = tracer_provider.get_tracer(__name__)
202
357
  span_name = "ChatCompletion"
358
+
203
359
  with tracer.start_span(
204
360
  span_name,
205
361
  attributes=dict(
@@ -215,52 +371,29 @@ class Subscription:
215
371
  ) as span:
216
372
  response_chunks = []
217
373
  text_chunks: List[TextChunk] = []
218
- tool_call_chunks: DefaultDict[ToolCallIndex, List[ToolCallChunk]] = defaultdict(list)
219
- role: Optional[str] = None
220
- token_usage: Optional[CompletionUsage] = None
221
- async for chunk in await client.chat.completions.create(
222
- messages=openai_messages,
223
- model=input.model.name,
224
- stream=True,
225
- tools=input.tools or NOT_GIVEN,
226
- stream_options=ChatCompletionStreamOptionsParam(include_usage=True),
374
+ tool_call_chunks: DefaultDict[ToolCallID, List[ToolCallChunk]] = defaultdict(list)
375
+
376
+ async for chunk in llm_client.chat_completion_create(
377
+ messages=messages,
378
+ tools=input.tools or [],
227
379
  **invocation_parameters,
228
380
  ):
229
381
  response_chunks.append(chunk)
230
- if (usage := chunk.usage) is not None:
231
- token_usage = usage
232
- continue
233
- choice = chunk.choices[0]
234
- delta = choice.delta
235
- if role is None:
236
- role = delta.role
237
- if choice.finish_reason is None:
238
- if isinstance(chunk_content := delta.content, str):
239
- text_chunk = TextChunk(content=chunk_content)
240
- yield text_chunk
241
- text_chunks.append(text_chunk)
242
- if (tool_calls := delta.tool_calls) is not None:
243
- for tool_call_index, tool_call in enumerate(tool_calls):
244
- if (function := tool_call.function) is not None:
245
- if (tool_call_id := tool_call.id) is None:
246
- first_tool_call_chunk = tool_call_chunks[tool_call_index][0]
247
- tool_call_id = first_tool_call_chunk.id
248
- tool_call_chunk = ToolCallChunk(
249
- id=tool_call_id,
250
- function=FunctionCallChunk(
251
- name=function.name or "",
252
- arguments=function.arguments or "",
253
- ),
254
- )
255
- yield tool_call_chunk
256
- tool_call_chunks[tool_call_index].append(tool_call_chunk)
382
+ if isinstance(chunk, TextChunk):
383
+ yield chunk
384
+ text_chunks.append(chunk)
385
+ elif isinstance(chunk, ToolCallChunk):
386
+ yield chunk
387
+ tool_call_chunks[chunk.id].append(chunk)
388
+
257
389
  span.set_status(StatusCode.OK)
258
- assert role is not None
390
+ llm_client_attributes = llm_client.attributes
391
+
259
392
  span.set_attributes(
260
393
  dict(
261
394
  chain(
262
395
  _output_value_and_mime_type(response_chunks),
263
- _llm_token_counts(token_usage) if token_usage is not None else [],
396
+ llm_client_attributes.items(),
264
397
  _llm_output_messages(text_chunks, tool_call_chunks),
265
398
  )
266
399
  )
@@ -272,8 +405,8 @@ class Subscription:
272
405
  assert (attributes := finished_span.attributes) is not None
273
406
  start_time = _datetime(epoch_nanoseconds=finished_span.start_time)
274
407
  end_time = _datetime(epoch_nanoseconds=finished_span.end_time)
275
- prompt_tokens = token_usage.prompt_tokens if token_usage is not None else 0
276
- completion_tokens = token_usage.completion_tokens if token_usage is not None else 0
408
+ prompt_tokens = llm_client_attributes.get(LLM_TOKEN_COUNT_PROMPT, 0)
409
+ completion_tokens = llm_client_attributes.get(LLM_TOKEN_COUNT_COMPLETION, 0)
277
410
  trace_id = _hex(finished_span.context.trace_id)
278
411
  span_id = _hex(finished_span.context.span_id)
279
412
  status = finished_span.status
@@ -367,7 +500,7 @@ def _llm_input_messages(
367
500
 
368
501
  def _llm_output_messages(
369
502
  text_chunks: List[TextChunk],
370
- tool_call_chunks: DefaultDict[ToolCallIndex, List[ToolCallChunk]],
503
+ tool_call_chunks: DefaultDict[ToolCallID, List[ToolCallChunk]],
371
504
  ) -> Iterator[Tuple[str, Any]]:
372
505
  yield f"{LLM_OUTPUT_MESSAGES}.0.{MESSAGE_ROLE}", "assistant"
373
506
  if content := "".join(chunk.content for chunk in text_chunks):
@@ -1,22 +1,22 @@
1
1
  {
2
- "_components-8zh9kCOG.js": {
3
- "file": "assets/components-8zh9kCOG.js",
2
+ "_components-DOjuTDx9.js": {
3
+ "file": "assets/components-DOjuTDx9.js",
4
4
  "name": "components",
5
5
  "imports": [
6
6
  "_vendor-6IcPAw_j.js",
7
7
  "_vendor-arizeai-uC2sozJ6.js",
8
- "_pages-CFNU-U_5.js",
8
+ "_pages-uwuWR0d3.js",
9
9
  "_vendor-three-DwGkEfCM.js",
10
10
  "_vendor-codemirror-DVE2_WBr.js"
11
11
  ]
12
12
  },
13
- "_pages-CFNU-U_5.js": {
14
- "file": "assets/pages-CFNU-U_5.js",
13
+ "_pages-uwuWR0d3.js": {
14
+ "file": "assets/pages-uwuWR0d3.js",
15
15
  "name": "pages",
16
16
  "imports": [
17
17
  "_vendor-6IcPAw_j.js",
18
18
  "_vendor-arizeai-uC2sozJ6.js",
19
- "_components-8zh9kCOG.js",
19
+ "_components-DOjuTDx9.js",
20
20
  "_vendor-recharts-DwrexFA4.js",
21
21
  "_vendor-codemirror-DVE2_WBr.js"
22
22
  ]
@@ -61,15 +61,15 @@
61
61
  "name": "vendor-three"
62
62
  },
63
63
  "index.tsx": {
64
- "file": "assets/index-Ci93KI-L.js",
64
+ "file": "assets/index-C15MiAe0.js",
65
65
  "name": "index",
66
66
  "src": "index.tsx",
67
67
  "isEntry": true,
68
68
  "imports": [
69
69
  "_vendor-6IcPAw_j.js",
70
70
  "_vendor-arizeai-uC2sozJ6.js",
71
- "_pages-CFNU-U_5.js",
72
- "_components-8zh9kCOG.js",
71
+ "_pages-uwuWR0d3.js",
72
+ "_components-DOjuTDx9.js",
73
73
  "_vendor-three-DwGkEfCM.js",
74
74
  "_vendor-recharts-DwrexFA4.js",
75
75
  "_vendor-codemirror-DVE2_WBr.js"
@@ -1,4 +1,4 @@
1
- import{r as p,R as j,j as e,n as tn,a as ue,e as Ke,s as n1,b as Ze,c as me,d as c1,f as kt,g as oe,h as St,i as xt,k as d1,l as s,m as Mt,o as Te,C as Qe,p as Oe,q as De,t as X,u as Tt,v as It,w as an,x as m,L as rn,y as Et,N as Vt,z as Pt,A as Ot,$ as D,B as qe,D as Dt,E as _t,F as Ft,G as At,H as V1,I as de,J as ge,K as Rt,M as ln,S as Nt,O as zt,Q as P1,P as Ht,T as Kt,U as $t,V as t1,W as h1,X as Bt,Y as Zt,Z as Gt,_ as Qt,a0 as Ut,a1 as Wt,a2 as jt,a3 as qt,a4 as Xt,a5 as _e,a6 as _,a7 as on,a8 as Yt,a9 as Jt,aa as ea,ab as na,ac as ta,ad as aa,ae as ra,af as sn,ag as cn,ah as dn,ai as Y,aj as ia}from"./vendor-6IcPAw_j.js";import{u as la,A as oa,I as E,a as S,_ as un,b as y,c as M,d as v,e as H,f as q,T as $,g as sa,h as ee,i as we,j as P,F as mn,k as N,l as ca,m as da,P as ua,R as U,n as Fe,o as ma,p as pa,L as fe,q as ne,r as te,s as Ae,t as pn,v as hn,E as gn,w as ha,x as ga,y as fa,z as La,B as fn,C as g1,D as Ca,G as ba,H as O1,J as ya}from"./vendor-arizeai-uC2sozJ6.js";import{u as va}from"./pages-CFNU-U_5.js";import{V as wa}from"./vendor-three-DwGkEfCM.js";import{j as Ln,E as Cn,l as u1,a as bn,h as ka,b as Sa,c as xa,d as Ma,e as Ta,f as Ia,s as Ea,R as Re,g as yn,n as Ne,p as Va,i as Pa,L as vn,k as wn}from"./vendor-codemirror-DVE2_WBr.js";const kn=function(){var n={defaultValue:null,kind:"LocalArgument",name:"clusters"},t={defaultValue:null,kind:"LocalArgument",name:"dataQualityMetricColumnName"},a={defaultValue:null,kind:"LocalArgument",name:"fetchDataQualityMetric"},r={defaultValue:null,kind:"LocalArgument",name:"fetchPerformanceMetric"},i={defaultValue:null,kind:"LocalArgument",name:"performanceMetric"},l=[{alias:null,args:null,kind:"ScalarField",name:"primaryValue",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"referenceValue",storageKey:null}],o=[{alias:null,args:[{kind:"Variable",name:"clusters",variableName:"clusters"}],concreteType:"Cluster",kind:"LinkedField",name:"clusters",plural:!0,selections:[{alias:null,args:null,kind:"ScalarField",name:"id",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"eventIds",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"driftRatio",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"primaryToCorpusRatio",storageKey:null},{condition:"fetchDataQualityMetric",kind:"Condition",passingValue:!0,selections:[{alias:null,args:[{fields:[{kind:"Variable",name:"columnName",variableName:"dataQualityMetricColumnName"},{kind:"Literal",name:"metric",value:"mean"}],kind:"ObjectValue",name:"metric"}],concreteType:"DatasetValues",kind:"LinkedField",name:"dataQualityMetric",plural:!1,selections:l,storageKey:null}]},{condition:"fetchPerformanceMetric",kind:"Condition",passingValue:!0,selections:[{alias:null,args:[{fields:[{kind:"Variable",name:"metric",variableName:"performanceMetric"}],kind:"ObjectValue",name:"metric"}],concreteType:"DatasetValues",kind:"LinkedField",name:"performanceMetric",plural:!1,selections:l,storageKey:null}]}],storageKey:null}];return{fragment:{argumentDefinitions:[n,t,a,r,i],kind:"Fragment",metadata:null,name:"pointCloudStore_clusterMetricsQuery",selections:o,type:"Query",abstractKey:null},kind:"Request",operation:{argumentDefinitions:[n,a,t,r,i],kind:"Operation",name:"pointCloudStore_clusterMetricsQuery",selections:o},params:{cacheID:"86666967012812887ac0a0149d2d2535",id:null,metadata:{},name:"pointCloudStore_clusterMetricsQuery",operationKind:"query",text:`query pointCloudStore_clusterMetricsQuery(
1
+ import{r as p,R as j,j as e,n as tn,a as ue,e as Ke,s as n1,b as Ze,c as me,d as c1,f as kt,g as oe,h as St,i as xt,k as d1,l as s,m as Mt,o as Te,C as Qe,p as Oe,q as De,t as X,u as Tt,v as It,w as an,x as m,L as rn,y as Et,N as Vt,z as Pt,A as Ot,$ as D,B as qe,D as Dt,E as _t,F as Ft,G as At,H as V1,I as de,J as ge,K as Rt,M as ln,S as Nt,O as zt,Q as P1,P as Ht,T as Kt,U as $t,V as t1,W as h1,X as Bt,Y as Zt,Z as Gt,_ as Qt,a0 as Ut,a1 as Wt,a2 as jt,a3 as qt,a4 as Xt,a5 as _e,a6 as _,a7 as on,a8 as Yt,a9 as Jt,aa as ea,ab as na,ac as ta,ad as aa,ae as ra,af as sn,ag as cn,ah as dn,ai as Y,aj as ia}from"./vendor-6IcPAw_j.js";import{u as la,A as oa,I as E,a as S,_ as un,b as y,c as M,d as v,e as H,f as q,T as $,g as sa,h as ee,i as we,j as P,F as mn,k as N,l as ca,m as da,P as ua,R as U,n as Fe,o as ma,p as pa,L as fe,q as ne,r as te,s as Ae,t as pn,v as hn,E as gn,w as ha,x as ga,y as fa,z as La,B as fn,C as g1,D as Ca,G as ba,H as O1,J as ya}from"./vendor-arizeai-uC2sozJ6.js";import{u as va}from"./pages-uwuWR0d3.js";import{V as wa}from"./vendor-three-DwGkEfCM.js";import{j as Ln,E as Cn,l as u1,a as bn,h as ka,b as Sa,c as xa,d as Ma,e as Ta,f as Ia,s as Ea,R as Re,g as yn,n as Ne,p as Va,i as Pa,L as vn,k as wn}from"./vendor-codemirror-DVE2_WBr.js";const kn=function(){var n={defaultValue:null,kind:"LocalArgument",name:"clusters"},t={defaultValue:null,kind:"LocalArgument",name:"dataQualityMetricColumnName"},a={defaultValue:null,kind:"LocalArgument",name:"fetchDataQualityMetric"},r={defaultValue:null,kind:"LocalArgument",name:"fetchPerformanceMetric"},i={defaultValue:null,kind:"LocalArgument",name:"performanceMetric"},l=[{alias:null,args:null,kind:"ScalarField",name:"primaryValue",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"referenceValue",storageKey:null}],o=[{alias:null,args:[{kind:"Variable",name:"clusters",variableName:"clusters"}],concreteType:"Cluster",kind:"LinkedField",name:"clusters",plural:!0,selections:[{alias:null,args:null,kind:"ScalarField",name:"id",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"eventIds",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"driftRatio",storageKey:null},{alias:null,args:null,kind:"ScalarField",name:"primaryToCorpusRatio",storageKey:null},{condition:"fetchDataQualityMetric",kind:"Condition",passingValue:!0,selections:[{alias:null,args:[{fields:[{kind:"Variable",name:"columnName",variableName:"dataQualityMetricColumnName"},{kind:"Literal",name:"metric",value:"mean"}],kind:"ObjectValue",name:"metric"}],concreteType:"DatasetValues",kind:"LinkedField",name:"dataQualityMetric",plural:!1,selections:l,storageKey:null}]},{condition:"fetchPerformanceMetric",kind:"Condition",passingValue:!0,selections:[{alias:null,args:[{fields:[{kind:"Variable",name:"metric",variableName:"performanceMetric"}],kind:"ObjectValue",name:"metric"}],concreteType:"DatasetValues",kind:"LinkedField",name:"performanceMetric",plural:!1,selections:l,storageKey:null}]}],storageKey:null}];return{fragment:{argumentDefinitions:[n,t,a,r,i],kind:"Fragment",metadata:null,name:"pointCloudStore_clusterMetricsQuery",selections:o,type:"Query",abstractKey:null},kind:"Request",operation:{argumentDefinitions:[n,a,t,r,i],kind:"Operation",name:"pointCloudStore_clusterMetricsQuery",selections:o},params:{cacheID:"86666967012812887ac0a0149d2d2535",id:null,metadata:{},name:"pointCloudStore_clusterMetricsQuery",operationKind:"query",text:`query pointCloudStore_clusterMetricsQuery(
2
2
  $clusters: [ClusterInput!]!
3
3
  $fetchDataQualityMetric: Boolean!
4
4
  $dataQualityMetricColumnName: String
@@ -144,7 +144,7 @@ import{r as p,R as j,j as e,n as tn,a as ue,e as Ke,s as n1,b as Ze,c as me,d as
144
144
  id
145
145
  }
146
146
  }
147
- `}}}();Mn.hash="e8fa488a0d466b5e40fdadc1e5227a57";const Oa=30,D1=5,_1=100,Da=0,F1=0,A1=.99,_a=500,R1=300,N1=1e5,Fa=10,z1=1,Aa=2,Ra=1,Na=0;var I=(n=>(n.inferences="inferences",n.correctness="correctness",n.dimension="dimension",n))(I||{}),Ce=(n=>(n.list="list",n.gallery="gallery",n))(Ce||{}),Le=(n=>(n.small="small",n.medium="medium",n.large="large",n))(Le||{}),V=(n=>(n.primary="primary",n.reference="reference",n.corpus="corpus",n))(V||{}),A=(n=>(n.correct="correct",n.incorrect="incorrect",n.unknown="unknown",n))(A||{});const za=["#05fbff","#cb8afd"],Ha=["#00add0","#4500d9"],J="#a5a5a5",pe=J;var W=(n=>(n.primary="primary",n.reference="reference",n.corpus="corpus",n))(W||{});function F(n){throw new Error("Unreachable")}function f1(n){return typeof n=="number"||n===null}function Ka(n){return typeof n=="string"||n===null}function so(n){return Array.isArray(n)?n.every(t=>typeof t=="string"):!1}function $a(n){return typeof n=="object"&&n!==null}const co=()=>n=>n,L1=p.createContext(null);function Xe(){const n=j.useContext(L1);if(n===null)throw new Error("useInferences must be used within a InferencesProvider");return n}function uo(n){return e(L1.Provider,{value:{primaryInferences:n.primaryInferences,referenceInferences:n.referenceInferences,corpusInferences:n.corpusInferences,getInferencesNameByRole:t=>{var a,r;switch(t){case W.primary:return n.primaryInferences.name;case W.reference:return((a=n.referenceInferences)==null?void 0:a.name)??"reference";case W.corpus:return((r=n.corpusInferences)==null?void 0:r.name)??"corpus";default:F()}}},children:n.children})}const C1=p.createContext(null);function mo({children:n,...t}){const[a]=p.useState(()=>sr(t));return e(C1.Provider,{value:a,children:n})}function b(n,t){const a=p.useContext(C1);if(!a)throw new Error("Missing PointCloudContext.Provider in the tree");return tn(a,n,t)}var G=(n=>(n.last_hour="Last Hour",n.last_day="Last Day",n.last_week="Last Week",n.last_month="Last Month",n.last_3_months="Last 3 Months",n.first_hour="First Hour",n.first_day="First Day",n.first_week="First Week",n.first_month="First Month",n.all="All",n))(G||{});const Tn=p.createContext(null);function Ba(){const n=p.useContext(Tn);if(n===null)throw new Error("useTimeRange must be used within a TimeRangeProvider");return n}function Za(n,t){return p.useMemo(()=>{switch(n){case"Last Hour":{const r=ue(xt(t.end),{roundingMethod:"ceil"});return{start:d1(r,1),end:r}}case"Last Day":{const r=ue(St(t.end),{roundingMethod:"ceil"});return{start:oe(r,1),end:r}}case"Last Week":{const r=ue(Ke(t.end),{roundingMethod:"ceil"});return{start:oe(r,7),end:r}}case"Last Month":{const r=ue(Ke(t.end),{roundingMethod:"ceil"});return{start:oe(r,30),end:r}}case"Last 3 Months":{const r=ue(Ke(t.end),{roundingMethod:"ceil"});return{start:oe(r,90),end:r}}case"First Hour":{const r=c1(t.start);return{start:r,end:kt(r,1)}}case"First Day":{const r=me(t.start);return{start:r,end:Ze(r,1)}}case"First Week":{const r=n1(t.start);return{start:r,end:Ze(r,7)}}case"First Month":{const r=n1(t.start);return{start:r,end:Ze(r,30)}}case"All":{const r=ue(Ke(t.end),{roundingMethod:"floor"});return{start:n1(t.start),end:r}}default:F()}},[n,t])}function po(n){const[t,a]=p.useState("Last Month"),r=Za(t,n.timeRangeBounds),i=p.useCallback(l=>{p.startTransition(()=>{a(l)})},[]);return e(Tn.Provider,{value:{timeRange:r,timePreset:t,setTimePreset:i},children:n.children})}const In=p.createContext(null);function ho({children:n}){const[t,a]=la({style:{zIndex:1e3}}),r=p.useCallback(l=>{t({variant:"danger",...l})},[t]),i=p.useCallback(l=>{t({variant:"success",...l})},[t]);return s(In.Provider,{value:{notify:t,notifyError:r,notifySuccess:i},children:[n,a]})}function En(){const n=p.useContext(In);if(n===null)throw new Error("useGlobalNotification must be used within a NotificationProvider");return n}function go(){return En().notifyError}function fo(){return En().notifySuccess}const Vn="arize-phoenix-theme";function Pn(){return localStorage.getItem(Vn)==="light"?"light":"dark"}const b1=p.createContext(null);function B(){const n=p.useContext(b1);if(n===null)throw new Error("useTheme must be used within a ThemeProvider");return n}function Lo(n){const[t,a]=p.useState(Pn()),r=p.useCallback(i=>{localStorage.setItem(Vn,i),a(i)},[]);return e(b1.Provider,{value:{theme:t,setTheme:r},children:n.children})}function Ga(n){return n.endsWith("/")?n.slice(0,-1):n}const On=Ga(window.Config.basename),Qa=window.location.protocol==="https:",ze=`${window.location.protocol}//${window.location.host}${On}`,Ua=`${Qa?"wss":"ws"}://${window.location.host}${On}`,Co=window.Config.platformVersion,Ue="returnUrl",Wa=()=>window.location.pathname+window.location.search,ja=()=>`${Ue}=${encodeURIComponent(Wa())}`,bo=({path:n,searchParams:t})=>{const r=new URL(window.location.href).searchParams.get(Ue),i=new URLSearchParams(t||{});r&&i.set(Ue,r);const l=i.toString();return`${n}${l?`?${l}`:""}`},qa=n=>!(typeof n!="string"||!n.startsWith("/")||n.replace(/\\/g,"/").startsWith("//")),Xa=n=>qa(n)?n:"/",yo=()=>{const n=new URL(window.location.href);return Xa(n.searchParams.get(Ue))},Ya=ze+"/auth/refresh";class H1 extends Error{constructor(){super("Unauthorized")}}async function Ja(n,t){try{return await fetch(n,t).then(a=>{if(a.status===401)throw new H1;return a})}catch(a){if(a instanceof H1)return await er(),fetch(n,t)}throw new Error("An unexpected error occurred while fetching data")}let xe=null;async function er(){return xe||(xe=fetch(Ya,{method:"POST"}).then(n=>(n.ok||(window.location.href=`/login?${ja()}`),xe=null,n)),xe)}const nr=ze+"/graphql",tr=window.Config.authenticationEnabled?Ja:fetch,ar=async(n,t,a)=>{const i=await(await tr(nr,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({query:n.text,variables:t})})).json();if(Array.isArray(i.errors))throw new Error(`Error fetching GraphQL query '${n.name}' with variables '${JSON.stringify(t)}': ${JSON.stringify(i.errors)}`);return i},rr=Mt({url:`${Ua}/graphql`}),ir=(n,t)=>Te.Observable.create(a=>rr.subscribe({operationName:n.name,query:n.text,variables:t},a)),He=new Te.Environment({network:Te.Network.create(ar,ir),store:new Te.Store(new Te.RecordSource,{gcReleaseBufferSize:10})});function Dn(n){return n.includes("PRIMARY")?W.primary:n.includes("CORPUS")?W.corpus:W.reference}function y1(n){const t=[],a=[],r=[];return n.forEach(i=>{const l=Dn(i);l==W.primary?t.push(i):l==W.corpus?r.push(i):a.push(i)}),{primaryEventIds:t,referenceEventIds:a,corpusEventIds:r}}const We=10,Ie="unknown",_n=It,Fn=Tt,lr=n=>Fn[n],or=n=>_n(n/We);var be=(n=>(n.move="move",n.select="select",n))(be||{}),v1=(n=>(n.default="default",n.highlight="highlight",n))(v1||{});const he=()=>Pn()==="light"?Ha:za;function vo(){const n=he();return{coloringStrategy:I.inferences,pointGroupVisibility:{[V.primary]:!0,[V.reference]:!0},pointGroupColors:{[V.primary]:n[0],[V.reference]:n[1],[V.corpus]:J},metric:{type:"drift",metric:"euclideanDistance"}}}function wo(){const n=he();return{coloringStrategy:I.inferences,pointGroupVisibility:{[V.primary]:!0,[V.corpus]:!0},pointGroupColors:{[V.primary]:n[0],[V.corpus]:J},metric:{type:"retrieval",metric:"queryDistance"},clusterSort:{dir:"desc",column:"primaryMetricValue"}}}function ko(){return{coloringStrategy:I.correctness,pointGroupVisibility:{[A.correct]:!0,[A.incorrect]:!0,[A.unknown]:!0},pointGroupColors:{[A.correct]:Qe.Discrete2.LightBlueOrange[0],[A.incorrect]:Qe.Discrete2.LightBlueOrange[1],[A.unknown]:pe},metric:{type:"performance",metric:"accuracyScore"},clusterSort:{dir:"asc",column:"primaryMetricValue"}}}const sr=n=>{const t={loading:!1,errorMessage:null,points:[],eventIdToDataMap:new Map,clusters:[],clusterSort:{dir:"desc",column:"driftRatio"},pointData:null,selectedEventIds:new Set,hoveredEventId:null,highlightedClusterId:null,selectedClusterId:null,canvasMode:"move",pointSizeScale:1,clusterColorMode:"default",coloringStrategy:I.inferences,inferencesVisibility:{primary:!0,reference:!0,corpus:!0},pointGroupVisibility:{[V.primary]:!0,[V.reference]:!0,[V.corpus]:!0},pointGroupColors:{[V.primary]:he()[0],[V.reference]:he()[1],[V.corpus]:J},eventIdToGroup:{},selectionDisplay:Ce.gallery,selectionGridSize:Le.large,dimension:null,dimensionMetadata:null,umapParameters:{minDist:Da,nNeighbors:Oa,nSamples:_a},hdbscanParameters:{minClusterSize:Fa,clusterMinSamples:Ra,clusterSelectionEpsilon:Na},clustersLoading:!1,metric:{type:"drift",metric:"euclideanDistance"},selectionSearchText:""},a=(r,i)=>({...t,...n,setInitialData:async({points:l,clusters:o,retrievals:d})=>{const c=i(),u=new Map,g=d.reduce((L,C)=>{const{queryId:k}=C;return L[k]?L[k].push(C):L[k]=[C],L},{});l.forEach(L=>{L={...L,retrievals:g[L.eventId]??[]},u.set(L.eventId,L)});const h=o.map($1).sort(r1(c.clusterSort));r({loading:!1,points:l,eventIdToDataMap:u,clusters:h,clustersLoading:!1,selectedEventIds:new Set,selectedClusterId:null,pointData:null,eventIdToGroup:le({points:l,coloringStrategy:c.coloringStrategy,pointsData:c.pointData??{},dimension:c.dimension||null,dimensionMetadata:c.dimensionMetadata})});const f=await ur(l.map(L=>L.eventId)).catch(()=>r({errorMessage:"Failed to load the point events"}));f&&r({pointData:f,clusters:h,clustersLoading:!1,eventIdToGroup:le({points:l,coloringStrategy:c.coloringStrategy,pointsData:f??{},dimension:c.dimension||null,dimensionMetadata:c.dimensionMetadata})})},setClusters:l=>{const o=i(),d=l.map($1).sort(r1(o.clusterSort));r({clusters:d,clustersLoading:!1,selectedClusterId:null,highlightedClusterId:null})},setClusterSort:l=>{const d=[...i().clusters].sort(r1(l));r({clusterSort:l,clusters:d})},setSelectedEventIds:l=>r({selectedEventIds:l,selectionSearchText:""}),setHoveredEventId:l=>r({hoveredEventId:l}),setHighlightedClusterId:l=>r({highlightedClusterId:l}),setSelectedClusterId:l=>r({selectedClusterId:l,highlightedClusterId:null}),setPointSizeScale:l=>r({pointSizeScale:l}),setCanvasMode:l=>r({canvasMode:l}),setClusterColorMode:l=>r({clusterColorMode:l}),setColoringStrategy:l=>{const o=i();switch(r({coloringStrategy:l}),l){case I.correctness:r({pointGroupVisibility:{[A.correct]:!0,[A.incorrect]:!0,[A.unknown]:!0},pointGroupColors:{[A.correct]:Qe.Discrete2.LightBlueOrange[0],[A.incorrect]:Qe.Discrete2.LightBlueOrange[1],[A.unknown]:pe},dimension:null,dimensionMetadata:null,eventIdToGroup:le({points:o.points,coloringStrategy:l,pointsData:o.pointData??{},dimension:o.dimension||null,dimensionMetadata:o.dimensionMetadata})});break;case I.inferences:{r({pointGroupVisibility:{[V.primary]:!0,[V.reference]:!0,[V.corpus]:!0},pointGroupColors:{[V.primary]:he()[0],[V.reference]:he()[1],[V.corpus]:J},dimension:null,dimensionMetadata:null,eventIdToGroup:le({points:o.points,coloringStrategy:l,pointsData:o.pointData??{},dimension:o.dimension||null,dimensionMetadata:o.dimensionMetadata})});break}case I.dimension:{r({pointGroupVisibility:{unknown:!0},pointGroupColors:{unknown:pe},dimension:null,dimensionMetadata:null,eventIdToGroup:le({points:o.points,coloringStrategy:l,pointsData:o.pointData??{},dimension:o.dimension||null,dimensionMetadata:o.dimensionMetadata})});break}default:F()}},inferencesVisibility:{primary:!0,reference:!0,corpus:!0},setInferencesVisibility:l=>r({inferencesVisibility:l}),setPointGroupVisibility:l=>r({pointGroupVisibility:l}),selectionDisplay:Ce.gallery,setSelectionDisplay:l=>r({selectionDisplay:l}),setSelectionGridSize:l=>r({selectionGridSize:l}),reset:()=>{r({points:[],clusters:[],selectedEventIds:new Set,selectedClusterId:null,eventIdToGroup:{}})},setDimension:async l=>{const o=i();r({dimension:l,dimensionMetadata:null});const d=await dr(l).catch(()=>r({errorMessage:"Failed to load the dimension metadata"}));if(d){if(r({dimensionMetadata:d}),d.categories&&d.categories.length){const c=d.categories.length,g=c<=Fn.length?lr:h=>_n(h/c);r({pointGroupVisibility:{...d.categories.reduce((h,f)=>({...h,[f]:!0}),{}),unknown:!0},pointGroupColors:{...d.categories.reduce((h,f,L)=>({...h,[f]:g(L)}),{}),unknown:pe},eventIdToGroup:le({points:o.points,coloringStrategy:o.coloringStrategy,pointsData:o.pointData??{},dimension:l,dimensionMetadata:d})})}else if(d.interval!==null){const c=An(d.interval);r({pointGroupVisibility:{...c.reduce((u,g)=>({...u,[g.name]:!0}),{}),unknown:!0},pointGroupColors:{...c.reduce((u,g,h)=>({...u,[g.name]:or(h)}),{}),unknown:pe},eventIdToGroup:le({points:o.points,coloringStrategy:o.coloringStrategy,pointsData:o.pointData??{},dimension:l,dimensionMetadata:d})})}}},setDimensionMetadata:l=>r({dimensionMetadata:l}),setUMAPParameters:l=>r({umapParameters:l}),setHDBSCANParameters:async l=>{const o=i();r({hdbscanParameters:l,clustersLoading:!0});const d=await mr({metric:o.metric,points:o.points,hdbscanParameters:l});o.setClusters(d)},getHDSCANParameters:()=>i().hdbscanParameters,getMetric:()=>i().metric,setErrorMessage:l=>r({errorMessage:l}),setLoading:l=>r({loading:l}),setMetric:async l=>{const o=i();r({metric:l,clustersLoading:!0});const d=await pr({metric:l,clusters:o.clusters,hdbscanParameters:o.hdbscanParameters});o.setClusters(d)},setSelectionSearchText:l=>r({selectionSearchText:l})});return Oe()(De(a))},K1=new Intl.NumberFormat([],{maximumFractionDigits:2});function cr({min:n,max:t}){return`${K1.format(n)} - ${K1.format(t)}`}function An({min:n,max:t}){const r=(t-n)/We,i=[];for(let l=0;l<We;l++){const o=n+l*r,d=n+(l+1)*r;i.push({min:o,max:d,name:cr({min:o,max:d})})}return i}function a1({numericGroupIntervals:n,numericValue:t}){let a=Ie,r=n.findIndex(i=>t>=i.min&&t<i.max);return r=r===-1?We-1:r,a=n[r].name,a}function le(n){const{points:t,coloringStrategy:a,pointsData:r,dimension:i,dimensionMetadata:l}=n,o={},d=t.map(c=>c.eventId);switch(a){case I.inferences:{const{primaryEventIds:c,referenceEventIds:u,corpusEventIds:g}=y1(d);c.forEach(h=>{o[h]=V.primary}),u.forEach(h=>{o[h]=V.reference}),g.forEach(h=>{o[h]=V.corpus});break}case I.correctness:{t.forEach(c=>{let u=A.unknown;const{predictionLabel:g,actualLabel:h}=c.eventMetadata;g!==null&&h!==null&&(u=g===h?A.correct:A.incorrect),o[c.eventId]=u});break}case I.dimension:{let c;l&&(l==null?void 0:l.interval)!==null&&(c=An(l.interval));const u=(i==null?void 0:i.type)==="prediction"&&(i==null?void 0:i.dataType)==="categorical",g=(i==null?void 0:i.type)==="prediction"&&(i==null?void 0:i.dataType)==="numeric",h=(i==null?void 0:i.type)==="actual"&&(i==null?void 0:i.dataType)==="categorical",f=(i==null?void 0:i.type)==="actual"&&(i==null?void 0:i.dataType)==="numeric";t.forEach(L=>{let C=Ie;const k=r[L.eventId];if(i!=null&&k!=null)if(u)C=k.eventMetadata.predictionLabel??Ie;else if(g){if(c==null)throw new Error("Cannot color by prediction score without numeric group intervals");const x=k.eventMetadata.predictionScore;typeof x=="number"&&(C=a1({numericGroupIntervals:c,numericValue:x}))}else if(f){if(c==null)throw new Error("Cannot color by actual score without numeric group intervals");const x=k.eventMetadata.actualScore;typeof x=="number"&&(C=a1({numericGroupIntervals:c,numericValue:x}))}else if(h)C=k.eventMetadata.actualLabel??Ie;else{const x=k.dimensions.find(R=>R.dimension.name===i.name);if(x!=null&&i.dataType==="categorical")C=x.value??Ie;else if(x!=null&&i.dataType==="numeric"&&c!=null){const R=typeof(x==null?void 0:x.value)=="string"?parseFloat(x.value):null;typeof R=="number"&&(C=a1({numericGroupIntervals:c,numericValue:R}))}}o[L.eventId]=C});break}default:F()}return o}async function dr(n){const t=await X.fetchQuery(He,Mn,{id:n.id,getDimensionMinMax:n.dataType==="numeric",getDimensionCategories:n.dataType==="categorical"}).toPromise(),a=t==null?void 0:t.dimension;if(!n)throw new Error("Dimension not found");let r=null;return typeof(a==null?void 0:a.min)=="number"&&typeof(a==null?void 0:a.max)=="number"&&(r={min:a.min,max:a.max}),{interval:r,categories:(a==null?void 0:a.categories)??null}}async function ur(n){var u,g,h,f,L,C;const{primaryEventIds:t,referenceEventIds:a,corpusEventIds:r}=y1([...n]),i=await X.fetchQuery(He,xn,{primaryEventIds:t,referenceEventIds:a,corpusEventIds:r}).toPromise(),l=((g=(u=i==null?void 0:i.model)==null?void 0:u.primaryInferences)==null?void 0:g.events)??[],o=((f=(h=i==null?void 0:i.model)==null?void 0:h.referenceInferences)==null?void 0:f.events)??[],d=((C=(L=i==null?void 0:i.model)==null?void 0:L.corpusInferences)==null?void 0:C.events)??[];return[...l,...o,...d].reduce((k,z)=>(k[z.id]=z,k),{})}async function mr({metric:n,points:t,hdbscanParameters:a}){const r=await X.fetchQuery(He,Sn,{eventIds:t.map(i=>i.eventId),coordinates:t.map(i=>({x:i.position[0],y:i.position[1],z:i.position[2]})),fetchDataQualityMetric:n.type==="dataQuality",dataQualityMetricColumnName:n.type==="dataQuality"?n.dimension.name:null,fetchPerformanceMetric:n.type==="performance",performanceMetric:n.type==="performance"?n.metric:"accuracyScore",...a},{fetchPolicy:"network-only"}).toPromise();return(r==null?void 0:r.hdbscanClustering)??[]}async function pr({metric:n,clusters:t,hdbscanParameters:a}){const r=await X.fetchQuery(He,kn,{clusters:t.map(i=>({id:i.id,eventIds:i.eventIds})),fetchDataQualityMetric:n.type==="dataQuality",dataQualityMetricColumnName:n.type==="dataQuality"?n.dimension.name:null,fetchPerformanceMetric:n.type==="performance",performanceMetric:n.type==="performance"?n.metric:"accuracyScore",...a},{fetchPolicy:"network-only"}).toPromise();return(r==null?void 0:r.clusters)??[]}const r1=n=>(t,a)=>{const{dir:r,column:i}=n,l=r==="asc",o=t[i],d=a[i];return o==null?1:d==null?-1:o>d?l?1:-1:o<d?l?-1:1:0};function $1(n){let t=n.driftRatio,a=null;return n.dataQualityMetric?(t=n.dataQualityMetric.primaryValue,a=n.dataQualityMetric.referenceValue):n.performanceMetric?(t=n.performanceMetric.primaryValue,a=n.performanceMetric.referenceValue):n.primaryToCorpusRatio!=null&&(t=(n.primaryToCorpusRatio+1)/2*100),{...n,size:n.eventIds.length,primaryMetricValue:t,referenceMetricValue:a}}const So=n=>{const t=a=>({...n,columnVisibility:{metadata:!1},annotationColumnVisibility:{},setColumnVisibility:r=>{a({columnVisibility:r})},setAnnotationColumnVisibility:r=>{a({annotationColumnVisibility:r})}});return Oe()(De(t))},ye={FString:"F_STRING",Mustache:"MUSTACHE"},xo={OPENAI:"OpenAI",AZURE_OPENAI:"Azure OpenAI",ANTHROPIC:"Anthropic"},hr="OPENAI",gr="user",Mo=["2024-10-01-preview","2024-09-01-preview","2024-08-01-preview","2024-07-01-preview","2024-06-01","2024-05-01-preview","2024-04-01-preview","2024-03-01-preview","2024-02-15-preview","2024-02-01","2023-10-01-preview","2023-09-01-preview","2023-08-01-preview","2023-07-01-preview","2023-06-01-preview","2023-05-15","2023-03-15-preview"],fr=n=>"variablesValueCache"in n;let Lr=0,B1=0,Cr=1,br=0;const Rn=()=>Lr++,Z1=()=>Cr++,yr=()=>br++,Nn=()=>({__type:"chat",messages:[{id:Z1(),role:"system",content:"You are a chatbot"},{id:Z1(),role:"user",content:"{{question}}"}]}),vr={__type:"text_completion",prompt:"{{question}}"};function wr(){return{id:Rn(),template:Nn(),model:{provider:hr,modelName:"gpt-4o"},tools:[],toolChoice:"auto",input:{variablesValueCache:{}},output:void 0,spanId:null,activeRunId:null,isRunning:!1}}function To(n){return{id:yr(),definition:{type:"function",function:{name:`new_function_${n}`,parameters:{type:"object",properties:{new_arg:{type:"string"}},required:[]}}}}}const Io=n=>Oe(De((a,r)=>({operationType:"chat",inputMode:"manual",input:{variablesValueCache:{}},templateLanguage:ye.Mustache,setInputMode:i=>a({inputMode:i}),instances:[wr()],setOperationType:i=>{a(i==="chat"?{instances:r().instances.map(l=>({...l,template:Nn()}))}:{instances:r().instances.map(l=>({...l,template:vr}))}),a({operationType:i})},addInstance:()=>{const i=r().instances,l=r().instances[0];l&&a({instances:[...i,{...l,id:Rn(),activeRunId:null,isRunning:!1,spanId:null}]})},updateModel:({instanceId:i,model:l})=>{const o=r().instances,d=o.find(u=>u.id===i);if(!d)return;const c=d.model;l.provider!==c.provider&&(l={...l,modelName:void 0}),a({instances:o.map(u=>u.id===i?{...u,model:{...u.model,...l}}:u)})},deleteInstance:i=>{const l=r().instances;a({instances:l.filter(o=>o.id!==i)})},addMessage:({playgroundInstanceId:i})=>{const l=r().instances;a({instances:l.map(o=>o.id===i&&(o!=null&&o.template)&&(o==null?void 0:o.template.__type)==="chat"?{...o,messages:[...o.template.messages,{role:gr,content:"{question}"}]}:o)})},updateInstance:({instanceId:i,patch:l})=>{const o=r().instances;a({instances:o.map(d=>d.id===i?{...d,...l}:d)})},runPlaygroundInstances:()=>{const i=r().instances;a({instances:i.map(l=>({...l,activeRunId:B1++,isRunning:!0,spanId:null}))})},runPlaygroundInstance:i=>{const l=r().instances;a({instances:l.map(o=>o.id===i?{...o,activeRunId:B1++,isRunning:!0,spanId:null}:o)})},markPlaygroundInstanceComplete:i=>{const l=r().instances;a({instances:l.map(o=>o.id===i?{...o,isRunning:!1}:o)})},setTemplateLanguage:i=>{a({templateLanguage:i})},setVariableValue:(i,l)=>{const o=r().input;fr(o)&&a({input:{...o,variablesValueCache:{...o.variablesValueCache,[i]:l}}})},...n}))),Eo=n=>{const t=a=>({setCredential:({provider:r,value:i})=>{a({[r]:i})},...n});return Oe()(an(De(t),{name:"arize-phoenix-credentials"}))},kr=n=>{const t=a=>({markdownDisplayMode:"text",setMarkdownDisplayMode:r=>{a({markdownDisplayMode:r})},traceStreamingEnabled:!0,setTraceStreamingEnabled:r=>{a({traceStreamingEnabled:r})},lastNTimeRangeKey:"7d",setLastNTimeRangeKey:r=>{a({lastNTimeRangeKey:r})},projectsAutoRefreshEnabled:!0,setProjectAutoRefreshEnabled:r=>{a({projectsAutoRefreshEnabled:r})},showSpanAside:!0,setShowSpanAside:r=>{a({showSpanAside:r})},showMetricsInTraceTree:!0,setShowMetricsInTraceTree:r=>{a({showMetricsInTraceTree:r})},...n});return Oe()(an(De(t),{name:"arize-phoenix-preferences"}))},zn=p.createContext(null);function Vo({children:n,...t}){const[a]=p.useState(()=>kr(t));return e(zn.Provider,{value:a,children:n})}function ce(n,t){const a=j.useContext(zn);if(!a)throw new Error("Missing PreferencesContext.Provider in the tree");return tn(a,n,t)}function Hn(n){return e("div",{onClick:t=>t.stopPropagation(),css:m`
147
+ `}}}();Mn.hash="e8fa488a0d466b5e40fdadc1e5227a57";const Oa=30,D1=5,_1=100,Da=0,F1=0,A1=.99,_a=500,R1=300,N1=1e5,Fa=10,z1=1,Aa=2,Ra=1,Na=0;var I=(n=>(n.inferences="inferences",n.correctness="correctness",n.dimension="dimension",n))(I||{}),Ce=(n=>(n.list="list",n.gallery="gallery",n))(Ce||{}),Le=(n=>(n.small="small",n.medium="medium",n.large="large",n))(Le||{}),V=(n=>(n.primary="primary",n.reference="reference",n.corpus="corpus",n))(V||{}),A=(n=>(n.correct="correct",n.incorrect="incorrect",n.unknown="unknown",n))(A||{});const za=["#05fbff","#cb8afd"],Ha=["#00add0","#4500d9"],J="#a5a5a5",pe=J;var W=(n=>(n.primary="primary",n.reference="reference",n.corpus="corpus",n))(W||{});function F(n){throw new Error("Unreachable")}function f1(n){return typeof n=="number"||n===null}function Ka(n){return typeof n=="string"||n===null}function so(n){return Array.isArray(n)?n.every(t=>typeof t=="string"):!1}function $a(n){return typeof n=="object"&&n!==null}const co=()=>n=>n,L1=p.createContext(null);function Xe(){const n=j.useContext(L1);if(n===null)throw new Error("useInferences must be used within a InferencesProvider");return n}function uo(n){return e(L1.Provider,{value:{primaryInferences:n.primaryInferences,referenceInferences:n.referenceInferences,corpusInferences:n.corpusInferences,getInferencesNameByRole:t=>{var a,r;switch(t){case W.primary:return n.primaryInferences.name;case W.reference:return((a=n.referenceInferences)==null?void 0:a.name)??"reference";case W.corpus:return((r=n.corpusInferences)==null?void 0:r.name)??"corpus";default:F()}}},children:n.children})}const C1=p.createContext(null);function mo({children:n,...t}){const[a]=p.useState(()=>sr(t));return e(C1.Provider,{value:a,children:n})}function b(n,t){const a=p.useContext(C1);if(!a)throw new Error("Missing PointCloudContext.Provider in the tree");return tn(a,n,t)}var G=(n=>(n.last_hour="Last Hour",n.last_day="Last Day",n.last_week="Last Week",n.last_month="Last Month",n.last_3_months="Last 3 Months",n.first_hour="First Hour",n.first_day="First Day",n.first_week="First Week",n.first_month="First Month",n.all="All",n))(G||{});const Tn=p.createContext(null);function Ba(){const n=p.useContext(Tn);if(n===null)throw new Error("useTimeRange must be used within a TimeRangeProvider");return n}function Za(n,t){return p.useMemo(()=>{switch(n){case"Last Hour":{const r=ue(xt(t.end),{roundingMethod:"ceil"});return{start:d1(r,1),end:r}}case"Last Day":{const r=ue(St(t.end),{roundingMethod:"ceil"});return{start:oe(r,1),end:r}}case"Last Week":{const r=ue(Ke(t.end),{roundingMethod:"ceil"});return{start:oe(r,7),end:r}}case"Last Month":{const r=ue(Ke(t.end),{roundingMethod:"ceil"});return{start:oe(r,30),end:r}}case"Last 3 Months":{const r=ue(Ke(t.end),{roundingMethod:"ceil"});return{start:oe(r,90),end:r}}case"First Hour":{const r=c1(t.start);return{start:r,end:kt(r,1)}}case"First Day":{const r=me(t.start);return{start:r,end:Ze(r,1)}}case"First Week":{const r=n1(t.start);return{start:r,end:Ze(r,7)}}case"First Month":{const r=n1(t.start);return{start:r,end:Ze(r,30)}}case"All":{const r=ue(Ke(t.end),{roundingMethod:"floor"});return{start:n1(t.start),end:r}}default:F()}},[n,t])}function po(n){const[t,a]=p.useState("Last Month"),r=Za(t,n.timeRangeBounds),i=p.useCallback(l=>{p.startTransition(()=>{a(l)})},[]);return e(Tn.Provider,{value:{timeRange:r,timePreset:t,setTimePreset:i},children:n.children})}const In=p.createContext(null);function ho({children:n}){const[t,a]=la({style:{zIndex:1e3}}),r=p.useCallback(l=>{t({variant:"danger",...l})},[t]),i=p.useCallback(l=>{t({variant:"success",...l})},[t]);return s(In.Provider,{value:{notify:t,notifyError:r,notifySuccess:i},children:[n,a]})}function En(){const n=p.useContext(In);if(n===null)throw new Error("useGlobalNotification must be used within a NotificationProvider");return n}function go(){return En().notifyError}function fo(){return En().notifySuccess}const Vn="arize-phoenix-theme";function Pn(){return localStorage.getItem(Vn)==="light"?"light":"dark"}const b1=p.createContext(null);function B(){const n=p.useContext(b1);if(n===null)throw new Error("useTheme must be used within a ThemeProvider");return n}function Lo(n){const[t,a]=p.useState(Pn()),r=p.useCallback(i=>{localStorage.setItem(Vn,i),a(i)},[]);return e(b1.Provider,{value:{theme:t,setTheme:r},children:n.children})}function Ga(n){return n.endsWith("/")?n.slice(0,-1):n}const On=Ga(window.Config.basename),Qa=window.location.protocol==="https:",ze=`${window.location.protocol}//${window.location.host}${On}`,Ua=`${Qa?"wss":"ws"}://${window.location.host}${On}`,Co=window.Config.platformVersion,Ue="returnUrl",Wa=()=>window.location.pathname+window.location.search,ja=()=>`${Ue}=${encodeURIComponent(Wa())}`,bo=({path:n,searchParams:t})=>{const r=new URL(window.location.href).searchParams.get(Ue),i=new URLSearchParams(t||{});r&&i.set(Ue,r);const l=i.toString();return`${n}${l?`?${l}`:""}`},qa=n=>!(typeof n!="string"||!n.startsWith("/")||n.replace(/\\/g,"/").startsWith("//")),Xa=n=>qa(n)?n:"/",yo=()=>{const n=new URL(window.location.href);return Xa(n.searchParams.get(Ue))},Ya=ze+"/auth/refresh";class H1 extends Error{constructor(){super("Unauthorized")}}async function Ja(n,t){try{return await fetch(n,t).then(a=>{if(a.status===401)throw new H1;return a})}catch(a){if(a instanceof H1)return await er(),fetch(n,t)}throw new Error("An unexpected error occurred while fetching data")}let xe=null;async function er(){return xe||(xe=fetch(Ya,{method:"POST"}).then(n=>(n.ok||(window.location.href=`/login?${ja()}`),xe=null,n)),xe)}const nr=ze+"/graphql",tr=window.Config.authenticationEnabled?Ja:fetch,ar=async(n,t,a)=>{const i=await(await tr(nr,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({query:n.text,variables:t})})).json();if(Array.isArray(i.errors))throw new Error(`Error fetching GraphQL query '${n.name}' with variables '${JSON.stringify(t)}': ${JSON.stringify(i.errors)}`);return i},rr=Mt({url:`${Ua}/graphql`}),ir=(n,t)=>Te.Observable.create(a=>rr.subscribe({operationName:n.name,query:n.text,variables:t},a)),He=new Te.Environment({network:Te.Network.create(ar,ir),store:new Te.Store(new Te.RecordSource,{gcReleaseBufferSize:10})});function Dn(n){return n.includes("PRIMARY")?W.primary:n.includes("CORPUS")?W.corpus:W.reference}function y1(n){const t=[],a=[],r=[];return n.forEach(i=>{const l=Dn(i);l==W.primary?t.push(i):l==W.corpus?r.push(i):a.push(i)}),{primaryEventIds:t,referenceEventIds:a,corpusEventIds:r}}const We=10,Ie="unknown",_n=It,Fn=Tt,lr=n=>Fn[n],or=n=>_n(n/We);var be=(n=>(n.move="move",n.select="select",n))(be||{}),v1=(n=>(n.default="default",n.highlight="highlight",n))(v1||{});const he=()=>Pn()==="light"?Ha:za;function vo(){const n=he();return{coloringStrategy:I.inferences,pointGroupVisibility:{[V.primary]:!0,[V.reference]:!0},pointGroupColors:{[V.primary]:n[0],[V.reference]:n[1],[V.corpus]:J},metric:{type:"drift",metric:"euclideanDistance"}}}function wo(){const n=he();return{coloringStrategy:I.inferences,pointGroupVisibility:{[V.primary]:!0,[V.corpus]:!0},pointGroupColors:{[V.primary]:n[0],[V.corpus]:J},metric:{type:"retrieval",metric:"queryDistance"},clusterSort:{dir:"desc",column:"primaryMetricValue"}}}function ko(){return{coloringStrategy:I.correctness,pointGroupVisibility:{[A.correct]:!0,[A.incorrect]:!0,[A.unknown]:!0},pointGroupColors:{[A.correct]:Qe.Discrete2.LightBlueOrange[0],[A.incorrect]:Qe.Discrete2.LightBlueOrange[1],[A.unknown]:pe},metric:{type:"performance",metric:"accuracyScore"},clusterSort:{dir:"asc",column:"primaryMetricValue"}}}const sr=n=>{const t={loading:!1,errorMessage:null,points:[],eventIdToDataMap:new Map,clusters:[],clusterSort:{dir:"desc",column:"driftRatio"},pointData:null,selectedEventIds:new Set,hoveredEventId:null,highlightedClusterId:null,selectedClusterId:null,canvasMode:"move",pointSizeScale:1,clusterColorMode:"default",coloringStrategy:I.inferences,inferencesVisibility:{primary:!0,reference:!0,corpus:!0},pointGroupVisibility:{[V.primary]:!0,[V.reference]:!0,[V.corpus]:!0},pointGroupColors:{[V.primary]:he()[0],[V.reference]:he()[1],[V.corpus]:J},eventIdToGroup:{},selectionDisplay:Ce.gallery,selectionGridSize:Le.large,dimension:null,dimensionMetadata:null,umapParameters:{minDist:Da,nNeighbors:Oa,nSamples:_a},hdbscanParameters:{minClusterSize:Fa,clusterMinSamples:Ra,clusterSelectionEpsilon:Na},clustersLoading:!1,metric:{type:"drift",metric:"euclideanDistance"},selectionSearchText:""},a=(r,i)=>({...t,...n,setInitialData:async({points:l,clusters:o,retrievals:d})=>{const c=i(),u=new Map,g=d.reduce((L,C)=>{const{queryId:k}=C;return L[k]?L[k].push(C):L[k]=[C],L},{});l.forEach(L=>{L={...L,retrievals:g[L.eventId]??[]},u.set(L.eventId,L)});const h=o.map($1).sort(r1(c.clusterSort));r({loading:!1,points:l,eventIdToDataMap:u,clusters:h,clustersLoading:!1,selectedEventIds:new Set,selectedClusterId:null,pointData:null,eventIdToGroup:le({points:l,coloringStrategy:c.coloringStrategy,pointsData:c.pointData??{},dimension:c.dimension||null,dimensionMetadata:c.dimensionMetadata})});const f=await ur(l.map(L=>L.eventId)).catch(()=>r({errorMessage:"Failed to load the point events"}));f&&r({pointData:f,clusters:h,clustersLoading:!1,eventIdToGroup:le({points:l,coloringStrategy:c.coloringStrategy,pointsData:f??{},dimension:c.dimension||null,dimensionMetadata:c.dimensionMetadata})})},setClusters:l=>{const o=i(),d=l.map($1).sort(r1(o.clusterSort));r({clusters:d,clustersLoading:!1,selectedClusterId:null,highlightedClusterId:null})},setClusterSort:l=>{const d=[...i().clusters].sort(r1(l));r({clusterSort:l,clusters:d})},setSelectedEventIds:l=>r({selectedEventIds:l,selectionSearchText:""}),setHoveredEventId:l=>r({hoveredEventId:l}),setHighlightedClusterId:l=>r({highlightedClusterId:l}),setSelectedClusterId:l=>r({selectedClusterId:l,highlightedClusterId:null}),setPointSizeScale:l=>r({pointSizeScale:l}),setCanvasMode:l=>r({canvasMode:l}),setClusterColorMode:l=>r({clusterColorMode:l}),setColoringStrategy:l=>{const o=i();switch(r({coloringStrategy:l}),l){case I.correctness:r({pointGroupVisibility:{[A.correct]:!0,[A.incorrect]:!0,[A.unknown]:!0},pointGroupColors:{[A.correct]:Qe.Discrete2.LightBlueOrange[0],[A.incorrect]:Qe.Discrete2.LightBlueOrange[1],[A.unknown]:pe},dimension:null,dimensionMetadata:null,eventIdToGroup:le({points:o.points,coloringStrategy:l,pointsData:o.pointData??{},dimension:o.dimension||null,dimensionMetadata:o.dimensionMetadata})});break;case I.inferences:{r({pointGroupVisibility:{[V.primary]:!0,[V.reference]:!0,[V.corpus]:!0},pointGroupColors:{[V.primary]:he()[0],[V.reference]:he()[1],[V.corpus]:J},dimension:null,dimensionMetadata:null,eventIdToGroup:le({points:o.points,coloringStrategy:l,pointsData:o.pointData??{},dimension:o.dimension||null,dimensionMetadata:o.dimensionMetadata})});break}case I.dimension:{r({pointGroupVisibility:{unknown:!0},pointGroupColors:{unknown:pe},dimension:null,dimensionMetadata:null,eventIdToGroup:le({points:o.points,coloringStrategy:l,pointsData:o.pointData??{},dimension:o.dimension||null,dimensionMetadata:o.dimensionMetadata})});break}default:F()}},inferencesVisibility:{primary:!0,reference:!0,corpus:!0},setInferencesVisibility:l=>r({inferencesVisibility:l}),setPointGroupVisibility:l=>r({pointGroupVisibility:l}),selectionDisplay:Ce.gallery,setSelectionDisplay:l=>r({selectionDisplay:l}),setSelectionGridSize:l=>r({selectionGridSize:l}),reset:()=>{r({points:[],clusters:[],selectedEventIds:new Set,selectedClusterId:null,eventIdToGroup:{}})},setDimension:async l=>{const o=i();r({dimension:l,dimensionMetadata:null});const d=await dr(l).catch(()=>r({errorMessage:"Failed to load the dimension metadata"}));if(d){if(r({dimensionMetadata:d}),d.categories&&d.categories.length){const c=d.categories.length,g=c<=Fn.length?lr:h=>_n(h/c);r({pointGroupVisibility:{...d.categories.reduce((h,f)=>({...h,[f]:!0}),{}),unknown:!0},pointGroupColors:{...d.categories.reduce((h,f,L)=>({...h,[f]:g(L)}),{}),unknown:pe},eventIdToGroup:le({points:o.points,coloringStrategy:o.coloringStrategy,pointsData:o.pointData??{},dimension:l,dimensionMetadata:d})})}else if(d.interval!==null){const c=An(d.interval);r({pointGroupVisibility:{...c.reduce((u,g)=>({...u,[g.name]:!0}),{}),unknown:!0},pointGroupColors:{...c.reduce((u,g,h)=>({...u,[g.name]:or(h)}),{}),unknown:pe},eventIdToGroup:le({points:o.points,coloringStrategy:o.coloringStrategy,pointsData:o.pointData??{},dimension:l,dimensionMetadata:d})})}}},setDimensionMetadata:l=>r({dimensionMetadata:l}),setUMAPParameters:l=>r({umapParameters:l}),setHDBSCANParameters:async l=>{const o=i();r({hdbscanParameters:l,clustersLoading:!0});const d=await mr({metric:o.metric,points:o.points,hdbscanParameters:l});o.setClusters(d)},getHDSCANParameters:()=>i().hdbscanParameters,getMetric:()=>i().metric,setErrorMessage:l=>r({errorMessage:l}),setLoading:l=>r({loading:l}),setMetric:async l=>{const o=i();r({metric:l,clustersLoading:!0});const d=await pr({metric:l,clusters:o.clusters,hdbscanParameters:o.hdbscanParameters});o.setClusters(d)},setSelectionSearchText:l=>r({selectionSearchText:l})});return Oe()(De(a))},K1=new Intl.NumberFormat([],{maximumFractionDigits:2});function cr({min:n,max:t}){return`${K1.format(n)} - ${K1.format(t)}`}function An({min:n,max:t}){const r=(t-n)/We,i=[];for(let l=0;l<We;l++){const o=n+l*r,d=n+(l+1)*r;i.push({min:o,max:d,name:cr({min:o,max:d})})}return i}function a1({numericGroupIntervals:n,numericValue:t}){let a=Ie,r=n.findIndex(i=>t>=i.min&&t<i.max);return r=r===-1?We-1:r,a=n[r].name,a}function le(n){const{points:t,coloringStrategy:a,pointsData:r,dimension:i,dimensionMetadata:l}=n,o={},d=t.map(c=>c.eventId);switch(a){case I.inferences:{const{primaryEventIds:c,referenceEventIds:u,corpusEventIds:g}=y1(d);c.forEach(h=>{o[h]=V.primary}),u.forEach(h=>{o[h]=V.reference}),g.forEach(h=>{o[h]=V.corpus});break}case I.correctness:{t.forEach(c=>{let u=A.unknown;const{predictionLabel:g,actualLabel:h}=c.eventMetadata;g!==null&&h!==null&&(u=g===h?A.correct:A.incorrect),o[c.eventId]=u});break}case I.dimension:{let c;l&&(l==null?void 0:l.interval)!==null&&(c=An(l.interval));const u=(i==null?void 0:i.type)==="prediction"&&(i==null?void 0:i.dataType)==="categorical",g=(i==null?void 0:i.type)==="prediction"&&(i==null?void 0:i.dataType)==="numeric",h=(i==null?void 0:i.type)==="actual"&&(i==null?void 0:i.dataType)==="categorical",f=(i==null?void 0:i.type)==="actual"&&(i==null?void 0:i.dataType)==="numeric";t.forEach(L=>{let C=Ie;const k=r[L.eventId];if(i!=null&&k!=null)if(u)C=k.eventMetadata.predictionLabel??Ie;else if(g){if(c==null)throw new Error("Cannot color by prediction score without numeric group intervals");const x=k.eventMetadata.predictionScore;typeof x=="number"&&(C=a1({numericGroupIntervals:c,numericValue:x}))}else if(f){if(c==null)throw new Error("Cannot color by actual score without numeric group intervals");const x=k.eventMetadata.actualScore;typeof x=="number"&&(C=a1({numericGroupIntervals:c,numericValue:x}))}else if(h)C=k.eventMetadata.actualLabel??Ie;else{const x=k.dimensions.find(R=>R.dimension.name===i.name);if(x!=null&&i.dataType==="categorical")C=x.value??Ie;else if(x!=null&&i.dataType==="numeric"&&c!=null){const R=typeof(x==null?void 0:x.value)=="string"?parseFloat(x.value):null;typeof R=="number"&&(C=a1({numericGroupIntervals:c,numericValue:R}))}}o[L.eventId]=C});break}default:F()}return o}async function dr(n){const t=await X.fetchQuery(He,Mn,{id:n.id,getDimensionMinMax:n.dataType==="numeric",getDimensionCategories:n.dataType==="categorical"}).toPromise(),a=t==null?void 0:t.dimension;if(!n)throw new Error("Dimension not found");let r=null;return typeof(a==null?void 0:a.min)=="number"&&typeof(a==null?void 0:a.max)=="number"&&(r={min:a.min,max:a.max}),{interval:r,categories:(a==null?void 0:a.categories)??null}}async function ur(n){var u,g,h,f,L,C;const{primaryEventIds:t,referenceEventIds:a,corpusEventIds:r}=y1([...n]),i=await X.fetchQuery(He,xn,{primaryEventIds:t,referenceEventIds:a,corpusEventIds:r}).toPromise(),l=((g=(u=i==null?void 0:i.model)==null?void 0:u.primaryInferences)==null?void 0:g.events)??[],o=((f=(h=i==null?void 0:i.model)==null?void 0:h.referenceInferences)==null?void 0:f.events)??[],d=((C=(L=i==null?void 0:i.model)==null?void 0:L.corpusInferences)==null?void 0:C.events)??[];return[...l,...o,...d].reduce((k,z)=>(k[z.id]=z,k),{})}async function mr({metric:n,points:t,hdbscanParameters:a}){const r=await X.fetchQuery(He,Sn,{eventIds:t.map(i=>i.eventId),coordinates:t.map(i=>({x:i.position[0],y:i.position[1],z:i.position[2]})),fetchDataQualityMetric:n.type==="dataQuality",dataQualityMetricColumnName:n.type==="dataQuality"?n.dimension.name:null,fetchPerformanceMetric:n.type==="performance",performanceMetric:n.type==="performance"?n.metric:"accuracyScore",...a},{fetchPolicy:"network-only"}).toPromise();return(r==null?void 0:r.hdbscanClustering)??[]}async function pr({metric:n,clusters:t,hdbscanParameters:a}){const r=await X.fetchQuery(He,kn,{clusters:t.map(i=>({id:i.id,eventIds:i.eventIds})),fetchDataQualityMetric:n.type==="dataQuality",dataQualityMetricColumnName:n.type==="dataQuality"?n.dimension.name:null,fetchPerformanceMetric:n.type==="performance",performanceMetric:n.type==="performance"?n.metric:"accuracyScore",...a},{fetchPolicy:"network-only"}).toPromise();return(r==null?void 0:r.clusters)??[]}const r1=n=>(t,a)=>{const{dir:r,column:i}=n,l=r==="asc",o=t[i],d=a[i];return o==null?1:d==null?-1:o>d?l?1:-1:o<d?l?-1:1:0};function $1(n){let t=n.driftRatio,a=null;return n.dataQualityMetric?(t=n.dataQualityMetric.primaryValue,a=n.dataQualityMetric.referenceValue):n.performanceMetric?(t=n.performanceMetric.primaryValue,a=n.performanceMetric.referenceValue):n.primaryToCorpusRatio!=null&&(t=(n.primaryToCorpusRatio+1)/2*100),{...n,size:n.eventIds.length,primaryMetricValue:t,referenceMetricValue:a}}const So=n=>{const t=a=>({...n,columnVisibility:{metadata:!1},annotationColumnVisibility:{},setColumnVisibility:r=>{a({columnVisibility:r})},setAnnotationColumnVisibility:r=>{a({annotationColumnVisibility:r})}});return Oe()(De(t))},ye={FString:"F_STRING",Mustache:"MUSTACHE"},xo={OPENAI:"OpenAI",AZURE_OPENAI:"Azure OpenAI",ANTHROPIC:"Anthropic"},hr="OPENAI",gr="user",Mo=["2024-10-01-preview","2024-09-01-preview","2024-08-01-preview","2024-07-01-preview","2024-06-01","2024-05-01-preview","2024-04-01-preview","2024-03-01-preview","2024-02-15-preview","2024-02-01","2023-10-01-preview","2023-09-01-preview","2023-08-01-preview","2023-07-01-preview","2023-06-01-preview","2023-05-15","2023-03-15-preview"],fr=n=>"variablesValueCache"in n;let Lr=0,B1=0,Cr=1,br=0;const Rn=()=>Lr++,Z1=()=>Cr++,yr=()=>br++,Nn=()=>({__type:"chat",messages:[{id:Z1(),role:"system",content:"You are a chatbot"},{id:Z1(),role:"user",content:"{{question}}"}]}),vr={__type:"text_completion",prompt:"{{question}}"};function wr(){return{id:Rn(),template:Nn(),model:{provider:hr,modelName:"gpt-4o"},tools:[],toolChoice:"auto",input:{variablesValueCache:{}},output:void 0,spanId:null,activeRunId:null,isRunning:!1}}function To(n){return{id:yr(),definition:{type:"function",function:{name:`new_function_${n}`,parameters:{type:"object",properties:{new_arg:{type:"string"}},required:[]}}}}}const Io=n=>Oe(De((a,r)=>({streaming:!0,operationType:"chat",inputMode:"manual",input:{variablesValueCache:{}},templateLanguage:ye.Mustache,setInputMode:i=>a({inputMode:i}),instances:[wr()],setOperationType:i=>{a(i==="chat"?{instances:r().instances.map(l=>({...l,template:Nn()}))}:{instances:r().instances.map(l=>({...l,template:vr}))}),a({operationType:i})},addInstance:()=>{const i=r().instances,l=r().instances[0];l&&a({instances:[...i,{...l,id:Rn(),activeRunId:null,isRunning:!1,spanId:null}]})},updateModel:({instanceId:i,model:l})=>{const o=r().instances,d=o.find(u=>u.id===i);if(!d)return;const c=d.model;l.provider!==c.provider&&(l={...l,modelName:void 0}),a({instances:o.map(u=>u.id===i?{...u,model:{...u.model,...l}}:u)})},deleteInstance:i=>{const l=r().instances;a({instances:l.filter(o=>o.id!==i)})},addMessage:({playgroundInstanceId:i})=>{const l=r().instances;a({instances:l.map(o=>o.id===i&&(o!=null&&o.template)&&(o==null?void 0:o.template.__type)==="chat"?{...o,messages:[...o.template.messages,{role:gr,content:"{question}"}]}:o)})},updateInstance:({instanceId:i,patch:l})=>{const o=r().instances;a({instances:o.map(d=>d.id===i?{...d,...l}:d)})},runPlaygroundInstances:()=>{const i=r().instances;a({instances:i.map(l=>({...l,activeRunId:B1++,isRunning:!0,spanId:null}))})},runPlaygroundInstance:i=>{const l=r().instances;a({instances:l.map(o=>o.id===i?{...o,activeRunId:B1++,isRunning:!0,spanId:null}:o)})},markPlaygroundInstanceComplete:i=>{const l=r().instances;a({instances:l.map(o=>o.id===i?{...o,isRunning:!1}:o)})},setTemplateLanguage:i=>{a({templateLanguage:i})},setVariableValue:(i,l)=>{const o=r().input;fr(o)&&a({input:{...o,variablesValueCache:{...o.variablesValueCache,[i]:l}}})},setStreaming:i=>{a({streaming:i})},...n}))),Eo=n=>{const t=a=>({setCredential:({provider:r,value:i})=>{a({[r]:i})},...n});return Oe()(an(De(t),{name:"arize-phoenix-credentials"}))},kr=n=>{const t=a=>({markdownDisplayMode:"text",setMarkdownDisplayMode:r=>{a({markdownDisplayMode:r})},traceStreamingEnabled:!0,setTraceStreamingEnabled:r=>{a({traceStreamingEnabled:r})},lastNTimeRangeKey:"7d",setLastNTimeRangeKey:r=>{a({lastNTimeRangeKey:r})},projectsAutoRefreshEnabled:!0,setProjectAutoRefreshEnabled:r=>{a({projectsAutoRefreshEnabled:r})},showSpanAside:!0,setShowSpanAside:r=>{a({showSpanAside:r})},showMetricsInTraceTree:!0,setShowMetricsInTraceTree:r=>{a({showMetricsInTraceTree:r})},...n});return Oe()(an(De(t),{name:"arize-phoenix-preferences"}))},zn=p.createContext(null);function Vo({children:n,...t}){const[a]=p.useState(()=>kr(t));return e(zn.Provider,{value:a,children:n})}function ce(n,t){const a=j.useContext(zn);if(!a)throw new Error("Missing PreferencesContext.Provider in the tree");return tn(a,n,t)}function Hn(n){return e("div",{onClick:t=>t.stopPropagation(),css:m`
148
148
  display: inline-block;
149
149
  `,children:e(rn,{css:m`
150
150
  color: var(--ac-global-color-primary);
@@ -1,4 +1,4 @@
1
- import{j as e,x as h,b7 as x,du as b,dv as f,l as n,dw as r,dx as y,dy as P,r as v,t as w,dz as R}from"./vendor-6IcPAw_j.js";import{v as L,a4 as z}from"./vendor-arizeai-uC2sozJ6.js";import{E as k,L as E,R as $,r as j,a as I,F as S,A,b as C,c as F,P as T,h as O,M as D,d,D as B,e as G,f as M,g as N,i as W,j as q,T as H,p as _,k as c,l as J,m as K,n as p,o as Q,q as m,s as g,t as U,v as V,w as X,x as Y,y as Z,z as ee,S as re,B as ae,C as oe,G as te,H as ne,I as se,J as le}from"./pages-CFNU-U_5.js";import{bG as ie,j as de,R as ce,bH as pe,bI as me}from"./components-8zh9kCOG.js";import"./vendor-three-DwGkEfCM.js";import"./vendor-recharts-DwrexFA4.js";import"./vendor-codemirror-DVE2_WBr.js";(function(){const s=document.createElement("link").relList;if(s&&s.supports&&s.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))i(o);new MutationObserver(o=>{for(const t of o)if(t.type==="childList")for(const l of t.addedNodes)l.tagName==="LINK"&&l.rel==="modulepreload"&&i(l)}).observe(document,{childList:!0,subtree:!0});function u(o){const t={};return o.integrity&&(t.integrity=o.integrity),o.referrerPolicy&&(t.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?t.credentials="include":o.crossOrigin==="anonymous"?t.credentials="omit":t.credentials="same-origin",t}function i(o){if(o.ep)return;o.ep=!0;const t=u(o);fetch(o.href,t)}})();function ge(){return e(x,{styles:a=>h`
1
+ import{j as e,x as h,b7 as x,du as b,dv as f,l as n,dw as r,dx as y,dy as P,r as v,t as w,dz as R}from"./vendor-6IcPAw_j.js";import{v as L,a4 as z}from"./vendor-arizeai-uC2sozJ6.js";import{E as k,L as E,R as $,r as j,a as I,F as S,A,b as C,c as F,P as T,h as O,M as D,d,D as B,e as G,f as M,g as N,i as W,j as q,T as H,p as _,k as c,l as J,m as K,n as p,o as Q,q as m,s as g,t as U,v as V,w as X,x as Y,y as Z,z as ee,S as re,B as ae,C as oe,G as te,H as ne,I as se,J as le}from"./pages-uwuWR0d3.js";import{bG as ie,j as de,R as ce,bH as pe,bI as me}from"./components-DOjuTDx9.js";import"./vendor-three-DwGkEfCM.js";import"./vendor-recharts-DwrexFA4.js";import"./vendor-codemirror-DVE2_WBr.js";(function(){const s=document.createElement("link").relList;if(s&&s.supports&&s.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))i(o);new MutationObserver(o=>{for(const t of o)if(t.type==="childList")for(const l of t.addedNodes)l.tagName==="LINK"&&l.rel==="modulepreload"&&i(l)}).observe(document,{childList:!0,subtree:!0});function u(o){const t={};return o.integrity&&(t.integrity=o.integrity),o.referrerPolicy&&(t.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?t.credentials="include":o.crossOrigin==="anonymous"?t.credentials="omit":t.credentials="same-origin",t}function i(o){if(o.ep)return;o.ep=!0;const t=u(o);fetch(o.href,t)}})();function ge(){return e(x,{styles:a=>h`
2
2
  body {
3
3
  background-color: var(--ac-global-color-grey-75);
4
4
  color: var(--ac-global-text-color-900);