arize-phoenix 3.10.0__tar.gz → 3.11.1__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 (179) hide show
  1. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/PKG-INFO +2 -2
  2. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/pyproject.toml +1 -1
  3. arize_phoenix-3.11.1/src/phoenix/core/traces.py +84 -0
  4. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/api/types/Project.py +1 -1
  5. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/api/types/Span.py +9 -12
  6. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/static/index.js +398 -398
  7. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/session/session.py +5 -2
  8. arize_phoenix-3.11.1/src/phoenix/trace/__init__.py +26 -0
  9. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/trace/exporter.py +5 -12
  10. arize_phoenix-3.11.1/src/phoenix/trace/langchain/__init__.py +3 -0
  11. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/trace/langchain/instrumentor.py +0 -2
  12. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/trace/llama_index/callback.py +0 -2
  13. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/trace/openai/instrumentor.py +0 -2
  14. arize_phoenix-3.11.1/src/phoenix/version.py +1 -0
  15. arize_phoenix-3.10.0/src/phoenix/core/traces.py +0 -156
  16. arize_phoenix-3.10.0/src/phoenix/trace/__init__.py +0 -10
  17. arize_phoenix-3.10.0/src/phoenix/trace/langchain/__init__.py +0 -26
  18. arize_phoenix-3.10.0/src/phoenix/trace/langchain/tracer.py +0 -47
  19. arize_phoenix-3.10.0/src/phoenix/trace/tracer.py +0 -99
  20. arize_phoenix-3.10.0/src/phoenix/version.py +0 -1
  21. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/.gitignore +0 -0
  22. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/IP_NOTICE +0 -0
  23. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/LICENSE +0 -0
  24. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/README.md +0 -0
  25. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/__init__.py +0 -0
  26. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/config.py +0 -0
  27. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/core/__init__.py +0 -0
  28. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/core/embedding_dimension.py +0 -0
  29. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/core/model.py +0 -0
  30. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/core/model_schema.py +0 -0
  31. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/core/model_schema_adapter.py +0 -0
  32. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/core/project.py +0 -0
  33. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/datasets/__init__.py +0 -0
  34. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/datasets/dataset.py +0 -0
  35. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/datasets/errors.py +0 -0
  36. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/datasets/fixtures.py +0 -0
  37. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/datasets/schema.py +0 -0
  38. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/datasets/validation.py +0 -0
  39. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/datetime_utils.py +0 -0
  40. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/exceptions.py +0 -0
  41. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/experimental/__init__.py +0 -0
  42. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/experimental/evals/__init__.py +0 -0
  43. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/experimental/evals/evaluators.py +0 -0
  44. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/experimental/evals/functions/__init__.py +0 -0
  45. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/experimental/evals/functions/classify.py +0 -0
  46. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/experimental/evals/functions/executor.py +0 -0
  47. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/experimental/evals/functions/generate.py +0 -0
  48. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/experimental/evals/functions/processing.py +0 -0
  49. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/experimental/evals/models/__init__.py +0 -0
  50. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/experimental/evals/models/anthropic.py +0 -0
  51. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/experimental/evals/models/base.py +0 -0
  52. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/experimental/evals/models/bedrock.py +0 -0
  53. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/experimental/evals/models/litellm.py +0 -0
  54. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/experimental/evals/models/openai.py +0 -0
  55. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/experimental/evals/models/rate_limiters.py +0 -0
  56. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/experimental/evals/models/vertex.py +0 -0
  57. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/experimental/evals/models/vertexai.py +0 -0
  58. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/experimental/evals/retrievals.py +0 -0
  59. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/experimental/evals/templates/__init__.py +0 -0
  60. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/experimental/evals/templates/default_templates.py +0 -0
  61. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/experimental/evals/templates/template.py +0 -0
  62. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/experimental/evals/utils/__init__.py +0 -0
  63. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/experimental/evals/utils/threads.py +0 -0
  64. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/metrics/README.md +0 -0
  65. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/metrics/__init__.py +0 -0
  66. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/metrics/binning.py +0 -0
  67. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/metrics/metrics.py +0 -0
  68. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/metrics/mixins.py +0 -0
  69. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/metrics/retrieval_metrics.py +0 -0
  70. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/metrics/timeseries.py +0 -0
  71. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/metrics/wrappers.py +0 -0
  72. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/pointcloud/__init__.py +0 -0
  73. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/pointcloud/clustering.py +0 -0
  74. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/pointcloud/pointcloud.py +0 -0
  75. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/pointcloud/projectors.py +0 -0
  76. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/pointcloud/umap_parameters.py +0 -0
  77. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/py.typed +0 -0
  78. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/__init__.py +0 -0
  79. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/api/__init__.py +0 -0
  80. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/api/context.py +0 -0
  81. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/api/helpers.py +0 -0
  82. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/api/input_types/ClusterInput.py +0 -0
  83. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/api/input_types/Coordinates.py +0 -0
  84. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/api/input_types/DataQualityMetricInput.py +0 -0
  85. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/api/input_types/DimensionFilter.py +0 -0
  86. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/api/input_types/DimensionInput.py +0 -0
  87. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/api/input_types/Granularity.py +0 -0
  88. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/api/input_types/PerformanceMetricInput.py +0 -0
  89. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/api/input_types/SpanSort.py +0 -0
  90. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/api/input_types/TimeRange.py +0 -0
  91. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/api/input_types/__init__.py +0 -0
  92. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/api/interceptor.py +0 -0
  93. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/api/routers/__init__.py +0 -0
  94. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/api/routers/evaluation_handler.py +0 -0
  95. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/api/routers/span_handler.py +0 -0
  96. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/api/routers/trace_handler.py +0 -0
  97. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/api/routers/utils.py +0 -0
  98. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/api/schema.py +0 -0
  99. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/api/types/Cluster.py +0 -0
  100. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/api/types/DataQualityMetric.py +0 -0
  101. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/api/types/Dataset.py +0 -0
  102. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/api/types/DatasetRole.py +0 -0
  103. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/api/types/DatasetValues.py +0 -0
  104. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/api/types/Dimension.py +0 -0
  105. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/api/types/DimensionDataType.py +0 -0
  106. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/api/types/DimensionShape.py +0 -0
  107. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/api/types/DimensionType.py +0 -0
  108. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/api/types/DimensionWithValue.py +0 -0
  109. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/api/types/DocumentEvaluationSummary.py +0 -0
  110. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/api/types/DocumentRetrievalMetrics.py +0 -0
  111. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/api/types/EmbeddingDimension.py +0 -0
  112. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/api/types/EmbeddingMetadata.py +0 -0
  113. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/api/types/Evaluation.py +0 -0
  114. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/api/types/EvaluationSummary.py +0 -0
  115. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/api/types/Event.py +0 -0
  116. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/api/types/EventMetadata.py +0 -0
  117. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/api/types/ExportEventsMutation.py +0 -0
  118. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/api/types/ExportedFile.py +0 -0
  119. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/api/types/Functionality.py +0 -0
  120. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/api/types/MimeType.py +0 -0
  121. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/api/types/Model.py +0 -0
  122. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/api/types/NumericRange.py +0 -0
  123. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/api/types/PerformanceMetric.py +0 -0
  124. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/api/types/PromptResponse.py +0 -0
  125. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/api/types/Retrieval.py +0 -0
  126. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/api/types/ScalarDriftMetricEnum.py +0 -0
  127. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/api/types/Segments.py +0 -0
  128. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/api/types/SortDir.py +0 -0
  129. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/api/types/TimeSeries.py +0 -0
  130. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/api/types/UMAPPoints.py +0 -0
  131. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/api/types/ValidationResult.py +0 -0
  132. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/api/types/VectorDriftMetricEnum.py +0 -0
  133. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/api/types/__init__.py +0 -0
  134. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/api/types/node.py +0 -0
  135. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/api/types/pagination.py +0 -0
  136. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/app.py +0 -0
  137. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/main.py +0 -0
  138. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/static/apple-touch-icon-114x114.png +0 -0
  139. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/static/apple-touch-icon-120x120.png +0 -0
  140. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/static/apple-touch-icon-144x144.png +0 -0
  141. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/static/apple-touch-icon-152x152.png +0 -0
  142. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/static/apple-touch-icon-180x180.png +0 -0
  143. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/static/apple-touch-icon-72x72.png +0 -0
  144. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/static/apple-touch-icon-76x76.png +0 -0
  145. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/static/apple-touch-icon.png +0 -0
  146. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/static/favicon.ico +0 -0
  147. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/static/index.css +0 -0
  148. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/static/modernizr.js +0 -0
  149. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/templates/__init__.py +0 -0
  150. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/templates/index.html +0 -0
  151. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/server/thread_server.py +0 -0
  152. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/services.py +0 -0
  153. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/session/__init__.py +0 -0
  154. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/session/client.py +0 -0
  155. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/session/data_extractor.py +0 -0
  156. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/session/evaluation.py +0 -0
  157. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/trace/dsl/__init__.py +0 -0
  158. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/trace/dsl/filter.py +0 -0
  159. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/trace/dsl/helpers.py +0 -0
  160. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/trace/dsl/missing.py +0 -0
  161. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/trace/dsl/query.py +0 -0
  162. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/trace/errors.py +0 -0
  163. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/trace/evaluation_conventions.py +0 -0
  164. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/trace/fixtures.py +0 -0
  165. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/trace/llama_index/__init__.py +0 -0
  166. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/trace/openai/__init__.py +0 -0
  167. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/trace/otel.py +0 -0
  168. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/trace/schemas.py +0 -0
  169. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/trace/span_evaluations.py +0 -0
  170. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/trace/span_json_decoder.py +0 -0
  171. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/trace/span_json_encoder.py +0 -0
  172. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/trace/trace_dataset.py +0 -0
  173. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/trace/utils.py +0 -0
  174. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/trace/v1/__init__.py +0 -0
  175. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/trace/v1/evaluation_pb2.py +0 -0
  176. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/trace/v1/evaluation_pb2.pyi +0 -0
  177. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/utilities/__init__.py +0 -0
  178. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/utilities/error_handling.py +0 -0
  179. {arize_phoenix-3.10.0 → arize_phoenix-3.11.1}/src/phoenix/utilities/logging.py +0 -0
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: arize-phoenix
3
- Version: 3.10.0
4
- Summary: ML Observability in your notebook
3
+ Version: 3.11.1
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
7
7
  Project-URL: Source, https://github.com/Arize-ai/phoenix
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "arize-phoenix"
3
- description = "ML Observability in your notebook"
3
+ description = "AI Observability and Evaluation"
4
4
  readme = "README.md"
