arize-phoenix 2.3.0__tar.gz → 2.4.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 (175) hide show
  1. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/PKG-INFO +1 -1
  2. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/pyproject.toml +1 -0
  3. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/config.py +1 -0
  4. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/experimental/evals/evaluators.py +3 -0
  5. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/experimental/evals/functions/classify.py +6 -0
  6. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/experimental/evals/functions/generate.py +3 -0
  7. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/experimental/evals/models/base.py +3 -0
  8. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/experimental/evals/models/openai.py +3 -0
  9. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/experimental/evals/models/vertex.py +26 -4
  10. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/server/static/index.js +454 -438
  11. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/session/evaluation.py +7 -5
  12. arize_phoenix-2.4.1/src/phoenix/trace/__init__.py +10 -0
  13. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/trace/llama_index/callback.py +17 -8
  14. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/trace/span_evaluations.py +112 -1
  15. arize_phoenix-2.4.1/src/phoenix/version.py +1 -0
  16. arize_phoenix-2.3.0/src/phoenix/trace/__init__.py +0 -4
  17. arize_phoenix-2.3.0/src/phoenix/version.py +0 -1
  18. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/.gitignore +0 -0
  19. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/IP_NOTICE +0 -0
  20. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/LICENSE +0 -0
  21. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/README.md +0 -0
  22. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/__init__.py +0 -0
  23. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/core/__init__.py +0 -0
  24. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/core/embedding_dimension.py +0 -0
  25. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/core/evals.py +0 -0
  26. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/core/model.py +0 -0
  27. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/core/model_schema.py +0 -0
  28. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/core/model_schema_adapter.py +0 -0
  29. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/core/traces.py +0 -0
  30. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/datasets/__init__.py +0 -0
  31. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/datasets/dataset.py +0 -0
  32. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/datasets/errors.py +0 -0
  33. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/datasets/fixtures.py +0 -0
  34. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/datasets/schema.py +0 -0
  35. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/datasets/validation.py +0 -0
  36. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/datetime_utils.py +0 -0
  37. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/exceptions.py +0 -0
  38. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/experimental/__init__.py +0 -0
  39. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/experimental/evals/__init__.py +0 -0
  40. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/experimental/evals/functions/__init__.py +0 -0
  41. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/experimental/evals/functions/executor.py +0 -0
  42. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/experimental/evals/functions/processing.py +0 -0
  43. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/experimental/evals/models/__init__.py +0 -0
  44. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/experimental/evals/models/anthropic.py +0 -0
  45. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/experimental/evals/models/bedrock.py +0 -0
  46. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/experimental/evals/models/litellm.py +0 -0
  47. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/experimental/evals/models/rate_limiters.py +0 -0
  48. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/experimental/evals/models/vertexai.py +0 -0
  49. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/experimental/evals/retrievals.py +0 -0
  50. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/experimental/evals/templates/__init__.py +0 -0
  51. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/experimental/evals/templates/default_templates.py +0 -0
  52. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/experimental/evals/templates/template.py +0 -0
  53. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/experimental/evals/utils/__init__.py +0 -0
  54. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/experimental/evals/utils/threads.py +0 -0
  55. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/metrics/README.md +0 -0
  56. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/metrics/__init__.py +0 -0
  57. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/metrics/binning.py +0 -0
  58. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/metrics/metrics.py +0 -0
  59. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/metrics/mixins.py +0 -0
  60. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/metrics/retrieval_metrics.py +0 -0
  61. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/metrics/timeseries.py +0 -0
  62. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/metrics/wrappers.py +0 -0
  63. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/pointcloud/__init__.py +0 -0
  64. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/pointcloud/clustering.py +0 -0
  65. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/pointcloud/pointcloud.py +0 -0
  66. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/pointcloud/projectors.py +0 -0
  67. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/pointcloud/umap_parameters.py +0 -0
  68. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/py.typed +0 -0
  69. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/server/__init__.py +0 -0
  70. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/server/api/__init__.py +0 -0
  71. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/server/api/context.py +0 -0
  72. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/server/api/helpers.py +0 -0
  73. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/server/api/input_types/ClusterInput.py +0 -0
  74. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/server/api/input_types/Coordinates.py +0 -0
  75. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/server/api/input_types/DataQualityMetricInput.py +0 -0
  76. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/server/api/input_types/DimensionFilter.py +0 -0
  77. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/server/api/input_types/DimensionInput.py +0 -0
  78. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/server/api/input_types/Granularity.py +0 -0
  79. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/server/api/input_types/PerformanceMetricInput.py +0 -0
  80. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/server/api/input_types/SpanSort.py +0 -0
  81. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/server/api/input_types/TimeRange.py +0 -0
  82. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/server/api/input_types/__init__.py +0 -0
  83. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/server/api/interceptor.py +0 -0
  84. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/server/api/schema.py +0 -0
  85. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/server/api/types/Cluster.py +0 -0
  86. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/server/api/types/DataQualityMetric.py +0 -0
  87. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/server/api/types/Dataset.py +0 -0
  88. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/server/api/types/DatasetInfo.py +0 -0
  89. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/server/api/types/DatasetRole.py +0 -0
  90. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/server/api/types/DatasetValues.py +0 -0
  91. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/server/api/types/Dimension.py +0 -0
  92. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/server/api/types/DimensionDataType.py +0 -0
  93. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/server/api/types/DimensionShape.py +0 -0
  94. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/server/api/types/DimensionType.py +0 -0
  95. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/server/api/types/DimensionWithValue.py +0 -0
  96. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/server/api/types/DocumentEvaluationSummary.py +0 -0
  97. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/server/api/types/DocumentRetrievalMetrics.py +0 -0
  98. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/server/api/types/EmbeddingDimension.py +0 -0
  99. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/server/api/types/EmbeddingMetadata.py +0 -0
  100. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/server/api/types/Evaluation.py +0 -0
  101. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/server/api/types/EvaluationSummary.py +0 -0
  102. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/server/api/types/Event.py +0 -0
  103. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/server/api/types/EventMetadata.py +0 -0
  104. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/server/api/types/ExportEventsMutation.py +0 -0
  105. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/server/api/types/ExportedFile.py +0 -0
  106. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/server/api/types/Functionality.py +0 -0
  107. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/server/api/types/MimeType.py +0 -0
  108. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/server/api/types/Model.py +0 -0
  109. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/server/api/types/NumericRange.py +0 -0
  110. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/server/api/types/PerformanceMetric.py +0 -0
  111. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/server/api/types/PromptResponse.py +0 -0
  112. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/server/api/types/Retrieval.py +0 -0
  113. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/server/api/types/ScalarDriftMetricEnum.py +0 -0
  114. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/server/api/types/Segments.py +0 -0
  115. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/server/api/types/SortDir.py +0 -0
  116. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/server/api/types/Span.py +0 -0
  117. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/server/api/types/TimeSeries.py +0 -0
  118. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/server/api/types/UMAPPoints.py +0 -0
  119. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/server/api/types/ValidationResult.py +0 -0
  120. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/server/api/types/VectorDriftMetricEnum.py +0 -0
  121. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/server/api/types/__init__.py +0 -0
  122. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/server/api/types/node.py +0 -0
  123. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/server/api/types/pagination.py +0 -0
  124. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/server/app.py +0 -0
  125. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/server/evaluation_handler.py +0 -0
  126. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/server/main.py +0 -0
  127. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/server/span_handler.py +0 -0
  128. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/server/static/apple-touch-icon-114x114.png +0 -0
  129. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/server/static/apple-touch-icon-120x120.png +0 -0
  130. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/server/static/apple-touch-icon-144x144.png +0 -0
  131. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/server/static/apple-touch-icon-152x152.png +0 -0
  132. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/server/static/apple-touch-icon-180x180.png +0 -0
  133. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/server/static/apple-touch-icon-72x72.png +0 -0
  134. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/server/static/apple-touch-icon-76x76.png +0 -0
  135. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/server/static/apple-touch-icon.png +0 -0
  136. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/server/static/favicon.ico +0 -0
  137. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/server/static/index.css +0 -0
  138. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/server/static/modernizr.js +0 -0
  139. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/server/templates/__init__.py +0 -0
  140. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/server/templates/index.html +0 -0
  141. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/server/thread_server.py +0 -0
  142. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/server/trace_handler.py +0 -0
  143. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/services.py +0 -0
  144. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/session/__init__.py +0 -0
  145. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/session/session.py +0 -0
  146. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/trace/dsl/__init__.py +0 -0
  147. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/trace/dsl/filter.py +0 -0
  148. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/trace/dsl/helpers.py +0 -0
  149. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/trace/dsl/missing.py +0 -0
  150. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/trace/dsl/query.py +0 -0
  151. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/trace/evaluation_conventions.py +0 -0
  152. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/trace/exporter.py +0 -0
  153. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/trace/fixtures.py +0 -0
  154. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/trace/langchain/__init__.py +0 -0
  155. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/trace/langchain/instrumentor.py +0 -0
  156. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/trace/langchain/tracer.py +0 -0
  157. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/trace/llama_index/__init__.py +0 -0
  158. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/trace/llama_index/debug_callback.py +0 -0
  159. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/trace/llama_index/streaming.py +0 -0
  160. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/trace/openai/__init__.py +0 -0
  161. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/trace/openai/instrumentor.py +0 -0
  162. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/trace/otel.py +0 -0
  163. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/trace/schemas.py +0 -0
  164. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/trace/semantic_conventions.py +0 -0
  165. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/trace/span_json_decoder.py +0 -0
  166. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/trace/span_json_encoder.py +0 -0
  167. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/trace/trace_dataset.py +0 -0
  168. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/trace/tracer.py +0 -0
  169. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/trace/utils.py +0 -0
  170. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/trace/v1/__init__.py +0 -0
  171. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/trace/v1/evaluation_pb2.py +0 -0
  172. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/trace/v1/evaluation_pb2.pyi +0 -0
  173. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/utilities/__init__.py +0 -0
  174. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/utilities/error_handling.py +0 -0
  175. {arize_phoenix-2.3.0 → arize_phoenix-2.4.1}/src/phoenix/utilities/logging.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: arize-phoenix
