arize-phoenix 3.8.0__tar.gz → 3.10.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 (177) hide show
  1. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/PKG-INFO +1 -1
  2. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/config.py +8 -0
  3. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/api/schema.py +1 -196
  4. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/api/types/Dataset.py +5 -2
  5. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/api/types/Project.py +17 -0
  6. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/static/index.js +611 -550
  7. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/session/client.py +8 -1
  8. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/session/session.py +72 -5
  9. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/trace/langchain/instrumentor.py +6 -1
  10. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/trace/llama_index/callback.py +50 -24
  11. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/trace/openai/instrumentor.py +6 -1
  12. arize_phoenix-3.10.0/src/phoenix/version.py +1 -0
  13. arize_phoenix-3.8.0/src/phoenix/server/api/types/DatasetInfo.py +0 -24
  14. arize_phoenix-3.8.0/src/phoenix/version.py +0 -1
  15. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/.gitignore +0 -0
  16. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/IP_NOTICE +0 -0
  17. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/LICENSE +0 -0
  18. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/README.md +0 -0
  19. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/pyproject.toml +0 -0
  20. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/__init__.py +0 -0
  21. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/core/__init__.py +0 -0
  22. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/core/embedding_dimension.py +0 -0
  23. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/core/model.py +0 -0
  24. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/core/model_schema.py +0 -0
  25. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/core/model_schema_adapter.py +0 -0
  26. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/core/project.py +0 -0
  27. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/core/traces.py +0 -0
  28. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/datasets/__init__.py +0 -0
  29. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/datasets/dataset.py +0 -0
  30. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/datasets/errors.py +0 -0
  31. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/datasets/fixtures.py +0 -0
  32. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/datasets/schema.py +0 -0
  33. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/datasets/validation.py +0 -0
  34. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/datetime_utils.py +0 -0
  35. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/exceptions.py +0 -0
  36. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/experimental/__init__.py +0 -0
  37. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/experimental/evals/__init__.py +0 -0
  38. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/experimental/evals/evaluators.py +0 -0
  39. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/experimental/evals/functions/__init__.py +0 -0
  40. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/experimental/evals/functions/classify.py +0 -0
  41. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/experimental/evals/functions/executor.py +0 -0
  42. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/experimental/evals/functions/generate.py +0 -0
  43. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/experimental/evals/functions/processing.py +0 -0
  44. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/experimental/evals/models/__init__.py +0 -0
  45. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/experimental/evals/models/anthropic.py +0 -0
  46. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/experimental/evals/models/base.py +0 -0
  47. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/experimental/evals/models/bedrock.py +0 -0
  48. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/experimental/evals/models/litellm.py +0 -0
  49. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/experimental/evals/models/openai.py +0 -0
  50. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/experimental/evals/models/rate_limiters.py +0 -0
  51. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/experimental/evals/models/vertex.py +0 -0
  52. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/experimental/evals/models/vertexai.py +0 -0
  53. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/experimental/evals/retrievals.py +0 -0
  54. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/experimental/evals/templates/__init__.py +0 -0
  55. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/experimental/evals/templates/default_templates.py +0 -0
  56. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/experimental/evals/templates/template.py +0 -0
  57. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/experimental/evals/utils/__init__.py +0 -0
  58. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/experimental/evals/utils/threads.py +0 -0
  59. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/metrics/README.md +0 -0
  60. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/metrics/__init__.py +0 -0
  61. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/metrics/binning.py +0 -0
  62. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/metrics/metrics.py +0 -0
  63. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/metrics/mixins.py +0 -0
  64. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/metrics/retrieval_metrics.py +0 -0
  65. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/metrics/timeseries.py +0 -0
  66. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/metrics/wrappers.py +0 -0
  67. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/pointcloud/__init__.py +0 -0
  68. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/pointcloud/clustering.py +0 -0
  69. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/pointcloud/pointcloud.py +0 -0
  70. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/pointcloud/projectors.py +0 -0
  71. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/pointcloud/umap_parameters.py +0 -0
  72. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/py.typed +0 -0
  73. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/__init__.py +0 -0
  74. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/api/__init__.py +0 -0
  75. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/api/context.py +0 -0
  76. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/api/helpers.py +0 -0
  77. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/api/input_types/ClusterInput.py +0 -0
  78. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/api/input_types/Coordinates.py +0 -0
  79. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/api/input_types/DataQualityMetricInput.py +0 -0
  80. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/api/input_types/DimensionFilter.py +0 -0
  81. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/api/input_types/DimensionInput.py +0 -0
  82. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/api/input_types/Granularity.py +0 -0
  83. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/api/input_types/PerformanceMetricInput.py +0 -0
  84. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/api/input_types/SpanSort.py +0 -0
  85. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/api/input_types/TimeRange.py +0 -0
  86. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/api/input_types/__init__.py +0 -0
  87. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/api/interceptor.py +0 -0
  88. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/api/routers/__init__.py +0 -0
  89. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/api/routers/evaluation_handler.py +0 -0
  90. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/api/routers/span_handler.py +0 -0
  91. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/api/routers/trace_handler.py +0 -0
  92. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/api/routers/utils.py +0 -0
  93. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/api/types/Cluster.py +0 -0
  94. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/api/types/DataQualityMetric.py +0 -0
  95. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/api/types/DatasetRole.py +0 -0
  96. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/api/types/DatasetValues.py +0 -0
  97. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/api/types/Dimension.py +0 -0
  98. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/api/types/DimensionDataType.py +0 -0
  99. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/api/types/DimensionShape.py +0 -0
  100. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/api/types/DimensionType.py +0 -0
  101. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/api/types/DimensionWithValue.py +0 -0
  102. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/api/types/DocumentEvaluationSummary.py +0 -0
  103. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/api/types/DocumentRetrievalMetrics.py +0 -0
  104. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/api/types/EmbeddingDimension.py +0 -0
  105. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/api/types/EmbeddingMetadata.py +0 -0
  106. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/api/types/Evaluation.py +0 -0
  107. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/api/types/EvaluationSummary.py +0 -0
  108. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/api/types/Event.py +0 -0
  109. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/api/types/EventMetadata.py +0 -0
  110. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/api/types/ExportEventsMutation.py +0 -0
  111. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/api/types/ExportedFile.py +0 -0
  112. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/api/types/Functionality.py +0 -0
  113. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/api/types/MimeType.py +0 -0
  114. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/api/types/Model.py +0 -0
  115. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/api/types/NumericRange.py +0 -0
  116. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/api/types/PerformanceMetric.py +0 -0
  117. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/api/types/PromptResponse.py +0 -0
  118. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/api/types/Retrieval.py +0 -0
  119. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/api/types/ScalarDriftMetricEnum.py +0 -0
  120. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/api/types/Segments.py +0 -0
  121. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/api/types/SortDir.py +0 -0
  122. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/api/types/Span.py +0 -0
  123. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/api/types/TimeSeries.py +0 -0
  124. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/api/types/UMAPPoints.py +0 -0
  125. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/api/types/ValidationResult.py +0 -0
  126. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/api/types/VectorDriftMetricEnum.py +0 -0
  127. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/api/types/__init__.py +0 -0
  128. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/api/types/node.py +0 -0
  129. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/api/types/pagination.py +0 -0
  130. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/app.py +0 -0
  131. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/main.py +0 -0
  132. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/static/apple-touch-icon-114x114.png +0 -0
  133. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/static/apple-touch-icon-120x120.png +0 -0
  134. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/static/apple-touch-icon-144x144.png +0 -0
  135. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/static/apple-touch-icon-152x152.png +0 -0
  136. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/static/apple-touch-icon-180x180.png +0 -0
  137. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/static/apple-touch-icon-72x72.png +0 -0
  138. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/static/apple-touch-icon-76x76.png +0 -0
  139. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/static/apple-touch-icon.png +0 -0
  140. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/static/favicon.ico +0 -0
  141. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/static/index.css +0 -0
  142. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/static/modernizr.js +0 -0
  143. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/templates/__init__.py +0 -0
  144. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/templates/index.html +0 -0
  145. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/server/thread_server.py +0 -0
  146. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/services.py +0 -0
  147. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/session/__init__.py +0 -0
  148. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/session/data_extractor.py +0 -0
  149. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/session/evaluation.py +0 -0
  150. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/trace/__init__.py +0 -0
  151. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/trace/dsl/__init__.py +0 -0
  152. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/trace/dsl/filter.py +0 -0
  153. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/trace/dsl/helpers.py +0 -0
  154. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/trace/dsl/missing.py +0 -0
  155. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/trace/dsl/query.py +0 -0
  156. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/trace/errors.py +0 -0
  157. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/trace/evaluation_conventions.py +0 -0
  158. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/trace/exporter.py +0 -0
  159. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/trace/fixtures.py +0 -0
  160. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/trace/langchain/__init__.py +0 -0
  161. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/trace/langchain/tracer.py +0 -0
  162. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/trace/llama_index/__init__.py +0 -0
  163. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/trace/openai/__init__.py +0 -0
  164. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/trace/otel.py +0 -0
  165. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/trace/schemas.py +0 -0
  166. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/trace/span_evaluations.py +0 -0
  167. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/trace/span_json_decoder.py +0 -0
  168. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/trace/span_json_encoder.py +0 -0
  169. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/trace/trace_dataset.py +0 -0
  170. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/trace/tracer.py +0 -0
  171. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/trace/utils.py +0 -0
  172. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/trace/v1/__init__.py +0 -0
  173. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/trace/v1/evaluation_pb2.py +0 -0
  174. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/trace/v1/evaluation_pb2.pyi +0 -0
  175. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/utilities/__init__.py +0 -0
  176. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/utilities/error_handling.py +0 -0
  177. {arize_phoenix-3.8.0 → arize_phoenix-3.10.0}/src/phoenix/utilities/logging.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: arize-phoenix