5
5
  requires-python = ">=3.8, <3.12"
6
6
  license = "Elastic-2.0"
@@ -0,0 +1,84 @@
1
+ import weakref
2
+ from collections import defaultdict
3
+ from queue import SimpleQueue
4
+ from threading import RLock, Thread
5
+ from types import MethodType
6
+ from typing import DefaultDict, Iterator, Optional, Tuple, Union
7
+
8
+ from typing_extensions import assert_never
9
+
10
+ import phoenix.trace.v1 as pb
11
+ from phoenix.core.project import (
12
+ DEFAULT_PROJECT_NAME,
13
+ END_OF_QUEUE,
14
+ Project,
15
+ _ProjectName,
16
+ )
17
+ from phoenix.trace.schemas import Span
18
+
19
+ _SpanItem = Tuple[Span, _ProjectName]
20
+ _EvalItem = Tuple[pb.Evaluation, _ProjectName]
21
+
22
+
23
+ class Traces:
24
+ def __init__(self) -> None:
25
+ self._span_queue: "SimpleQueue[Optional[_SpanItem]]" = SimpleQueue()
26
+ self._eval_queue: "SimpleQueue[Optional[_EvalItem]]" = SimpleQueue()
27
+ # Putting `None` as the sentinel value for queue termination.
28
+ weakref.finalize(self, self._span_queue.put, END_OF_QUEUE)
29
+ weakref.finalize(self, self._eval_queue.put, END_OF_QUEUE)
30
+ self._lock = RLock()
31
+ self._projects: DefaultDict[_ProjectName, "Project"] = defaultdict(
32
+ Project,
33
+ {DEFAULT_PROJECT_NAME: Project()},
34
+ )
35
+ self._start_consumers()
36
+
37
+ def get_project(self, project_name: str) -> Optional["Project"]:
38
+ with self._lock:
39
+ return self._projects.get(project_name)
40
+
41
+ def get_projects(self) -> Iterator[Tuple[str, "Project"]]:
42
+ with self._lock:
43
+ projects = tuple(self._projects.items())
44
+ yield from projects
45
+
46
+ def put(
47
+ self,
48
+ item: Union[Span, pb.Evaluation],
49
+ project_name: Optional[str] = None,
50
+ ) -> None:
51
+ if not project_name:
52
+ project_name = DEFAULT_PROJECT_NAME
53
+ if isinstance(item, Span):
54
+ self._span_queue.put((item, project_name))
55
+ elif isinstance(item, pb.Evaluation):
56
+ self._eval_queue.put((item, project_name))
57
+ else:
58
+ assert_never(item)
59
+
60
+ def _start_consumers(self) -> None:
61
+ Thread(
62
+ target=MethodType(self.__class__._consume_spans, weakref.proxy(self)),
63
+ args=(self._span_queue,),
64
+ daemon=True,
65
+ ).start()
66
+ Thread(
67
+ target=MethodType(self.__class__._consume_evals, weakref.proxy(self)),
68
+ args=(self._eval_queue,),
69
+ daemon=True,
70
+ ).start()
71
+
72
+ def _consume_spans(self, queue: "SimpleQueue[Optional[_SpanItem]]") -> None:
73
+ while (item := queue.get()) is not END_OF_QUEUE:
74
+ span, project_name = item
75
+ with self._lock:
76
+ project = self._projects[project_name]
77
+ project.add_span(span)
78
+
79
+ def _consume_evals(self, queue: "SimpleQueue[Optional[_EvalItem]]") -> None:
80
+ while (item := queue.get()) is not END_OF_QUEUE:
81
+ pb_eval, project_name = item
82
+ with self._lock:
83
+ project = self._projects[project_name]
84
+ project.add_eval(pb_eval)
@@ -112,7 +112,7 @@ class Project(Node):
112
112
  spans = filter(predicate, spans)
