arize-phoenix 4.1.1__tar.gz → 4.1.2__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 (203) hide show
  1. arize_phoenix-4.1.2/PKG-INFO +177 -0
  2. arize_phoenix-4.1.2/README.md +77 -0
  3. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/trace/dsl/helpers.py +32 -20
  4. arize_phoenix-4.1.2/src/phoenix/version.py +1 -0
  5. arize_phoenix-4.1.1/PKG-INFO +0 -520
  6. arize_phoenix-4.1.1/README.md +0 -420
  7. arize_phoenix-4.1.1/src/phoenix/version.py +0 -1
  8. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/.gitignore +0 -0
  9. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/IP_NOTICE +0 -0
  10. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/LICENSE +0 -0
  11. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/examples/manually-instrumented-chatbot/chat-service/chat/__init__.py +0 -0
  12. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/examples/manually-instrumented-chatbot/chat-service/chat/app.py +0 -0
  13. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/examples/manually-instrumented-chatbot/chat-service/chat/types.py +0 -0
  14. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/examples/manually-instrumented-chatbot/frontend/Dockerfile +0 -0
  15. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/examples/manually-instrumented-chatbot/frontend/Makefile +0 -0
  16. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/examples/manually-instrumented-chatbot/frontend/__init__.py +0 -0
  17. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/examples/manually-instrumented-chatbot/frontend/pyproject.toml +0 -0
  18. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/examples/manually-instrumented-chatbot/frontend/requirements.txt +0 -0
  19. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/examples/manually-instrumented-chatbot/frontend/schema.json +0 -0
  20. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/pyproject.toml +0 -0
  21. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/__init__.py +0 -0
  22. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/config.py +0 -0
  23. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/core/__init__.py +0 -0
  24. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/core/embedding_dimension.py +0 -0
  25. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/core/model.py +0 -0
  26. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/core/model_schema.py +0 -0
  27. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/core/model_schema_adapter.py +0 -0
  28. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/datetime_utils.py +0 -0
  29. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/db/README.md +0 -0
  30. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/db/__init__.py +0 -0
  31. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/db/alembic.ini +0 -0
  32. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/db/bulk_inserter.py +0 -0
  33. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/db/engines.py +0 -0
  34. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/db/helpers.py +0 -0
  35. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/db/insertion/__init__.py +0 -0
  36. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/db/insertion/evaluation.py +0 -0
  37. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/db/insertion/helpers.py +0 -0
  38. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/db/insertion/span.py +0 -0
  39. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/db/migrate.py +0 -0
  40. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/db/migrations/__init__.py +0 -0
  41. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/db/migrations/env.py +0 -0
  42. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/db/migrations/script.py.mako +0 -0
  43. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/db/migrations/versions/cf03bd6bae1d_init.py +0 -0
  44. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/db/models.py +0 -0
  45. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/exceptions.py +0 -0
  46. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/inferences/__init__.py +0 -0
  47. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/inferences/errors.py +0 -0
  48. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/inferences/fixtures.py +0 -0
  49. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/inferences/inferences.py +0 -0
  50. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/inferences/schema.py +0 -0
  51. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/inferences/validation.py +0 -0
  52. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/metrics/README.md +0 -0
  53. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/metrics/__init__.py +0 -0
  54. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/metrics/binning.py +0 -0
  55. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/metrics/metrics.py +0 -0
  56. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/metrics/mixins.py +0 -0
  57. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/metrics/retrieval_metrics.py +0 -0
  58. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/metrics/timeseries.py +0 -0
  59. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/metrics/wrappers.py +0 -0
  60. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/pointcloud/__init__.py +0 -0
  61. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/pointcloud/clustering.py +0 -0
  62. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/pointcloud/pointcloud.py +0 -0
  63. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/pointcloud/projectors.py +0 -0
  64. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/pointcloud/umap_parameters.py +0 -0
  65. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/py.typed +0 -0
  66. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/__init__.py +0 -0
  67. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/api/__init__.py +0 -0
  68. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/api/context.py +0 -0
  69. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/api/dataloaders/__init__.py +0 -0
  70. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/api/dataloaders/cache/__init__.py +0 -0
  71. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/api/dataloaders/cache/two_tier_cache.py +0 -0
  72. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/api/dataloaders/document_evaluation_summaries.py +0 -0
  73. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/api/dataloaders/document_evaluations.py +0 -0
  74. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/api/dataloaders/document_retrieval_metrics.py +0 -0
  75. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/api/dataloaders/evaluation_summaries.py +0 -0
  76. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/api/dataloaders/latency_ms_quantile.py +0 -0
  77. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/api/dataloaders/min_start_or_max_end_times.py +0 -0
  78. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/api/dataloaders/record_counts.py +0 -0
  79. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/api/dataloaders/span_descendants.py +0 -0
  80. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/api/dataloaders/span_evaluations.py +0 -0
  81. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/api/dataloaders/token_counts.py +0 -0
  82. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/api/dataloaders/trace_evaluations.py +0 -0
  83. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/api/helpers.py +0 -0
  84. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/api/input_types/ClusterInput.py +0 -0
  85. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/api/input_types/Coordinates.py +0 -0
  86. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/api/input_types/DataQualityMetricInput.py +0 -0
  87. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/api/input_types/DimensionFilter.py +0 -0
  88. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/api/input_types/DimensionInput.py +0 -0
  89. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/api/input_types/Granularity.py +0 -0
  90. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/api/input_types/PerformanceMetricInput.py +0 -0
  91. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/api/input_types/SpanSort.py +0 -0
  92. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/api/input_types/TimeRange.py +0 -0
  93. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/api/input_types/__init__.py +0 -0
  94. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/api/interceptor.py +0 -0
  95. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/api/routers/__init__.py +0 -0
  96. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/api/routers/utils.py +0 -0
  97. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/api/routers/v1/__init__.py +0 -0
  98. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/api/routers/v1/evaluations.py +0 -0
  99. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/api/routers/v1/spans.py +0 -0
  100. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/api/routers/v1/traces.py +0 -0
  101. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/api/schema.py +0 -0
  102. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/api/types/Cluster.py +0 -0
  103. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/api/types/DataQualityMetric.py +0 -0
  104. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/api/types/Dataset.py +0 -0
  105. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/api/types/DatasetRole.py +0 -0
  106. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/api/types/DatasetValues.py +0 -0
  107. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/api/types/Dimension.py +0 -0
  108. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/api/types/DimensionDataType.py +0 -0
  109. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/api/types/DimensionShape.py +0 -0
  110. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/api/types/DimensionType.py +0 -0
  111. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/api/types/DimensionWithValue.py +0 -0
  112. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/api/types/DocumentEvaluationSummary.py +0 -0
  113. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/api/types/DocumentRetrievalMetrics.py +0 -0
  114. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/api/types/EmbeddingDimension.py +0 -0
  115. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/api/types/EmbeddingMetadata.py +0 -0
  116. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/api/types/Evaluation.py +0 -0
  117. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/api/types/EvaluationSummary.py +0 -0
  118. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/api/types/Event.py +0 -0
  119. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/api/types/EventMetadata.py +0 -0
  120. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/api/types/ExportEventsMutation.py +0 -0
  121. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/api/types/ExportedFile.py +0 -0
  122. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/api/types/Functionality.py +0 -0
  123. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/api/types/MimeType.py +0 -0
  124. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/api/types/Model.py +0 -0
  125. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/api/types/NumericRange.py +0 -0
  126. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/api/types/PerformanceMetric.py +0 -0
  127. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/api/types/Project.py +0 -0
  128. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/api/types/PromptResponse.py +0 -0
  129. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/api/types/Retrieval.py +0 -0
  130. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/api/types/ScalarDriftMetricEnum.py +0 -0
  131. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/api/types/Segments.py +0 -0
  132. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/api/types/SortDir.py +0 -0
  133. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/api/types/Span.py +0 -0
  134. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/api/types/TimeSeries.py +0 -0
  135. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/api/types/Trace.py +0 -0
  136. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/api/types/UMAPPoints.py +0 -0
  137. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/api/types/ValidationResult.py +0 -0
  138. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/api/types/VectorDriftMetricEnum.py +0 -0
  139. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/api/types/__init__.py +0 -0
  140. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/api/types/node.py +0 -0
  141. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/api/types/pagination.py +0 -0
  142. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/app.py +0 -0
  143. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/grpc_server.py +0 -0
  144. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/main.py +0 -0
  145. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/openapi/__init__.py +0 -0
  146. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/openapi/docs.py +0 -0
  147. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/prometheus.py +0 -0
  148. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/static/apple-touch-icon-114x114.png +0 -0
  149. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/static/apple-touch-icon-120x120.png +0 -0
  150. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/static/apple-touch-icon-144x144.png +0 -0
  151. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/static/apple-touch-icon-152x152.png +0 -0
  152. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/static/apple-touch-icon-180x180.png +0 -0
  153. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/static/apple-touch-icon-72x72.png +0 -0
  154. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/static/apple-touch-icon-76x76.png +0 -0
  155. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/static/apple-touch-icon.png +0 -0
  156. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/static/favicon.ico +0 -0
  157. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/static/index.css +0 -0
  158. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/static/index.js +0 -0
  159. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/static/modernizr.js +0 -0
  160. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/telemetry.py +0 -0
  161. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/templates/__init__.py +0 -0
  162. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/templates/index.html +0 -0
  163. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/server/thread_server.py +0 -0
  164. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/services.py +0 -0
  165. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/session/__init__.py +0 -0
  166. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/session/client.py +0 -0
  167. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/session/data_extractor.py +0 -0
  168. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/session/evaluation.py +0 -0
  169. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/session/session.py +0 -0
  170. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/settings.py +0 -0
  171. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/trace/__init__.py +0 -0
  172. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/trace/attributes.py +0 -0
  173. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/trace/dsl/README.md +0 -0
  174. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/trace/dsl/__init__.py +0 -0
  175. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/trace/dsl/filter.py +0 -0
  176. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/trace/dsl/query.py +0 -0
  177. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/trace/errors.py +0 -0
  178. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/trace/evaluation_conventions.py +0 -0
  179. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/trace/exporter.py +0 -0
  180. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/trace/fixtures.py +0 -0
  181. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/trace/langchain/__init__.py +0 -0
  182. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/trace/langchain/instrumentor.py +0 -0
  183. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/trace/llama_index/__init__.py +0 -0
  184. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/trace/llama_index/callback.py +0 -0
  185. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/trace/openai/__init__.py +0 -0
  186. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/trace/openai/instrumentor.py +0 -0
  187. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/trace/otel.py +0 -0
  188. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/trace/projects.py +0 -0
  189. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/trace/schemas.py +0 -0
  190. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/trace/span_evaluations.py +0 -0
  191. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/trace/span_json_decoder.py +0 -0
  192. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/trace/span_json_encoder.py +0 -0
  193. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/trace/trace_dataset.py +0 -0
  194. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/trace/utils.py +0 -0
  195. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/trace/v1/__init__.py +0 -0
  196. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/trace/v1/evaluation_pb2.py +0 -0
  197. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/trace/v1/evaluation_pb2.pyi +0 -0
  198. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/utilities/__init__.py +0 -0
  199. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/utilities/deprecation.py +0 -0
  200. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/utilities/error_handling.py +0 -0
  201. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/utilities/logging.py +0 -0
  202. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/utilities/project.py +0 -0
  203. {arize_phoenix-4.1.1 → arize_phoenix-4.1.2}/src/phoenix/utilities/span_store.py +0 -0