3
- Version: 2.3.0
3
+ Version: 2.4.1
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
@@ -292,6 +292,7 @@ module = [
292
292
  "litellm",
293
293
  "nest_asyncio",
294
294
  "opentelemetry.*",
295
+ "pyarrow",
295
296
  ]
296
297
  ignore_missing_imports = true
297
298
 
@@ -40,6 +40,7 @@ for path in (
40
40
  ROOT_DIR := Path.home().resolve() / ".phoenix",
41
41
  EXPORT_DIR := ROOT_DIR / "exports",
42
42
  DATASET_DIR := ROOT_DIR / "datasets",
43
+ TRACE_DATASET_DIR := ROOT_DIR / "trace_datasets",
43
44
  ):
44
45
  path.mkdir(parents=True, exist_ok=True)
45
46
 
@@ -36,6 +36,9 @@ class LLMEvaluator:
36
36
  self._model = model
37
37
  self._template = template
38
38
 
39
+ def reload_client(self) -> None:
40
+ self._model.reload_client()
41
+
39
42
  def evaluate(
40
43
  self,
41
44
  record: Record,
@@ -127,6 +127,9 @@ def llm_classify(
127
127
  from the entries in the rails argument or "NOT_PARSABLE" if the model's output could
128
128
  not be parsed.
129
129
  """
130
+ # clients need to be reloaded to ensure that async evals work properly
131
+ model.reload_client()
132
+
130
133
  tqdm_bar_format = get_tqdm_progress_bar_formatter("llm_classify")
131
134
  use_openai_function_call = (
132
135
  use_function_calling_if_available
@@ -385,6 +388,9 @@ def run_evals(
385
388
  List[DataFrame]: A list of dataframes, one for each evaluator, all of
386
389
  which have the same number of rows as the input dataframe.
387
390
  """
391
+ # clients need to be reloaded to ensure that async evals work properly
392
+ for evaluator in evaluators:
393
+ evaluator.reload_client()
388
394
 
389
395
  async def _arun_eval(
390
396
  payload: RunEvalsPayload,
@@ -78,6 +78,9 @@ def llm_generate(
78
78
  represents the generated output
79
79
 
80
80
  """
81
+ # clients need to be reloaded to ensure that async evals work properly
82
+ model.reload_client()
83
+
81
84
  tqdm_bar_format = get_tqdm_progress_bar_formatter("llm_generate")
82
85
  output_parser = output_parser or _no_op_parser
83
86
  template = normalize_prompt_template(template)
@@ -61,6 +61,9 @@ class BaseEvalModel(ABC):
61
61
  _verbose: bool = False
62
62
  _rate_limiter: RateLimiter = field(default_factory=RateLimiter)
63
63
 
64
+ def reload_client(self) -> None:
65
+ pass
66
+
64
67
  def _retry(
65
68
  self,
66
69
  error_types: List[Type[BaseException]],
@@ -107,6 +107,9 @@ class OpenAIModel(BaseEvalModel):
107
107
  self._init_tiktoken()
108
108
  self._init_rate_limiter()
109
109
 
110
+ def reload_client(self) -> None:
111
+ self._init_open_ai()
112
+
110
113
  def _init_environment(self) -> None:
111
114
  try:
112
115
  import httpx
@@ -4,6 +4,7 @@ from typing import TYPE_CHECKING, Any, Dict, List
4
4
 
5
5
  from phoenix.experimental.evals.models.base import BaseEvalModel
6
6
  from phoenix.experimental.evals.models.rate_limiters import RateLimiter
7
+ from phoenix.utilities.logging import printif
7
8
 
8
9
  if TYPE_CHECKING:
9
10
  from tiktoken import Encoding
@@ -125,8 +126,7 @@ class GeminiModel(BaseEvalModel):
125
126
  response = self._model.generate_content(
126
127
  contents=prompt, generation_config=generation_config, **kwargs
127
128
  )
128
- candidate = response.candidates[0]
129
- return candidate.text
129
+ return self._parse_response_candidates(response)
130
130
 
131
131
  return _completion_with_retry(**kwargs)
132
132
 
@@ -149,7 +149,29 @@ class GeminiModel(BaseEvalModel):
149
149
  response = await self._model.generate_content_async(
150
150
  contents=prompt, generation_config=generation_config, **kwargs
151
151
  )
152
- candidate = response.candidates[0]
153
- return candidate.text
152
+ return self._parse_response_candidates(response)
154
153
 
155
154
  return await _completion_with_retry(**kwargs)
155
+
156
+ def _parse_response_candidates(self, response: Any) -> Any:
157
+ if hasattr(response, "candidates"):
158
+ if isinstance(response.candidates, list) and len(response.candidates) > 0:
159
+ try:
160
+ candidate = response.candidates[0].text
161
+ except ValueError:
162
+ printif(
163
+ self._verbose, "The 'candidates' object does not have a 'text' attribute."
164
+ )
165
+ printif(self._verbose, response.candidates[0])
166
+ candidate = ""
167
+ else:
168
+ printif(
169
+ self._verbose,
170
+ "The 'candidates' attribute of 'response' is either not a list or is empty.",
171
+ )
172
+ printif(self._verbose, response)
173
+ candidate = ""
174
+ else:
175
+ printif(self._verbose, "The 'response' object does not have a 'candidates' attribute.")
176
+ candidate = ""
177
+ return candidate