arize-phoenix 3.20.0__tar.gz → 3.21.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 (196) hide show
  1. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/PKG-INFO +7 -7
  2. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/README.md +6 -6
  3. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/inferences/inferences.py +207 -2
  4. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/main.py +2 -2
  5. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/session/session.py +8 -8
  6. arize_phoenix-3.21.0/src/phoenix/version.py +1 -0
  7. arize_phoenix-3.20.0/src/phoenix/version.py +0 -1
  8. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/.gitignore +0 -0
  9. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/IP_NOTICE +0 -0
  10. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/LICENSE +0 -0
  11. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/examples/manually-instrumented-chatbot/chat-service/chat/__init__.py +0 -0
  12. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/examples/manually-instrumented-chatbot/chat-service/chat/app.py +0 -0
  13. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/examples/manually-instrumented-chatbot/chat-service/chat/types.py +0 -0
  14. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/examples/manually-instrumented-chatbot/frontend/Dockerfile +0 -0
  15. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/examples/manually-instrumented-chatbot/frontend/Makefile +0 -0
  16. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/examples/manually-instrumented-chatbot/frontend/__init__.py +0 -0
  17. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/examples/manually-instrumented-chatbot/frontend/pyproject.toml +0 -0
  18. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/examples/manually-instrumented-chatbot/frontend/requirements.txt +0 -0
  19. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/examples/manually-instrumented-chatbot/frontend/schema.json +0 -0
  20. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/pyproject.toml +0 -0
  21. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/__init__.py +0 -0
  22. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/config.py +0 -0
  23. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/core/__init__.py +0 -0
  24. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/core/embedding_dimension.py +0 -0
  25. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/core/model.py +0 -0
  26. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/core/model_schema.py +0 -0
  27. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/core/model_schema_adapter.py +0 -0
  28. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/core/project.py +0 -0
  29. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/core/traces.py +0 -0
  30. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/datasets/__init__.py +0 -0
  31. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/datasets/dataset.py +0 -0
  32. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/datasets/fixtures.py +0 -0
  33. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/datasets/schema.py +0 -0
  34. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/datetime_utils.py +0 -0
  35. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/exceptions.py +0 -0
  36. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/experimental/__init__.py +0 -0
  37. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/experimental/evals/__init__.py +0 -0
  38. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/experimental/evals/evaluators.py +0 -0
  39. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/experimental/evals/functions/__init__.py +0 -0
  40. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/experimental/evals/functions/classify.py +0 -0
  41. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/experimental/evals/functions/executor.py +0 -0
  42. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/experimental/evals/functions/generate.py +0 -0
  43. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/experimental/evals/functions/processing.py +0 -0
  44. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/experimental/evals/models/__init__.py +0 -0
  45. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/experimental/evals/models/anthropic.py +0 -0
  46. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/experimental/evals/models/base.py +0 -0
  47. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/experimental/evals/models/bedrock.py +0 -0
  48. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/experimental/evals/models/litellm.py +0 -0
  49. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/experimental/evals/models/openai.py +0 -0
  50. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/experimental/evals/models/rate_limiters.py +0 -0
  51. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/experimental/evals/models/vertex.py +0 -0
  52. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/experimental/evals/models/vertexai.py +0 -0
  53. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/experimental/evals/retrievals.py +0 -0
  54. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/experimental/evals/templates/__init__.py +0 -0
  55. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/experimental/evals/templates/default_templates.py +0 -0
  56. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/experimental/evals/templates/template.py +0 -0
  57. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/experimental/evals/utils/__init__.py +0 -0
  58. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/experimental/evals/utils/threads.py +0 -0
  59. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/inferences/__init__.py +0 -0
  60. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/inferences/errors.py +0 -0
  61. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/inferences/fixtures.py +0 -0
  62. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/inferences/schema.py +0 -0
  63. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/inferences/validation.py +0 -0
  64. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/metrics/README.md +0 -0
  65. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/metrics/__init__.py +0 -0
  66. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/metrics/binning.py +0 -0
  67. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/metrics/metrics.py +0 -0
  68. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/metrics/mixins.py +0 -0
  69. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/metrics/retrieval_metrics.py +0 -0
  70. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/metrics/timeseries.py +0 -0
  71. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/metrics/wrappers.py +0 -0
  72. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/pointcloud/__init__.py +0 -0
  73. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/pointcloud/clustering.py +0 -0
  74. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/pointcloud/pointcloud.py +0 -0
  75. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/pointcloud/projectors.py +0 -0
  76. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/pointcloud/umap_parameters.py +0 -0
  77. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/py.typed +0 -0
  78. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/__init__.py +0 -0
  79. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/api/__init__.py +0 -0
  80. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/api/context.py +0 -0
  81. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/api/helpers.py +0 -0
  82. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/api/input_types/ClusterInput.py +0 -0
  83. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/api/input_types/Coordinates.py +0 -0
  84. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/api/input_types/DataQualityMetricInput.py +0 -0
  85. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/api/input_types/DimensionFilter.py +0 -0
  86. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/api/input_types/DimensionInput.py +0 -0
  87. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/api/input_types/Granularity.py +0 -0
  88. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/api/input_types/PerformanceMetricInput.py +0 -0
  89. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/api/input_types/SpanSort.py +0 -0
  90. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/api/input_types/TimeRange.py +0 -0
  91. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/api/input_types/__init__.py +0 -0
  92. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/api/interceptor.py +0 -0
  93. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/api/routers/__init__.py +0 -0
  94. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/api/routers/evaluation_handler.py +0 -0
  95. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/api/routers/span_handler.py +0 -0
  96. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/api/routers/trace_handler.py +0 -0
  97. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/api/routers/utils.py +0 -0
  98. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/api/schema.py +0 -0
  99. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/api/types/Cluster.py +0 -0
  100. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/api/types/DataQualityMetric.py +0 -0
  101. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/api/types/Dataset.py +0 -0
  102. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/api/types/DatasetRole.py +0 -0
  103. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/api/types/DatasetValues.py +0 -0
  104. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/api/types/Dimension.py +0 -0
  105. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/api/types/DimensionDataType.py +0 -0
  106. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/api/types/DimensionShape.py +0 -0
  107. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/api/types/DimensionType.py +0 -0
  108. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/api/types/DimensionWithValue.py +0 -0
  109. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/api/types/DocumentEvaluationSummary.py +0 -0
  110. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/api/types/DocumentRetrievalMetrics.py +0 -0
  111. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/api/types/EmbeddingDimension.py +0 -0
  112. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/api/types/EmbeddingMetadata.py +0 -0
  113. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/api/types/Evaluation.py +0 -0
  114. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/api/types/EvaluationSummary.py +0 -0
  115. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/api/types/Event.py +0 -0
  116. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/api/types/EventMetadata.py +0 -0
  117. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/api/types/ExportEventsMutation.py +0 -0
  118. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/api/types/ExportedFile.py +0 -0
  119. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/api/types/Functionality.py +0 -0
  120. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/api/types/MimeType.py +0 -0
  121. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/api/types/Model.py +0 -0
  122. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/api/types/NumericRange.py +0 -0
  123. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/api/types/PerformanceMetric.py +0 -0
  124. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/api/types/Project.py +0 -0
  125. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/api/types/PromptResponse.py +0 -0
  126. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/api/types/Retrieval.py +0 -0
  127. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/api/types/ScalarDriftMetricEnum.py +0 -0
  128. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/api/types/Segments.py +0 -0
  129. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/api/types/SortDir.py +0 -0
  130. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/api/types/Span.py +0 -0
  131. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/api/types/TimeSeries.py +0 -0
  132. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/api/types/Trace.py +0 -0
  133. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/api/types/UMAPPoints.py +0 -0
  134. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/api/types/ValidationResult.py +0 -0
  135. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/api/types/VectorDriftMetricEnum.py +0 -0
  136. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/api/types/__init__.py +0 -0
  137. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/api/types/node.py +0 -0
  138. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/api/types/pagination.py +0 -0
  139. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/app.py +0 -0
  140. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/prometheus.py +0 -0
  141. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/static/apple-touch-icon-114x114.png +0 -0
  142. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/static/apple-touch-icon-120x120.png +0 -0
  143. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/static/apple-touch-icon-144x144.png +0 -0
  144. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/static/apple-touch-icon-152x152.png +0 -0
  145. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/static/apple-touch-icon-180x180.png +0 -0
  146. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/static/apple-touch-icon-72x72.png +0 -0
  147. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/static/apple-touch-icon-76x76.png +0 -0
  148. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/static/apple-touch-icon.png +0 -0
  149. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/static/favicon.ico +0 -0
  150. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/static/index.css +0 -0
  151. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/static/index.js +0 -0
  152. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/static/modernizr.js +0 -0
  153. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/templates/__init__.py +0 -0
  154. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/templates/index.html +0 -0
  155. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/server/thread_server.py +0 -0
  156. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/services.py +0 -0
  157. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/session/__init__.py +0 -0
  158. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/session/client.py +0 -0
  159. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/session/data_extractor.py +0 -0
  160. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/session/evaluation.py +0 -0
  161. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/storage/__init__.py +0 -0
  162. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/storage/span_store/__init__.py +0 -0
  163. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/storage/span_store/text_file.py +0 -0
  164. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/trace/__init__.py +0 -0
  165. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/trace/dsl/__init__.py +0 -0
  166. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/trace/dsl/filter.py +0 -0
  167. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/trace/dsl/helpers.py +0 -0
  168. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/trace/dsl/missing.py +0 -0
  169. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/trace/dsl/query.py +0 -0
  170. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/trace/errors.py +0 -0
  171. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/trace/evaluation_conventions.py +0 -0
  172. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/trace/exporter.py +0 -0
  173. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/trace/fixtures.py +0 -0
  174. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/trace/langchain/__init__.py +0 -0
  175. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/trace/langchain/instrumentor.py +0 -0
  176. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/trace/llama_index/__init__.py +0 -0
  177. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/trace/llama_index/callback.py +0 -0
  178. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/trace/openai/__init__.py +0 -0
  179. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/trace/openai/instrumentor.py +0 -0
  180. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/trace/otel.py +0 -0
  181. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/trace/projects.py +0 -0
  182. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/trace/schemas.py +0 -0
  183. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/trace/span_evaluations.py +0 -0
  184. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/trace/span_json_decoder.py +0 -0
  185. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/trace/span_json_encoder.py +0 -0
  186. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/trace/trace_dataset.py +0 -0
  187. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/trace/utils.py +0 -0
  188. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/trace/v1/__init__.py +0 -0
  189. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/trace/v1/evaluation_pb2.py +0 -0
  190. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/trace/v1/evaluation_pb2.pyi +0 -0
  191. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/utilities/__init__.py +0 -0
  192. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/utilities/deprecation.py +0 -0
  193. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/utilities/error_handling.py +0 -0
  194. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/utilities/logging.py +0 -0
  195. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/utilities/project.py +0 -0
  196. {arize_phoenix-3.20.0 → arize_phoenix-3.21.0}/src/phoenix/utilities/span_store.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: arize-phoenix
