arize-phoenix 10.14.0__tar.gz → 10.15.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 (411) hide show
  1. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/PKG-INFO +2 -1
  2. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/pyproject.toml +1 -0
  3. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/db/types/model_provider.py +1 -0
  4. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/helpers/playground_clients.py +459 -0
  5. arize_phoenix-10.15.0/src/phoenix/server/api/helpers/prompts/conversions/aws.py +83 -0
  6. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/helpers/prompts/models.py +67 -0
  7. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/input_types/GenerativeModelInput.py +2 -0
  8. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/GenerativeProvider.py +33 -20
  9. arize_phoenix-10.15.0/src/phoenix/server/static/.vite/manifest.json +87 -0
  10. arize_phoenix-10.14.0/src/phoenix/server/static/assets/components-CUUWyAMo.js → arize_phoenix-10.15.0/src/phoenix/server/static/assets/components-SpUMF1qV.js +257 -257
  11. arize_phoenix-10.14.0/src/phoenix/server/static/assets/index-qiubV_74.js → arize_phoenix-10.15.0/src/phoenix/server/static/assets/index-DIlhmbjB.js +3 -3
  12. arize_phoenix-10.14.0/src/phoenix/server/static/assets/pages-C4V07ozl.js → arize_phoenix-10.15.0/src/phoenix/server/static/assets/pages-YX47cEoQ.js +363 -363
  13. arize_phoenix-10.14.0/src/phoenix/server/static/assets/vendor-Bfsiga8H.js → arize_phoenix-10.15.0/src/phoenix/server/static/assets/vendor-DCZoBorz.js +1 -1
  14. arize_phoenix-10.14.0/src/phoenix/server/static/assets/vendor-arizeai-CQOWsrzm.js → arize_phoenix-10.15.0/src/phoenix/server/static/assets/vendor-arizeai-Ckci3irT.js +1 -1
  15. arize_phoenix-10.14.0/src/phoenix/server/static/assets/vendor-codemirror-CrcGVhB2.js → arize_phoenix-10.15.0/src/phoenix/server/static/assets/vendor-codemirror-BODM513D.js +1 -1
  16. arize_phoenix-10.14.0/src/phoenix/server/static/assets/vendor-recharts-Yyg3G-Rq.js → arize_phoenix-10.15.0/src/phoenix/server/static/assets/vendor-recharts-C9O2a-N3.js +1 -1
  17. arize_phoenix-10.14.0/src/phoenix/server/static/assets/vendor-shiki-OPjag7Hm.js → arize_phoenix-10.15.0/src/phoenix/server/static/assets/vendor-shiki-Dq54rRC7.js +1 -1
  18. arize_phoenix-10.15.0/src/phoenix/version.py +1 -0
  19. arize_phoenix-10.14.0/src/phoenix/server/static/.vite/manifest.json +0 -87
  20. arize_phoenix-10.14.0/src/phoenix/version.py +0 -1
  21. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/.gitignore +0 -0
  22. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/IP_NOTICE +0 -0
  23. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/LICENSE +0 -0
  24. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/README.md +0 -0
  25. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/__init__.py +0 -0
  26. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/auth.py +0 -0
  27. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/config.py +0 -0
  28. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/core/__init__.py +0 -0
  29. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/core/embedding_dimension.py +0 -0
  30. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/core/model.py +0 -0
  31. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/core/model_schema.py +0 -0
  32. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/core/model_schema_adapter.py +0 -0
  33. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/datetime_utils.py +0 -0
  34. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/db/README.md +0 -0
  35. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/db/__init__.py +0 -0
  36. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/db/alembic.ini +0 -0
  37. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/db/bulk_inserter.py +0 -0
  38. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/db/constants.py +0 -0
  39. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/db/engines.py +0 -0
  40. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/db/enums.py +0 -0
  41. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/db/facilitator.py +0 -0
  42. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/db/helpers.py +0 -0
  43. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/db/insertion/__init__.py +0 -0
  44. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/db/insertion/constants.py +0 -0
  45. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/db/insertion/dataset.py +0 -0
  46. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/db/insertion/document_annotation.py +0 -0
  47. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/db/insertion/evaluation.py +0 -0
  48. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/db/insertion/helpers.py +0 -0
  49. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/db/insertion/span.py +0 -0
  50. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/db/insertion/span_annotation.py +0 -0
  51. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/db/insertion/trace_annotation.py +0 -0
  52. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/db/insertion/types.py +0 -0
  53. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/db/migrate.py +0 -0
  54. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/db/migrations/__init__.py +0 -0
  55. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/db/migrations/data_migration_scripts/__init__.py +0 -0
  56. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/db/migrations/data_migration_scripts/populate_project_sessions.py +0 -0
  57. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/db/migrations/env.py +0 -0
  58. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/db/migrations/script.py.mako +0 -0
  59. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/db/migrations/versions/10460e46d750_datasets.py +0 -0
  60. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/db/migrations/versions/2f9d1a65945f_annotation_config_migration.py +0 -0
  61. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/db/migrations/versions/3be8647b87d8_add_token_columns_to_spans_table.py +0 -0
  62. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/db/migrations/versions/4ded9e43755f_create_project_sessions_table.py +0 -0
  63. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/db/migrations/versions/6a88424799fe_update_users_with_auth_method.py +0 -0
  64. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/db/migrations/versions/8a3764fe7f1a_change_jsonb_to_json_for_prompts.py +0 -0
  65. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/db/migrations/versions/bb8139330879_create_project_trace_retention_policies_table.py +0 -0
  66. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/db/migrations/versions/bc8fea3c2bc8_add_prompt_tables.py +0 -0
  67. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/db/migrations/versions/cd164e83824f_users_and_tokens.py +0 -0
  68. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/db/migrations/versions/cf03bd6bae1d_init.py +0 -0
  69. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/db/models.py +0 -0
  70. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/db/pg_config.py +0 -0
  71. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/db/types/__init__.py +0 -0
  72. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/db/types/annotation_configs.py +0 -0
  73. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/db/types/db_models.py +0 -0
  74. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/db/types/identifier.py +0 -0
  75. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/db/types/trace_retention.py +0 -0
  76. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/exceptions.py +0 -0
  77. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/experiments/__init__.py +0 -0
  78. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/experiments/evaluators/__init__.py +0 -0
  79. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/experiments/evaluators/base.py +0 -0
  80. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/experiments/evaluators/code_evaluators.py +0 -0
  81. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/experiments/evaluators/llm_evaluators.py +0 -0
  82. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/experiments/evaluators/utils.py +0 -0
  83. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/experiments/functions.py +0 -0
  84. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/experiments/tracing.py +0 -0
  85. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/experiments/types.py +0 -0
  86. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/experiments/utils.py +0 -0
  87. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/inferences/__init__.py +0 -0
  88. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/inferences/errors.py +0 -0
  89. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/inferences/fixtures.py +0 -0
  90. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/inferences/inferences.py +0 -0
  91. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/inferences/schema.py +0 -0
  92. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/inferences/validation.py +0 -0
  93. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/logging/__init__.py +0 -0
  94. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/logging/_config.py +0 -0
  95. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/logging/_filter.py +0 -0
  96. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/logging/_formatter.py +0 -0
  97. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/metrics/README.md +0 -0
  98. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/metrics/__init__.py +0 -0
  99. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/metrics/binning.py +0 -0
  100. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/metrics/metrics.py +0 -0
  101. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/metrics/mixins.py +0 -0
  102. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/metrics/retrieval_metrics.py +0 -0
  103. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/metrics/timeseries.py +0 -0
  104. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/metrics/wrappers.py +0 -0
  105. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/pointcloud/__init__.py +0 -0
  106. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/pointcloud/clustering.py +0 -0
  107. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/pointcloud/pointcloud.py +0 -0
  108. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/pointcloud/projectors.py +0 -0
  109. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/pointcloud/umap_parameters.py +0 -0
  110. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/py.typed +0 -0
  111. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/__init__.py +0 -0
  112. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/README.md +0 -0
  113. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/__init__.py +0 -0
  114. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/auth.py +0 -0
  115. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/context.py +0 -0
  116. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/dataloaders/__init__.py +0 -0
  117. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/dataloaders/annotation_summaries.py +0 -0
  118. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/dataloaders/average_experiment_run_latency.py +0 -0
  119. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/dataloaders/cache/__init__.py +0 -0
  120. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/dataloaders/cache/two_tier_cache.py +0 -0
  121. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/dataloaders/dataset_example_revisions.py +0 -0
  122. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/dataloaders/dataset_example_spans.py +0 -0
  123. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/dataloaders/document_evaluation_summaries.py +0 -0
  124. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/dataloaders/document_evaluations.py +0 -0
  125. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/dataloaders/document_retrieval_metrics.py +0 -0
  126. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/dataloaders/experiment_annotation_summaries.py +0 -0
  127. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/dataloaders/experiment_error_rates.py +0 -0
  128. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/dataloaders/experiment_run_annotations.py +0 -0
  129. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/dataloaders/experiment_run_counts.py +0 -0
  130. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/dataloaders/experiment_sequence_number.py +0 -0
  131. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/dataloaders/latency_ms_quantile.py +0 -0
  132. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/dataloaders/min_start_or_max_end_times.py +0 -0
  133. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/dataloaders/num_child_spans.py +0 -0
  134. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/dataloaders/num_spans_per_trace.py +0 -0
  135. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/dataloaders/project_by_name.py +0 -0
  136. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/dataloaders/project_ids_by_trace_retention_policy_id.py +0 -0
  137. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/dataloaders/prompt_version_sequence_number.py +0 -0
  138. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/dataloaders/record_counts.py +0 -0
  139. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/dataloaders/session_io.py +0 -0
  140. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/dataloaders/session_num_traces.py +0 -0
  141. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/dataloaders/session_num_traces_with_error.py +0 -0
  142. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/dataloaders/session_token_usages.py +0 -0
  143. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/dataloaders/session_trace_latency_ms_quantile.py +0 -0
  144. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/dataloaders/span_annotations.py +0 -0
  145. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/dataloaders/span_by_id.py +0 -0
  146. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/dataloaders/span_dataset_examples.py +0 -0
  147. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/dataloaders/span_descendants.py +0 -0
  148. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/dataloaders/span_projects.py +0 -0
  149. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/dataloaders/table_fields.py +0 -0
  150. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/dataloaders/token_counts.py +0 -0
  151. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/dataloaders/trace_by_trace_ids.py +0 -0
  152. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/dataloaders/trace_retention_policy_id_by_project_id.py +0 -0
  153. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/dataloaders/trace_root_spans.py +0 -0
  154. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/dataloaders/user_roles.py +0 -0
  155. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/dataloaders/users.py +0 -0
  156. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/exceptions.py +0 -0
  157. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/helpers/__init__.py +0 -0
  158. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/helpers/annotations.py +0 -0
  159. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/helpers/dataset_helpers.py +0 -0
  160. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/helpers/experiment_run_filters.py +0 -0
  161. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/helpers/playground_registry.py +0 -0
  162. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/helpers/playground_spans.py +0 -0
  163. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/helpers/prompts/__init__.py +0 -0
  164. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/helpers/prompts/conversions/__init__.py +0 -0
  165. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/helpers/prompts/conversions/anthropic.py +0 -0
  166. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/helpers/prompts/conversions/openai.py +0 -0
  167. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/input_types/AddExamplesToDatasetInput.py +0 -0
  168. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/input_types/AddSpansToDatasetInput.py +0 -0
  169. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/input_types/ChatCompletionInput.py +0 -0
  170. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/input_types/ChatCompletionMessageInput.py +0 -0
  171. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/input_types/ClearProjectInput.py +0 -0
  172. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/input_types/ClusterInput.py +0 -0
  173. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/input_types/Coordinates.py +0 -0
  174. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/input_types/CreateDatasetInput.py +0 -0
  175. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/input_types/CreateSpanAnnotationInput.py +0 -0
  176. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/input_types/CreateTraceAnnotationInput.py +0 -0
  177. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/input_types/DataQualityMetricInput.py +0 -0
  178. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/input_types/DatasetExampleInput.py +0 -0
  179. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/input_types/DatasetFilter.py +0 -0
  180. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/input_types/DatasetSort.py +0 -0
  181. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/input_types/DatasetVersionSort.py +0 -0
  182. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/input_types/DeleteAnnotationsInput.py +0 -0
  183. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/input_types/DeleteDatasetExamplesInput.py +0 -0
  184. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/input_types/DeleteDatasetInput.py +0 -0
  185. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/input_types/DeleteExperimentsInput.py +0 -0
  186. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/input_types/DimensionFilter.py +0 -0
  187. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/input_types/DimensionInput.py +0 -0
  188. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/input_types/GenerativeCredentialInput.py +0 -0
  189. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/input_types/Granularity.py +0 -0
  190. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/input_types/InvocationParameters.py +0 -0
  191. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/input_types/PatchAnnotationInput.py +0 -0
  192. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/input_types/PatchDatasetExamplesInput.py +0 -0
  193. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/input_types/PatchDatasetInput.py +0 -0
  194. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/input_types/PerformanceMetricInput.py +0 -0
  195. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/input_types/ProjectFilter.py +0 -0
  196. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/input_types/ProjectSessionSort.py +0 -0
  197. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/input_types/ProjectSort.py +0 -0
  198. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/input_types/PromptTemplateOptions.py +0 -0
  199. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/input_types/PromptVersionInput.py +0 -0
  200. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/input_types/SpanAnnotationFilter.py +0 -0
  201. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/input_types/SpanAnnotationSort.py +0 -0
  202. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/input_types/SpanSort.py +0 -0
  203. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/input_types/TimeRange.py +0 -0
  204. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/input_types/TraceAnnotationSort.py +0 -0
  205. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/input_types/UserRoleInput.py +0 -0
  206. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/input_types/__init__.py +0 -0
  207. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/interceptor.py +0 -0
  208. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/mutations/__init__.py +0 -0
  209. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/mutations/annotation_config_mutations.py +0 -0
  210. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/mutations/api_key_mutations.py +0 -0
  211. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/mutations/chat_mutations.py +0 -0
  212. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/mutations/dataset_mutations.py +0 -0
  213. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/mutations/experiment_mutations.py +0 -0
  214. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/mutations/export_events_mutations.py +0 -0
  215. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/mutations/project_mutations.py +0 -0
  216. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/mutations/project_trace_retention_policy_mutations.py +0 -0
  217. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/mutations/prompt_label_mutations.py +0 -0
  218. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/mutations/prompt_mutations.py +0 -0
  219. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/mutations/prompt_version_tag_mutations.py +0 -0
  220. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/mutations/span_annotations_mutations.py +0 -0
  221. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/mutations/trace_annotations_mutations.py +0 -0
  222. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/mutations/trace_mutations.py +0 -0
  223. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/mutations/user_mutations.py +0 -0
  224. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/openapi/__init__.py +0 -0
  225. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/openapi/main.py +0 -0
  226. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/openapi/schema.py +0 -0
  227. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/queries.py +0 -0
  228. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/routers/__init__.py +0 -0
  229. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/routers/auth.py +0 -0
  230. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/routers/embeddings.py +0 -0
  231. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/routers/oauth2.py +0 -0
  232. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/routers/utils.py +0 -0
  233. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/routers/v1/__init__.py +0 -0
  234. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/routers/v1/annotation_configs.py +0 -0
  235. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/routers/v1/annotations.py +0 -0
  236. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/routers/v1/datasets.py +0 -0
  237. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/routers/v1/evaluations.py +0 -0
  238. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/routers/v1/experiment_evaluations.py +0 -0
  239. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/routers/v1/experiment_runs.py +0 -0
  240. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/routers/v1/experiments.py +0 -0
  241. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/routers/v1/models.py +0 -0
  242. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/routers/v1/projects.py +0 -0
  243. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/routers/v1/prompts.py +0 -0
  244. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/routers/v1/spans.py +0 -0
  245. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/routers/v1/traces.py +0 -0
  246. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/routers/v1/users.py +0 -0
  247. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/routers/v1/utils.py +0 -0
  248. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/schema.py +0 -0
  249. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/subscriptions.py +0 -0
  250. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/Annotation.py +0 -0
  251. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/AnnotationConfig.py +0 -0
  252. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/AnnotationSource.py +0 -0
  253. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/AnnotationSummary.py +0 -0
  254. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/AnnotatorKind.py +0 -0
  255. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/ApiKey.py +0 -0
  256. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/AuthMethod.py +0 -0
  257. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/ChatCompletionMessageRole.py +0 -0
  258. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/ChatCompletionSubscriptionPayload.py +0 -0
  259. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/Cluster.py +0 -0
  260. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/CreateDatasetPayload.py +0 -0
  261. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/CronExpression.py +0 -0
  262. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/DataQualityMetric.py +0 -0
  263. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/Dataset.py +0 -0
  264. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/DatasetExample.py +0 -0
  265. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/DatasetExampleRevision.py +0 -0
  266. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/DatasetValues.py +0 -0
  267. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/DatasetVersion.py +0 -0
  268. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/Dimension.py +0 -0
  269. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/DimensionDataType.py +0 -0
  270. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/DimensionShape.py +0 -0
  271. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/DimensionType.py +0 -0
  272. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/DimensionWithValue.py +0 -0
  273. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/DocumentEvaluationSummary.py +0 -0
  274. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/DocumentRetrievalMetrics.py +0 -0
  275. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/EmbeddingDimension.py +0 -0
  276. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/EmbeddingMetadata.py +0 -0
  277. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/Evaluation.py +0 -0
  278. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/EvaluationSummary.py +0 -0
  279. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/Event.py +0 -0
  280. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/EventMetadata.py +0 -0
  281. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/ExampleRevisionInterface.py +0 -0
  282. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/Experiment.py +0 -0
  283. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/ExperimentAnnotationSummary.py +0 -0
  284. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/ExperimentComparison.py +0 -0
  285. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/ExperimentRun.py +0 -0
  286. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/ExperimentRunAnnotation.py +0 -0
  287. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/ExportedFile.py +0 -0
  288. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/Functionality.py +0 -0
  289. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/GenerativeModel.py +0 -0
  290. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/Identifier.py +0 -0
  291. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/Inferences.py +0 -0
  292. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/InferencesRole.py +0 -0
  293. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/LabelFraction.py +0 -0
  294. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/MimeType.py +0 -0
  295. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/Model.py +0 -0
  296. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/NumericRange.py +0 -0
  297. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/PerformanceMetric.py +0 -0
  298. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/Project.py +0 -0
  299. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/ProjectSession.py +0 -0
  300. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/ProjectTraceRetentionPolicy.py +0 -0
  301. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/Prompt.py +0 -0
  302. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/PromptLabel.py +0 -0
  303. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/PromptResponse.py +0 -0
  304. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/PromptVersion.py +0 -0
  305. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/PromptVersionTag.py +0 -0
  306. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/PromptVersionTemplate.py +0 -0
  307. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/ResponseFormat.py +0 -0
  308. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/Retrieval.py +0 -0
  309. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/ScalarDriftMetricEnum.py +0 -0
  310. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/Segments.py +0 -0
  311. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/SortDir.py +0 -0
  312. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/Span.py +0 -0
  313. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/SpanAnnotation.py +0 -0
  314. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/SpanIOValue.py +0 -0
  315. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/SystemApiKey.py +0 -0
  316. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/TimeSeries.py +0 -0
  317. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/TokenCountPromptDetails.py +0 -0
  318. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/TokenUsage.py +0 -0
  319. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/ToolDefinition.py +0 -0
  320. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/Trace.py +0 -0
  321. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/TraceAnnotation.py +0 -0
  322. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/UMAPPoints.py +0 -0
  323. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/User.py +0 -0
  324. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/UserApiKey.py +0 -0
  325. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/UserRole.py +0 -0
  326. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/ValidationResult.py +0 -0
  327. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/VectorDriftMetricEnum.py +0 -0
  328. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/__init__.py +0 -0
  329. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/node.py +0 -0
  330. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/types/pagination.py +0 -0
  331. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/api/utils.py +0 -0
  332. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/app.py +0 -0
  333. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/authorization.py +0 -0
  334. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/bearer_auth.py +0 -0
  335. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/cost_tracking/__init__.py +0 -0
  336. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/cost_tracking/cost_lookup.py +0 -0
  337. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/cost_tracking/model_cost_manifest.json +0 -0
  338. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/dml_event.py +0 -0
  339. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/dml_event_handler.py +0 -0
  340. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/email/__init__.py +0 -0
  341. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/email/sender.py +0 -0
  342. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/email/templates/__init__.py +0 -0
  343. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/email/templates/password_reset.html +0 -0
  344. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/email/templates/welcome.html +0 -0
  345. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/email/types.py +0 -0
  346. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/grpc_server.py +0 -0
  347. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/jwt_store.py +0 -0
  348. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/main.py +0 -0
  349. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/middleware/__init__.py +0 -0
  350. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/middleware/gzip.py +0 -0
  351. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/oauth2.py +0 -0
  352. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/openapi/__init__.py +0 -0
  353. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/prometheus.py +0 -0
  354. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/rate_limiters.py +0 -0
  355. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/retention.py +0 -0
  356. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/static/apple-touch-icon-114x114.png +0 -0
  357. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/static/apple-touch-icon-120x120.png +0 -0
  358. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/static/apple-touch-icon-144x144.png +0 -0
  359. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/static/apple-touch-icon-152x152.png +0 -0
  360. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/static/apple-touch-icon-180x180.png +0 -0
  361. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/static/apple-touch-icon-72x72.png +0 -0
  362. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/static/apple-touch-icon-76x76.png +0 -0
  363. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/static/apple-touch-icon.png +0 -0
  364. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/static/assets/vendor-WIZid84E.css +0 -0
  365. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/static/assets/vendor-three-C5WAXd5r.js +0 -0
  366. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/static/favicon.ico +0 -0
  367. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/static/modernizr.js +0 -0
  368. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/telemetry.py +0 -0
  369. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/templates/__init__.py +0 -0
  370. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/templates/index.html +0 -0
  371. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/thread_server.py +0 -0
  372. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/server/types.py +0 -0
  373. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/services.py +0 -0
  374. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/session/__init__.py +0 -0
  375. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/session/client.py +0 -0
  376. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/session/data_extractor.py +0 -0
  377. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/session/evaluation.py +0 -0
  378. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/session/session.py +0 -0
  379. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/settings.py +0 -0
  380. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/trace/__init__.py +0 -0
  381. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/trace/attributes.py +0 -0
  382. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/trace/dsl/README.md +0 -0
  383. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/trace/dsl/__init__.py +0 -0
  384. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/trace/dsl/filter.py +0 -0
  385. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/trace/dsl/helpers.py +0 -0
  386. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/trace/dsl/query.py +0 -0
  387. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/trace/errors.py +0 -0
  388. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/trace/evaluation_conventions.py +0 -0
  389. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/trace/exporter.py +0 -0
  390. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/trace/fixtures.py +0 -0
  391. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/trace/otel.py +0 -0
  392. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/trace/projects.py +0 -0
  393. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/trace/schemas.py +0 -0
  394. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/trace/span_evaluations.py +0 -0
  395. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/trace/span_json_decoder.py +0 -0
  396. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/trace/span_json_encoder.py +0 -0
  397. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/trace/trace_dataset.py +0 -0
  398. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/trace/utils.py +0 -0
  399. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/trace/v1/__init__.py +0 -0
  400. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/trace/v1/evaluation_pb2.py +0 -0
  401. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/trace/v1/evaluation_pb2.pyi +0 -0
  402. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/utilities/__init__.py +0 -0
  403. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/utilities/client.py +0 -0
  404. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/utilities/deprecation.py +0 -0
  405. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/utilities/error_handling.py +0 -0
  406. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/utilities/json.py +0 -0
  407. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/utilities/logging.py +0 -0
  408. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/utilities/project.py +0 -0
  409. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/utilities/re.py +0 -0
  410. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/utilities/span_store.py +0 -0
  411. {arize_phoenix-10.14.0 → arize_phoenix-10.15.0}/src/phoenix/utilities/template_formatters.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: arize-phoenix