@@ -0,0 +1,177 @@
1
+ Metadata-Version: 2.3
2
+ Name: arize-phoenix
3
+ Version: 4.1.2
4
+ Summary: AI Observability and Evaluation
5
+ Project-URL: Documentation, https://docs.arize.com/phoenix/
6
+ Project-URL: Issues, https://github.com/Arize-ai/phoenix/issues
7
+ Project-URL: Source, https://github.com/Arize-ai/phoenix
8
+ Author-email: Arize AI <phoenix-devs@arize.com>
9
+ License: Elastic-2.0
10
+ License-File: IP_NOTICE
11
+ License-File: LICENSE
12
+ Keywords: Explainability,Monitoring,Observability
13
+ Classifier: Programming Language :: Python
14
+ Classifier: Programming Language :: Python :: 3.8
15
+ Classifier: Programming Language :: Python :: 3.9
16
+ Classifier: Programming Language :: Python :: 3.10
17
+ Classifier: Programming Language :: Python :: 3.11
18
+ Classifier: Programming Language :: Python :: 3.12
19
+ Requires-Python: <3.13,>=3.8
20
+ Requires-Dist: aioitertools
21
+ Requires-Dist: aiosqlite
22
+ Requires-Dist: alembic<2,>=1.3.0
23
+ Requires-Dist: cachetools
24
+ Requires-Dist: grpcio
25
+ Requires-Dist: hdbscan>=0.8.33
26
+ Requires-Dist: jinja2
27
+ Requires-Dist: numpy
28
+ Requires-Dist: openinference-instrumentation
29
+ Requires-Dist: openinference-instrumentation-langchain>=0.1.12
30
+ Requires-Dist: openinference-instrumentation-llama-index>=1.2.0
31
+ Requires-Dist: openinference-instrumentation-openai>=0.1.4
32
+ Requires-Dist: openinference-semantic-conventions>=0.1.5
33
+ Requires-Dist: opentelemetry-exporter-otlp
34
+ Requires-Dist: opentelemetry-proto>=1.12.0
35
+ Requires-Dist: opentelemetry-sdk
36
+ Requires-Dist: opentelemetry-semantic-conventions
37
+ Requires-Dist: pandas
38
+ Requires-Dist: protobuf<6.0,>=3.20
39
+ Requires-Dist: psutil
40
+ Requires-Dist: pyarrow
41
+ Requires-Dist: requests
42
+ Requires-Dist: scikit-learn
43
+ Requires-Dist: scipy
44
+ Requires-Dist: sqlalchemy[asyncio]<3,>=2.0.4
45
+ Requires-Dist: sqlean-py>=3.45.1
46
+ Requires-Dist: starlette
47
+ Requires-Dist: strawberry-graphql==0.227.2
48
+ Requires-Dist: tqdm
49
+ Requires-Dist: typing-extensions>=4.5; python_version < '3.12'
50
+ Requires-Dist: typing-extensions>=4.6; python_version >= '3.12'
51
+ Requires-Dist: umap-learn
52
+ Requires-Dist: uvicorn
53
+ Requires-Dist: wrapt
54
+ Provides-Extra: container
55
+ Requires-Dist: opentelemetry-exporter-otlp; extra == 'container'
56
+ Requires-Dist: opentelemetry-instrumentation-grpc; extra == 'container'
57
+ Requires-Dist: opentelemetry-instrumentation-sqlalchemy; extra == 'container'
58
+ Requires-Dist: opentelemetry-instrumentation-starlette; extra == 'container'
59
+ Requires-Dist: opentelemetry-proto>=1.12.0; extra == 'container'
60
+ Requires-Dist: opentelemetry-sdk; extra == 'container'
61
+ Requires-Dist: opentelemetry-semantic-conventions; extra == 'container'
62
+ Requires-Dist: prometheus-client; extra == 'container'
63
+ Requires-Dist: py-grpc-prometheus; extra == 'container'
64
+ Requires-Dist: strawberry-graphql[opentelemetry]==0.227.2; extra == 'container'
65
+ Requires-Dist: uvloop; (platform_system != 'Windows') and extra == 'container'
66
+ Provides-Extra: dev
67
+ Requires-Dist: anthropic; extra == 'dev'
68
+ Requires-Dist: arize[autoembeddings,llm-evaluation]; extra == 'dev'
69
+ Requires-Dist: asyncpg; extra == 'dev'
70
+ Requires-Dist: gcsfs; extra == 'dev'
71
+ Requires-Dist: google-cloud-aiplatform>=1.3; extra == 'dev'
72
+ Requires-Dist: hatch; extra == 'dev'
73
+ Requires-Dist: jupyter; extra == 'dev'
74
+ Requires-Dist: langchain>=0.0.334; extra == 'dev'
75
+ Requires-Dist: litellm>=1.0.3; extra == 'dev'
76
+ Requires-Dist: llama-index>=0.10.3; extra == 'dev'
77
+ Requires-Dist: nbqa; extra == 'dev'
78
+ Requires-Dist: pandas-stubs<=2.0.2.230605; extra == 'dev'
79
+ Requires-Dist: pre-commit; extra == 'dev'
80
+ Requires-Dist: prometheus-client; extra == 'dev'
81
+ Requires-Dist: psycopg[binary]; extra == 'dev'
82
+ Requires-Dist: pytest-asyncio; extra == 'dev'
83
+ Requires-Dist: pytest-cov; extra == 'dev'
84
+ Requires-Dist: pytest-lazy-fixture; extra == 'dev'
85
+ Requires-Dist: pytest-postgresql; extra == 'dev'
86
+ Requires-Dist: pytest==7.4.4; extra == 'dev'
87
+ Requires-Dist: ruff==0.3.0; extra == 'dev'
88
+ Requires-Dist: strawberry-graphql[debug-server,opentelemetry]==0.227.2; extra == 'dev'
89
+ Provides-Extra: evals
90
+ Requires-Dist: arize-phoenix-evals>=0.3.0; extra == 'evals'
91
+ Provides-Extra: experimental
92
+ Requires-Dist: tenacity; extra == 'experimental'
93
+ Provides-Extra: llama-index
94
+ Requires-Dist: llama-index-callbacks-arize-phoenix>=0.1.2; extra == 'llama-index'
95
+ Requires-Dist: llama-index==0.10.3; extra == 'llama-index'
96
+ Requires-Dist: openinference-instrumentation-llama-index>=1.2.0; extra == 'llama-index'
97
+ Provides-Extra: pg
98
+ Requires-Dist: asyncpg; extra == 'pg'
99
+ Description-Content-Type: text/markdown
100
+
101
+ <p align="center">
102
+ <a target="_blank" href="https://phoenix.arize.com" style="background:none">
103
+ <img alt="phoenix banner" src="https://github.com/Arize-ai/phoenix-assets/blob/main/images/socal/github-large-banner-phoenix.jpg?raw=true" width="auto" height="auto"></img>
104
+ </a>
105
+ <br/>
106
+ <br/>
107
+ <a href="https://docs.arize.com/phoenix/">
108
+ <img src="https://img.shields.io/static/v1?message=Docs&logo=data:image/png;base64,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&labelColor=grey&color=blue&logoColor=white&label=%20"/>
109
+ </a>
110
+ <a target="_blank" href="https://join.slack.com/t/arize-ai/shared_invite/zt-1px8dcmlf-fmThhDFD_V_48oU7ALan4Q">
111
+ <img src="https://img.shields.io/static/v1?message=Community&logo=slack&labelColor=grey&color=blue&logoColor=white&label=%20"/>
112
+ </a>
113
+ <a target="_blank" href="https://twitter.com/ArizePhoenix">
114
+ <img src="https://img.shields.io/badge/-ArizePhoenix-blue.svg?color=blue&labelColor=gray&logo=twitter">
115
+ </a>
116
+ <a target="_blank" href="https://pypi.org/project/arize-phoenix/">
117
+ <img src="https://img.shields.io/pypi/v/arize-phoenix?color=blue">
118
+ </a>
119
+ <a target="_blank" href="https://anaconda.org/conda-forge/arize-phoenix">
120
+ <img src="https://img.shields.io/conda/vn/conda-forge/arize-phoenix.svg?color=blue">
121
+ </a>
122
+ <a target="_blank" href="https://pypi.org/project/arize-phoenix/">
123
+ <img src="https://img.shields.io/pypi/pyversions/arize-phoenix">
124
+ </a>
125
+ <a target="_blank" href="https://hub.docker.com/r/arizephoenix/phoenix/tags">
126
+ <img src="https://img.shields.io/docker/v/arizephoenix/phoenix?sort=semver&logo=docker&label=image&color=blue">
127
+ </a>
128
+ </p>
129
+
130
+ Phoenix is an open-source AI observability platform designed for experimentation, evaluation, and troubleshooting. It provides:
131
+
132
+ - **_Tracing_** - Trace your LLM application's runtime using using OpenTelemetry-based instrumentation.
133
+ - **_Evaluation_** - Leverage LLMs to benchmark your application's performance using response and retrieval evals.
134
+ - **_Inference Analysis_** - Visualize inferences and embeddings using dimensionality reduction and clustering to identify drift and performance degradation.
135
+
136
+ Phoenix is vendor and language agnostic with out-of-the-box support for popular frameworks (🦙LlamaIndex, 🦜⛓LangChain, 🧩DSPy) and LLM providers (OpenAI, Bedrock, and more). For details on auto-instrumentation, check out the [OpenInference](https://github.com/Arize-ai/openinference) project.
137
+
138
+ Phoenix runs practically anywhere, including your Jupyter notebook, local machine, containerized deployment, or in the cloud.
139
+
140
+ ## Installation
141
+
142
+ Install Phoenix via `pip` or `conda` along with extra dependencies for running evals:
143
+
144
+ ```shell
145
+ pip install 'arize-phoenix[evals]'
146
+ ```
147
+
148
+ Phoenix container images are available via [Docker Hub](https://hub.docker.com/r/arizephoenix/phoenix) and can be deployed using Docker or Kubernetes.
149
+
150
+ ## Community
151
+
152
+ Join our community to connect with thousands of AI builders.
153
+
154
+ - 🌍 Join our [Slack community](https://join.slack.com/t/arize-ai/shared_invite/zt-1px8dcmlf-fmThhDFD_V_48oU7ALan4Q).
155
+ - 💡 Ask questions and provide feedback in the _#phoenix-support_ channel.
156
+ - 🌟 Leave a star on our [GitHub](https://github.com/Arize-ai/phoenix).
157
+ - 🐞 Report bugs with [GitHub Issues](https://github.com/Arize-ai/phoenix/issues).
158
+ - 𝕏 Follow us on [𝕏](https://twitter.com/ArizePhoenix).
159
+ - 💌️ Sign up for our [mailing list](https://phoenix.arize.com/#updates).
160
+ - 🗺️ Check out our [roadmap](https://github.com/orgs/Arize-ai/projects/45) to see where we're heading next.
161
+
162
+ ## Thanks
163
+
164
+ - [UMAP](https://github.com/lmcinnes/umap) For unlocking the ability to visualize and reason about embeddings
165
+ - [HDBSCAN](https://github.com/scikit-learn-contrib/hdbscan) For providing a clustering algorithm to aid in the discovery of drift and performance degradation
166
+
167
+ ## Breaking Changes
168
+
169
+ See the [migration guide](./MIGRATION.md) for a list of breaking changes.
170
+
171
+ ## Copyright, Patent, and License
172
+
173
+ Copyright 2023 Arize AI, Inc. All Rights Reserved.
174
+
175
+ Portions of this code are patent protected by one or more U.S. Patents. See [IP_NOTICE](https://github.com/Arize-ai/phoenix/blob/main/IP_NOTICE).
176
+
177
+ This software is licensed under the terms of the Elastic License 2.0 (ELv2). See [LICENSE](https://github.com/Arize-ai/phoenix/blob/main/LICENSE).
@@ -0,0 +1,77 @@
1
+ <p align="center">
2
+ <a target="_blank" href="https://phoenix.arize.com" style="background:none">
3
+ <img alt="phoenix banner" src="https://github.com/Arize-ai/phoenix-assets/blob/main/images/socal/github-large-banner-phoenix.jpg?raw=true" width="auto" height="auto"></img>
4
+ </a>
5
+ <br/>
6
+ <br/>
7
+ <a href="https://docs.arize.com/phoenix/">
8
+ <img src="https://img.shields.io/static/v1?message=Docs&logo=data:image/png;base64,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&labelColor=grey&color=blue&logoColor=white&label=%20"/>
9
+ </a>
10
+ <a target="_blank" href="https://join.slack.com/t/arize-ai/shared_invite/zt-1px8dcmlf-fmThhDFD_V_48oU7ALan4Q">
11
+ <img src="https://img.shields.io/static/v1?message=Community&logo=slack&labelColor=grey&color=blue&logoColor=white&label=%20"/>
12
+ </a>
13
+ <a target="_blank" href="https://twitter.com/ArizePhoenix">
14
+ <img src="https://img.shields.io/badge/-ArizePhoenix-blue.svg?color=blue&labelColor=gray&logo=twitter">
15
+ </a>
16
+ <a target="_blank" href="https://pypi.org/project/arize-phoenix/">
17
+ <img src="https://img.shields.io/pypi/v/arize-phoenix?color=blue">
18
+ </a>
19
+ <a target="_blank" href="https://anaconda.org/conda-forge/arize-phoenix">
20
+ <img src="https://img.shields.io/conda/vn/conda-forge/arize-phoenix.svg?color=blue">
21
+ </a>
22
+ <a target="_blank" href="https://pypi.org/project/arize-phoenix/">
23
+ <img src="https://img.shields.io/pypi/pyversions/arize-phoenix">
24
+ </a>
25
+ <a target="_blank" href="https://hub.docker.com/r/arizephoenix/phoenix/tags">
26
+ <img src="https://img.shields.io/docker/v/arizephoenix/phoenix?sort=semver&logo=docker&label=image&color=blue">
27
+ </a>
28
+ </p>
29
+
30
+ Phoenix is an open-source AI observability platform designed for experimentation, evaluation, and troubleshooting. It provides:
31
+
32
+ - **_Tracing_** - Trace your LLM application's runtime using using OpenTelemetry-based instrumentation.
33
+ - **_Evaluation_** - Leverage LLMs to benchmark your application's performance using response and retrieval evals.
34
+ - **_Inference Analysis_** - Visualize inferences and embeddings using dimensionality reduction and clustering to identify drift and performance degradation.
35
+
36
+ Phoenix is vendor and language agnostic with out-of-the-box support for popular frameworks (🦙LlamaIndex, 🦜⛓LangChain, 🧩DSPy) and LLM providers (OpenAI, Bedrock, and more). For details on auto-instrumentation, check out the [OpenInference](https://github.com/Arize-ai/openinference) project.
37
+
38
+ Phoenix runs practically anywhere, including your Jupyter notebook, local machine, containerized deployment, or in the cloud.
39
+
40
+ ## Installation
41
+
42
+ Install Phoenix via `pip` or `conda` along with extra dependencies for running evals:
43
+
44
+ ```shell
45
+ pip install 'arize-phoenix[evals]'
46
+ ```
47
+
48
+ Phoenix container images are available via [Docker Hub](https://hub.docker.com/r/arizephoenix/phoenix) and can be deployed using Docker or Kubernetes.
49
+
50
+ ## Community
51
+
52
+ Join our community to connect with thousands of AI builders.
53
+
54
+ - 🌍 Join our [Slack community](https://join.slack.com/t/arize-ai/shared_invite/zt-1px8dcmlf-fmThhDFD_V_48oU7ALan4Q).
55
+ - 💡 Ask questions and provide feedback in the _#phoenix-support_ channel.
56
+ - 🌟 Leave a star on our [GitHub](https://github.com/Arize-ai/phoenix).
57
+ - 🐞 Report bugs with [GitHub Issues](https://github.com/Arize-ai/phoenix/issues).
58
+ - 𝕏 Follow us on [𝕏](https://twitter.com/ArizePhoenix).
59
+ - 💌️ Sign up for our [mailing list](https://phoenix.arize.com/#updates).
60
+ - 🗺️ Check out our [roadmap](https://github.com/orgs/Arize-ai/projects/45) to see where we're heading next.
61
+
62
+ ## Thanks
63
+
64
+ - [UMAP](https://github.com/lmcinnes/umap) For unlocking the ability to visualize and reason about embeddings
65
+ - [HDBSCAN](https://github.com/scikit-learn-contrib/hdbscan) For providing a clustering algorithm to aid in the discovery of drift and performance degradation
66
+
67
+ ## Breaking Changes
68
+
69
+ See the [migration guide](./MIGRATION.md) for a list of breaking changes.
70
+
71
+ ## Copyright, Patent, and License
72
+
73
+ Copyright 2023 Arize AI, Inc. All Rights Reserved.
74
+
75
+ Portions of this code are patent protected by one or more U.S. Patents. See [IP_NOTICE](https://github.com/Arize-ai/phoenix/blob/main/IP_NOTICE).
76
+
77
+ This software is licensed under the terms of the Elastic License 2.0 (ELv2). See [LICENSE](https://github.com/Arize-ai/phoenix/blob/main/LICENSE).
@@ -1,6 +1,6 @@
1
1
  import warnings
2
2
  from datetime import datetime
3
- from typing import List, Optional, Protocol, Union, cast
3
+ from typing import List, Optional, Protocol, Tuple, Union, cast
4
4
 
5
5
  import pandas as pd
6
6
  from openinference.semconv.trace import DocumentAttributes, SpanAttributes
@@ -75,7 +75,7 @@ def get_qa_with_reference(
75
75
  project_name: Optional[str] = None,
76
76
  # Deprecated
77
77
  stop_time: Optional[datetime] = None,
78
- ) -> pd.DataFrame:
78
+ ) -> Optional[pd.DataFrame]:
79
79
  project_name = project_name or get_env_project_name()
80
80
  if stop_time:
81
81
  # Deprecated. Raise a warning
@@ -84,23 +84,35 @@ def get_qa_with_reference(
84
84
  DeprecationWarning,
85
85
  )
86
86
  end_time = end_time or stop_time
87
- return pd.concat(
88
- cast(
89
- List[pd.DataFrame],
90
- obj.query_spans(
91
- SpanQuery().select(**IO).where(IS_ROOT),
92
- SpanQuery()
93
- .where(IS_RETRIEVER)
94
- .select(span_id="parent_id")
95
- .concat(
96
- RETRIEVAL_DOCUMENTS,
97
- reference=DOCUMENT_CONTENT,
98
- ),
99
- start_time=start_time,
100
- end_time=end_time,
101
- project_name=project_name,
102
- ),
87
+ separator = "\n\n"
88
+ qa_query = SpanQuery().select("span_id", **IO).where(IS_ROOT).with_index("trace_id")
89
+ docs_query = (
90
+ SpanQuery()
91
+ .where(IS_RETRIEVER)
92
+ .concat(RETRIEVAL_DOCUMENTS, reference=DOCUMENT_CONTENT)
93
+ .with_concat_separator(separator=separator)
94
+ .with_index("trace_id")
95
+ )
96
+ df_qa, df_docs = cast(
97
+ Tuple[pd.DataFrame, pd.DataFrame],
98
+ obj.query_spans(
99
+ qa_query,
100
+ docs_query,
101
+ start_time=start_time,
102
+ end_time=end_time,
103
+ project_name=project_name,
103
104
  ),
104
- axis=1,
105
- join="inner",
106
105
  )
106
+ if df_qa is None or df_qa.empty:
107
+ print("No spans found.")
108
+ return None
109
+ if df_docs is None or df_docs.empty:
110
+ print("No retrieval documents found.")
111
+ return None
112
+ # Consolidate duplicate rows via concatenation. This can happen if there are multiple
113
+ # retriever spans in the same trace. We simply concatenate all of them (in no particular
114
+ # order) into a single row.
115
+ ref = df_docs.groupby("context.trace_id")["reference"].apply(lambda x: separator.join(x))
116
+ df_ref = pd.DataFrame({"reference": ref})
117
+ df_qa_ref = pd.concat([df_qa, df_ref], axis=1, join="inner").set_index("context.span_id")
118
+ return df_qa_ref
@@ -0,0 +1 @@
1
+ __version__ = "4.1.2"