3
- Version: 3.8.0
3
+ Version: 3.10.0
4
4
  Summary: ML Observability in your notebook
5
5
  Project-URL: Documentation, https://docs.arize.com/phoenix/
6
6
  Project-URL: Issues, https://github.com/Arize-ai/phoenix/issues
@@ -17,6 +17,10 @@ ENV_PHOENIX_WORKING_DIR = "PHOENIX_WORKING_DIR"
17
17
  The directory in which to save, load, and export datasets. This directory must
18
18
  be accessible by both the Phoenix server and the notebook environment.
19
19
  """
20
+ ENV_PHOENIX_PROJECT_NAME = "PHOENIX_PROJECT_NAME"
21
+ """
22
+ The project name to use when logging traces and evals. defaults to 'default'.
23
+ """
20
24
 
21
25
 
22
26
  def _get_temp_path() -> Path:
@@ -113,3 +117,7 @@ def get_env_host() -> str:
113
117
 
114
118
  def get_env_collector_endpoint() -> Optional[str]:
115
119
  return os.getenv(ENV_PHOENIX_COLLECTOR_ENDPOINT)
120
+
121
+
122
+ def get_env_project_name() -> str:
123
+ return os.getenv(ENV_PHOENIX_PROJECT_NAME) or "default"
@@ -1,7 +1,5 @@
1
1
  from collections import defaultdict
2
- from datetime import datetime
3
- from itertools import chain
4
- from typing import Dict, List, Optional, Set, Tuple, Union, cast
2
+ from typing import Dict, List, Optional, Set, Union
5
3
 
6
4
  import numpy as np
7
5
  import numpy.typing as npt
@@ -10,7 +8,6 @@ from strawberry import ID, UNSET
10
8
  from strawberry.types import Info
11
9
  from typing_extensions import Annotated
12
10
 
13
- from phoenix.core.project import DEFAULT_PROJECT_NAME
14
11
  from phoenix.pointcloud.clustering import Hdbscan
15
12
  from phoenix.server.api.helpers import ensure_list
16
13
  from phoenix.server.api.input_types.ClusterInput import ClusterInput
@@ -18,15 +15,10 @@ from phoenix.server.api.input_types.Coordinates import (
18
15
  InputCoordinate2D,
19
16
  InputCoordinate3D,
20
17
  )
21
- from phoenix.server.api.input_types.SpanSort import SpanSort
22
18
  from phoenix.server.api.types.Cluster import Cluster, to_gql_clusters
23
19
  from phoenix.server.api.types.Project import Project
24
- from phoenix.trace.dsl import SpanFilter
25
- from phoenix.trace.schemas import SpanID, TraceID
26
20
 
27
21
  from .context import Context
28
- from .input_types.TimeRange import TimeRange
29
- from .types.DatasetInfo import TraceDatasetInfo
30
22
  from .types.DatasetRole import AncillaryDatasetRole, DatasetRole
31
23
  from .types.Dimension import to_gql_dimension
32
24
  from .types.EmbeddingDimension import (
@@ -35,15 +27,12 @@ from .types.EmbeddingDimension import (
35
27
  DEFAULT_MIN_SAMPLES,
36
28
  to_gql_embedding_dimension,
37
29
  )
38
- from .types.EvaluationSummary import EvaluationSummary
39
30
  from .types.Event import create_event_id, unpack_event_id
40
31
  from .types.ExportEventsMutation import ExportEventsMutation
41
32
  from .types.Functionality import Functionality
42
33
  from .types.Model import Model
43
34
  from .types.node import GlobalID, Node, from_global_id
44
35
  from .types.pagination import Connection, ConnectionArgs, Cursor, connection_from_list
45
- from .types.Span import Span, to_gql_span
46
- from .types.ValidationResult import ValidationResult
47
36
 
48
37
 
49
38
  @strawberry.type
@@ -233,190 +222,6 @@ class Query:
233
222
  clustered_events=clustered_events,
234
223
  )
235
224
 
236
- @strawberry.field
237
- def streaming_last_updated_at(
238
- self,
239
- info: Info[Context, None],
240
- ) -> Optional[datetime]:
241
- last_updated_at: Optional[datetime] = None
242
- if (traces := info.context.traces) is not None and (
243
- traces_last_updated_at := traces.last_updated_at
244
- ) is not None:
245
- last_updated_at = (
246
- traces_last_updated_at
247
- if last_updated_at is None
248
- else max(last_updated_at, traces_last_updated_at)
249
- )
250
- return last_updated_at
251
-
252
- @strawberry.field
253
- def spans(
254
- self,
255
- info: Info[Context, None],
256
- time_range: Optional[TimeRange] = UNSET,
257
- trace_ids: Optional[List[ID]] = UNSET,
258
- first: Optional[int] = 50,
259
- last: Optional[int] = UNSET,
260
- after: Optional[Cursor] = UNSET,
261
- before: Optional[Cursor] = UNSET,
262
- sort: Optional[SpanSort] = UNSET,
263
- root_spans_only: Optional[bool] = UNSET,
264
- filter_condition: Optional[str] = UNSET,
265
- ) -> Connection[Span]:
266
- args = ConnectionArgs(
267
- first=first,
268
- after=after if isinstance(after, Cursor) else None,
269
- last=last,
270
- before=before if isinstance(before, Cursor) else None,
271
- )
272
- if not (traces := info.context.traces) or not (
273
- project := traces.get_project(DEFAULT_PROJECT_NAME)
274
- ):
275
- return connection_from_list(data=[], args=args)
276
- predicate = (
277
- SpanFilter(
278
- condition=filter_condition,
279
- evals=project,
280
- )
281
- if filter_condition
282
- else None
283
- )
284
- if not trace_ids:
285
- spans = traces.get_spans(
286
- start_time=time_range.start if time_range else None,
287
- stop_time=time_range.end if time_range else None,
288
- root_spans_only=root_spans_only,
289
- )
290
- else:
291
- spans = chain.from_iterable(
292
- traces.get_trace(trace_id) for trace_id in map(TraceID, trace_ids)
293
- )
294
- if predicate:
295
- spans = filter(predicate, spans)
296
- if sort:
297
- spans = sort(spans, evals=project)
298
- data = list(map(to_gql_span, spans))
299
- return connection_from_list(data=data, args=args)
300
-
301
- @strawberry.field(
302
- description="Names of all available evaluations for spans. "
303
- "(The list contains no duplicates.)"
304
- ) # type: ignore
305
- def span_evaluation_names(
306
- self,
307
- info: Info[Context, None],
308
- ) -> List[str]:
309
- if not (traces := info.context.traces) or not (
310
- project := traces.get_project(DEFAULT_PROJECT_NAME)
311
- ):
312
- return []
313
- return project.get_span_evaluation_names()
314
-
315
- @strawberry.field(
316
- description="Names of available document evaluations.",
317
- ) # type: ignore
318
- def document_evaluation_names(
319
- self,
320
- info: Info[Context, None],
321
- span_id: Optional[ID] = UNSET,
322
- ) -> List[str]:
323
- if not (traces := info.context.traces) or not (
324
- project := traces.get_project(DEFAULT_PROJECT_NAME)
325
- ):
326
- return []
327
- return project.get_document_evaluation_names(
328
- None if span_id is UNSET else SpanID(span_id),
329
- )
330
-
331
- @strawberry.field
332
- def span_evaluation_summary(
333
- self,
334
- info: Info[Context, None],
335
- evaluation_name: str,
336
- time_range: Optional[TimeRange] = UNSET,
337
- filter_condition: Optional[str] = UNSET,
338
- ) -> Optional[EvaluationSummary]:
339
- if not (traces := info.context.traces) or not (
340
- project := traces.get_project(DEFAULT_PROJECT_NAME)
341
- ):
342
- return None
343
- predicate = (
344
- SpanFilter(
345
- condition=filter_condition,
346
- evals=project,
347
- )
348
- if filter_condition
349
- else None
350
- )
351
- span_ids = project.get_span_evaluation_span_ids(evaluation_name)
352
- if not span_ids:
353
- return None
354
- spans = traces.get_spans(
355
- start_time=time_range.start if time_range else None,
356
- stop_time=time_range.end if time_range else None,
357
- span_ids=span_ids,
358
- )
359
- if predicate:
360
- spans = filter(predicate, spans)
361
- evaluations = tuple(
362
- evaluation
363
- for span in spans
364
- if (
365
- evaluation := project.get_span_evaluation(
366
- span.context.span_id,
367
- evaluation_name,
368
- )
369
- )
370
- is not None
371
- )
372
- if not evaluations:
373
- return None
374
- labels = project.get_span_evaluation_labels(evaluation_name)
375
- return EvaluationSummary(evaluations, labels)
376
-
377
- @strawberry.field
378
- def trace_dataset_info(
379
- self,
380
- info: Info[Context, None],
381
- ) -> Optional[TraceDatasetInfo]:
382
- if (traces := info.context.traces) is None:
383
- return None
384
- if not (span_count := traces.span_count):
385
- return None
386
- start_time, stop_time = cast(
387
- Tuple[datetime, datetime],
388
- traces.right_open_time_range,
389
- )
390
- latency_ms_p50, latency_ms_p99 = traces.root_span_latency_ms_quantiles(0.50, 0.99)
391
- return TraceDatasetInfo(
392
- start_time=start_time,
393
- end_time=stop_time,
394
- record_count=span_count,
395
- token_count_total=traces.token_count_total,
396
- latency_ms_p50=latency_ms_p50,
397
- latency_ms_p99=latency_ms_p99,
398
- )
399
-
400
- @strawberry.field
401
- def validate_span_filter_condition(
402
- self, info: Info[Context, None], condition: str
403
- ) -> ValidationResult:
404
- traces = info.context.traces
405
- project = traces.get_project(DEFAULT_PROJECT_NAME) if traces else None
406
- valid_eval_names = project.get_span_evaluation_names() if project else ()
407
- try:
408
- SpanFilter(
409
- condition=condition,
410
- evals=project,
411
- valid_eval_names=valid_eval_names,
412
- )
413
- return ValidationResult(is_valid=True, error_message=None)
414
- except SyntaxError as e:
415
- return ValidationResult(
416
- is_valid=False,
417
- error_message=e.msg,
418
- )
419
-
420
225
 
421
226
  @strawberry.type
422
227
  class Mutation(ExportEventsMutation): ...
@@ -1,3 +1,4 @@
1
+ from datetime import datetime
1
2
  from typing import Iterable, List, Optional, Set, Union
2
3
 
3
4
  import strawberry
@@ -8,14 +9,16 @@ import phoenix.core.model_schema as ms
8
9
  from phoenix.core.model_schema import FEATURE, TAG, ScalarDimension
9
10
 
10
11
  from ..input_types.DimensionInput import DimensionInput
11
- from .DatasetInfo import DatasetInfo
12
12
  from .DatasetRole import AncillaryDatasetRole, DatasetRole
13
13
  from .Dimension import Dimension, to_gql_dimension
14
14
  from .Event import Event, create_event, create_event_id, parse_event_ids_by_dataset_role
15
15
 
16
16
 
17
17
  @strawberry.type
18
- class Dataset(DatasetInfo):
18
+ class Dataset:
19
+ start_time: datetime = strawberry.field(description="The start bookend of the data")
20
+ end_time: datetime = strawberry.field(description="The end bookend of the data")
21
+ record_count: int = strawberry.field(description="The record count of the data")
19
22
  dataset: strawberry.Private[ms.Dataset]
20
23
  dataset_role: strawberry.Private[Union[DatasetRole, AncillaryDatasetRole]]
21
24
  model: strawberry.Private[ms.Model]
@@ -19,6 +19,7 @@ from phoenix.server.api.types.pagination import (
19
19
  connection_from_list,
20
20
  )
21
21
  from phoenix.server.api.types.Span import Span, to_gql_span
22
+ from phoenix.server.api.types.ValidationResult import ValidationResult
22
23
  from phoenix.trace.dsl import SpanFilter
23
24
  from phoenix.trace.schemas import SpanID, TraceID
24
25
 
@@ -219,3 +220,19 @@ class Project(Node):
219
220
  self,
220
221
  ) -> Optional[datetime]:
221
222
  return self.project.last_updated_at
223
+
224
+ @strawberry.field
225
+ def validate_span_filter_condition(self, condition: str) -> ValidationResult:
226
+ valid_eval_names = self.project.get_span_evaluation_names()
227
+ try:
228
+ SpanFilter(
229
+ condition=condition,
230
+ evals=self.project,
231
+ valid_eval_names=valid_eval_names,
232
+ )
233
+ return ValidationResult(is_valid=True, error_message=None)
234
+ except SyntaxError as e:
235
+ return ValidationResult(
236
+ is_valid=False,
237
+ error_message=e.msg,
238
+ )