3
- Version: 10.14.0
3
+ Version: 10.15.0
4
4
  Summary: AI Observability and Evaluation
5
5
  Project-URL: Documentation, https://arize.com/docs/phoenix/
6
6
  Project-URL: Issues, https://github.com/Arize-ai/phoenix/issues
@@ -58,6 +58,7 @@ Provides-Extra: container
58
58
  Requires-Dist: aiohttp; extra == 'container'
59
59
  Requires-Dist: anthropic>=0.49.0; extra == 'container'
60
60
  Requires-Dist: azure-identity; extra == 'container'
61
+ Requires-Dist: boto3; extra == 'container'
61
62
  Requires-Dist: fast-hdbscan>=0.2.0; extra == 'container'
62
63
  Requires-Dist: google-generativeai; extra == 'container'
63
64
  Requires-Dist: numba>=0.60.0; extra == 'container'
@@ -142,6 +142,7 @@ container = [
142
142
  "fast-hdbscan>=0.2.0",
143
143
  "numba>=0.60.0", # https://github.com/astral-sh/uv/issues/6281
144
144
  "umap-learn",
145
+ "boto3",
145
146
  ]
146
147
  test = [
147
148
  ]
@@ -9,3 +9,4 @@ class ModelProvider(Enum):
9
9
  DEEPSEEK = "DEEPSEEK"