113
113
  if sort:
114
114
  spans = sort(spans, evals=project)
115
- data = list(map(to_gql_span, spans))
115
+ data = [to_gql_span(span, project) for span in spans]
116
116
  return connection_from_list(data=data, args=args)
117
117
 
118
118
  @strawberry.field(
@@ -10,7 +10,7 @@ from strawberry import ID, UNSET
10
10
  from strawberry.types import Info
11
11
 
12
12
  import phoenix.trace.schemas as trace_schema
13
- from phoenix.core.project import DEFAULT_PROJECT_NAME, WrappedSpan
13
+ from phoenix.core.project import DEFAULT_PROJECT_NAME, Project, WrappedSpan
14
14
  from phoenix.metrics.retrieval_metrics import RetrievalMetrics
15
15
  from phoenix.server.api.context import Context
16
16
  from phoenix.server.api.types.DocumentRetrievalMetrics import DocumentRetrievalMetrics
@@ -95,6 +95,7 @@ class SpanEvent:
95
95
 
96
96
  @strawberry.type
97
97
  class Span:
98
+ project: strawberry.Private[Project]
98
99
  name: str
99
100
  status_code: SpanStatusCode
100
101
  status_message: str
@@ -185,14 +186,10 @@ class Span:
185
186
  info: Info[Context, None],
186
187
  evaluation_name: Optional[str] = UNSET,
187
188
  ) -> List[DocumentRetrievalMetrics]:
188
- if (
189
- not self.num_documents
190
- or not (traces := info.context.traces)
191
- or not (project := traces.get_project(DEFAULT_PROJECT_NAME))
192
- ):
189
+ if not self.num_documents:
193
190
  return []
194
191
  span_id = SpanID(str(self.context.span_id))
195
- all_document_evaluation_names = project.get_document_evaluation_names(span_id)
192
+ all_document_evaluation_names = self.project.get_document_evaluation_names(span_id)
196
193
  if not all_document_evaluation_names:
197
194
  return []
198
195
  if evaluation_name is UNSET:
@@ -203,7 +200,7 @@ class Span:
203
200
  evaluation_names = [evaluation_name]
204
201
  retrieval_metrics = []
205
202
  for name in evaluation_names:
206
- evaluation_scores = project.get_document_evaluation_scores(
203
+ evaluation_scores = self.project.get_document_evaluation_scores(
207
204
  span_id=span_id,
208
205
  evaluation_name=name,
209
206
  num_documents=self.num_documents,
@@ -223,20 +220,20 @@ class Span:
223
220
  self,
224
221
  info: Info[Context, None],
225
222
  ) -> List["Span"]:
226
- if (traces := info.context.traces) is None:
227
- return []
228
223
  return [
229
- to_gql_span(span) for span in traces.get_descendant_spans(SpanID(self.context.span_id))
224
+ to_gql_span(span, self.project)
225
+ for span in self.project.get_descendant_spans(SpanID(self.context.span_id))
230
226
  ]
231
227
 
232
228
 
233
- def to_gql_span(span: WrappedSpan) -> "Span":
229
+ def to_gql_span(span: WrappedSpan, project: Project) -> "Span":
234
230
  events: List[SpanEvent] = list(map(SpanEvent.from_event, span.events))
235
231
  input_value = cast(Optional[str], span.attributes.get(INPUT_VALUE))
236
232
  output_value = cast(Optional[str], span.attributes.get(OUTPUT_VALUE))
237
233
  retrieval_documents = span.attributes.get(RETRIEVAL_DOCUMENTS)
238
234
  num_documents = len(retrieval_documents) if isinstance(retrieval_documents, Sized) else None
239
235
  return Span(
236
+ project=project,
240
237
  name=span.name,
241
238
  status_code=SpanStatusCode(span.status_code),
242
239
  status_message=span.status_message,