arize-phoenix 4.0.2__tar.gz → 4.1.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 (201) hide show
  1. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/PKG-INFO +1 -1
  2. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/config.py +7 -0
  3. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/db/bulk_inserter.py +6 -12
  4. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/main.py +6 -4
  5. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/session/client.py +8 -8
  6. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/session/evaluation.py +1 -5
  7. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/trace/exporter.py +11 -10
  8. arize_phoenix-4.1.0/src/phoenix/version.py +1 -0
  9. arize_phoenix-4.0.2/src/phoenix/version.py +0 -1
  10. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/.gitignore +0 -0
  11. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/IP_NOTICE +0 -0
  12. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/LICENSE +0 -0
  13. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/README.md +0 -0
  14. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/examples/manually-instrumented-chatbot/chat-service/chat/__init__.py +0 -0
  15. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/examples/manually-instrumented-chatbot/chat-service/chat/app.py +0 -0
  16. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/examples/manually-instrumented-chatbot/chat-service/chat/types.py +0 -0
  17. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/examples/manually-instrumented-chatbot/frontend/Dockerfile +0 -0
  18. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/examples/manually-instrumented-chatbot/frontend/Makefile +0 -0
  19. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/examples/manually-instrumented-chatbot/frontend/__init__.py +0 -0
  20. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/examples/manually-instrumented-chatbot/frontend/pyproject.toml +0 -0
  21. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/examples/manually-instrumented-chatbot/frontend/requirements.txt +0 -0
  22. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/examples/manually-instrumented-chatbot/frontend/schema.json +0 -0
  23. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/pyproject.toml +0 -0
  24. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/__init__.py +0 -0
  25. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/core/__init__.py +0 -0
  26. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/core/embedding_dimension.py +0 -0
  27. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/core/model.py +0 -0
  28. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/core/model_schema.py +0 -0
  29. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/core/model_schema_adapter.py +0 -0
  30. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/datetime_utils.py +0 -0
  31. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/db/README.md +0 -0
  32. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/db/__init__.py +0 -0
  33. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/db/alembic.ini +0 -0
  34. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/db/engines.py +0 -0
  35. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/db/helpers.py +0 -0
  36. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/db/insertion/__init__.py +0 -0
  37. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/db/insertion/evaluation.py +0 -0
  38. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/db/insertion/helpers.py +0 -0
  39. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/db/insertion/span.py +0 -0
  40. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/db/migrate.py +0 -0
  41. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/db/migrations/__init__.py +0 -0
  42. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/db/migrations/env.py +0 -0
  43. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/db/migrations/script.py.mako +0 -0
  44. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/db/migrations/versions/cf03bd6bae1d_init.py +0 -0
  45. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/db/models.py +0 -0
  46. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/exceptions.py +0 -0
  47. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/inferences/__init__.py +0 -0
  48. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/inferences/errors.py +0 -0
  49. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/inferences/fixtures.py +0 -0
  50. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/inferences/inferences.py +0 -0
  51. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/inferences/schema.py +0 -0
  52. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/inferences/validation.py +0 -0
  53. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/metrics/README.md +0 -0
  54. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/metrics/__init__.py +0 -0
  55. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/metrics/binning.py +0 -0
  56. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/metrics/metrics.py +0 -0
  57. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/metrics/mixins.py +0 -0
  58. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/metrics/retrieval_metrics.py +0 -0
  59. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/metrics/timeseries.py +0 -0
  60. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/metrics/wrappers.py +0 -0
  61. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/pointcloud/__init__.py +0 -0
  62. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/pointcloud/clustering.py +0 -0
  63. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/pointcloud/pointcloud.py +0 -0
  64. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/pointcloud/projectors.py +0 -0
  65. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/pointcloud/umap_parameters.py +0 -0
  66. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/py.typed +0 -0
  67. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/__init__.py +0 -0
  68. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/api/__init__.py +0 -0
  69. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/api/context.py +0 -0
  70. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/api/dataloaders/__init__.py +0 -0
  71. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/api/dataloaders/cache/__init__.py +0 -0
  72. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/api/dataloaders/cache/two_tier_cache.py +0 -0
  73. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/api/dataloaders/document_evaluation_summaries.py +0 -0
  74. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/api/dataloaders/document_evaluations.py +0 -0
  75. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/api/dataloaders/document_retrieval_metrics.py +0 -0
  76. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/api/dataloaders/evaluation_summaries.py +0 -0
  77. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/api/dataloaders/latency_ms_quantile.py +0 -0
  78. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/api/dataloaders/min_start_or_max_end_times.py +0 -0
  79. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/api/dataloaders/record_counts.py +0 -0
  80. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/api/dataloaders/span_descendants.py +0 -0
  81. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/api/dataloaders/span_evaluations.py +0 -0
  82. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/api/dataloaders/token_counts.py +0 -0
  83. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/api/dataloaders/trace_evaluations.py +0 -0
  84. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/api/helpers.py +0 -0
  85. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/api/input_types/ClusterInput.py +0 -0
  86. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/api/input_types/Coordinates.py +0 -0
  87. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/api/input_types/DataQualityMetricInput.py +0 -0
  88. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/api/input_types/DimensionFilter.py +0 -0
  89. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/api/input_types/DimensionInput.py +0 -0
  90. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/api/input_types/Granularity.py +0 -0
  91. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/api/input_types/PerformanceMetricInput.py +0 -0
  92. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/api/input_types/SpanSort.py +0 -0
  93. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/api/input_types/TimeRange.py +0 -0
  94. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/api/input_types/__init__.py +0 -0
  95. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/api/interceptor.py +0 -0
  96. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/api/routers/__init__.py +0 -0
  97. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/api/routers/utils.py +0 -0
  98. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/api/routers/v1/__init__.py +0 -0
  99. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/api/routers/v1/evaluations.py +0 -0
  100. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/api/routers/v1/spans.py +0 -0
  101. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/api/routers/v1/traces.py +0 -0
  102. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/api/schema.py +0 -0
  103. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/api/types/Cluster.py +0 -0
  104. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/api/types/DataQualityMetric.py +0 -0
  105. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/api/types/Dataset.py +0 -0
  106. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/api/types/DatasetRole.py +0 -0
  107. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/api/types/DatasetValues.py +0 -0
  108. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/api/types/Dimension.py +0 -0
  109. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/api/types/DimensionDataType.py +0 -0
  110. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/api/types/DimensionShape.py +0 -0
  111. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/api/types/DimensionType.py +0 -0
  112. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/api/types/DimensionWithValue.py +0 -0
  113. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/api/types/DocumentEvaluationSummary.py +0 -0
  114. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/api/types/DocumentRetrievalMetrics.py +0 -0
  115. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/api/types/EmbeddingDimension.py +0 -0
  116. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/api/types/EmbeddingMetadata.py +0 -0
  117. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/api/types/Evaluation.py +0 -0
  118. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/api/types/EvaluationSummary.py +0 -0
  119. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/api/types/Event.py +0 -0
  120. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/api/types/EventMetadata.py +0 -0
  121. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/api/types/ExportEventsMutation.py +0 -0
  122. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/api/types/ExportedFile.py +0 -0
  123. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/api/types/Functionality.py +0 -0
  124. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/api/types/MimeType.py +0 -0
  125. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/api/types/Model.py +0 -0
  126. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/api/types/NumericRange.py +0 -0
  127. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/api/types/PerformanceMetric.py +0 -0
  128. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/api/types/Project.py +0 -0
  129. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/api/types/PromptResponse.py +0 -0
  130. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/api/types/Retrieval.py +0 -0
  131. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/api/types/ScalarDriftMetricEnum.py +0 -0
  132. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/api/types/Segments.py +0 -0
  133. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/api/types/SortDir.py +0 -0
  134. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/api/types/Span.py +0 -0
  135. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/api/types/TimeSeries.py +0 -0
  136. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/api/types/Trace.py +0 -0
  137. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/api/types/UMAPPoints.py +0 -0
  138. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/api/types/ValidationResult.py +0 -0
  139. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/api/types/VectorDriftMetricEnum.py +0 -0
  140. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/api/types/__init__.py +0 -0
  141. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/api/types/node.py +0 -0
  142. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/api/types/pagination.py +0 -0
  143. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/app.py +0 -0
  144. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/grpc_server.py +0 -0
  145. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/openapi/__init__.py +0 -0
  146. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/openapi/docs.py +0 -0
  147. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/prometheus.py +0 -0
  148. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/static/apple-touch-icon-114x114.png +0 -0
  149. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/static/apple-touch-icon-120x120.png +0 -0
  150. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/static/apple-touch-icon-144x144.png +0 -0
  151. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/static/apple-touch-icon-152x152.png +0 -0
  152. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/static/apple-touch-icon-180x180.png +0 -0
  153. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/static/apple-touch-icon-72x72.png +0 -0
  154. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/static/apple-touch-icon-76x76.png +0 -0
  155. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/static/apple-touch-icon.png +0 -0
  156. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/static/favicon.ico +0 -0
  157. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/static/index.css +0 -0
  158. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/static/index.js +0 -0
  159. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/static/modernizr.js +0 -0
  160. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/telemetry.py +0 -0
  161. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/templates/__init__.py +0 -0
  162. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/templates/index.html +0 -0
  163. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/server/thread_server.py +0 -0
  164. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/services.py +0 -0
  165. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/session/__init__.py +0 -0
  166. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/session/data_extractor.py +0 -0
  167. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/session/session.py +0 -0
  168. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/settings.py +0 -0
  169. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/trace/__init__.py +0 -0
  170. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/trace/attributes.py +0 -0
  171. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/trace/dsl/README.md +0 -0
  172. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/trace/dsl/__init__.py +0 -0
  173. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/trace/dsl/filter.py +0 -0
  174. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/trace/dsl/helpers.py +0 -0
  175. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/trace/dsl/query.py +0 -0
  176. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/trace/errors.py +0 -0
  177. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/trace/evaluation_conventions.py +0 -0
  178. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/trace/fixtures.py +0 -0
  179. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/trace/langchain/__init__.py +0 -0
  180. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/trace/langchain/instrumentor.py +0 -0
  181. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/trace/llama_index/__init__.py +0 -0
  182. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/trace/llama_index/callback.py +0 -0
  183. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/trace/openai/__init__.py +0 -0
  184. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/trace/openai/instrumentor.py +0 -0
  185. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/trace/otel.py +0 -0
  186. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/trace/projects.py +0 -0
  187. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/trace/schemas.py +0 -0
  188. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/trace/span_evaluations.py +0 -0
  189. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/trace/span_json_decoder.py +0 -0
  190. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/trace/span_json_encoder.py +0 -0
  191. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/trace/trace_dataset.py +0 -0
  192. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/trace/utils.py +0 -0
  193. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/trace/v1/__init__.py +0 -0
  194. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/trace/v1/evaluation_pb2.py +0 -0
  195. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/trace/v1/evaluation_pb2.pyi +0 -0
  196. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/utilities/__init__.py +0 -0
  197. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/utilities/deprecation.py +0 -0
  198. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/utilities/error_handling.py +0 -0
  199. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/utilities/logging.py +0 -0
  200. {arize_phoenix-4.0.2 → arize_phoenix-4.1.0}/src/phoenix/utilities/project.py +0 -0
  201. {arize_phoenix-4.0.2 → arize_phoenix-4.1.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: 4.0.2
3
+ Version: 4.1.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
@@ -10,6 +10,7 @@ logger = getLogger(__name__)
10
10
  ENV_PHOENIX_PORT = "PHOENIX_PORT"
11
11
  ENV_PHOENIX_GRPC_PORT = "PHOENIX_GRPC_PORT"
12
12
  ENV_PHOENIX_HOST = "PHOENIX_HOST"
13
+ ENV_PHOENIX_HOST_ROOT_PATH = "PHOENIX_HOST_ROOT_PATH"
13
14
  ENV_NOTEBOOK_ENV = "PHOENIX_NOTEBOOK_ENV"
14
15
  ENV_PHOENIX_COLLECTOR_ENDPOINT = "PHOENIX_COLLECTOR_ENDPOINT"
15
16
  """
@@ -98,6 +99,8 @@ HOST = "0.0.0.0"
98
99
  """The host the server will run on after launch_app is called."""
99
100
  PORT = 6006
100
101
  """The port the server will run on after launch_app is called."""
102
+ HOST_ROOT_PATH = ""
103
+ """The ASGI root path of the server, i.e. the root path where the web application is mounted"""
101
104
  GRPC_PORT = 4317
102
105
  """The port the gRPC server will run on after launch_app is called.
103
106
  The default network port for OTLP/gRPC is 4317.
@@ -183,6 +186,10 @@ def get_env_host() -> str:
183
186
  return os.getenv(ENV_PHOENIX_HOST) or HOST
184
187
 
185
188
 
189
+ def get_env_host_root_path() -> str:
190
+ return os.getenv(ENV_PHOENIX_HOST_ROOT_PATH) or HOST_ROOT_PATH
191
+
192
+
186
193
  def get_env_collector_endpoint() -> Optional[str]:
187
194
  return os.getenv(ENV_PHOENIX_COLLECTOR_ENDPOINT)
188
195
 
@@ -3,7 +3,7 @@ import logging
3
3
  from dataclasses import dataclass, field
4
4
  from datetime import datetime, timezone
5
5
  from itertools import islice
6
- from time import perf_counter, time
6
+ from time import perf_counter
7
7
  from typing import (
8
8
  Any,
9
9
  AsyncContextManager,
@@ -48,25 +48,20 @@ class BulkInserter:
48
48
  cache_for_dataloaders: Optional[CacheForDataLoaders] = None,
49
49
  initial_batch_of_spans: Optional[Iterable[Tuple[Span, str]]] = None,
50
50
  initial_batch_of_evaluations: Optional[Iterable[pb.Evaluation]] = None,
51
- run_interval_in_seconds: float = 2,
51
+ sleep: float = 0.1,
52
52
  max_num_per_transaction: int = 1000,
53
53
  enable_prometheus: bool = False,
54
54
  ) -> None:
55
55
  """
56
56
  :param db: A function to initiate a new database session.
57
57
  :param initial_batch_of_spans: Initial batch of spans to insert.
58
- :param run_interval_in_seconds: The time interval between the starts of each
59
- bulk insert. If there's nothing to insert, the inserter goes back to sleep.
58
+ :param sleep: The time to sleep between bulk insertions
60
59
  :param max_num_per_transaction: The maximum number of items to insert in a single
61
60
  transaction. Multiple transactions will be used if there are more items in the batch.
62
61
  """
63
62
  self._db = db
64
63
  self._running = False
65
- self._run_interval_seconds = run_interval_in_seconds
66
-
67
- # tracks time between insertions to improve responsiveness for small batches
68
- self._last_insertion_time = time() - self._run_interval_seconds
69
-
64
+ self._sleep = sleep
70
65
  self._max_num_per_transaction = max_num_per_transaction
71
66
  self._spans: List[Tuple[Span, str]] = (
72
67
  [] if initial_batch_of_spans is None else list(initial_batch_of_spans)
@@ -104,9 +99,8 @@ class BulkInserter:
104
99
  spans_buffer, evaluations_buffer = None, None
105
100
  # start first insert immediately if the inserter has not run recently
106
101
  while self._spans or self._evaluations or self._running:
107
- next_run_at = self._last_insertion_time + self._run_interval_seconds
108
- await asyncio.sleep(max(next_run_at - time(), 0))
109
102
  if not (self._spans or self._evaluations):
103
+ await asyncio.sleep(self._sleep)
110
104
  continue
111
105
  # It's important to grab the buffers at the same time so there's
112
106
  # no race condition, since an eval insertion will fail if the span
@@ -132,7 +126,7 @@ class BulkInserter:
132
126
  evaluations_buffer = None
133
127
  for project_rowid in transaction_result.updated_project_rowids:
134
128
  self._last_updated_at_by_project[project_rowid] = datetime.now(timezone.utc)
135
- self._last_insertion_time = time()
129
+ await asyncio.sleep(self._sleep)
136
130
 
137
131
  async def _insert_spans(self, spans: List[Tuple[Span, str]]) -> TransactionResult:
138
132
  transaction_result = TransactionResult()
@@ -18,6 +18,7 @@ from phoenix.config import (
18
18
  get_env_enable_prometheus,
19
19
  get_env_grpc_port,
20
20
  get_env_host,
21
+ get_env_host_root_path,
21
22
  get_env_port,
22
23
  get_pids_path,
23
24
  get_working_dir,
@@ -67,10 +68,10 @@ _WELCOME_MESSAGE = """
67
68
  | https://docs.arize.com/phoenix
68
69
  |
69
70
  | 🚀 Phoenix Server 🚀
70
- | Phoenix UI: http://{host}:{port}
71
+ | Phoenix UI: http://{host}:{port}/{root_path}
71
72
  | Log traces:
72
73
  | - gRPC: http://{host}:{grpc_port}
73
- | - HTTP: http://{host}:{port}/v1/traces
74
+ | - HTTP: http://{host}:{port}/{root_path}/v1/traces
74
75
  | Storage: {storage}
75
76
  """
76
77
 
@@ -197,7 +198,7 @@ if __name__ == "__main__":
197
198
  host = None
198
199
 
199
200
  port = args.port or get_env_port()
200
-
201
+ host_root_path = get_env_host_root_path()
201
202
  model = create_model_from_datasets(
202
203
  primary_dataset,
203
204
  reference_dataset,
@@ -251,7 +252,7 @@ if __name__ == "__main__":
251
252
  initial_spans=fixture_spans,
252
253
  initial_evaluations=fixture_evals,
253
254
  )
254
- server = Server(config=Config(app, host=host, port=port)) # type: ignore
255
+ server = Server(config=Config(app, host=host, port=port, root_path=host_root_path)) # type: ignore
255
256
  Thread(target=_write_pid_file_when_ready, args=(server,), daemon=True).start()
256
257
 
257
258
  # Print information about the server
@@ -260,6 +261,7 @@ if __name__ == "__main__":
260
261
  "version": phoenix_version,
261
262
  "host": display_host,
262
263
  "port": port,
264
+ "root_path": host_root_path.strip("/"),
263
265
  "grpc_port": get_env_grpc_port(),
264
266
  "storage": get_printable_db_url(db_connection_str),
265
267
  }
@@ -55,9 +55,9 @@ class Client(TraceDataExtractor):
55
55
  host = get_env_host()
56
56
  if host == "0.0.0.0":
57
57
  host = "127.0.0.1"
58
- self._base_url = (
59
- endpoint or get_env_collector_endpoint() or f"http://{host}:{get_env_port()}"
60
- )
58
+ base_url = endpoint or get_env_collector_endpoint() or f"http://{host}:{get_env_port()}"
59
+ self._base_url = base_url if base_url.endswith("/") else base_url + "/"
60
+
61
61
  self._session = Session()
62
62
  weakref.finalize(self, self._session.close)
63
63
  if warn_if_server_not_running:
@@ -99,7 +99,7 @@ class Client(TraceDataExtractor):
99
99
  )
100
100
  end_time = end_time or stop_time
101
101
  response = self._session.post(
102
- url=urljoin(self._base_url, "/v1/spans"),
102
+ url=urljoin(self._base_url, "v1/spans"),
103
103
  params={"project-name": project_name},
104
104
  json={
105
105
  "queries": [q.to_dict() for q in queries],
@@ -146,7 +146,7 @@ class Client(TraceDataExtractor):
146
146
  """
147
147
  project_name = project_name or get_env_project_name()
148
148
  response = self._session.get(
149
- urljoin(self._base_url, "/v1/evaluations"),
149
+ urljoin(self._base_url, "v1/evaluations"),
150
150
  params={"project-name": project_name},
151
151
  )
152
152
  if response.status_code == 404:
@@ -167,7 +167,7 @@ class Client(TraceDataExtractor):
167
167
 
168
168
  def _warn_if_phoenix_is_not_running(self) -> None:
169
169
  try:
170
- self._session.get(urljoin(self._base_url, "/arize_phoenix_version")).raise_for_status()
170
+ self._session.get(urljoin(self._base_url, "arize_phoenix_version")).raise_for_status()
171
171
  except Exception:
172
172
  logger.warning(
173
173
  f"Arize Phoenix is not running on {self._base_url}. Launch Phoenix "
@@ -198,7 +198,7 @@ class Client(TraceDataExtractor):
198
198
  with pa.ipc.new_stream(sink, table.schema) as writer:
199
199
  writer.write_table(table)
200
200
  self._session.post(
201
- urljoin(self._base_url, "/v1/evaluations"),
201
+ urljoin(self._base_url, "v1/evaluations"),
202
202
  data=cast(bytes, sink.getvalue().to_pybytes()),
203
203
  headers=headers,
204
204
  ).raise_for_status()
@@ -241,7 +241,7 @@ class Client(TraceDataExtractor):
241
241
  serialized = otlp_span.SerializeToString()
242
242
  data = gzip.compress(serialized)
243
243
  self._session.post(
244
- urljoin(self._base_url, "/v1/traces"),
244
+ urljoin(self._base_url, "v1/traces"),
245
245
  data=data,
246
246
  headers={
247
247
  "content-type": "application/x-protobuf",
@@ -17,7 +17,6 @@ from typing import (
17
17
  Union,
18
18
  cast,
19
19
  )
20
- from urllib.parse import urljoin
21
20
 
22
21
  import pandas as pd
23
22
  from google.protobuf.wrappers_pb2 import DoubleValue, StringValue
@@ -147,8 +146,5 @@ def log_evaluations(
147
146
  if host == "0.0.0.0":
148
147
  host = "127.0.0.1"
149
148
  port = port or get_env_port()
150
- endpoint = endpoint or urljoin(
151
- get_env_collector_endpoint() or f"http://{host}:{port}",
152
- "/v1/traces",
153
- )
149
+ endpoint = endpoint or get_env_collector_endpoint() or f"http://{host}:{port}"
154
150
  Client(endpoint=endpoint).log_evaluations(*evals)
@@ -33,11 +33,11 @@ class _OpenInferenceExporter(OTLPSpanExporter):
33
33
  host = get_env_host()
34
34
  if host == "0.0.0.0":
35
35
  host = "127.0.0.1"
36
- endpoint = urljoin(
37
- get_env_collector_endpoint() or f"http://{host}:{get_env_port()}",
38
- "/v1/traces",
39
- )
40
- _warn_if_phoenix_is_not_running(endpoint)
36
+ base_url = get_env_collector_endpoint() or f"http://{host}:{get_env_port()}"
37
+ base_url = base_url if base_url.endswith("/") else base_url + "/"
38
+ _warn_if_phoenix_is_not_running(base_url)
39
+
40
+ endpoint = urljoin(base_url, "v1/traces")
41
41
  super().__init__(endpoint)
42
42
 
43
43
 
@@ -68,11 +68,12 @@ class HttpExporter:
68
68
  """
69
69
  self._host = host or get_env_host()
70
70
  self._port = port or get_env_port()
71
- self._base_url = (
71
+ base_url = (
72
72
  endpoint
73
73
  or get_env_collector_endpoint()
74
74
  or f"http://{'127.0.0.1' if self._host == '0.0.0.0' else self._host}:{self._port}"
75
75
  )
76
+ self._base_url = base_url if base_url.endswith("/") else base_url + "/"
76
77
  _warn_if_phoenix_is_not_running(self._base_url)
77
78
  self._session = Session()
78
79
  weakref.finalize(self, self._session.close)
@@ -117,16 +118,16 @@ class HttpExporter:
117
118
 
118
119
  def _url(self, message: Message) -> str:
119
120
  if isinstance(message, pb.Evaluation):
120
- return urljoin(self._base_url, "/v1/evaluations")
121
+ return urljoin(self._base_url, "v1/evaluations")
121
122
  logger.exception(f"unrecognized message type: {type(message)}")
122
123
  assert_never(message)
123
124
 
124
125
 
125
- def _warn_if_phoenix_is_not_running(endpoint: str) -> None:
126
+ def _warn_if_phoenix_is_not_running(base_url: str) -> None:
126
127
  try:
127
- requests.get(urljoin(endpoint, "/arize_phoenix_version")).raise_for_status()
128
+ requests.get(urljoin(base_url, "arize_phoenix_version")).raise_for_status()
128
129
  except Exception:
129
130
  logger.warning(
130
- f"Arize Phoenix is not running on {endpoint}. Launch Phoenix "
131
+ f"Arize Phoenix is not running on {base_url}. Launch Phoenix "
131
132
  f"with `import phoenix as px; px.launch_app()`"
132
133
  )
@@ -0,0 +1 @@
1
+ __version__ = "4.1.0"
@@ -1 +0,0 @@
1
- __version__ = "4.0.2"
File without changes
File without changes
File without changes
File without changes