10
10
  XAI = "XAI"
11
11
  OLLAMA = "OLLAMA"
12
+ AWS = "AWS"
@@ -597,6 +597,465 @@ class OllamaStreamingClient(OpenAIBaseStreamingClient):
597
597
  self._attributes[LLM_SYSTEM] = OpenInferenceLLMSystemValues.OPENAI.value
598
598
 
599
599
 
600
+ @register_llm_client(
601
+ provider_key=GenerativeProviderKey.AWS,
602
+ model_names=[
603
+ PROVIDER_DEFAULT,
604
+ "anthropic.claude-3-5-sonnet-20240620-v1:0",
605
+ "anthropic.claude-3-7-sonnet-20250219-v1:0",
606
+ "anthropic.claude-3-haiku-20240307-v1:0",
607
+ "anthropic.claude-3-5-sonnet-20241022-v2:0",
608
+ "anthropic.claude-3-5-haiku-20241022-v1:0",
609
+ "anthropic.claude-opus-4-20250514-v1:0",
610
+ "anthropic.claude-sonnet-4-20250514-v1:0",
611
+ "amazon.titan-embed-text-v2:0",
612
+ "amazon.nova-pro-v1:0",
613
+ "amazon.nova-premier-v1:0:8k",
614
+ "amazon.nova-premier-v1:0:20k",
615
+ "amazon.nova-premier-v1:0:1000k",
616
+ "amazon.nova-premier-v1:0:mm",
617
+ "amazon.nova-premier-v1:0",
618
+ "amazon.nova-lite-v1:0",
619
+ "amazon.nova-micro-v1:0",
620
+ "deepseek.r1-v1:0",
621
+ "mistral.pixtral-large-2502-v1:0",
622
+ "meta.llama3-1-8b-instruct-v1:0:128k",
623
+ "meta.llama3-1-8b-instruct-v1:0",
624
+ "meta.llama3-1-70b-instruct-v1:0:128k",
625
+ "meta.llama3-1-70b-instruct-v1:0",
626
+ "meta.llama3-1-405b-instruct-v1:0",
627
+ "meta.llama3-2-11b-instruct-v1:0",
628
+ "meta.llama3-2-90b-instruct-v1:0",
629
+ "meta.llama3-2-1b-instruct-v1:0",
630
+ "meta.llama3-2-3b-instruct-v1:0",
631
+ "meta.llama3-3-70b-instruct-v1:0",
632
+ "meta.llama4-scout-17b-instruct-v1:0",
633
+ "meta.llama4-maverick-17b-instruct-v1:0",
634
+ ],
635
+ )
636
+ class BedrockStreamingClient(PlaygroundStreamingClient):
637
+ def __init__(
638
+ self,
639
+ model: GenerativeModelInput,
640
+ credentials: Optional[list[PlaygroundClientCredential]] = None,
641
+ ) -> None:
642
+ import boto3 # type: ignore[import-untyped]
643
+
644
+ super().__init__(model=model, credentials=credentials)
645
+ self.region = model.region or "us-east-1"
646
+ self.api = "converse"
647
+ self.aws_access_key_id = _get_credential_value(credentials, "AWS_ACCESS_KEY_ID") or getenv(
648
+ "AWS_ACCESS_KEY_ID"
649
+ )
650
+ self.aws_secret_access_key = _get_credential_value(
651
+ credentials, "AWS_SECRET_ACCESS_KEY"
652
+ ) or getenv("AWS_SECRET_ACCESS_KEY")
653
+ self.aws_session_token = _get_credential_value(credentials, "AWS_SESSION_TOKEN") or getenv(
654
+ "AWS_SESSION_TOKEN"
655
+ )
656
+ self.model_name = model.name
657
+ self.client = boto3.client(
658
+ service_name="bedrock-runtime",
659
+ region_name="us-east-1", # match the default region in the UI
660
+ aws_access_key_id=self.aws_access_key_id,
661
+ aws_secret_access_key=self.aws_secret_access_key,
662
+ aws_session_token=self.aws_session_token,
663
+ )
664
+
665
+ self._attributes[LLM_PROVIDER] = "aws"
666
+ self._attributes[LLM_SYSTEM] = "aws"
667
+
668
+ @classmethod
669
+ def dependencies(cls) -> list[Dependency]:
670
+ return [Dependency(name="boto3")]
671
+
672
+ @classmethod
673
+ def supported_invocation_parameters(cls) -> list[InvocationParameter]:
674
+ return [
675
+ IntInvocationParameter(
676
+ invocation_name="max_tokens",
677
+ canonical_name=CanonicalParameterName.MAX_COMPLETION_TOKENS,
678
+ label="Max Tokens",
679
+ default_value=1024,
680
+ ),
681
+ BoundedFloatInvocationParameter(
682
+ invocation_name="temperature",
683
+ canonical_name=CanonicalParameterName.TEMPERATURE,
684
+ label="Temperature",
685
+ default_value=1.0,
686
+ min_value=0.0,
687
+ max_value=1.0,
688
+ ),
689
+ BoundedFloatInvocationParameter(
690
+ invocation_name="top_p",
691
+ canonical_name=CanonicalParameterName.TOP_P,
692
+ label="Top P",
693
+ default_value=1.0,
694
+ min_value=0.0,
695
+ max_value=1.0,
696
+ ),
697
+ JSONInvocationParameter(
698
+ invocation_name="tool_choice",
699
+ label="Tool Choice",
700
+ canonical_name=CanonicalParameterName.TOOL_CHOICE,
701
+ ),
702
+ ]
703
+
704
+ async def chat_completion_create(
705
+ self,
706
+ messages: list[
707
+ tuple[ChatCompletionMessageRole, str, Optional[str], Optional[list[JSONScalarType]]]
708
+ ],
709
+ tools: list[JSONScalarType],
710
+ **invocation_parameters: Any,
711
+ ) -> AsyncIterator[ChatCompletionChunk]:
712
+ import boto3
713
+
714
+ if (
715
+ self.client.meta.region_name != self.region
716
+ ): # override the region if it's different from the default
717
+ self.client = boto3.client(
718
+ "bedrock-runtime",
719
+ region_name=self.region,
720
+ aws_access_key_id=self.aws_access_key_id,
721
+ aws_secret_access_key=self.aws_secret_access_key,
722
+ aws_session_token=self.aws_session_token,
723
+ )
724
+ if self.api == "invoke":
725
+ async for chunk in self._handle_invoke_api(messages, tools, invocation_parameters):
726
+ yield chunk
727
+ else:
728
+ async for chunk in self._handle_converse_api(messages, tools, invocation_parameters):
729
+ yield chunk
730
+
731
+ async def _handle_converse_api(
732
+ self,
733
+ messages: list[
734
+ tuple[ChatCompletionMessageRole, str, Optional[str], Optional[list[JSONScalarType]]]
735
+ ],
736
+ tools: list[JSONScalarType],
737
+ invocation_parameters: dict[str, Any],
738
+ ) -> AsyncIterator[ChatCompletionChunk]:
739
+ """
740
+ Handle the converse API.
741
+ """
742
+ # Build messages in Converse API format
743
+ converse_messages = self._build_converse_messages(messages)
744
+
745
+ # Build the request parameters for Converse API
746
+ converse_params: dict[str, Any] = {
747
+ "modelId": f"us.{self.model_name}",
748
+ "messages": converse_messages,
749
+ "inferenceConfig": {
750
+ "maxTokens": invocation_parameters["max_tokens"],
751
+ "temperature": invocation_parameters["temperature"],
752
+ "topP": invocation_parameters["top_p"],
753
+ },
754
+ }
755
+
756
+ # Add system prompt if available
757
+ system_prompt = self._extract_system_prompt(messages)
758
+ if system_prompt:
759
+ converse_params["system"] = [{"text": system_prompt}]
760
+
761
+ # Add tools if provided
762
+ if tools:
763
+ converse_params["toolConfig"] = {"tools": tools}
764
+ if (
765
+ "tool_choice" in invocation_parameters
766
+ and invocation_parameters["tool_choice"]["type"] != "none"
767
+ ):
768
+ converse_params["toolConfig"]["toolChoice"] = {}
769
+
770
+ if invocation_parameters["tool_choice"]["type"] == "auto":
771
+ converse_params["toolConfig"]["toolChoice"]["auto"] = {}
772
+ elif invocation_parameters["tool_choice"]["type"] == "any":
773
+ converse_params["toolConfig"]["toolChoice"]["any"] = {}
774
+ else:
775
+ converse_params["toolConfig"]["toolChoice"]["tool"] = {
776
+ "name": invocation_parameters["tool_choice"]["name"],
777
+ }
778
+
779
+ # Make the streaming API call
780
+ response = self.client.converse_stream(**converse_params)
781
+
782
+ # Track active tool calls
783
+ active_tool_calls = {} # contentBlockIndex -> {id, name, arguments_buffer}
784
+
785
+ # Process the event stream
786
+ event_stream = response.get("stream")
787
+
788
+ for event in event_stream:
789
+ # Handle content block start events
790
+ if "contentBlockStart" in event:
791
+ content_block_start = event["contentBlockStart"]
792
+ start_event = content_block_start.get("start", {})
793
+ block_index = content_block_start.get(
794
+ "contentBlockIndex", 0
795
+ ) # Get the actual index
796
+
797
+ if "toolUse" in start_event:
798
+ tool_use = start_event["toolUse"]
799
+ active_tool_calls[block_index] = { # Use the actual block index
800
+ "id": tool_use.get("toolUseId"),
801
+ "name": tool_use.get("name"),
802
+ "arguments_buffer": "",
803
+ }
804
+
805
+ # Yield initial tool call chunk
806
+ yield ToolCallChunk(
807
+ id=tool_use.get("toolUseId"),
808
+ function=FunctionCallChunk(
809
+ name=tool_use.get("name"),
810
+ arguments="",
811
+ ),
812
+ )
813
+
814
+ # Handle content block delta events
815
+ elif "contentBlockDelta" in event:
816
+ content_delta = event["contentBlockDelta"]
817
+ delta = content_delta.get("delta", {})
818
+ delta_index = content_delta.get("contentBlockIndex", 0)
819
+
820
+ # Handle text delta
821
+ if "text" in delta:
822
+ yield TextChunk(content=delta["text"])
823
+
824
+ # Handle tool use delta
825
+ elif "toolUse" in delta:
826
+ tool_delta = delta["toolUse"]
827
+ if "input" in tool_delta and delta_index in active_tool_calls:
828
+ # Accumulate tool arguments
829
+ json_chunk = tool_delta["input"]
830
+ active_tool_calls[delta_index]["arguments_buffer"] += json_chunk
831
+
832
+ # Yield incremental argument update
833
+ yield ToolCallChunk(
834
+ id=active_tool_calls[delta_index]["id"],
835
+ function=FunctionCallChunk(
836
+ name=active_tool_calls[delta_index]["name"],
837
+ arguments=json_chunk,
838
+ ),
839
+ )
840
+
841
+ # Handle content block stop events
842
+ elif "contentBlockStop" in event:
843
+ stop_index = event["contentBlockStop"].get("contentBlockIndex", 0)
844
+ if stop_index in active_tool_calls:
845
+ del active_tool_calls[stop_index]
846
+
847
+ elif "metadata" in event:
848
+ self._attributes.update(
849
+ {
850
+ LLM_TOKEN_COUNT_PROMPT: event.get("metadata")
851
+ .get("usage", {})
852
+ .get("inputTokens", 0)
853
+ }
854
+ )
855
+
856
+ self._attributes.update(
857
+ {
858
+ LLM_TOKEN_COUNT_COMPLETION: event.get("metadata")
859
+ .get("usage", {})
860
+ .get("outputTokens", 0)
861
+ }
862
+ )
863
+
864
+ self._attributes.update(
865
+ {
866
+ LLM_TOKEN_COUNT_TOTAL: event.get("metadata")
867
+ .get("usage", {})
868
+ .get("totalTokens", 0)
869
+ }
870
+ )
871
+
872
+ async def _handle_invoke_api(
873
+ self,
874
+ messages: list[
875
+ tuple[ChatCompletionMessageRole, str, Optional[str], Optional[list[JSONScalarType]]]
876
+ ],
877
+ tools: list[JSONScalarType],
878
+ invocation_parameters: dict[str, Any],
879
+ ) -> AsyncIterator[ChatCompletionChunk]:
880
+ if "anthropic" not in self.model_name:
881
+ raise ValueError("Invoke API is only supported for Anthropic models")
882
+
883
+ bedrock_messages, system_prompt = self._build_bedrock_messages(messages)
884
+ bedrock_params = {
885
+ "anthropic_version": "bedrock-2023-05-31",
886
+ "max_tokens": invocation_parameters["max_tokens"],
887
+ "messages": bedrock_messages,
888
+ "system": system_prompt,
889
+ "temperature": invocation_parameters["temperature"],
890
+ "top_p": invocation_parameters["top_p"],
891
+ "tools": tools,
892
+ }
893
+
894
+ response = self.client.invoke_model_with_response_stream(
895
+ modelId=f"us.{self.model_name}", # or another Claude model
896
+ contentType="application/json",
897
+ accept="application/json",
898
+ body=json.dumps(bedrock_params),
899
+ trace="ENABLED_FULL",
900
+ )
901
+
902
+ # The response['body'] is an EventStream object
903
+ event_stream = response["body"]
904
+
905
+ # Track active tool calls and their accumulating arguments
906
+ active_tool_calls: dict[int, dict[str, Any]] = {} # index -> {id, name, arguments_buffer}
907
+
908
+ for event in event_stream:
909
+ if "chunk" in event:
910
+ chunk_data = json.loads(event["chunk"]["bytes"].decode("utf-8"))
911
+
912
+ # Handle text content
913
+ if chunk_data.get("type") == "content_block_delta":
914
+ delta = chunk_data.get("delta", {})
915
+ index = chunk_data.get("index", 0)
916
+
917
+ if delta.get("type") == "text_delta" and "text" in delta:
918
+ yield TextChunk(content=delta["text"])
919
+
920
+ elif delta.get("type") == "input_json_delta":
921
+ # Accumulate tool arguments
922
+ if index in active_tool_calls:
923
+ active_tool_calls[index]["arguments_buffer"] += delta.get(
924
+ "partial_json", ""
925
+ )
926
+ # Yield incremental argument update
927
+ yield ToolCallChunk(
928
+ id=active_tool_calls[index]["id"],
929
+ function=FunctionCallChunk(
930
+ name=active_tool_calls[index]["name"],
931
+ arguments=delta.get("partial_json", ""),
932
+ ),
933
+ )
934
+
935
+ # Handle tool call start
936
+ elif chunk_data.get("type") == "content_block_start":
937
+ content_block = chunk_data.get("content_block", {})
938
+ index = chunk_data.get("index", 0)
939
+
940
+ if content_block.get("type") == "tool_use":
941
+ # Initialize tool call tracking
942
+ active_tool_calls[index] = {
943
+ "id": content_block.get("id"),
944
+ "name": content_block.get("name"),
945
+ "arguments_buffer": "",
946
+ }
947
+
948
+ # Yield initial tool call chunk
949
+ yield ToolCallChunk(
950
+ id=content_block.get("id"),
951
+ function=FunctionCallChunk(
952
+ name=content_block.get("name"),
953
+ arguments="", # Start with empty, will be filled by deltas
954
+ ),
955
+ )
956
+
957
+ # Handle content block stop (tool call complete)
958
+ elif chunk_data.get("type") == "content_block_stop":
959
+ index = chunk_data.get("index", 0)
960
+ if index in active_tool_calls:
961
+ # Tool call is complete, clean up
962
+ del active_tool_calls[index]
963
+
964
+ elif chunk_data.get("type") == "message_stop":
965
+ self._attributes.update(
966
+ {
967
+ LLM_TOKEN_COUNT_COMPLETION: chunk_data.get(
968
+ "amazon-bedrock-invocationMetrics", {}
969
+ ).get("outputTokenCount", 0)
970
+ }
971
+ )
972
+
973
+ self._attributes.update(
974
+ {
975
+ LLM_TOKEN_COUNT_PROMPT: chunk_data.get(
976
+ "amazon-bedrock-invocationMetrics", {}
977
+ ).get("inputTokenCount", 0)
978
+ }
979
+ )
980
+
981
+ def _build_bedrock_messages(
982
+ self,
983
+ messages: list[
984
+ tuple[ChatCompletionMessageRole, str, Optional[str], Optional[list[JSONScalarType]]]
985
+ ],
986
+ ) -> tuple[list[dict[str, Any]], str]:
987
+ bedrock_messages = []
988
+ system_prompt = ""
989
+ for role, content, _, _ in messages:
990
+ if role == ChatCompletionMessageRole.USER:
991
+ bedrock_messages.append(
992
+ {
993
+ "role": "user",
994
+ "content": content,
995
+ }
996
+ )
997
+ elif role == ChatCompletionMessageRole.AI:
998
+ bedrock_messages.append(
999
+ {
1000
+ "role": "assistant",
1001
+ "content": content,
1002
+ }
1003
+ )
1004
+ elif role == ChatCompletionMessageRole.SYSTEM:
1005
+ system_prompt += content + "\n"
1006
+ return bedrock_messages, system_prompt
1007
+
1008
+ def _extract_system_prompt(
1009
+ self,
1010
+ messages: list[
1011
+ tuple[ChatCompletionMessageRole, str, Optional[str], Optional[list[JSONScalarType]]]
1012
+ ],
1013
+ ) -> str:
1014
+ """Extract system prompt from messages."""
1015
+ system_prompts = []
1016
+ for role, content, _, _ in messages:
1017
+ if role == ChatCompletionMessageRole.SYSTEM:
1018
+ system_prompts.append(content)
1019
+ return "\n".join(system_prompts)
1020
+
1021
+ def _build_converse_messages(
1022
+ self,
1023
+ messages: list[
1024
+ tuple[ChatCompletionMessageRole, str, Optional[str], Optional[list[JSONScalarType]]]
1025
+ ],
1026
+ ) -> list[dict[str, Any]]:
1027
+ """Convert messages to Converse API format."""
1028
+ converse_messages: list[dict[str, Any]] = []
1029
+ for role, content, _id, tool_calls in messages:
1030
+ if role == ChatCompletionMessageRole.USER:
1031
+ converse_messages.append({"role": "user", "content": [{"text": content}]})
1032
+ elif role == ChatCompletionMessageRole.TOOL:
1033
+ converse_messages.append(
1034
+ {
1035
+ "role": "user",
1036
+ "content": [
1037
+ {
1038
+ "toolResult": {
1039
+ "toolUseId": _id,
1040
+ "content": [{"json": json.loads(content)}],
1041
+ }
1042
+ }
1043
+ ],
1044
+ }
1045
+ )
1046
+
1047
+ elif role == ChatCompletionMessageRole.AI:
1048
+ # Handle assistant messages with potential tool calls
1049
+ message: dict[str, Any] = {"role": "assistant", "content": []}
1050
+ if content:
1051
+ message["content"].append({"text": content})
1052
+ if tool_calls:
1053
+ for tool_call in tool_calls:
1054
+ message["content"].append(tool_call)
1055
+ converse_messages.append(message)
1056
+ return converse_messages
1057
+
1058
+
600
1059
  @register_llm_client(
601
1060
  provider_key=GenerativeProviderKey.OPENAI,
602
1061
  model_names=[
@@ -0,0 +1,83 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import TYPE_CHECKING, Optional, Union
4
+
5
+ from typing_extensions import assert_never
6
+
7
+ if TYPE_CHECKING:
8
+ from anthropic.types import (
9
+ ToolChoiceAnyParam,
10
+ ToolChoiceAutoParam,
11
+ ToolChoiceParam,
12
+ ToolChoiceToolParam,
13
+ )
14
+
15
+ from phoenix.server.api.helpers.prompts.models import (
16
+ PromptToolChoiceNone,
17
+ PromptToolChoiceOneOrMore,
18
+ PromptToolChoiceSpecificFunctionTool,
19
+ PromptToolChoiceZeroOrMore,
20
+ )
21
+
22
+
23
+ class AwsToolChoiceConversion:
24
+ @staticmethod
25
+ def to_aws(
26
+ obj: Union[
27
+ PromptToolChoiceNone,
28
+ PromptToolChoiceZeroOrMore,
29
+ PromptToolChoiceOneOrMore,
30
+ PromptToolChoiceSpecificFunctionTool,
31
+ ],
32
+ disable_parallel_tool_use: Optional[bool] = None,
33
+ ) -> ToolChoiceParam:
34
+ if obj.type == "zero_or_more":
35
+ choice_auto: ToolChoiceAutoParam = {"type": "auto"}
36
+ if disable_parallel_tool_use is not None:
37
+ choice_auto["disable_parallel_tool_use"] = disable_parallel_tool_use
38
+ return choice_auto
39
+ if obj.type == "one_or_more":
40
+ choice_any: ToolChoiceAnyParam = {"type": "any"}
41
+ if disable_parallel_tool_use is not None:
42
+ choice_any["disable_parallel_tool_use"] = disable_parallel_tool_use
43
+ return choice_any
44
+ if obj.type == "specific_function":
45
+ choice_tool: ToolChoiceToolParam = {"type": "tool", "name": obj.function_name}
46
+ if disable_parallel_tool_use is not None:
47
+ choice_tool["disable_parallel_tool_use"] = disable_parallel_tool_use
48
+ return choice_tool
49
+ if obj.type == "none":
50
+ return {"type": "none"}
51
+ assert_never(obj.type)
52
+
53
+ @staticmethod
54
+ def from_aws(
55
+ obj: ToolChoiceParam,
56
+ ) -> Union[
57
+ PromptToolChoiceNone,
58
+ PromptToolChoiceZeroOrMore,
59
+ PromptToolChoiceOneOrMore,
60
+ PromptToolChoiceSpecificFunctionTool,
61
+ ]:
62
+ from phoenix.server.api.helpers.prompts.models import (
63
+ PromptToolChoiceNone,
64
+ PromptToolChoiceOneOrMore,
65
+ PromptToolChoiceSpecificFunctionTool,
66
+ PromptToolChoiceZeroOrMore,
67
+ )
68
+
69
+ if obj["type"] == "auto":
70
+ choice_zero_or_more = PromptToolChoiceZeroOrMore(type="zero_or_more")
71
+ return choice_zero_or_more
72
+ if obj["type"] == "any":
73
+ choice_one_or_more = PromptToolChoiceOneOrMore(type="one_or_more")
74
+ return choice_one_or_more
75
+ if obj["type"] == "tool":
76
+ choice_function_tool = PromptToolChoiceSpecificFunctionTool(
77
+ type="specific_function",
78
+ function_name=obj["name"],
79
+ )
80
+ return choice_function_tool
81
+ if obj["type"] == "none":
82
+ return PromptToolChoiceNone(type="none")
83
+ assert_never(obj)