3
- Version: 3.20.0
3
+ Version: 3.21.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
@@ -371,11 +371,11 @@ train_schema = px.Schema(
371
371
  prod_schema = replace(train_schema, actual_label_column_name=None)
372
372
 
373
373
  # Define your production and training datasets.
374
- prod_ds = px.Dataset(prod_df, prod_schema)
375
- train_ds = px.Dataset(train_df, train_schema)
374
+ prod_inf = px.Inferences(prod_df, prod_schema)
375
+ train_inf = px.Inferences(train_df, train_schema)
376
376
 
377
377
  # Launch Phoenix.
378
- session = px.launch_app(prod_ds, train_ds)
378
+ session = px.launch_app(prod_inf, train_inf)
379
379
 
380
380
  # View the Phoenix UI in the browser
381
381
  session.url
@@ -439,11 +439,11 @@ schema = px.Schema(
439
439
  )
440
440
 
441
441
  # Define your production and training datasets.
442
- prod_ds = px.Dataset(dataframe=prod_df, schema=schema, name="production")
443
- train_ds = px.Dataset(dataframe=train_df, schema=schema, name="training")
442
+ prod_inf = px.Inferences(dataframe=prod_df, schema=schema, name="production")
443
+ train_inf = px.Inferences(dataframe=train_df, schema=schema, name="training")
444
444
 
445
445
  # Launch Phoenix for analysis
446
- session = px.launch_app(primary=prod_ds, reference=train_ds)
446
+ session = px.launch_app(primary=prod_inf, reference=train_inf)
447
447
  ```
448
448
 
449
449
  ## Deploying Phoenix
@@ -293,11 +293,11 @@ train_schema = px.Schema(
293
293
  prod_schema = replace(train_schema, actual_label_column_name=None)
294
294
 
295
295
  # Define your production and training datasets.
296
- prod_ds = px.Dataset(prod_df, prod_schema)
297
- train_ds = px.Dataset(train_df, train_schema)
296
+ prod_inf = px.Inferences(prod_df, prod_schema)
297
+ train_inf = px.Inferences(train_df, train_schema)
298
298
 
299
299
  # Launch Phoenix.
300
- session = px.launch_app(prod_ds, train_ds)
300
+ session = px.launch_app(prod_inf, train_inf)
301
301
 
302
302
  # View the Phoenix UI in the browser
303
303
  session.url
@@ -361,11 +361,11 @@ schema = px.Schema(
361
361
  )
362
362
 
363
363
  # Define your production and training datasets.
364
- prod_ds = px.Dataset(dataframe=prod_df, schema=schema, name="production")
365
- train_ds = px.Dataset(dataframe=train_df, schema=schema, name="training")
364
+ prod_inf = px.Inferences(dataframe=prod_df, schema=schema, name="production")
365
+ train_inf = px.Inferences(dataframe=train_df, schema=schema, name="training")
366
366
 
367
367
  # Launch Phoenix for analysis
368
- session = px.launch_app(primary=prod_ds, reference=train_ds)
368
+ session = px.launch_app(primary=prod_inf, reference=train_inf)
369
369
  ```
370
370
 
371
371
  ## Deploying Phoenix
@@ -1,7 +1,10 @@
1
1
  import logging
2
+ import re
2
3
  import uuid
3
4
  from copy import deepcopy
4
- from dataclasses import fields, replace
5
+ from dataclasses import dataclass, fields, replace
6
+ from enum import Enum
7
+ from itertools import groupby
5
8
  from typing import Any, Dict, List, Optional, Set, Tuple, Union
6
9
 
7
10
  import numpy as np
@@ -14,6 +17,7 @@ from typing_extensions import TypeAlias
14
17
 
15
18
  from phoenix.config import DATASET_DIR, GENERATED_DATASET_NAME_PREFIX
16
19
  from phoenix.datetime_utils import normalize_timestamps
20
+ from phoenix.utilities.deprecation import deprecated
17
21
 
18
22
  from . import errors as err
19
23
  from .schema import (
@@ -22,6 +26,7 @@ from .schema import (
22
26
  SINGLE_COLUMN_SCHEMA_FIELD_NAMES,
23
27
  EmbeddingColumnNames,
24
28
  EmbeddingFeatures,
29
+ RetrievalEmbeddingColumnNames,
25
30
  Schema,
26
31
  SchemaFieldName,
27
32
  SchemaFieldValue,
@@ -133,6 +138,206 @@ class Inferences:
133
138
  with open(directory / self._schema_file_name, "w+") as schema_file:
134
139
  schema_file.write(schema_json_data)
135
140
 
141
+ @classmethod
142
+ @deprecated("Inferences.from_open_inference is deprecated and will be removed.")
143
+ def from_open_inference(cls, dataframe: DataFrame) -> "Inferences":
144
+ schema = Schema()
145
+ column_renaming: Dict[str, str] = {}
146
+ for group_name, group in groupby(
147
+ sorted(
148
+ map(_parse_open_inference_column_name, dataframe.columns),
149
+ key=lambda column: column.name,
150
+ ),
151
+ key=lambda column: column.name,
152
+ ):
153
+ open_inference_columns = list(group)
154
+ if group_name == "":
155
+ column_names_by_category = {
156
+ column.category: column.full_name for column in open_inference_columns
157
+ }
158
+ schema = replace(
159
+ schema,
160
+ prediction_id_column_name=column_names_by_category.get(
161
+ OpenInferenceCategory.id
162
+ ),
163
+ timestamp_column_name=column_names_by_category.get(
164
+ OpenInferenceCategory.timestamp
165
+ ),
166
+ )
167
+ continue
168
+ column_names_by_specifier = {
169
+ column.specifier: column.full_name for column in open_inference_columns
170
+ }
171
+ if group_name == "response":
172
+ response_vector_column_name = column_names_by_specifier.get(
173
+ OpenInferenceSpecifier.embedding
174
+ )
175
+ if response_vector_column_name is not None:
176
+ column_renaming[response_vector_column_name] = "response"
177
+ schema = replace(
178
+ schema,
179
+ response_column_names=EmbeddingColumnNames(
180
+ vector_column_name=column_renaming[response_vector_column_name],
181
+ raw_data_column_name=column_names_by_specifier.get(
182
+ OpenInferenceSpecifier.default
183
+ ),
184
+ ),
185
+ )
186
+ else:
187
+ response_text_column_name = column_names_by_specifier.get(
188
+ OpenInferenceSpecifier.default
189
+ )
190
+ if response_text_column_name is None:
191
+ raise ValueError(
192
+ "invalid OpenInference format: missing text column for response"
193
+ )
194
+ column_renaming[response_text_column_name] = "response"
195
+ schema = replace(
196
+ schema,
197
+ response_column_names=column_renaming[response_text_column_name],
198
+ )
199
+ elif group_name == "prompt":
200
+ prompt_vector_column_name = column_names_by_specifier.get(
201
+ OpenInferenceSpecifier.embedding
202
+ )
203
+ if prompt_vector_column_name is None:
204
+ raise ValueError(
205
+ "invalid OpenInference format: missing embedding vector column for prompt"
206
+ )
207
+ column_renaming[prompt_vector_column_name] = "prompt"
208
+ schema = replace(
209
+ schema,
210
+ prompt_column_names=RetrievalEmbeddingColumnNames(
211
+ vector_column_name=column_renaming[prompt_vector_column_name],
212
+ raw_data_column_name=column_names_by_specifier.get(
213
+ OpenInferenceSpecifier.default
214
+ ),
215
+ context_retrieval_ids_column_name=column_names_by_specifier.get(
216
+ OpenInferenceSpecifier.retrieved_document_ids
217
+ ),
218
+ context_retrieval_scores_column_name=column_names_by_specifier.get(
219
+ OpenInferenceSpecifier.retrieved_document_scores
220
+ ),
221
+ ),
222
+ )
223
+ elif OpenInferenceSpecifier.embedding in column_names_by_specifier:
224
+ vector_column_name = column_names_by_specifier[OpenInferenceSpecifier.embedding]
225
+ column_renaming[vector_column_name] = group_name
226
+ embedding_feature_column_names = schema.embedding_feature_column_names or {}
227
+ embedding_feature_column_names.update(
228
+ {
229
+ group_name: EmbeddingColumnNames(
230
+ vector_column_name=column_renaming[vector_column_name],
231
+ raw_data_column_name=column_names_by_specifier.get(
232
+ OpenInferenceSpecifier.raw_data
233
+ ),
234
+ link_to_data_column_name=column_names_by_specifier.get(
235
+ OpenInferenceSpecifier.link_to_data
236
+ ),
237
+ )
238
+ }
239
+ )
240
+ schema = replace(
241
+ schema,
242
+ embedding_feature_column_names=embedding_feature_column_names,
243
+ )
244
+ elif len(open_inference_columns) == 1:
245
+ open_inference_column = open_inference_columns[0]
246
+ raw_column_name = open_inference_column.full_name
247
+ column_renaming[raw_column_name] = open_inference_column.name
248
+ if open_inference_column.category is OpenInferenceCategory.feature:
249
+ schema = replace(
250
+ schema,
251
+ feature_column_names=(
252
+ (schema.feature_column_names or []) + [column_renaming[raw_column_name]]
253
+ ),
254
+ )
255
+ elif open_inference_column.category is OpenInferenceCategory.tag:
256
+ schema = replace(
257
+ schema,
258
+ tag_column_names=(
259
+ (schema.tag_column_names or []) + [column_renaming[raw_column_name]]
260
+ ),
261
+ )
262
+ elif open_inference_column.category is OpenInferenceCategory.prediction:
263
+ if open_inference_column.specifier is OpenInferenceSpecifier.score:
264
+ schema = replace(
265
+ schema,
266
+ prediction_score_column_name=column_renaming[raw_column_name],
267
+ )
268
+ if open_inference_column.specifier is OpenInferenceSpecifier.label:
269
+ schema = replace(
270
+ schema,
271
+ prediction_label_column_name=column_renaming[raw_column_name],
272
+ )
273
+ elif open_inference_column.category is OpenInferenceCategory.actual:
274
+ if open_inference_column.specifier is OpenInferenceSpecifier.score:
275
+ schema = replace(
276
+ schema,
277
+ actual_score_column_name=column_renaming[raw_column_name],
278
+ )
279
+ if open_inference_column.specifier is OpenInferenceSpecifier.label:
280
+ schema = replace(
281
+ schema,
282
+ actual_label_column_name=column_renaming[raw_column_name],
283
+ )
284
+ else:
285
+ raise ValueError(f"invalid OpenInference format: duplicated name `{group_name}`")
286
+
287
+ return cls(
288
+ dataframe.rename(
289
+ column_renaming,
290
+ axis=1,
291
+ copy=False,
292
+ ),
293
+ schema,
294
+ )
295
+
296
+
297
+ class OpenInferenceCategory(Enum):
298
+ id = "id"
299
+ timestamp = "timestamp"
300
+ feature = "feature"
301
+ tag = "tag"
302
+ prediction = "prediction"
303
+ actual = "actual"
304
+
305
+
306
+ class OpenInferenceSpecifier(Enum):
307
+ default = ""
308
+ score = "score"
309
+ label = "label"
310
+ embedding = "embedding"
311
+ raw_data = "raw_data"
312
+ link_to_data = "link_to_data"
313
+ retrieved_document_ids = "retrieved_document_ids"
314
+ retrieved_document_scores = "retrieved_document_scores"
315
+
316
+
317
+ @dataclass(frozen=True)
318
+ class _OpenInferenceColumnName:
319
+ full_name: str
320
+ category: OpenInferenceCategory
321
+ data_type: str
322
+ specifier: OpenInferenceSpecifier = OpenInferenceSpecifier.default
323
+ name: str = ""
324
+
325
+
326
+ def _parse_open_inference_column_name(column_name: str) -> _OpenInferenceColumnName:
327
+ pattern = (
328
+ r"^:(?P<category>\w+)\.(?P<data_type>\[\w+\]|\w+)(\.(?P<specifier>\w+))?:(?P<name>.*)?$"
329
+ )
330
+ if match := re.match(pattern, column_name):
331
+ extract = match.groupdict(default="")
332
+ return _OpenInferenceColumnName(
333
+ full_name=column_name,
334
+ category=OpenInferenceCategory(extract.get("category", "").lower()),
335
+ data_type=extract.get("data_type", "").lower(),
336
+ specifier=OpenInferenceSpecifier(extract.get("specifier", "").lower()),
337
+ name=extract.get("name", ""),
338
+ )
339
+ raise ValueError(f"Invalid format for column name: {column_name}")
340
+
136
341
 
137
342
  def _parse_dataframe_and_schema(dataframe: DataFrame, schema: Schema) -> Tuple[DataFrame, Schema]:
138
343
  """
@@ -522,4 +727,4 @@ def _add_prediction_id(num_rows: int) -> List[str]:
522
727
 
523
728
 
524
729
  # A dataset with no data. Useful for stubs
525
- EMPTY_DATASET = Inferences(pd.DataFrame(), schema=Schema())
730
+ EMPTY_INFERENCES = Inferences(pd.DataFrame(), schema=Schema())
@@ -20,7 +20,7 @@ from phoenix.config import (
20
20
  from phoenix.core.model_schema_adapter import create_model_from_datasets
21
21
  from phoenix.core.traces import Traces
22
22
  from phoenix.inferences.fixtures import FIXTURES, get_datasets
23
- from phoenix.inferences.inferences import EMPTY_DATASET, Inferences
23
+ from phoenix.inferences.inferences import EMPTY_INFERENCES, Inferences
24
24
  from phoenix.pointcloud.umap_parameters import (
25
25
  DEFAULT_MIN_DIST,
26
26
  DEFAULT_N_NEIGHBORS,
@@ -114,7 +114,7 @@ if __name__ == "__main__":
114
114
  trace_dataset_name: Optional[str] = None
115
115
  simulate_streaming: Optional[bool] = None
116
116
 
117
- primary_dataset: Inferences = EMPTY_DATASET
117
+ primary_dataset: Inferences = EMPTY_INFERENCES
118
118
  reference_dataset: Optional[Inferences] = None
119
119
  corpus_dataset: Optional[Inferences] = None
120
120
 
@@ -36,7 +36,7 @@ from phoenix.config import (
36
36
  )
37
37
  from phoenix.core.model_schema_adapter import create_model_from_datasets
38
38
  from phoenix.core.traces import Traces
39
- from phoenix.inferences.inferences import EMPTY_DATASET, Inferences
39
+ from phoenix.inferences.inferences import EMPTY_INFERENCES, Inferences
40
40
  from phoenix.pointcloud.umap_parameters import get_umap_parameters
41
41
  from phoenix.server.app import create_app
42
42
  from phoenix.server.thread_server import ThreadServer
@@ -473,17 +473,17 @@ def launch_app(
473
473
  Examples
474
474
  --------
475
475
  >>> import phoenix as px
476
- >>> # construct a dataset to analyze
477
- >>> dataset = px.Dataset(...)
478
- >>> session = px.launch_app(dataset)
476
+ >>> # construct an inference set to analyze
477
+ >>> inferences = px.Inferences(...)
478
+ >>> session = px.launch_app(inferences)
479
479
  """
480
480
  global _session
481
481
 
482
- # Stopgap solution to allow the app to run without a primary dataset
482
+ # Stopgap solution to allow the app to run without a primary inferences
483
483
  if primary is None:
484
- # Dummy dataset
485
- # TODO: pass through the lack of a primary dataset to the app
486
- primary = EMPTY_DATASET
484
+ # Dummy inferences
485
+ # TODO: pass through the lack of a primary inferences to the app
486
+ primary = EMPTY_INFERENCES
487
487
 
488
488
  if _session is not None and _session.active:
489
489
  logger.warning(
@@ -0,0 +1 @@
1
+ __version__ = "3.21.0"
@@ -1 +0,0 @@
1
- __version__ = "3.20.0"
File without changes
File without changes